使用范围功能时输入验证

时间:2016-10-23 20:49:50

标签: python

我正在创建一个附加输入列表的函数。一天中需要准确的24个项目。我正在使用范围功能来执行此操作。我需要验证这个输入。但是我似乎无法每次都正确验证它或者我已经得到了正确的验证,但代码提示超过24个输入。

def get(list):
for i in range(24):
    tem=float(input("Hourly tempature (00:00-23:00): "))
    if tem < -50 or tem > 150:
        print ("Enter tempatures between -50 and 130")
    else:
        tem=float(input("Hourly tempature (00:00-23:00)"))


    list.append(tem)

2 个答案:

答案 0 :(得分:2)

input放在else块中,而不是if,意味着当第一个输入正确时,代码会在循环内再次提示输入,而不是错误。

在任何情况下,如果他们输错了,就不会再检查。你需要使用while循环。见https://stackoverflow.com/a/23294659/2482744

答案 1 :(得分:0)

有几点:

  1. 您可能需要考虑告诉用户他们在哪个小时设置温度:例如input("Temperature at "+str(i)+":00 hours:")
  2. 您应该澄清您是否希望温度小于或等于150,或者小于或等于130,因为在提供给用户的文本表明温度必须小于或等于130,但你的if语句表明它必须小于或等于150。
  3. 您可能不应该使用内置的list作为变量。尝试使用描述其用途的变量,例如myTemperatureList
  4. 当输入在温度范围内时,您的代码当前会再次提示输入,但在温度超出范围时会输出错误消息(无法获得额外输入)。这意味着当温度输入在范围内时,将提示用户输入两次,第二个输入将添加到列表中。但是,当温度输入超出界限时,虽然将打印错误消息,但不会提示用户输入第二个输入,并且超出界限的温度将添加到列表中。
  5. 扩展上面的第3点,您希望输入验证代码执行的操作是提示温度,并检查温度是否在范围内。如果是,则应将值添加到列表中,如果不是,则应丢弃该值,并再次提示用户输入。

    这可以通过多种方式完成。例如,使用while循环,可能的解决方案可能是:

    def get(myTemperatureList):
        for i in range(24):
            while True:
                #This is so that when an error message is printed,
                #the user is prompted again for input, for as long as they
                #are providing bad input
                try:
                    #You'll want this try-except block in case the user doesn't enter a number
                    tem=float(input("Temperature at "+str(i)+":00 hours:"))
                    #This is basically the sames as in your code
    
                    if tem < -50 or tem > 150:
    
                        print ("Enter a temperature between -50 and 130")
                        #Same logic as in your code, prints an error message
                        #when the temperature is out of bounds
                    else:
                        #If the temperature is valid, break out of the while loop
    
                        break
                except ValueError:
                    print("Enter a number")
            myTemperatureList.append(tem)
    

    您也可以通过其他方式解决此问题,例如,使用带有验证函数的递归。