Давай поиграем в игру "Палач" с Python

Кто хоть раз не играл в игру «Палач»? Это был идеальный побег от скучного урока, и вам потребовались только одна бумага и ручка. Идея очень проста: один игрок думает над словом, а другие должны отгадывать букву за буквой, что и есть слово. Максимальное количество ошибочных попыток зависит от того, как вы решите построить эшафот, однако здесь мы установим его равным 10.

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

В этой статье я собираюсь создать с нуля игру «Палач» на Python, где слово будет решать игрок. Для этого я сначала загрузил из модуля nltk.corpus список из 236736 английских слов, среди которых Python определит.

import nltk
nltk.download('words')
from nltk.corpus import words
word_list = words.words()

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

  • угадайте: пустой список, который будет заполнен моими угаданными буквами
  • секрет: это секретное слово, которое мы хотим угадать
  • length_word = количество символов секретного слова
  • abc = мой алфавит
  • letter_storage = пустой список, куда будут добавлены все угаданные буквы (как неправильные, так и правильные).
import random
guess = []
# lets randomize single word from the list
secret = random.choice(word_list) 
length_word = len(secret)
abc = "abcdefghijklmnopqrstuvwxyz"
letter_storage = []

Теперь я собираюсь определить три функции для своей цели:

  • greetings (): он создаст первый контакт с пользователем, спросит его имя и хочет ли он играть
def greetings():
    print("Hello Mate!\n")
    while True:
          name = input("Please enter your name\n").strip()
          if name == '':
              print("You can't do that! No blank lines")
          else:
              choice=input('Do you want to play Hangman?\n').lower()
              if choice=='no' or choice=='n':
                print("That's a shame! Have a nice day")
                break
              elif choice=='yes' or choice=='y':
              print("Awesome! So let's start! If you want to exit,  
              just type 'bye'")
                break
                
              else:
                  print("Please Answer only Yes or No")
                  continue
  • structure (): отобразит структуру секретного слова, заменив согласные на «-» и гласные на «*». Обратите внимание: поскольку вы собираетесь использовать эти функции для многих совпадений, в самом начале функции я очистил список guess [], чтобы он не содержал символы предыдущих секретных слов.
import random
vowels=list(['a','e','i', 'o', 'u'])
def structure():
    #let's remove the previous letter in our guess word
    guess.clear()
    for character in secret: 
        if character in vowels:
            guess.append('*') #if in that position there is a vowel
        else:
            guess.append('-') #if in that position there is a  
                              #consonant
    print("Ok, so the word you need to guess has {}    
          characters".format(length_word))
    print("Be aware that you can enter only 1 letter from a-z\n\n")   
    print(guess)
  • guessing (): это функция, которая будет определять, содержится ли наша угаданная буква в секретном слове. Он спрашивает нас о нашем предположении, а затем проверяет, хотите ли вы выйти из игры ('пока'), является ли введенная буква и была ли эта буква уже выбрана (и, следовательно, сохранена в letter_storage [] ). Затем, если буква находится в секретном слове, она устанавливает ее в правильную позицию в списке guess [], в противном случае она сообщает нам, что мы ошибались, и увеличивает количество ошибочных попыток на 1.
def guessing():
    letter_storage.clear() #emptying the list
    guess_taken = 1
    while guess_taken < 10:
       guess_letter = input("Pick a letter\n").lower()
       if guess_letter=='bye':
            print('Goodbye!')
            break
       elif not guess_letter in abc: #checking input
            print("Enter a letter from a-z alphabet")
#checking if letter has been already used   
       elif guess_letter in letter_storage: 
            print("You have already guessed that letter!")
       else:
            letter_storage.append(guess_letter)
            if guess_letter in secret:
                print("You guessed correctly!")
                for _i in range(length_word): 
                    if secret[_i] == guess_letter:
                        guess[_i] = guess_letter  
                print(guess)
#updating the list by substituting - or * with the right guess
                if not ('-' and '*') in guess:
                    print("You won!")
                    break
            else:
                print("The letter is not in the word. Try 
                           Again!")
                guess_taken += 1
                if guess_taken == 10:
                    print(" Sorry Mate, You lost :<! The secret word 
                           was {}".format(secret))

Теперь мы можем запускать наши три функции одновременно следующим образом:

if __name__ == "__main__":
    greetings()
    structure()
    guessing()

Хороший! А теперь поиграем:

Должен признаться, я так плохо жульничал перед игрой (я мельком увидел секретное слово, позор мне), и я рад, что сделал это, так как понятия не имел, что такое мормаор. Для любопытных:

«Мормаор - шотландский дворянин, исполняющий обязанности старшего управляющего в провинции»

Вооружившись этими новыми знаниями, давайте проверим, что моя система побега работает:

И, наконец, давайте посмотрим, что произойдет, если мы сделаем более 10 попыток:

Здорово! Теперь вы можете повеселиться против Python, играя в игру «Палач». Надеюсь, вам понравилось чтение!