2017-02-14 10 views
0

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

secret_words_list = ['voldemort', 'hogwarts'] 
def hangman(): 
    lives = 5 
    while lives >= 0: 
     answer = random.choice(secret_words_list) 
     guess = raw_input('Write your answer here: ') 
     hangman_display = '' 
     for char in answer: 
      if char in guess: 
       hangman_display += char 
       lives -= 1 
      elif char == ' ': 
       hangman_display += char 
      else: 
       hangman_display += "-" 
       lives -= 1 
     if hangman_display == answer: 
      print("You win") 
    print(hangman_display) 
+2

может быть, потому что вы забираете жизнь на каждый символ, кроме ''? – Julien

+0

Возможно, вы можете увидеть это: caimaoy

+0

Для каждой проверки чар, вы уменьшили жизнь, вместо этого включите это после цикла for (один раз за итерацию)? – Vinay

ответ

0
import random 
secret_words_list = ['voldemort', 'hogwarts'] 
def hangman(): 
    lives = 5 
    while lives >= 0: 
     answer = random.choice(secret_words_list) 
     guess = raw_input('Write your answer here: ') 
     hangman_display = '' 
     for char in answer: 
      if char in guess: 
       hangman_display += char 
       #lives -= 1 
      elif char == ' ': 
       hangman_display += char 
      else: 
       hangman_display += "-" 
       #lives -= 1 
     if hangman_display == answer: 
      print("You win") 
      break 
     else: 
      lives -=1 
    print(hangman_display) 

hangman() 

Я din't понимаю ваше точное требование, но это то, что вы ищете?

Взаимодействие программы было то, что, как показано ниже,

Write your answer here: vol 
-o------ 
Write your answer here: hog 
hog----- 
Write your answer here: hogwart 
hogwart- 
Write your answer here: hogwarts 
You win 
hogwarts 
0

Причина, почему он внезапно заканчивается, потому что это проверка на посимвольно, а не проверять слово целиком, то решить, если предположение было неверным.

Here's my code for this solution, documented so you can understand:

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

Вы можете видеть, что это то, что я делаю с «правильной» переменной, которую я создаю перед циклом, и проверить следующее.

Надеется, что это помогает^^ Connor

редактировать:.

я собираюсь разбить это вниз немного, так что это не огромная свалка: P

Проверьте код, если вы не можете понять это.

Вы получаете вход, проверяете, что это одна буква, и делайте doohickey с дисплеем.

проверки по каждому характера ...

#we need to check if we need to take a life away 
correct = False 

Это где создается «переключатель» Я говорил о том, только булеву переменную.

#loop through the word to guess, character by character. 
for char in word: 
    #if the character is in the old display, add it to the new on. 
    if char in lastdisplay: 
     display += char 

Здесь, если персонаж был отображен заранее, мы выведем его на новый дисплей.

#if the character is in the guess, add it to the display. 
    elif char in guess: 
     display += char 
     #we made a correct guess! 
     correct = True 

Если угадали характер есть характер, который мы в настоящее время проверки добавить его на экран, и переверните переключатель в «True»

#otherwise we need to add a blank space in our display. 
    else:    
     if char == ' ': 
      display += ' ' #space 
     else: 
      display += '_' #empty character 

В противном случае, ничего не произошло, добавьте в пространстве/blank и продолжить цикл.

#if we didn't get a correct letter, take a life. 
if not correct: 
    lives -= 1 

Здесь были мы проверяем «переключатель», если это «True», мы не должны принимать жизнь,

В противном случае «переключатель„False“, и мы берем жизнь ,

+0

Большое вам спасибо !!!!! –