2015-12-04 2 views
0

Для задания мне нужно написать основную игру HANGMAN. Все это работает, кроме этой части ...Назначение HANGMAN python

Игра должна напечатать одно из этих символов подчеркивания («_») для каждой буквы, которая есть в тайном слове; а затем догадки пользователя (правильные) письма, они будут помещены в.

EG

Предполагая, что слово было "слово"


Пользователь угадывает "W"

W _ _ _

Пользователь угадывает "D"

W _ _ D

Однако во многих случаях некоторые подчеркивания будут пропадают после того, как пользователь сделал несколько предположений, так что в конечном итоге выглядит как:

W _ D

вместо:

W _ _ D

я не могу работать, какая часть моего кода делает это произошло. Любая помощь будет оценена! Ура!

Вот мой код:

import random 

choice = None 

list = ["HANGMAN", "ASSIGNEMENT", "PYTHON", "SCHOOL", "PROGRAMMING", "CODING", "CHALLENGE"] 
while choice != "0": 
    print(''' 
    ****************** 
    Welcome to Hangman 
    ****************** 

    Please select a menu option: 

    0 - Exit 
    1 - Enter a new list of words 
    2 - Play Game 

    ''') 
    choice= input("Enter you choice: ") 

    if choice == "0": 
     print("Exiting the program...") 
    elif choice =="1": 
     list = [] 
     x = 0 
     while x != 5: 
      word = str(input("Enter a new word to put in the list: ")) 
      list.append(word) 
      word = word.upper() 
      x += 1 
    elif choice == "2": 
     word = random.choice(list) 
     word = word.upper() 
     hidden_word = " _ " * len(word) 
     lives = 6 
     guessed = [] 

     while lives != 0 and hidden_word != word: 
      print("\n******************************") 
      print("The word is") 
      print(hidden_word) 
      print("\nThere are", len(word), "letters in this word") 
      print("So far the letters you have guessed are: ") 
      print(' '.join(guessed)) 
      print("\n You have", lives,"lives remaining") 
      guess = input("\n Guess a letter: \n") 
      guess = guess.upper() 
      if len(guess) > 1: 
       guess = input("\n You can only guess one letter at a time!\n Try again: ") 
       guess = guess.upper() 
      while guess in guessed: 
       print("\n You have already guessed that letter!") 
       guess = input("\n Please take another guess: ") 
       guess = guess.upper() 
      guessed.append(guess) 
      if guess in word: 
       print("*******************************") 
       print("Well done!", guess.upper(),"is in the word") 
       word_so_far = "" 
       for i in range (len(word)): 
        if guess == str(word[i]): 
         word_so_far += guess 
        else: 
         word_so_far += hidden_word[i] 
       hidden_word = word_so_far 
      else: 
       print("************************") 
       print("Sorry, but", guess, "is not in the word") 
       lives -= 1 

     if lives == 0: 
       print("GAME OVER! You ahve no lives left") 
     else: 
      print("\n CONGRATULATIONS! You have guessed the word") 
      print("The word was", word) 
      print("\nThank you for playing Hangman") 
    else: 
     choice = input("\n That is not a valid option! Please try again!\n Choice: ") 
+1

Вы никогда не должны этого делать: 'list = [" HANGMAN ",]'. Таким образом, 'list' не следует переопределять. – shuttle87

+0

@ shuttle87 Хорошо ... Спасибо за подсказку, но это то, что вызывает проблему или нет? – M01

+0

Проблема заключается в том, что вы изменяете '' 'hidden_word''' /' '' word_so_far'''. Один метод устранения неполадок заключается в том, чтобы написать несколько строк кода, которые просто делают то, с чем у вас возникла проблема, и работать над ним отдельно, пока вы не работаете. Вы уже узнали о функциях? – wwii

ответ

2

Вы hidden_word = " _ " * len(word) Это означает, что при запуске на две буквы слова а, у вас есть [пробел] [подчеркивание] [пробел] [пробел] [подчеркивание] [пробел ].

Когда вы сделаете word_so_far += hidden_word[i], для i = 0 вы добавите пробел, а не символ подчеркивания.

Самый быстрый фикс, казалось бы:

  1. Set hidden_word просто быть _ (в hidden_word = " _ " * len(word))
  2. При печати из слова, сделать hidden_word.replace("_"," _ ") добавить пространства вокруг подчеркиванием назад
+0

Я уверен, что вы сделали правильно! Но что именно эта линия делает? hidden_word.replace ("_", "_") – M01

1

@Foon покажет вам проблемы с вашим решением.

Если вы можете разделить свой код на небольшие функциональные блоки , что делает его легче сосредоточиться на этой одной задачи и это делает его легче проверить. Когда у вас возникла проблема с заданием , это помогает изолировать проблему, превратив ее в функцию.

Нечто подобное.

word = '12345' 
guesses = ['1', '5', '9', '0'] 

def hidden_word(word, guesses): 
    hidden = '' 
    for character in word: 
     hidden += character if character in guesses else ' _ ' 
    return hidden 

print(hidden_word(word, guesses)) 
guesses.append('3') 
print(hidden_word(word, guesses)) 
+0

Ok thanks @wwiii – M01