0

我遇到了一些麻烦,我已经完成了程序的这一部分,它按计划工作,它存储变量并成功检查所有验证,但我需要它来验证,以便只能输入数字。一旦你按下一个字母键,程序就会崩溃。

我知道我需要在某个地方使用 selection.isdigit,我已经在几个不同的地方尝试过,但是当我把它放在看起来正确的地方时,程序崩溃了,因为 isdigit 只适用于字符串,并且给出了数字验证在程序中,当他们尝试使用字符串时程序会崩溃。有人可以帮我吗?

while True:
    if amountwanted > 0:                                                                               
        selection = int(input("What flavour pizza would you like? (1-12): "))                           
        if selection < 1 or selection > 12:                                                             
            print("You must enter a pizza between 1 and 12")                                            
            print("")
        else:
            if selection <= 7:                                                                          
                orderedstandardpizzas.append(selection)
            else:
                orderedgourmetpizzas.append(selection)                                                  
            amountwanted = amountwanted - 1                                                             
    else:                                                                                         
        break  
4

3 回答 3

1

您的使用会int()引发错误,因为它只接受可以解释为数字的字符串。

您可以捕获异常而不是检查输入中的每个字符:

try:
    selection = int(input("What flavour pizza would you like? (1-12): "))
except ValueError:
    print "You must enter a number!"
    break

上面的代码片段替换了你的旧selection = ...行,它已经缩进了 4 个空格以匹配我插入的新try/块。except完整的代码最终是这样的:

while True:
    if amountwanted > 0:
        try:
            selection = int(input("What flavour pizza would you like? (1-12): "))
        except ValueError:
            print "You must enter a number!"
            break
        if selection < 1 or selection > 12:
            print("You must enter a pizza between 1 and 12")
            print("")
        else:
            if selection <= 7:
                orderedstandardpizzas.append(selection)
            else:
                orderedgourmetpizzas.append(selection)
            amountwanted = amountwanted - 1
     else:
        break
于 2012-09-14T12:48:40.417 回答
0

尝试这个:

selection = raw_input("What flavour pizza would you like? (1-12): ");
if (selection.isdigit())
    numSelection = int(selection);
    if (numSelection < 1 or numSelection > 12:
        // carry on
    else:
        // else case
else:
    //print error message. Break out of loop here if required.
于 2012-09-14T12:50:24.140 回答
0

考虑线

        selection = int(input("What flavour pizza would you like? (1-12): "))                

input(...)函数根据用户的输入返回一个字符串;然后通过 将 this 转换为整数int(...)。[正如其他人指出的那样,input在 3.x 中相当于raw_input2.x。]

所以你基本上有两个选择。首先,您可以将非数字输入视为实际错误,您可以捕获它,并continue在出现错误时使用它返回到循环的开头:

try:
    selection = int(input("What flavour pizza would you like? (1-12): "))
except ValueError:
    print "Error message"
    continue

这可能是最合适的和 Pythonic 的策略。

相反,您可以检查输入是否确实由数字组成,尽管它比这更复杂一些,因为当前版本允许前后有空格,因此您可以执行类似的操作

    string_selection = input("What flavour pizza would you like? (1-12): ")
    if not string_selection.strip().isdigit():
        continue
    selection = int(string_selection)

但这更复杂!

于 2012-09-14T12:56:04.180 回答