2016-11-11 3 views
0

Я пытаюсь разработать игру Hangman на Python, и я застрял в выяснении, почему правильно угаданные буквы не запоминаются программой.Python hangman game, does not work

Например, если введенное письмо находится в слове «привет», 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

'он забывает об обновлении_list' Он принудительно запоминает вновь созданное значение в' check', которое должно быть возвращено, распечатано и - забыто. – greybeard

ответ

1

Пожалуйста, обратите внимание, что это очень безвкусный и не будет проблем, если вы храните на угадывание букву «л» в этом случае ... У меня не было больше времени, чтобы потратить на него, но это должно быть достаточно, чтобы подтолкнуть вас немного вперед. Теперь он помнит догадки игрока, и пользователь может выиграть игру. Мои извинения ...

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)