1

私は2つのことをしようとしています:

  1. ユーザーに 4 つの可能なオプションを提供するループを Python で作成します。「1」、「2」、「3」などを入力します。ユーザーが 1、2、または 3 を選択すると、テキストが表示されます。ユーザーが他の何かを入力すると、テキストが表示され、プロンプトがもう一度表示されます。これは、1、2、または 3 に入るまで繰り返されます。

  2. 次に、ユーザーからその入力を取得して、そのループの外で使用し、ゲームを続行したいと考えています。

これまでの私の解決策: コードを投稿する前に説明します。基本的に、ループに必要なすべてのコードを引数なしの関数内に配置しました。次に、else ステートメント内でその関数を呼び出します。

コードの動作: コードは希望どおりにループしていますが、ユーザーが入力した内容に基づいてループを「中断」して続行する方法がわかりません。リターンでなければならないことはわかっていますが、どこに置くべきかわかりません。

私が試したこと:私が入力した関数を呼び出すポスト:

if blackdoor(decision) == "1":

そこから続けますが、うまくいきません。

コード:

def blackdoor():
    print """After having recently died you awake to find yourself standing in an all white room with a black door that seems to go into the sky forever. What do you do?\n1.Touch the door.\n2.Shout at the door.\n3.Stare at the door."""
    decision = raw_input("> ")
    if decision == "1":
        print "You touch the door. It is as cold as ice. You can feel a vibration pulsing from the door through your body.\n"
    elif decision == "2":
        print "You shout 'Hello?! Is anybody there?!' at the door. But nothing responds. Your voice echoes off in the distance.\n"
    elif decision == "3":
        print "You stare at the door intensely. You envision it opening when all of a sudden you get the feeling of something staring back at you.\n"
    else:
        print "You don't follow instructions very well, do you?\n"
        blackdoor()
    return decision

blackdoor()

ゲームを続行するための条件として使用する決定の入力を引き出すにはどうすればよいですか?

4

3 に答える 3

1

私の理解によると、コードは問題ないように見えますが、再帰制限を多数に設定していない場合は、再帰が多いためにスタックが不足する可能性があります。

次のように、反復的な解決策を選びます。

def blackdoor():
    end_condition = False
    while not end_condition:
        end_condition = True
        print """After having recently died you awake to find yourself standing in an all white room with a black door that seems to go into the sky forever. What do you do?\n1.Touch the door.\n2.Shout at the door.\n3.Stare at the door."""
        decision = raw_input("> ")
        if decision == "1":
            print "You touch the door. It is as cold as ice. You can feel a vibration pulsing from the door through your body.\n"
        elif decision == "2":
            print "You shout 'Hello?! Is anybody there?!' at the door. But nothing responds. Your voice echoes off in the distance.\n"
        elif decision == "3":
            print "You stare at the door intensely. You envision it opening when all of a sudden you get the feeling of something staring back at you.\n"
        else:
            print "You don't follow instructions very well, do you?\n"
            end_condition = False
    return decision


decision = blackdoor()
于 2012-06-01T20:03:30.520 に答える
1

再帰的に呼び出しblackdoor()ていますが、呼び出しから結果を返していません。return blackdoor()結果を呼び出し元に返す必要があります。

簡単な変更でそれができるはずです。

def blackdoor():
print """After having recently died you awake to find yourself standing in an all white room with a black door that seems to go into the sky forever. What do you do?\n1.Touch the door.\n2.Shout at the door.\n3.Stare at the door."""
decision = raw_input("> ")
if decision == "1":
    print "You touch the door. It is as cold as ice. You can feel a vibration pulsing from the door through your body.\n"
elif decision == "2":
    print "You shout 'Hello?! Is anybody there?!' at the door. But nothing responds. Your voice echoes off in the distance.\n"
elif decision == "3":
    print "You stare at the door intensely. You envision it opening when all of a sudden you get the feeling of something staring back at you.\n"
else:
    print "You don't follow instructions very well, do you?\n"
    return blackdoor()
return decision
于 2012-06-01T19:52:34.023 に答える
0

ゲーム全体でこれらの決定点が多数あり、それらを関数に埋め込もうとして迷ってしまうと思います。この場合は、単純な有限状態マシン(FSM) を使用して調べる必要があります。

FSM 実装のリストはPythonWikiにあります。

アクションが 1 つまたは 2 つしかない場合、FSM を使用するのはやり過ぎのように思えますが、単純なアドベンチャー ゲームでさえ、1 つを使用せずにプログラミングするのは不必要に困難であることがわかります。

更新今後の参考のために、 Python と FSMに関する有用な回答を見つけました。

于 2012-06-01T20:28:36.030 に答える