Обучение программированию может быть увлекательным и интерактивным благодаря созданию проектов. Вы можете сразу же применить свои новые знания и посмотреть, как различные аспекты работают вместе. В этом уроке я расскажу о том, как создать интерактивную игру на угадывание чисел, которую вы можете запустить в своем терминале.

Игра проста — наша программа сгенерирует случайное число от 1 до 100 и предложит пользователю угадать. Если догадка выше секретного числа, она вернет «Выше», а если меньше — «Ниже». Это будет продолжаться до тех пор, пока пользователь не угадает правильное число.

Это упражнение отлично подходит для изучения и практики использования терминала, функций и циклов Python, а также модуля random.

Давайте сделаем игру!

Модуль random содержит генераторы случайных чисел — они не совсем случайные, но я никому не скажу, если вы этого не сделаете. Кроме того, это встроенный модуль Python, поэтому загрузка не требуется. Спасибо, питон!

Начнем с создания каталога для нашего проекта и файла python. В терминале введите:

mkdir python-games

cd python-games

touch number_guesser.py

Теперь у нас должен быть пустой файл python внутри нашего нового каталога. Откройте файл number_guesser.py в своей любимой среде IDE или текстовом редакторе — хотя я настоятельно рекомендую скачать IDE (atom, PyCharm и т. д.), если вы планируете делать более сложные проекты. У вас должно получиться что-то вроде этого:

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

Несмотря на то, что random является встроенным модулем Python, нам все равно нужно импортировать его в наш файл, чтобы получить доступ. Начните с добавления

import random

Теперь давайте спланируем логику, которая нужна нашей функции. Функция должна:

  1. Сгенерировать случайное число
  2. Предложите пользователю ввести предположение и получить ввод
  3. Сравните ввод со случайным числом и определите, больше оно или меньше.
  4. Вывести, если число больше или меньше предположения
  5. Повторяйте до тех пор, пока догадка не станет правильной, затем выйдите из игры.

Это, вероятно, кажется пугающим для начинающего программиста, но к концу этого руководства все соберется воедино. Если это не так, вы можете отправить мне гневное письмо. Или задавайте вопросы.

Давайте создадим нашу функцию. Если вы не знакомы с функциями Python, они представляют собой именованные блоки кода, которые выполняют определенную задачу и могут принимать входные данные (аргументы), выполнять некоторую логику и могут возвращать значения.

Теперь идет создание нашей функции. def — это ключевое слово Python, обозначающее определение, которое означает начало функции. Функция должна иметь имя, отражающее ее назначение, и быть в змеином регистре (все строчные буквы и символы подчеркивания между словами). () содержит аргументы, если они есть у функции, а у нас их нет. : означает конец объявления функции. Текст в тройных кавычках называется строкой документации и предназначен для понимания человеком назначения функции.

Давайте заставим нашу функцию что-то делать. Начните с написания заявления, описывающего игру — оно будет напечатано при запуске игры.

print("Guess a number between 1 and 100. I'll tell you if the number I chose is lower or higher than your guess.")

print — это встроенный метод Python, который отображает текст в терминале. Теперь нам нужно объявить некоторые переменные. Одна переменная необходима для хранения значения случайного числа, которое сгенерирует код. Другой необходим для хранения значения наших предположений — эта переменная будет обновляться с каждым предположением.

rand_number = random.randint(1, 100)

rand_number — это имя нашей первой переменной. randint — это метод в модуле random. В этом случае он принимает два аргумента — нижнюю границу диапазона и верхнюю границу. random.randint(1, 100) вернет случайное целое число от 1 до 100 (включительно).

guess = None

guess — это имя переменной, в которой будет храниться последняя догадка, введенная игроком. Начнем с того, что установим его в None, специальное значение в Python, потому что игрок еще не угадал.

Теперь нам нужно создать цикл, потому что нам нужно запускать один и тот же код — запрашивать новое предположение, извлекать его и определять, совпадает ли оно с выбранным числом — снова и снова, пока не будет выполнено условие. В нашем случае условие будет, когда значение guess совпадает со значением rand_number.

Для этого мы будем использовать цикл while, так как мы должны проходить цикл неопределенное количество раз, пока предположение не станет правильным. Сформулируем наше условие while:

while rand_int != guess:

Здесь мы говорим, что хотя наше значение rand_int не равно нашему значению guess, выполняем код внутри цикла. С отступом под нашим оператором while мы добавляем

s = input("Your guess: ")

guess = int(s)

Это создает новую переменную s . Метод input отобразит текст «Ваша догадка:» и будет ждать, пока игрок введет догадку. Значение s будет значением введенного предположения. Поскольку возвращаемые данные будут в строковом (текстовом) формате, а значение rand_number является целым числом, нам нужно привести переменную s к целому числу — это то, что делает int(s). Это важно для сравнений, которые мы будем проводить.

«Если операторы» будут использоваться для сравнения между rand_number и guess. Мы хотим предпринимать различные действия на основе результатов сравнения. Например, если rand_int больше, чем guess, мы хотим напечатать «Выше», чтобы игрок знал, что его предположение слишком мало, и наоборот.

if устанавливает наше первое условие, elif (обозначает иначе, если) устанавливает наше второе условие, а else — это условие, если ни условие if, ни условие elif не были выполнены.

Ты сделал это! Вы написали функцию Python! Каково это?!

Нам нужно добавить еще две строки кода, которые будут вызывать функцию при выполнении файла. Иначе бы ничего не случилось и ты бы на меня разозлился.

if __name__ == ‘__main__’:

Эта строка проверяет, является ли имя этого файла именем исполняемого файла. В строке с отступом под нашим оператором if добавьте

create_number_guesser()

Это вызывает нашу функцию.

Обязательно сохраните файл и вернитесь в терминал. Перейдите в каталог, содержащий файл number_guesser.py, если вы еще этого не сделали. Тип

python3 number_guesser.py

и нажмите Enter. Вы должны получить сообщение «Угадай число между…», которое мы установили в начале нашей функции, а затем вам будет предложено «Ваше предположение:». Введите число и нажмите Enter. Вы играете в игру, которую написали ВЫ. Это весело? Нет, не совсем. Но вы запрограммировали игру! Это потрясающе.

Заставьте своих друзей играть в нее! Заставьте свою семью играть! Заставьте странную даму по соседству сыграть в нее!

Для дальнейшего изучения вы можете сделать функцию более надежной, добавив предупреждение, если кто-то вводит предположение, которое не является числом или не находится в указанном диапазоне. Пересоздайте игру, но сделайте так, чтобы игрок придумывал число, а компьютер должен был его угадать. Добавьте ограничение на количество догадок, которые может сделать игрок. Варианты безграничны! Ну, может быть, не безгранично, но вы, безусловно, можете многое на этом построить.

Комментируйте с любыми вопросами, разъяснениями или проблемами! Я изголодался по человеческому общению, так что спрашивайте!

До свидания, мои дорогие друзья.