2017-02-19 83 views
1

蟒蛇excersise從learnpython.org: 我在與中粗體的額外excersise麻煩:蟒蛇猜謎遊戲excersise目前我在做

生成1到9之間的隨機數(包括1和9) 。要求用戶猜出這個數字,然後告訴他們他們是否猜測得太低,太高,或者是否正確。 (提示:記得從第一次練習使用用戶輸入的教訓)

附加功能:

保持遊戲下去,直到用戶鍵入「退出」

跟蹤多少猜測用戶已經採取了,當遊戲結束時,打印出來。

這是到目前爲止我的代碼:

import random 


def gameTracker(): 
    global playedGames 
    playedGames = 1 
    playedGames = playedGames+1 

def generateNumber(): 
    global generatednumber 
    generatednumber = random.randint(1, 9) 

def generateuserGuess(): 
    global userguess 
    userguess = int(input('Pick a number between 1-9: ')) 


def generationProcess(): 
    global userguess 
    if int(userguess) == generatednumber: 
     print('You have guessed the number. Congratulations.') 
     gameTracker() 
     global playAgain 
     playAgain = input('Want to play again? y/n: ') 
     if playAgain == 'y': 
      generateNumber() 
      userguess = input('Pick a new number between 1-9: ') 
      generationProcess() 
     if playAgain == 'n': 
      print('The game has ended. You have played: ') 
      print(int(playedGames)) 
      print('games') 

    if int(userguess) > generatednumber: 
     print('You have guessed too high.') 
     global conConfirm 
     conConfirm = str(input('Guess again?: c/quit: ')) 
     conGame() 

    if int(userguess) < generatednumber: 
     print('You have guessed too low.') 
     conConfirm = str(input('Guess again?: c/quit: ')) 
     conGame() 


def conGame(): 
    if conConfirm == 'c': 
     global userguess 
     userguess = int(input('Your new guess please: ')) 
     generationProcess() 

    if conConfirm == 'quit': 
      print('The game has ended. You have played: ') 
      print(int(playedGames)) 
      print('games') 

generateNumber() 
generateuserGuess() 
generationProcess() 

當用戶按下「n」或打不打印出正確的數字遊戲,這意味着gameTracker()寫的不好後「跳槽」 /錯誤,但它也出於某種原因打印了遊戲進行的次數* playAgain =='n'後發生了什麼。

我怎麼會去各地做這項工作?

+0

我給這家excersise最終的代碼可以在這裏找到: http://codepad.org/4T6v7C56 我被騙了一下,進口'sys'模塊'sys.exit'和它停止遞歸。代碼不是很漂亮,但它的工作原理。如果您在播放時發現錯誤或其他內容,請告訴我。 – Alekong

回答

0

globalsfunction returns工作。我已經調整了代碼中的一些錯誤並添加了一些評論。瀏覽!

import random 

#create variable for num of played games 
playedGames = 0 

#creat variable to count number of guesses per game 
guesses = 0 
#create function to generate new random num 
def generateNumber(): 
    return random.randint(1, 9) 

#askk initial question 

generatednumber = generateNumber() 

userguess = int(input('Pick a number between 1-9: ')) 

def generationProcess(): 
    global userguess, guesses, playedGames,generatednumber 

    while True: 


     if userguess == generatednumber: 
      print('You have guessed the number. Congratulations.') 
      playedGames += 1 
      global playAgain 
      playAgain = input('Want to play again? y/n: ') 
      if playAgain == 'y': 
       generatednumber = generateNumber() 
       userguess = input('Pick a new number between 1-9: ') 
       generationProcess() 
      if playAgain == 'n': 
       print('The game has ended. You have played: '+ str(playedGames)+' games') 

     elif int(userguess) > generatednumber: 
      print('You have guessed too high.') 
      guesses+=1 
      conConfirm = str(input('Guess again?: c/quit: ')) 
      conGame(conConfirm) 

     elif int(userguess) < generatednumber: 

      guesses+=1 
      print('You have guessed too low.') 
      conConfirm = str(input('Guess again?: c/quit: ')) 
      conGame(conConfirm) 


