Python仅在范围内时排除输入



嗨,我想从用户那里得到一个数字,并且只在特定范围内输入。

以下内容似乎有效,但我是一个傻瓜,我认为在它有效的同时,毫无疑问还有一个更优雅的例子。。。只是尽量不养成坏习惯!

我注意到的一件事是,当我运行程序CTL+C时,它不会让我脱离循环,而是引发异常。

while True:
  try:
    input = int(raw_input('Pick a number in range 1-10 >>> '))
    # Check if input is in range
    if input in range(1,10):
      break
    else:
      print 'Out of range. Try again'
  except:
    print ("That's not a number")

非常感谢所有的帮助。

Ctrl+C引发一个KeyboardInterruptException,您的try … except块捕获到:

while True:
   try:
       input = int(raw_input('Pick a number in range 1-10 >>> '))
   except ValueError: # just catch the exceptions you know!
       print 'That's not a number!'
   else:
       if 1 <= input < 10: # this is faster
           break
       else:
           print 'Out of range. Try again'

一般来说,您应该只捕捉预期发生的异常(这样就不会出现副作用,比如您的Ctrl+C问题)。此外,您应该保持try … except块尽可能短。

您的代码中有几个项目可以改进。

(1) 最重要的是,仅仅捕获一个通用异常不是一个好主意,你应该捕获一个你正在寻找的特定的异常,并且通常尽可能短的try-块。

(2) 此外,

  if input in range(1,10):

最好编码为

  if 1 <= input < 10:

由于当前函数range()重复创建一个从1到9的值列表,这可能不是您想要或需要的。此外,是否要包含10?您的提示似乎暗示了这一点,因此您需要将调用调整为range(1, 11),因为生成的列表将不包含上限值。并且if-语句应更改为if 1 <= input <= 10:

您可以使用以下代码:

def read_int(prompt, min, max):
    while True:
        try:
            val = int(input(prompt))
        except ValueError:
            print('Error: wrong input')
        else:
            if(min <= val < max): # this is faster
                break
            else:
                print('Error: the value is not within permitted range (min..max)')
    return val    

v = read_int("Enter a number from -10 to 10: ", -10, 10)
print("The number is:", v)

相关内容

  • 没有找到相关文章

最新更新