2016-07-14 69 views
0

作为一个更大的菜单驱动程序的一部分,我想测试的用户输入,查看是否该输入: 是整数 AND 如果它是一个整数,如果它在1到12的范围内,包括检查用户输入,看它是否满足两个条件

number = 0  
while True: 
    try: 
      number = int(input("Enter a whole number between 1 and 12 >>> ")) 
    except ValueError: 
      print("Invlaid input, please try again >>> ") 
      continue 
    else: 
      if not (1<= number <=12): 
        print("Need a whole number in range 1-12 >>> ") 
        continue 
      else: 
        print("You selected:",number) 
        break 

我使用Python 3.4.3,并想知道如果有一个更简洁(更少的线,更好的性能,更“Python化”,例如)的方式来实现这一目标?提前致谢。

+0

请注意'int'会愉快地截断小数值。所以,如果你输入'3.6',这个代码将接受它(如'3')。 – smarx

+0

因为我相信3.6会被视为“输入无效...”。 – marshki

+0

@smarx,'int(“3.6”)'将会是一个ValueError,你需要将其转换为float,然后转换为int。 –

回答

1

你并不需要什么吧一个如果try

while True: 
    try: 
     number = int(input("Enter a whole number between 1 and 12 >>> ")) 
     if 1 <= number <= 12: 
      print("You selected:", number) 
      break 
     print("Need a whole number in range 1-12 >>> ") 
    except ValueError: 
      print("Invlaid input, please try again >>> ") 

错误输入将意味着你直接去除了,如果输入是好的,并且在您接受的范围内,print("You selected:", number)将被执行,然后我们中断,否则print("Need a whole number in range 1-12 >>> ")将在超出范围时执行。

+0

这段代码没什么问题,但我认为这样做通常会更好地限制尝试/除非尽可能多。由于这个原因,我更喜欢原始代码。 – smarx

+0

@smarx,这是一个问题,如果味道,我发现嵌套代码与很多其他块非常难看和难以阅读。 –

+0

我没有足够的特权来支持这个,但谢谢你的回复。 – marshki

-1

我不认为你需要整个try/except块。什么都可以放入一个条件:

number = raw_input("Enter a whole number between 1 and 12 >>> ") 
while not (number.isdigit() and type(eval(number)) == int and 1<= eval(number) <=12): 
    number = raw_input("Enter a whole number between 1 and 12 >>> ") 
print("You selected:",number) 
0

你的代码对我来说看起来不错。次要修复起坐(拼写,压痕,不必要continue S):

while True: 
    try: 
     number = int(input("Enter a whole number between 1 and 12 >>> ")) 
    except ValueError: 
     print("Invalid input, please try again >>> ") 
    else: 
     if 1 <= number <= 12: 
      print("You selected: {}".format(number)) 
      break 
     else: 
      print("Need a whole number in range 1-12 >>> ") 
0

使用ISDIGIT()来检查非数字字符。那么你不需要去捕捉异常。只有一个if,它使用运算符短路来避免int(blah),如果blah包含非数字。

while True: 
    num_str = raw_input("Enter a whole number between 1 and 12 >>> ") 
    if num_str.isdigit() and int(num_str) in range(1,13): 
     print("You selected:",int(num_str)) 
     break 
    else: 
     print("Need a whole number in range 1-12 >>> ") 
相关问题