def conGame(conConfirm): 
    global userguess 
    if conConfirm == 'c': 
     userguess = int(input('Your new guess please: ')) 
     generationProcess() 

if conConfirm == 'quit': 
    print('The game has ended. You have played: ' + str(playedGames) + ' games') 


generationProcess() 
+0

這個人很好地解釋了我的代碼中的錯誤。他還帶有一些很好的提示: - 在'generationProcess()'中共同聲明所有全局變量 - 使用'while True'和'elif'代替新if語句 - Use = + 1 with'playedGames' - 將conConfirm輸入傳遞給conGame函數以避免遞歸 總體而言,這是最好的解決方案,而其他解決方案也提供了有關我的特定代碼段出現問題的信息。 – Alekong

+0

@Alekong謝謝,不要忘了點擊投票按鈕作爲讚賞的標誌! –

+0

我做了,但不幸的是,因爲我有不到15的聲望,投票將不可見。 – Alekong

0

在你gameTracker()代碼,您初始化playedGames爲1,然後加一。所以它看起來像它總是存儲值2

你得到,因爲你的遞歸的多個輸出。在最後一次遞歸調用之後,程序控制返回到if語句,並且變量值仍爲'n'或'quit'將再次打印細節。您可以在退出條件後將變量初始化爲不同的值以避免出現這種情況。

import random 

playedGames = 0 

def gameTracker(): 
    global playedGames 
    playedGames = playedGames+1 

def generateNumber(): 
    global generatednumber 
    generatednumber = random.randint(1, 9) 
    gameTracker() 

def generateuserGuess(): 
    global userguess 
    userguess = int(input('Pick a number between 1-9: ')) 


def generationProcess(): 
    global userguess 
    global generatednumber 
    if int(userguess) == generatednumber: 
     print('You have guessed the number. Congratulations.') 
     global playAgain 
     playAgain = input('Want to play again? y/n: ') 
     if playAgain == 'y': 
      generateNumber() 
      userguess = input('Pick a new number between 1-9: ') 
      generationProcess() 
     if playAgain == 'n': 
      print('The game has ended. You have played: ') 
      print(int(playedGames)) 
      print('games') 
      playAgain = 'x' 


    if int(userguess) > generatednumber: 
     print('You have guessed too high.') 
     global conConfirm 
     conConfirm = input('Guess again?: c/quit: ') 
     conGame() 

    if int(userguess) < generatednumber: 
     print('You have guessed too low.') 
     conConfirm = str(input('Guess again?: c/quit: ')) 
     conGame() 


def conGame(): 
    global conConfirm 
    if conConfirm == 'c': 
     global userguess 
     userguess = int(input('Your new guess please: ')) 
     generationProcess() 

    if conConfirm == 'quit': 
      print('The game has ended. You have played: ') 
      print(int(playedGames)) 
      print('games') 
      conConfirm = 'x' 

generateNumber() 
generateuserGuess() 
generationProcess() 
+0

這解釋了遞歸發生。我明白爲什麼現在發生,謝謝。 – Alekong

0

您應該增加遊戲的gameTracker()方法聲明之後的generateNumber()方法中所扮演的數量。這樣,無論玩過多少遊戲,您都可以跟蹤玩過多少遊戲!這將是這個樣子:

def gameTracker(): 
    global playedGames 
    playedGames = 0 

def generateNumber(): 
    global generatednumber 
    generatednumber = random.randint(1, 9) 
    playedGames += 1 
+1

這工作。 我丟棄gameTracker()完全和它現在看起來是這樣的: '全球playedGames playedGames = 0 高清generateNumber(): 全球generatednumber generatednumber =隨機的。randint(1,9) 全球玩遊戲 玩過的遊戲+ = 1' '玩過的遊戲+ = 1'是我無法弄清楚的。 – Alekong