2016-11-11 68 views
0

我想在Python中開發一個Hang子手遊戲,並且我搞不明白爲什麼正確猜到的字母不被程序記住。Python的hang子手遊戲,沒有工作

例如,如果輸入的字母在單詞「hello」中,python會識別匹配,但當它提示輸入另一個字母時,會忘記updt_list(具有輸入字母的列表)。

如果有人願意看一看我會很感激。

import time 


def pick_a_word(): 

    word = "hello" 
    return word 

def guess_a_letter(): 
    aletter = input("Please input one letter at a time:\n") 
    no_letters= len(aletter) 
    if no_letters > 1: 
     print("You inputed more than one letter! Don't forget- one at a time.\nLets try again..") 
     time.sleep(2) 
     return guess_a_letter() 
    else: 
     return aletter 


def blankLIST(aword): 
    blankList = len(aword) * "_" 
    return list(blankList) 

def check(aletter,aword,blankLIST): 

    updt_list= blankLIST(aword) 

    which_letter= aword.index(aletter) 

    updt_list[which_letter] = aletter 

    return updt_list 


def engine(): 

    guess=guess_a_letter() 
    wordtoguess=pick_a_word() 
    if guess in wordtoguess: 
     print("\n") 
     print("The letter is in the word") 
     print(check(guess,wordtoguess,blankLIST)) 

     time.sleep(1) 
    else: 
     print("\n") 
     print("The letter is not in the word") 

     time.sleep(1) 




def repeat(): 
    x = 0 
    while x <= 5: 
     lifes= 6- x 
     print("You have",lifes," attempts left") 

     engine() 

     x = x 

repeat() 
+0

'忘記updt_list'它強行記住'check'中新創建的值,將被返回,打印和 - 忘記。 – greybeard

回答

1

請注意,這是非常不雅,如果你繼續在這種情況下猜字母「l」會有問題...我沒有更多的時間花在它,但它應該是足以推動你有點前進。它現在記住玩家的猜測,用戶可以贏得比賽。我很抱歉...

import time 


    def pick_a_word(): 

     word = "hello" 
     return word 

    def guess_a_letter(): 
     #aletter = input("Please input one letter at a time:\n") 
     aletter = 'l' 
     no_letters= len(aletter) 
     if no_letters > 1: 
      print("You inputed more than one letter! Don't forget- one at a time.\nLets try again..") 
      time.sleep(2) 
      return guess_a_letter() 
     else: 
      return aletter 


    def buildWordLIST(aword): 
     blankList = len(aword) * "_" 
     return list(blankList) 

    def check(aletter,aword,updt_list, wordIndex=0): 

     which_letter= aword.index(aletter, wordIndex) 

     if updt_list[which_letter] != "_" and ((wordIndex + 1) < len(aword)): 
      wordIndex = which_letter + 1 
      check(aletter,aword,updt_list, wordIndex) 

     updt_list[which_letter] = aletter 

     return updt_list 


    def engine(mistakes, updt_list, correctGuesses): 

     youWinFlag = False 

     guess=guess_a_letter() 
     wordtoguess=pick_a_word() 
     if guess in wordtoguess: 
      print("\n") 
      print("The letter is in the word") 
      updt_list = check(guess,wordtoguess,updt_list) 
      print updt_list 
      correctGuesses += 1 
      if correctGuesses == len(wordtoguess): 
       print("YOU GUESSED THE WORD!") 
       youWinFlag = True 


      time.sleep(1) 
     else: 
      print("\n") 
      print("The letter is not in the word") 
      mistakes += 1 
      time.sleep(1) 

     return mistakes, updt_list, correctGuesses, youWinFlag 



    def repeat(updt_list): 
     x = 0 
     blankLIST = '' 
     correctGuesses = 0 
     while x <= 5: 
      lives= 6- x 
      print("You have",lives," attempts left") 

      results = engine(x, updt_list, correctGuesses) 
      x = results[0] 
      updt_list = results[1] 
      correctGuesses = results[2] 
      youWinFlag = results[3] 
      if youWinFlag: 
       x = 6 

    def initialize_game(): 
     wordtoguess=pick_a_word() 
     updt_list = buildWordLIST(wordtoguess) 
     return updt_list 

    updt_list = initialize_game() 
    repeat(updt_list)