Найти тему
Bednyakov

Python с нуля в 35 лет. Пишем игру.

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

А сегодня будет написана программа, которой я научился, прочитав 100 страниц книги Майкла Доусона "Программируем на python".

Не будем терять время, но перед тем, как писать код, напишем программу на псевдокоде. То есть распишем алгоритм действия программы на человеческом языке, а потом будем переводить его на компьютерный. Алгоритм пишем по правилам python, со всеми отступами и строчными буквами. Кстати, если бы вы писали алгоритм сразу на английском, переводить на компьютерный было бы значительно проще. Приступим:

приветствовать игрока и объяснить правила
выбрать случайное число в диапазоне от 1 до 100
предложить игроку отгадать число
приравнять порядковый номер попытки к 1
если число, предложенное игроком, не совпадает с загаданным
если оно больше загаданного
дать подсказку (Меньше...)
иначе
дать подсказку (Больше...)
вновь предложить игроку отгадать число
увеличить порядковй номер попытки на 1
поздравить игрока с победой
сообщить игроку, сколько попыток ему понадобилось на отгадывание числа

Должно быть вы обратили внимание на отступы. Всего в одной строке использовалось до трех отступов, каждый из которых равен четырём пробелам. Отступы нужны для создания блоков кода. Каждый блок (кусок кода с отступом) - единая конструктивная единица и не только визуально, но и логически.

А теперь пишем в IDLE и начнем с комментариев. Напомню, они всегда пишутся после знака # и компьютер их не читает, они нужны людям, чтобы было проще разобраться о чем тот или иной кусок кода. Пишем:

# Отгадай число
#
# Компьютер выбирает случайное число в диапазоне от 1 до 100
# Игрок пытается отгадать это число, и компьютер говорит,
# предложение больше/меньше, чем заданное число,
# или произошло угадывание

Теперь нам нужно импортировать модуль генерации случайных чисел "random". Питон содержит в себе файлы с готовым кодом для использования в других программах, один из таких мы импортируем в нашу программу, написав:

import random

Дальше выведем игроку на экран правила:

print('\tДобро пожаловать в игру "Отгадай число"!')
print('nЯ загадал натуральное число из диапазона от 1 до 100.')
print('Постарайтесь отгадать его за минимальное число попыток.\n')

Напомню, \n и \t - это escape последовательности. \n перемещает на следующую строку, а \t делает отступ. Нужно это для красоты и читабельности. И напоминаю про кавычки, можно использовать одиночные, как у меня, а можно двойные (" "), разницы нет.

Теперь создадим переменные и присвоим им начальные значения:

# начальные значения
the_number = random.randint(1, 100)
guess = int(input('Ваше предложение: '))
tries = 1

Переменная the_number будет содержать рандомное число от 1 до 100, порожденное функцией randit() и аргументами 1, 100. Как вы заметили, функция randit() пишется через точку после названия модуля, из которого она вызывается (название_модуля.имя_функции) - этот способ доступа называется точечной нотацией. Так компьютер понимает, о чьей randit() идёт речь и откуда её звать. А один модуль может содержать разное количество функций.

После того как переменная the_number приняла значение, функция input() получает от пользователя его первое предполагаемое значение, а функция int() переводит его из строчного в числовое, иначе проводить арифметические вычисления с ним не получится. И это число присваивается переменной guess.

Ну а переменная tries будет содержать количество попыток. Изначально она имеет значение 1.

Теперь приступаем к основной части программы. Она будет содержать цикл, который будет исполняться ровно до тех пор, пока условие его выполнения не будет исполнено, то есть порожденное компьютером число не будет отгадано. При этом в теле цикла загаданное и названое числа будут каждый раз сравниваться, и в зависимости от того, больше или меньше предположение относительно загаданного числа, будут выводиться соответствующие подсказки (больше/меньше), а счетчик попыток будет увеличиваться на 1. Пишем:

# цикл отгадывания
while guess != the_number:
if guess > the_number:
print('Меньше...')
else:
print('Больше...')
guess = int(input('Ваше предположение: '))
tries += 1

Еще раз обратите внимание на отступы. Их тут до двух и в каждом по четыре пробела. А если дословно перевести, что мы написали, получится так:

  • пока guess неравен the_number происходит следующее, что в теле цикла (т.е. отбито отступами):
  • если guess больше the_number:
  • печатай "Меньше..."
  • иначе:
  • печатай "Больше..."
  • guess присваивается вводимое пользователем значение
  • значение tries прибавляет к себе 1

Рано или поздно игрок отгадает число, то есть guess станет равным tne_number и цикл завершится. Тут понадобится код, который выведет на экран число используемых игроком попыток и поздравления. Пишем:

print('Вам удалось отгадать число! Это в самом деле ', the_number)
print('Вы затратили на отгадывание ', tries, ' попыток!\n')

А завершает всё строка, закрывающая программу:

input('\n\nНажмите Enter, чтобы выйти.')

Получиться у вас должно было что-то похожее на это.

Код в среде программирования
Код в среде программирования

Не пугайтесь моей красивой темной темы, я просто скачал себе другую среду программирования, называется PyCharm. Я ведь всё-таки почти про, два дня в деле.

Если у вас будут вопросы или код не сработает, присылайте, с удовольствием помогу.

До встречи.