Пишем игру «Угадай число» на Python
Лучший способ начать программировать: написать игру, в которую можно сразу сыграть. «Угадай число» подходит идеально: она короткая, в ней есть все основные конструкции языка, и её можно улучшать бесконечно. Пишем по шагам на Python и объясняем каждую строку.
Для 6–11 классов, кто только начинает программировать.
Что будет делать игра
Компьютер загадывает случайное число от 1 до 100. Игрок вводит догадку, а компьютер отвечает «больше» или «меньше». Так продолжается, пока число не угадано, а в конце игра сообщает, сколько понадобилось попыток.
Чтобы запустить код, нужен установленный Python или любой онлайн-редактор для Python. Код пишется в файл, например game.py, и запускается кнопкой Run или клавишей F5.
Шаг 1. Загадываем число
import random secret = random.randint(1, 100) print('Я загадал число от 1 до 100. Угадай!')
Первая строка подключает модуль random, в котором есть всё для случайных чисел. Функция randint(1, 100) возвращает случайное целое число от 1 до 100 включительно. Мы сохраняем его в переменную secret, «секрет». Переменная это ящик с именем, в котором лежит значение.
Шаг 2. Одна попытка
guess = int(input('Твоё число: ')) if guess < secret: print('Больше!') elif guess > secret: print('Меньше!') else: print('Угадал!')
Функция input показывает подсказку и ждёт, пока игрок что-то напечатает. Она всегда возвращает строку, текст, поэтому мы оборачиваем её в int, чтобы превратить текст «42» в число 42. Без этого сравнивать с secret было бы нельзя.
Дальше конструкция if-elif-else: если догадка меньше секрета, пишем «Больше!», иначе если больше, пишем «Меньше!», иначе, то есть в оставшемся случае равенства, «Угадал!». Обратите внимание на отступы: строки внутри условия сдвинуты на четыре пробела. В Python отступы обязательны, по ним язык понимает, что к чему относится.
Шаг 3. Цикл и счётчик
Одной попытки мало. Нужно повторять, пока игрок не угадает. Для этого есть цикл while.
import random secret = random.randint(1, 100) tries = 0 print('Я загадал число от 1 до 100. Угадай!') while True: guess = int(input('Твоё число: ')) tries += 1 if guess < secret: print('Больше!') elif guess > secret: print('Меньше!') else: print('Угадал за', tries, 'попыток!') break
while True означает «повторять бесконечно». Выход из цикла даёт команда break, и она стоит только в ветке «угадал». Переменная tries считает попытки: перед циклом она 0, и каждая попытка прибавляет к ней единицу. Запись tries += 1 то же самое, что tries = tries + 1.
Вот и вся игра, около пятнадцати строк. Запустите её и сыграйте пару раз.
Шаг 4. Защита от ошибок
Попробуйте ввести вместо числа слово «привет». Программа упадёт с ошибкой ValueError: int не смог превратить слово в число. Хорошая программа должна это переживать.
text = input('Твоё число: ') if not text.isdigit(): print('Нужно ввести число!') continue guess = int(text)
Эти строки заменяют первую строку внутри цикла. Метод isdigit проверяет, что строка состоит только из цифр. Если нет, выводим предупреждение, а команда continue сразу переходит к следующему повтору цикла, не засчитывая попытку. Так программа становится устойчивой к опечаткам.
Как выигрывать: двоичный поиск
Есть стратегия, которая гарантирует победу не больше чем за 7 попыток. Каждый раз называйте середину оставшегося промежутка. Сначала 50. Если «больше», значит, число от 51 до 100, называйте 75. И так далее: каждый ответ отбрасывает половину вариантов, а 2⁷ = 128 больше 100.
Это называется двоичным поиском, и это один из самых важных алгоритмов в информатике. Подробнее о нём и других алгоритмах в статье об алгоритмах вокруг нас.
Шаг 5. Меняемся ролями
Теперь загадываете вы, а угадывает компьютер, причём той самой стратегией. Вы отвечаете буквами: «б» больше, «м» меньше, «д» да.
low, high = 1, 100 tries = 0 print('Загадай число от 1 до 100, я угадаю.') while True: mid = (low + high) // 2 tries += 1 answer = input(f'Это {mid}? (б/м/д): ') if answer == 'б': low = mid + 1 elif answer == 'м': high = mid - 1 else: print('Ура! Угадал за', tries, 'попыток.') break
Компьютер хранит границы промежутка low и high, где может быть число. Каждый раз он называет середину mid, а после вашего ответа сдвигает одну из границ. Оператор // делит нацело, чтобы середина была целым числом. А f-строка f'Это {mid}?' подставляет значение переменной прямо в текст.
Попробуйте обмануть компьютер, отвечая противоречиво. В какой-то момент low станет больше high. Хорошее упражнение: допишите проверку, которая в этом случае скажет «Ты жульничаешь!».
Как улучшить игру
- Уровни сложности: от 1 до 10, до 100, до 1000.
- Ограничение попыток: проигрыш, если не угадал за 10.
- Рекорд: запоминать лучший результат и сообщать, если побит.
- Подсказка «горячо-холодно»: если разница меньше 5, писать «Горячо!».
- Повтор игры: в конце спрашивать «Сыграем ещё?» и запускать заново.
Каждое улучшение тренирует новую конструкцию языка. Почему для таких первых проектов выбирают именно Python, рассказали в статье о Python.
Разберём на занятии
Занимаемся по всем школьным предметам с 4 по 11 класс: живые занятия, общая доска и домашка, которую проверяет тот же преподаватель.
Первое занятие бесплатное: можно посмотреть формат вместе с ребёнком и решить, подходит ли он.
Частые вопросы
Почему в коде английские слова, а сообщения по-русски?
Команды языка, такие как print, input, while, всегда английские. А текст в кавычках может быть на любом языке: это просто строки, которые программа выводит на экран.
Что делать, если программа выдаёт ошибку?
Прочитать последнюю строку сообщения: там написан тип ошибки и номер строки. Чаще всего у новичков это неправильные отступы, забытое двоеточие после if или while и незакрытые кавычки.