2017-10-15 4 views
0

私は現在、新しいPython学習者です。これは、多くのコンピュータコーディングを行う私の最初の本当の経験です。私のプロジェクトでは、難易度の異なる3つのレベルで空白のクイズを記入しなければなりません。ユーザーが難易度を選択すると、難易度に基づいて異なる段落が印刷されます。ゲームの各セクションは正常に機能しますが、難易度の高い選択を作成するのに問題があります。私が選択した難易度にかかわらず、ゲームは簡単に、中位に、そして難しいレベルで順番に転がり、その後クラッシュします。シンプルゲームのデシジョンツリーの作成

以下、紹介テキストと難易度選択ツールを紹介しました。私はいくつかの助けが大好きです。私は本当に明白なことは私が見ていないと確信しています。ありがとうございました!

def introduction(): 
     print '''Welcome to Kevin's European Geography Quizzes. 
     Test your knowledge of European geography. \n''' 
     difficulty = raw_input('''Do you want to play an easy, medium, or hard game? 
     Please type the number 1 for easy, 2 for medium, or 3 for hard.\n''') 
     game_chooser(difficulty) 

    def game_chooser(difficulty): 
     cursor = 0 
     difficulty_choice = [easy_game(), medium_game(), hard_game()] 
#each element of the above list links to a procedure and starts one of the 
#mini-games. 
     while cursor < len(difficulty_choice): 
      if difficulty != cursor: 
       cursor += 1 
      else: 
       difficulty_choice[cursor] 
       break 
+0

あなたが入力をチェックするために、条件を必要としています。あなたが共有しているものをあなたに良い答えを与えるのは難しいです。 – Joe

答えて

0

入力に条件を追加します。

if difficulty == 'easy': 
    print("here is an easy game") 
elif difficulty == 'medium': 
    print('here is a medium game') 
elif difficulty == 'hard': 
    print('here is hard') 
else: 
    print('Please enter valid input (easy, medium, hard)') 

各if文の下にゲームコードを入れます。あなただけの何かを印刷していますが、各レベルに個別のコードブロックを持っているならば、各レベルのための関数を定義し、このパターンを使用したい場合は、if elseで行うことができます

+0

これで解決しました。私はelifについて知らなかった。以前は、このコードブロックに似た何かを試していましたが、行内に3つのif文がありました。意図したとおりに動作しませんでした。 –

+0

うれしかった! – Joe

1

をあなたは、機能ブロックとコールを定義することができます彼らのようなユーザ入力何かの根拠:

# define the function blocks 
    def hard(): 
     print ("Hard mode code goes here.\n") 

    def medium(): 
     print ("medium mode code goes here\n") 

    def easy(): 
     print ("easy mode code goes here\n") 

    def lazy(): 
     print ("i don't want to play\n") 

    # Now map the function to user input 
    difficulty_choice = {0 : hard, 
       1 : medium, 
       4 : lazy, 
       9 : easy, 

    } 
    user_input=int(input("which mode do you want to choose : \n press 0 for hard \n press 1 for medium \n press 4 for lazy \n press 9 for easy ")) 
    difficulty_choice[user_input]() 

次に機能ブロックの呼び出しは次のようになります。

difficulty_choice[num]() 
0

理由あなたのC ODEはすべての困難を通過するため、この行は次のとおりです。Pythonはeasy_game()のようなものを見たとき

difficulty_choice = [easy_game(), medium_game(), hard_game()] 

、それはeasy_game関数を呼び出し、結果に置き換えます。あなたはまだかかわらず、関数を呼び出すにしたくないので、あなたではなく、単に機能を保存するために括弧を取ることができます。これは、あなたが配列のそれを取り出した後の関数を呼び出す必要があり意味します

difficulty_choice = [easy_game, medium_game, hard_game] 

クラッシュについては、raw_input()を使用すると文字列が戻ってきます。つまり、1と入力して簡単なゲームを決定すると、数字49で表される文字が1になります。だからあなたのコードはすべてのものを通り、クラッシュします:1は実際には49です。実際に、1 < '1'を通訳に入力すると、Trueが返されます。

raw_input()の結果をint()関数に渡すことができます。この関数は解析し、適切な整数を返します(または解析できない場合は例外をスローします)。 introductionの最後の行は、game_chooser(int(difficulty))のようになります。

また、(結局それは、彼らがしているものだ)だけで、配列にインデックスを付けることにより、game_chooserのコードの大部分をスキップすることができます:

def game_chooser(difficulty): 
    # the lack of parens here means you get the function itself, not what it returns 
    difficulty_choice = [easy_game, medium_game, hard_game] 

    #each element of the above list links to a procedure and starts one of the 
    #mini-games. 

    # note the parens to actually call the retrieved function now 
    difficulty_choice[difficulty]() 
+0

ヒントをありがとう。彼らはなぜゲームがすべての困難を乗り越えていたのか、私の頭の中にあった多くの質問に答えます。 –

+0

問題ありません。私は正しい精神モデルを得ることは有益だと思うので、あなたのコードが何をしているのかを理解することができます。特に、あなたがそれからキャリアを作り出そうとしているならば。常に推測するのではなく、何が起こっているのかを理解すれば、はるかに(そしてはるかに速く)進むことができます。プログラミングへようこそ、幸運。 =) –

関連する問題