Учусь по книге "Учим Python, делая крутые игры" Код из книги не работает

Andrey Pokatskiy

Новичок
Пользователь
Фев 23, 2021
1
0
1
создаю игру Виселица по книге эла свейгарта "Учим Python, делая крутые игры" Код не работает как надо. Помогите пожалуйста
import random
HANGMAN_PICS = ['''
+---+
|
|
|
===''', '''
+---+
O |
|
|
===''', '''
+---+
O |
| |
|
===''', '''
+---+
O |
/| |
|
===''', '''
+---+
O |
/|\ |
|
===''', '''
+---+
O |
/|\ |
/ |
===''', '''
+---+
O |
/|\ |
/ \ |
===''']
words = 'аист акула бабуин баран барсук бобр бык верблюд волк воробей ворон выдра голубь гусь жаба зебра змея индюк кит кобра коза козёл койот корова кошка кролик крыса курица лама ласка лебедь лев лиса лосось лось лягушка медведь моллюск моль мул муравей мышь норка носорог обезьяна овца окунь олень орёл осёл панда паук питон попугай пума сёмга скунс собака сова тигр тритон тюлень утка форель хорёк черепаха ястреб ящерица'.split()
def getRandomWord(wordList):
# Эта функция возвращает случайную строку из переданного списка
wordIndex = random.randint(0, len(wordList) - 1)
return wordList[wordIndex]
def displayBoard(missedLetters, correctLetters, secretWord):
print(HANGMAN_PICS[len(missedLetters)])
print()
print('Ошибочные буквы:', end=' ')
for letter in missedLetters:
print(letter, end=' ')
print()
blanks = '_' * len(secretWord)
for i in range(len(secretWord)): # Заменяет пропуски отгаданными буквами
if secretWord in correctLetters:
blanks = blanks[:i] + secretWord + blanks[i+1:]
for letter in blanks: # Показывает секретное слово с пробелами между буквами
print(letter, end=' ')
print()
def getGuess(alreadyGuessed):
#Возвращает букву, введёную игроком. Эта функция проверяет, что игров ввёл только одну букву и ничего больше.
while True:
print('Введите букву.')
guess = input()
guess = guess.lower()
if len(guess) != 1:
print('Пожалуйста, введите одну букву.')
elif guess in alreadyGuessed:
print('Вы уже называли эту букву. Назовите другую.')
elif guess not in 'абвгдеёжзийклмнопрстуфхцчшщъыьэюя':
print('Пожалуйста, введите БУКВУ.')
else:
return guess
def playAgain():
# Эта функция возвращает значение True, если игрок хочет сыграть заново; в противном случае возвращает значение False.
print('Хотите сыграть ещё? (да или нет)')
return input().lower().startswith('д')

print('В И С Е Л И Ц А ')
missedLetters = ''
correctLetters = ''
secretWord = getRandomWord(words)
gameIsDone = False
while True:
displayBoard(missedLetters, correctLetters, secretWord)
# Позволяет игроку ввести букву
guess = getGuess(missedLetters + correctLetters)
if guess in secretWord:
correctLetters = correctLetters + guess
# Проверяет, выйграл ли игрок.
foundAllLetters = True
for i in range(len(secretWord)):
if secretWord not in correctLetters:
foundAllLetters = False
break
if foundAllLetters:
print('ДА! Секретное слово - "' + secretWord + '"Вы угадали!')
gameIsDone = True
else:
missedLetters = missedLetters + guess
# Проверяет, превысил ли игрок лимит попыток и проиграл.
if len(missedLetters) == len(HANGMAN_PICS) - 1:
displayBoard(missedLetters, correctLetters, secretWord)
print('Вы исчерпали все попытки!\n Неугаданно букв:' + str(len(missedLetters)) + ' и угаданно букв: ' + str(len(correctLetters)) + '. Было загаданно слово "' + secretWord + '"')
gameIsDone = True
# Запрашивает, хочет ли игрок сыграть заново (только если игра завершена).
if gameIsDone:
if playAgain():
missedLetters = ''
correctLetters = ''
gameIsDone = False
secretWord = getRandomWord(words)
else:
break
 

regnor

Модератор
Команда форума
Модератор
Июл 7, 2020
2 646
472
83
 

Форум IT Специалистов