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 つのスペースをインデントした古い行を置き換えます。完全なコードは次のようになります。tryexcept

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 = int(input("What flavour pizza would you like? (1-12): "))                

このinput(...)関数は、ユーザーの入力に基づいて文字列を返します。次に、これはを介して整数に変換されint(...)ます。[他の人が指摘しているようにinput、3.xではraw_input2.xと同等です。]

したがって、基本的に2つの選択肢があります。まず、数字以外の入力を実際のエラーとして扱い、それをキャッチしcontinueて、エラーが発生した場合にループの最初に戻るために使用できます。

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

これはおそらく最も適切でPythonの戦略です。

逆に、入力が実際に数字で構成されていることを確認できますが、現在のバージョンでは前後に空白が許可されているため、それよりも少し複雑です。

    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 に答える
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 に答える