1

そのため、メニューの項目を保持するために辞書を使用する必要がある Python の割り当てがあり、次に、印刷されるメニュー オプションの順序を変更できるように、メニューのキーと順序をランダムに変更します。これが私が持っているコードの例です:

ChoiceOne = "Rekey Menu"
ChoiceTwo = "Quit"
menu = {'1':ChoiceOne, '2':ChoiceTwo,}
userChoice = input("Please Enter the Integer for Your Menu Choice: ")

while userChoice not in menu.keys():
    print("Invalid Input")
    userChoice = input("Please Enter the Integer for Your Menu Choice: ")

if menu[userChoice] == ChoiceOne:
    menu = rekey(menu)
elif menu[userChoice] == ChoiceTwo:
    quit()

上記のコードは、ユーザーが終了しないことを選択している間ループし、メニューを何度も繰り返し出力します。以下は私の rekey() 関数です

def rekey(menu):
    rekey = {}
    keylist = random.sample(range(10), 2)
    for i, item in zip(keylist, menu ):
        rekey[i] = menu[item]
    return rekey

私の問題は、メニューオプションのユーザー入力が有効かどうかを確認する行にあるようです。最初に、「1」または「2」以外を入力すると、プログラムは有効な入力が入力されるまで While ループに入ります。ただし、メニューのキーを変更した後、「while userChoice not in menu.keys()」という行が常にトリガーされ、プログラムを続行するための入力が一致しません。

辞書に新しいキーを出力し、userChoice がそれらのいずれかに一致するかどうかを確認して問題を見つけようとしましたが、有効な新しいキーを選択しても、プログラムは入力したものは何もないと考えているようです。有効なキー。

理解できるように問題を十分に説明したことを願っています。事前に助けてくれてありがとう!!

4

2 に答える 2

4

あなたの最初のケースでは、メニューキーは文字列で、キー変更後はintsです。キーまたはユーザー入力のいずれかを変換して、それらが一致するようにする必要があります。

于 2012-04-17T01:42:07.123 に答える
1

ドキュメントによると、input(x)関数は と同等eval(raw_input(x))です。これは、入力プロンプトで「1」と入力することは、Python インタープリターで「1」と入力することと同じであるため、整数1 を取得することを意味します。

SpliFF が既に指摘しているように、メニュー ディクショナリで整数キーを使用していることを確認するか、ディクショナリに文字列キーを使用して、raw_input関数を使用してユーザーの選択を読み取るように切り替えることができます。

于 2012-04-17T01:46:53.990 に答える