【问题标题】:Loop Dual-Conditional Input Validation (Python)循环双条件输入验证 (Python)
【发布时间】:2018-04-02 15:20:15
【问题描述】:

我正在尝试编写一个实现以下功能的 python 脚本:

  1. 首先,提示用户输入用户名或按回车键退出。
  2. 提示用户输入数量。
  3. 接下来,使用正则表达式确保用户名由 5 到 10 个字母字符组成。
  4. 使用正则表达式确保数量仅由数值组成,并且输入的数量在 0 到 100 之间
  5. 如果用户名和数量都有效,则打印用户名和数量。否则打印错误消息。
  6. 最后,再次提示用户输入用户名或回车退出。

    import re, sys
    username = "" 
    username = input('Enter Username (Press ENTER to exit): ') 
    while username != "": 
        quantity = input('Enter Quantity: ') 
        if re.match("[a-zA-Z]{5,10}$", username) and re.match("[0-9]{1,2}$", quantity) and type(quantity) is int and quantity > 0: 
            print('Username: ', username, "\n" 'Quantity: ', quantity) 
        else: 
            print('Error: Enter a username consisting of 5-10 alphabetical letters and a valid integer between 1 and 100') 
        username = input('Enter Username (Press ENTER to exit): ')
    

    我将如何满足这些要求?当我运行我的程序时,我总是打印错误消息并且无法正确打印用户名和数量。 感谢您抽出宝贵的时间,我很感激我能得到的任何帮助。

【问题讨论】:

  • 那么你的问题是什么?
  • 我将如何实现这些要求?当我运行我的脚本时,它会自动打印错误消息,并且不会根据需要打印用户名和数量。
  • 您应该使用此信息扩展您的问题;-) 从这一点开始,您只会看到一些您想要做什么和尝试过的解释,但没有问题:-D

标签: python python-3.x


【解决方案1】:

如果您无法理解复杂的情况,请单独测试每个组件。在您的情况下,type(quantity) 不会是int,而是str,这也意味着quantity > 0 会引发TypeError(您不会到达那里,因为typetest 会使条件短路)。

稍微好一点的条件是:

if re.match("[a-zA-Z]{5,10}$", username) and re.match("[0-9]{1,2}$", quantity) and int(quantity) > 0

这几乎不是pythonic,但它会完成工作。

【讨论】:

    猜你喜欢
    • 2015-05-19
    • 1970-01-01
    • 2021-04-25
    • 1970-01-01
    • 2018-04-06
    • 2021-05-13
    • 2014-10-11
    • 2021-07-24
    • 1970-01-01
    相关资源
    最近更新 更多