检查用户输入是否满足两个条件

Checking user input to see if it satisfies two conditions

作为更大的菜单驱动程序的一部分,我想测试用户输入以查看该输入是否: 是一个整数 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,想知道是否有更简洁(更少的行,更好的性能,更多 "Pythonic",例如)的方法来实现这个?提前致谢。

我认为您不需要整个 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)

除了一个 if 之外你不需要任何东西:

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 >>> ")将是如果超出范围则执行。

我觉得你的代码很不错。小修正(拼写、缩进、不必要的 continues):

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 >>> ")

使用 isdigit() 检查非数字字符。那么你不应该需要捕捉异常。只有一个 if 并且它使用运算符短路来避免在 blah 包含非数字时执行 int(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 >>> ")