Для тех, кто не знает, «Палач» — это игра в угадывание слов, в которую традиционно играют с помощью ручки и бумаги. Слово выбирается тайно, и единственное, что о нем известно, — это количество букв в нем. Затем игрок угадывает букву, и, если она есть в слове, раскрывается ее позиция. Неправильные предположения засчитываются игроку. Если вы угадаете слово, которое вы выиграете, сделайте слишком много неправильных предположений, и игра будет окончена.
Хорошо, теперь мы все знаем, что собой представляет игра, давайте посмотрим, как она может выглядеть на Python.
Word: --- Wrong guesses: Guess a letter > a Word: -a- Wrong guesses: Guess a letter > g Word: -a- Wrong guesses: g Guess a letter > t Word: -at Wrong guesses: g Guess a letter > c Word: cat Well done! You guessed the word with 1 wrong guesses.
Давайте запустим новую программу на Python, чтобы создать эту игру. Нам понадобится слово, чтобы угадать, и способ отслеживать правильные и неправильные предположения.
word = "something" guessed_letters = [] incorrect_letters = []
Что за квадратные скобки? Это говорит Python о новом списке. Список — это переменная, которая может хранить более одного значения. В данном случае мы собираемся хранить буквы в списках, но Python позволит вам поместить туда что угодно.
По сути, наша игра будет представлять собой цикл, который показывает игроку уже угаданные части слова, а затем просит его еще раз угадать. Для реализации этого мы можем использовать цикл while. Но каким должно быть наше условие для завершения цикла? Итак, есть две причины, по которым мы хотели бы закончить игру:
Первое условие выполняется, когда количество букв в списке догадавшихся_букв совпадает с количеством букв в слове. Поэтому наш цикл должен работать, пока это не так. В Python это можно записать как len(угаданные_буквы) != len(слово). Функция len() сообщает вам длину списка или строки.
Второе условие выполняется, когда количество букв в списке неправильные_буквы превышает максимальное количество допустимых предположений. Поэтому наш цикл также должен выполняться, хотя это не так. В Python это можно записать как len(incorrect_letters)
Сводя все это вместе, наш цикл while начинается так.
# Game loop. MAX_WRONG_GUESSES = 5 while len(guessed_letters) != len(word) and len(incorrect_letters)Внутри нашего цикла нам нужно будет сделать четыре вещи:
- Покажите слово игроку.
- Показать список неправильных предположений.
- Узнайте предположение игрока.
- Запишите, верное или неправильное предположение.
Давайте разберемся с ними по порядку.
Показываю слово
Нам нужно показать слово игроку, но должны быть показаны только те буквы, которые он правильно угадал. Остальные буквы следует заменить тире – символом. Давайте напишем функцию, которая сделает это за нас. Ему потребуются два аргумента: отображаемое слово и список правильно угаданных букв.
def show_word(word, letters): print("Word: ", end="") for letter in word: if letter in letters: print(letter, end="") else: print("-", end="") print()Мы перебираем каждую букву в слове, используя цикл for. Затем мы проверяем, есть ли буква в списке букв, используя оператор in. Если да, то мы его распечатываем. Если нет, вместо этого мы печатаем тире. Мы используем аргумент end="" в вызовах печати, чтобы остановить печать новой строки.
Показаны неверные предположения
Давайте напишем еще одну функцию, которая будет показывать неверные предположения. Этот намного проще предыдущего. Он принимает единственный аргумент — список неверных предположений — и снова использует цикл for для вывода каждого из них.
def show_wrong_guesses(guesses): print("Wrong guesses: ", end="") for letter in guesses: print(letter, end="") print()Получение предположения игрока
Наша следующая функция получит предположение от игрока. Чтобы убедиться, что игрок действительно что-то вводит, мы собираемся использовать цикл while. Мы будем продолжать спрашивать их о предположении, пока они не введут его. Наконец, предположение должно состоять из одной буквы, поэтому мы возвращаем только первый введенный символ.
def get_letter(): letter = "" while letter == "": letter = input("Guess a letter > ") return letter[0]Запись предположения
Как только мы получим письмо от игрока, мы сможем решить, какой из двух наших списков нам тоже следует добавить. Если буква есть в слове, это верная догадка. Мы можем добавить его в список догадавшихся_букв, используя метод Append(). Если его нет в слове, его следует добавить в список неправильные_буквы. Но нам также следует проверить, не была ли буква угадана ранее. Мы делаем это, проверяя, является ли это одним из списков с оператором in. (Таким образом, каждое предположение записывается только один раз.)
if letter in word and letter not in guessed_letters: guessed_letters.append(letter) elif letter not in incorrect_letters: incorrect_letters.append(letter)Завершение игры
И последнее, но не менее важное: нам нужно отобразить подходящее сообщение игроку по завершении игрового цикла. В зависимости от того, угадали они слово или нет, сообщение будет об успехе или неудаче. Как мы узнаем, правильно ли они угадали слово? Количество букв в списке догадавшихся_букв будет той же длины, что и слово.
# End of game message. if len(guessed_letters) == len(word): show_word(word, guessed_letters) print(f"Well done! You guessed the word with {len(incorrect_letters)} wrong guesses.") else: print(f"Too many wrong guesses! The word was '{word}'")Вот и все! У нас есть полная игра Hangman. Чтобы сделать игру сложнее или проще, измените количество разрешенных неправильных предположений.
Полный список программ
def show_word(word, letters): print("Word: ", end="") for letter in word: if letter in letters: print(letter, end="") else: print("-", end="") print() def show_wrong_guesses(guesses): print("Wrong guesses: ", end="") for letter in guesses: print(letter, end="") print() def get_letter(): letter = "" while letter == "": letter = input("Guess a letter > ") return letter[0] word = "something" guessed_letters = [] incorrect_letters = [] # Game loop. MAX_WRONG_GUESSES = 5 while len(guessed_letters) != len(word) and len(incorrect_letters)
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3