#python
#python
Вопрос:
В моей программе hangman возникла проблема с поиском слова из более чем 2 двойных букв.
ПРИМЕР: если бы у меня было aabc
или aaabc
в моем списке угаданных слов, то, я думаю, a
b
c
это не скажет мне, что я прав. Но если у меня было abc
в guess wordlist, и я угадываю a
b
c
, тогда я прав.
Вот какой у меня код:
while keep_playing:
wordlist=["butterfly","tree","circumstances","jinrikisha"]
word=choice(wordlist)
word_len=len(word)
guesses=word_len * ['_']
max_incorrect=7
alphabet="abcdefghijklmnopqrstuvxyz"
letters_tried=""
number_guesses=0
letters_correct=0
incorrect_guesses=0
print_game_rules(max_incorrect,word_len)
while (incorrect_guesses != max_incorrect) and (letters_correct != word_len):
clues()
letter=get_letter()
if len(letter)==1 and letter.isalpha():
if letters_tried.find(letter) != -1:
print "You already picked", letter
else:
letters_tried = letters_tried letter
first_index=word.find(letter)
if first_index == -1:
incorrect_guesses= incorrect_guesses 1
print "The",letter,"is not the mystery word."
else:
print"The",letter,"is in the mystery word."
letters_correct=letters_correct 1
for i in range(word_len):
if letter == word[i]:
guesses[i] = letter
else:
print "Please guess a single letter in the alphabet."
Посмотрите, как во всем моем списке слов было более 2 двойных букв, и никогда не говорите мне, что я угадал правильно, даже если я угадал все буквы.
Я знаю, что если в слове len буква больше 2 (как двойная буква), это неправильно, но как я могу это исправить?
Ответ №1:
Конечное условие неверно, потому что каждый раз letters_correct
увеличивается только на единицу (даже если буква встречается несколько раз).
Я бы изменил конечное условие [победы] на «когда в guesses
нет _ ‘s», что означает, что все _ ‘s были заменены, что означает… (также обязательно учитывайте входную фразу «hello world» [и подобное] при генерации guesses
, если это имеет значение).
Счастливой домашней работы.
Бонусные баллы за то, что программа стала более «модульной»: тривиальное изменение заключается в том, чтобы заставить основной цикл (с условием проверки победы) вызывать метод, который запрашивает букву, а затем обновляет отображение.