循环双条件输入验证(Python)

时间:2018-04-02 15:20:16

标签: python python-3.x

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

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

    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): ')
    

    我如何达到这些要求?当我运行我的程序时,我总是打印错误信息,无法正确打印用户名和数量。 感谢您抽出宝贵时间,我感谢您提供的任何帮助。

1 个答案:

答案 0 :(得分:0)

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

稍微好一点的条件是:

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

这不是pythonic,但它将完成工作。