2017-10-15 134 views
0

我目前是一名新學生學習python。這是我第一次做大量計算機編碼的真實經歷。對於我的項目,我必須在三個不同難度級別的空白測驗中填寫。一旦用戶選擇了困難,遊戲應該根據難度打印不同的段落。遊戲的每個部分都能正常工作,但我在創建「難度選擇器」時遇到了麻煩。無論我選擇何種困難,遊戲都會依次輕鬆,中等和難度,然後崩潰。爲簡單遊戲創建決策樹

下面我已經加入了介紹性文字和難度選擇器。我會喜歡一些幫助。我確信有一些我看不到的明顯的東西。謝謝!

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語句下放置您的遊戲代碼。

+0

這解決了它。我不知道elif。之前我曾嘗試類似於此代碼塊的內容,除了連續使用三條if語句。它沒有按預期工作。 –

+0

很高興幫助! – Joe

1

你可以用if else做,如果你只想打印的東西,但如果你有獨立的代碼塊爲每個級別再定義一個函數爲每個級別,並使用此模式:

可以定義功能塊和呼叫他們對用戶的輸入像基礎:

# 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頌遍歷所有的困難,因爲這行:

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

當Python看到類似easy_game(),它調用easy_game功能,並用結果替換它。你不想尚未雖然調用的函數,這樣你就可以起飛的括號只存儲而不是函數:

difficulty_choice = [easy_game, medium_game, hard_game] 

這將意味着你要調用的函數,你把它從數組中後。

至於碰撞,當你使用raw_input()時,你會得到一個字符串。這意味着當你輸入1來決定一個簡單的遊戲,你會得到字符1,這是由49代表。這就是爲什麼你的代碼經歷了一切和崩潰:你的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

沒問題。我認爲找到正確的思維模型是很有用的,這樣你就可以理解你的代碼在做什麼,特別是如果你想從事這個職業。如果你明白髮生了什麼,而不是總是猜測,那麼你會走得更遠(更快)。歡迎編程,祝你好運。 =) –