19

これは私が持っているコードです:

choice = ""

while choice != "1" and choice != "2" and choice != "3": 
    choice = raw_input("pick 1, 2 or 3")

    if choice == "1":
        print "1 it is!"

    elif choice == "2":
        print "2 it is!"

    elif choice == "3":
        print "3 it is!"

    else:
        print "You should choose 1, 2 or 3"

動作している間は、特に while 句が非常に扱いにくいと感じます。もっと許容できる選択肢がある場合はどうなりますか? 句を作るためのより良い方法はありますか?

4

7 に答える 7

50

要素が次のwhileような選択肢のリスト内にあるかどうかを確認することで、ビットを少しリファクタリングして少しきれいにすることができます

while choice not in [1, 2, 3]:

これは、選択した値がそのリストの要素ではないかどうかを確認しています

于 2012-09-23T15:34:16.740 に答える
5

ロジックをループにプッシュして置き換えることができます

while choice != "1" and choice != "2" and choice != "3": 

while True:

そして、最初の行choice = ""は不要です。次に、各ブランチで、やりたいことが終わったら、できますbreak

于 2012-09-23T15:33:01.730 に答える
4

そのようなものが良いと思います

possilities = {"1":"1 it is!", "2":"2 it is!", "3":"3 it is!"} 
choice = ""

while True:
    choice = raw_input("pick 1, 2 or 3")
    if choice in possilities:
        print possilities[choice]
        break
    else:
        print "You should use 1, 2 or 3"
于 2012-09-23T15:44:12.423 に答える
1

ディクショナリを使用して、1 が値の場合に実行するコードに 1 をマップすることができます。これにより、if を取り除くことができ、ディクショナリを更新するだけでコードが将来的に他の値をサポートできるようになります。 . while の条件については、キーが辞書にあるかどうかを確認するだけです。

于 2012-09-23T15:36:26.407 に答える
1

有効なオプションが選択されるまでループし、選択した値を返す関数を持つことをお勧めします。

これは、コードの残りの部分が 内に意図されていないことを意味し、whileすべてを適切かつフラットに保ちます ( 「フラットはネストよりも優れています」 ) 。

def get_choice(options):
    """Given a list of options, makes the user select one.

    The options must be strings, or they will never match (because raw_input returns a string)

    >>> yn_choices = ['y', 'n']
    >>> a = get_choice(options = yn_choices)
    """
    prompt_string = "Pick " + ", ".join(options)
    while True:
        choice = raw_input(prompt_string)
        if choice in options:
            return choice
        else:
            print "Invalid choice"

# Prompt user for selection
choice = get_choice(["1", "2", "3"])

# Do stuff with choice...
if choice == "1":
    print "1 it is!"

elif choice == "2":
    print "2 it is!"

elif choice == "3":
    print "3 it is!"

else:
    print "You should choose 1, 2 or 3"
于 2012-09-23T15:49:20.030 に答える
0

考えられるすべての選択肢を含むセットを使用し、「in」式を使用して while 部分を判断できると思います。

if-else 部分については、print (選択、" it is!") で問題ありません。

于 2012-09-23T15:35:33.673 に答える
-1

while str(choice) not in "123" .....

于 2012-09-23T15:34:38.053 に答える