Я пытаюсь создать игру, в которой два пользователя вводят буквы, пока они не угадают секретное слово, но по некоторым причинам мои списки не обновляются должным образом. Допустим, секретное слово TOYS, если пользователь догадывается, что T отображает T _ _ _, а затем пользователь вводит R, поэтому он переключается на secondLoop, и пользователь входит в S, он говорит, что S не находится в слове и переходит к первому пользователю , Это игра-догадка, которая меняется между двумя игроками, и когда она меняется на второго игрока, она не работает по какой-то причине. Не могу понять, почему. Функция secondLoop имеет те же компоненты с дополнительными строками «#»Python две петли
ответ
В вашей функции secondLoop она, как представляется, называет себя рекурсивно навсегда. Это может быть причиной вашей ошибки. Я изменил рекурсивный сам вызов на оператор возврата и, похоже, работает нормально. Я прокомментировал изменения ниже, например ...
def secondLoop(enteredLetters,sentence,newSentence,lettersInWord):
print '--Player 2--'
number = len(sentence)
flag = True
while flag == True:
# changed input to raw_input
letter = raw_input("Enter letter: ")
if letter not in enteredLetters:
find = sentence.find(letter)
if find == -1:
print("Letter is not in word")
flag = False
# --- changed line below to return statement below it ---
#enteredLetters,newSentence,lettersInWord = secondLoop(enteredLetters,sentence,newSentence,lettersInWord)
return enteredLetters,newSentence,lettersInWord
else:
newSentence = ""
lettersInWord.append(letter)
for char in sentence:
if char in lettersInWord:
newSentence = newSentence + char
else:
newSentence = newSentence + "_ "
number = newSentence.count("_")
flag = True
elif letter in enteredLetters:
print ("The letter has been used")
flag = False
# --- changed line below to return statement below it ---
#enteredLetters,newSentence,lettersInWord = secondLoop(enteredLetters,sentence,newSentence,lettersInWord)
return enteredLetters,newSentence,lettersInWord
print (newSentence)
enteredLetters.append(letter)
sentence = 'TOYS'
enteredLetters = []
newSentence = '____'
lettersInWord = []
number = len(sentence)
while number != 0:
print '--Player 1--'
# changed input to raw_input
letter = raw_input("Enter letter: ")
if letter not in enteredLetters:
find = sentence.find(letter)
if find == -1:
print("Letter is not in word")
enteredLetters,newSentence,lettersInWord = secondLoop(enteredLetters,sentence,newSentence,lettersInWord)
else:
newSentence = ""
lettersInWord.append(letter)
for char in sentence:
if char in lettersInWord:
newSentence = newSentence + char
else:
newSentence = newSentence + "_ "
number = newSentence.count("_")
elif letter in enteredLetters:
print ("The letter has been used")
enteredLetters,newSentence,lettersInWord = secondLoop(enteredLetters,sentence,newSentence,lettersInWord)
print (newSentence)
enteredLetters.append(letter)
Нет, я не имел в виду, что когда я помещаю эти утверждения в свою функцию, это весь код, который я помещал с комментариями, а функция не вызывает себя, это была строка в основном только для вызовите функцию –
Изменения, которые вы сделали, по-видимому, не работают, и я не знаю, почему, если вызывать функцию, это то же самое, что и main. если это всего лишь один игрок, код работает отлично, но как только я делаю вызов второй функции, это беспорядок –
Можете ли вы предоставить копию вашего трассировки/сообщения об ошибке стека? – Genome
Хорошая структура программы делает жизнь намного проще:
from itertools import cycle
import string
UNKNOWN = "_"
ALWAYS_SEEN = set(" " + string.punctuation)
def get_letter(prompt):
while True:
ch = input(prompt).strip().upper()
if len(ch) == 1:
return ch
def seen_word(word, guessed):
return ''.join(ch if ch in guessed or ch in ALWAYS_SEEN else UNKNOWN for ch in word)
def play_hangman(word, players):
word = word.strip().upper()
guessed = set()
seen = seen_word(word, guessed)
for current_player in cycle(players):
while True:
print(seen)
ch = get_letter("{}: guess a letter: ".format(current_player))
if ch in guessed:
print("That letter has already been guessed!")
break
else:
guessed.add(ch)
if ch in word:
print("That's the way to do it!")
seen = seen_word(word, guessed)
else:
print("Sorry, that letter is not in the word.")
break
if seen == word:
print("Hurray! {} won!".format(current_player))
return current_player
def main():
word = "TOYS"
players = ["Player 1", "Player 2"]
play_hangman(word, players)
if __name__=="__main__":
main()
- 1. Python: две петли сразу
- 2. Как использовать две параллельные петли, Python?
- 3. Две независимые асинхронные петли в Python
- 4. Свяжите две петли foreach
- 5. Как совместить две петли
- 6. Производительность разваливается одной петли на две петли
- 7. две петли, но тета (n)?
- 8. объединить две петли в питона
- 9. Twig две петли в одном
- 10. CURL MULTI - почему две петли?
- 11. Объедините две петли в одну
- 12. Случайно создавая две петли PHP
- 13. Выполнить две петли над Уст.
- 14. Wordpress две петли на Индекс
- 15. Две петли в одной таблице
- 16. Javascript setTimeout на две петли
- 17. Wordpress - Две петли на author.php?
- 18. Две петли с итераторами STL
- 19. Можно запустить сразу две бесконечные петли?
- 20. Python две петли, работающие по одной итерации каждый за раз
- 21. Как использовать две разные петли в цикле for в python
- 22. Python: петли и шнуры
- 23. Логические внутренние петли? Или, скорее, две отдельные почти идентичные петли?
- 24. отступ петли в python
- 25. Анимация на холсте две петли сразу
- 26. две петли внутри одной таблицы тр
- 27. Две петли и move_uploaded_file, я немного смущен
- 28. сумма 1, 2, 3 ... Две петли
- 29. Как объединить эти две петли в одну?
- 30. попытка объединить две петли foreach PHP PDO
Либо вы не форматировать Ваш код правильно при отправке или ваш отступы из сильный удар. –
Почему у вас нет двоеточия после первого цикла? –
@ I.K. что лучше –