МУНИЦИПАЛЬНОЕ АВТОНОМНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ДОПОЛНИТЕЛЬНОГО ОБРАЗОВАНИЯ
«ЦЕНТР ДЕТСКОГО ТЕХНИЧЕСКОГО ТВОРЧЕСТВА»
Методическая разработка
«Проект на Python: "Игра: Угадай число" Сложная версия»
к дополнительной общеобразовательной
общеразвивающей программе
технической направленности
«Программирование на Python»
Возраст детей: 10-17 лет
Автор: Костычев Вадим Александрович
г. Заречный Пензенской области
2024 г.
В ходе изучения программирования на основе языка Python большую роль играет разработка проектов. Они позволяют отработать как навыки программирования, вспомнить работу различных функций, команд, развить навыки построения алгоритмов.
Целью данной разработки является повышение интереса учащихся к техническому творчеству посредством работы над проектом на языке Python.
Данная методическая разработка используется как обучающий пример для работы по дополнительной общеобразовательной общеразвивающей программе технической направленности «Программирование на Python». С их помощью учащиеся смогут применить теоретические знания на практике, построив сложные алгоритмы для решения собственных задач.
Самостоятельная разработка PET-проектов является неотъемлемой частью обучения программирования. Она помогает не только глубже вникнуть в работу языка программирования, но и изучить различные библиотеки, научить самостоятельно строить алгоритм. PET-проекты могут быть развлекательного характера, а могут выполнять определенную очень важную функцию – таким проектом можно поделиться с близкими, друзьями, коллегами или опубликовать в какой-либо социальной сети или форуме.
Данная методическая разработка предлагает один из возможных вариантов PET-проекта. Проект «Игра: “Угадай число”» является развлекательным, но поможет познакомиться или актуализировать знания учащихся о библиотеке random, поработать с функциями, условным оператором, циклами.
Мы разработаем две версии данной программы: легкую – для учащихся, работающих в нормальном темпе, сложную – для преуспевающих учащихся, которые смогут решить достаточно быстро. В данном методическом материале мы рассмотрим сложную версию. Листинг кода не обязательно должен абсолютно совпадать с тем, что самостоятельно напишет ученик – это всего лишь один из способов разработки данной программы.
Проект: "Игра: Угадай число". Легкая версия
Описание проекта: создание консольной игры на Python, в которой программа загадывает число, а игрок должен его угадать за ограниченное количество попыток.
В данной версии игры игроки могут выбрать уровень сложности, вести таблицу рекордов, а также получать более подробные подсказки. Программа будет сохранять лучшее время или количество попыток для каждого уровня сложности, а также предложит возможность играть против других игроков.
Цель проекта: написать игру, в которой программа загадывает случайное число, а пользователь должен угадать его. Программа будет давать подсказки — больше или меньше загаданного числа текущее предположение игрока. У игрока будет ограниченное количество попыток.
Темы, которые необходимо знать для разработки проекта:
ввод и вывод данных;
условия (if, else);
циклы (while);
функции;
работа с модулями;
модуль random для генерации случайных чисел;
модуль time для работы со временем;
модуль os для работы с файлами.
Техническое задание для учащихся:
Создать игру, где:
- игрок самостоятельно выбирает уровень сложности (легкий, средний, сложный);
- в зависимости от уровня сложности меняются диапазон чисел и количество попыток;
- подсказки могут включать диапазон допустимых значений (например, "Число находится между 30 и 50");
- результаты (например, наименьшее количество попыток для победы) сохраняются для последующих игр;
- игрок может играть как один, так и с друзьями (многопользовательский режим).
Шаги разработки программы:
Импорт модуля random для генерации случайных чисел.
Добавить выбор уровня сложности, который будет влиять на диапазон чисел и количество попыток.
Случайное загадывание числа программой.
Запрос у пользователя ввода числа и предоставление расширенных подсказок.
Ограничение количества попыток и обработка победы или поражения.
Ввести систему ведения рекордов — лучшее время или минимальное количество попыток;
Возможность повторной игры после окончания текущей.
Добавить режим для двух или более игроков.
Запуск программы на разных уровнях сложности.
Тестирование с разным количеством попыток. Убедиться, что рекорды сохраняются корректно.
Листинг программы
import random
import time
import os # Модуль для работы с файлами
# Функция игры
def guess_the_number(player_name, difficulty):
# Устанавливаем параметры в зависимости от уровня сложности
if difficulty == "легкий":
secret_number = random.randint(1, 50) # Диапазон от 1 до 50
attempts = 15 # 15 попыток
elif difficulty == "средний":
secret_number = random.randint(1, 100) # Диапазон от 1 до 100
attempts = 10 # 10 попыток
else: # сложный уровень
secret_number = random.randint(1, 200) # Диапазон от 1 до 200
attempts = 7 # 7 попыток
start_time = time.time() # Начало отсчета времени
print(f"{player_name}, угадай число! У тебя есть {attempts} попыток.")
min_range = 1 # Минимальное значение диапазона
max_range = 200 if difficulty == "сложный" else (100 if difficulty == "средний" else 50) # Максимум
# Цикл для угадывания
while attempts 0:
print(f"Число находится между {min_range} и {max_range}.")
guess = int(input(f"{player_name}, введи свой вариант: "))
if guess == secret_number:
end_time = time.time()
elapsed_time = round(end_time - start_time, 2)
print(f"Поздравляю, {player_name}! Ты угадал число {secret_number} за {elapsed_time} секунд!")
return attempts, elapsed_time # Возвращаем количество оставшихся попыток и время
elif guess print("Мое число больше.")
min_range = max(min_range, guess + 1) # Сужаем диапазон
else:
print("Мое число меньше.")
max_range = min(max_range, guess - 1) # Сужаем диапазон
attempts -= 1
print(f"Осталось попыток: {attempts}")
print(f"Ты проиграл, {player_name}. Загаданное число было {secret_number}.")
return 0, time.time() - start_time # Если игрок проиграл
# Функция для ведения рекордов
def update_highscore(player_name, attempts, elapsed_time, difficulty):
filename = f"{difficulty}_highscores.txt"
# Проверяем, существует ли файл, если нет — создаем его
if not os.path.exists(filename):
with open(filename, "w") as file:
file.write("No record, 0, 0") # Начальное значение рекорда
best_attempts = 0
best_time = 0.0
else:
with open(filename, "r") as file:
highscore = file.readline().strip().split(", ")
if highscore[0] == "No record":
best_attempts = 0
best_time = 0.0
else:
best_attempts = int(highscore[1])
best_time = float(highscore[2])
# Условие для обновления рекорда
if attempts 0 and (attempts best_attempts or (attempts == best_attempts and elapsed_time with open(filename, "w") as file:
file.write(f"{player_name}, {attempts}, {elapsed_time}")
print(f"Новый рекорд для уровня {difficulty}!")
else:
print(f"Рекорд не побит. Текущий рекорд: {best_attempts} попыток и {best_time} секунд.")
# Главная функция игры
def main():
print("Добро пожаловать в улучшенную игру 'Угадай число'!")
player_name = input("Как тебя зовут? ")
while True:
# Выбор уровня сложности
difficulty = input("Выбери уровень сложности (легкий, средний, сложный): ").lower()
if difficulty not in ["легкий", "средний", "сложный"]:
print("Неверный выбор. Попробуй снова.")
continue
attempts, elapsed_time = guess_the_number(player_name, difficulty)
update_highscore(player_name, attempts, elapsed_time, difficulty)
# Повторная игра
play_again = input("Хочешь сыграть еще раз? (да/нет): ").lower()
if play_again != "да":
print("Спасибо за игру!")
break
if __name__ == "__main__":
main()
Основные компоненты кода программы:
Функция guess_the_number:
Это основная игровая логика, где игрок должен угадать число, которое программа загадала.
В зависимости от уровня сложности устанавливаются:
- диапазон возможных чисел (от 1 до 50 для легкого, от 1 до 100 для среднего и от 1 до 200 для сложного уровня);
- количество попыток (15 для легкого, 10 для среднего, 7 для сложного уровня).
В этой функции:
- программа выводит подсказки: больше или меньше загаданного числа;
- игрок вводит свой вариант ответа;
- в случае удачи выводится сообщение о победе, и возвращаются количество оставшихся попыток и время, затраченное на игру;
- если попытки исчерпаны, программа сообщает о проигрыше и возвращает время, прошедшее с начала игры.
Функция update_highscore:
Эта функция отвечает за ведение и обновление рекордов. Она проверяет, побил ли игрок рекорд для текущего уровня сложности, и сохраняет новый рекорд, если это так.
Чтение/создание файла:
- Программа проверяет, существует ли файл для хранения рекордов на данный уровень сложности (легкий, средний или сложный);
- если файла нет, он создается с начальной записью "No record, 0, 0", что означает отсутствие рекорда;
- если файл существует, программа читает рекорд: лучшее количество попыток и лучшее время.
Логика обновления рекорда:
Рекорд обновляется, если:
- количество оставшихся попыток у игрока больше, чем было в рекорде;
- если количество попыток совпадает с рекордом, но время затрачено меньше;
- если рекорд побит, программа сохраняет новые данные в файл;
- если рекорд не побит, программа просто выводит текущий рекорд на экран.
Функция main:
Главная функция программы, которая запускает игру и контролирует процесс.
В этой функции:
- игрок вводит свое имя;
- выбирает уровень сложности.
После завершения каждой игры вызывается функция update_highscore, которая проверяет и обновляет рекорды. Программа предлагает сыграть снова или завершить игру.
Ключевые моменты программы:
Создание файла с рекордами: если файл рекордов для выбранного уровня сложности отсутствует, программа автоматически создает его с записью "No record, 0, 0". Это предотвращает ошибки при чтении данных и позволяет программе корректно работать при первом запуске.
Чтение и запись рекордов:
когда игрок завершает игру, программа проверяет, побит ли рекорд. Если да, она записывает новые данные (имя игрока, количество попыток и время);
- если рекорд не побит, программа просто выводит текущие рекорды, не изменяя файл.
Логика сравнения рекордов:
Сначала программа проверяет количество попыток. Если у игрока больше оставшихся попыток, чем у предыдущего рекордсмена, рекорд обновляется.
Если количество попыток совпадает, то проверяется время: чем меньше время, тем лучше результат.
Пример работы программы:
Игрок запускает программу и выбирает сложность "легкий".
Программа загадала число от 1 до 50, у игрока 15 попыток.
Игрок начинает вводить свои варианты, программа подсказывает, больше или меньше.
Если игрок угадывает, программа выводит количество попыток и время.
После игры проверяется рекорд для уровня:
Если это первый запуск или рекорд игрока лучше, файл обновляется.
Иначе выводится сообщение, что рекорд не побит.
Эта версия игры расширяет базовый функционал первоначальной программы, помогая школьникам изучить более сложные аспекты программирования на Python: управление файлами, работа с временем, и продвинутая логика в условиях и циклах.