【问题标题】:How to validate array for negative # and alpha input in Python如何在 Python 中验证数组是否为负 # 和 alpha 输入
【发布时间】:2018-11-22 21:57:15
【问题描述】:

我正在尝试验证一组用户输入(7 小时内每小时收集的一品脱血液)是否包含负数、空格和/或字母。目前,如果检查用户输入的 if 语句低于 0,程序会收到类型错误:“'

inputPints = []
totalPints = 0
hours = ["#1", "#2", "#3", "#4", "#5", "#6", "#7"]

def userInput():
    for hour in hours:
        inputPints.append(int(input("Enter pints collected for hour {}: ".format(hour))))
        if inputPints<0:
            inputPints.append(int(input("Please enter a whole number {}: ".format(hour))))
userInput()

def userOutput():
    print("")
    print("Average number of pints donated is: ", "{:.2f}".format(import_functions.averagePints(totalPints, 7)))
    print("Most pints donated is: ", import_functions.maxPints())
    print("Least pints donated is: ", import_functions.minPints())
    print("")
userOutput()

【问题讨论】:

  • 您在寻找if len(inputPints) &lt; 0吗?因为您正在将列表与整数0.. 进行比较,正如错误所说。或者,如果最后一个输入的长度小于零,您是否正在寻找 if len(inputPints[-1]) &lt; 0
  • 为什么要在 已经附加输入之后执行检查?你想如何从错误的值中恢复?你想如何处理重复的错误输入?
  • 好问题。老实说,我无法告诉你,因为大约 6 周前我还是 Python 新手。我试过 length 函数,它没有返回错误,但它没有向用户显示他们输入的整数无效。

标签: python validation


【解决方案1】:

我认为你应该像这样定义你的 userInput() 方法……

def userInput():
    for hour in hours:
        user_input = -1
        while user_input < 0:
            try:
                user_input = int(input("Enter pints collected for hour {}: ".format(hour)))
            except:
                user_input = -1
            if user_input > -1:
                inputPints.append(user_input)

【讨论】:

    【解决方案2】:

    您可以使用正则表达式来验证您的输入。 要仅允许使用 #number.numbers 形式,您可以使用以下示例:

    # test for matches on the regex expression. 
    if len(re.findall('^#\d+.\d+$', "#-1.30")) > 0:
        # It is valid
        return true
    

    【讨论】:

      【解决方案3】:

      正如 Torxed 评论的那样,您正在比较“list”类型的对象与“int”类型的对象。这会引发错误:

      'list' 和 'int' 的实例之间不支持'

      您应该在将用户输入附加到列表之前验证用户输入,或者您可以遍历整个列表以查找错误/正确的输入。

      在追加之前检查输入:

      if int(input("Enter pints collected for hour {}: ".format(hours))) > 1:
          #This is ok
      

      使用完整列表检查输入

      for a in inputPints:
          if int(a) > 1:
              #a is OK.
      

      我建议您将这些验证放在 try catch 块中,因为如果 int() 检测到不可转换的字符,它可能会破坏您的代码。

      希望这会有所帮助!

      问候

      【讨论】:

        猜你喜欢
        • 2011-07-20
        • 2017-11-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-05-19
        • 2022-11-20
        • 2020-04-18
        • 1970-01-01
        相关资源
        最近更新 更多