185 задач на языке python. Задачник-практикум
Автор: Васин Дмитрий Юрьевич
Организация: МБОУ «Пекшинская СОШ» Петушинского района
Населенный пункт: Владимирской область, д. Пекша
Книга предназначена для учащихся средних и старших классов общеобразовательных школ, студентов средних и высших учебных заведений, а также преподавателей информатики. Задачник-практикум будет полез при подготовке к ОГЭ и ЕГЭ по информатике.
Предисловие
Данное учебное пособие написано выпускником 2009 г. физико-математического факультета Владимирского государственного гуманитарного университета, учителем информатики МБОУ «Пекшинская СОШ» Петушинского района Владимирской области Дмитрием Юрьевичем Васиным, преподающим данную дисциплину с 2010 года. При написании данного задачника-практикума автор опирается на пройденный вместе с учащимися (2022-2023 и 2023-2024 учебные годы) курс федерального проекта «Код будущего: игры на Python. От идеи до реализации», а также материалы курсов по языку программирования Python от Фоксфорда (https://foxford.ru/). Д.Ю. Васин многие годы готовит школьников к ОГЭ и к ЕГЭ по информатике и имеет авторский образовательный канал на платформах Rutube (https://rutube.ru/channel/23483881/) и Youtube (https://www.youtube.com/@vasin_d).
В данном пособии нет лекционного курса, приводится лишь краткие теоретические сведения в каждой теме, поэтому автор рекомендует перед разбором решения задач подробно ознакомится с теоретическим материалом. Задачи из ОГЭ и ЕГЭ отмечены соответствующими одноименными знаками. Большинство задач сопровождается подробным описанием или комментарием кода.
Язык программирования Python – это мощный инструмент для создания самых разных программ, доступный для новичков. Данный язык в 1991 году разработан голандским программистом Гвидо ван Россумом. Python постоянно совершенстуется и обновляется, и сейчас большинство программистов использую его третью версию.
Транслятором Python является интерпретатор, который создаёт байт-код и сам его выполняет. Поэтому для запуска программы на Python, нужно установить на ПК интерпретатор Python, скачав его по адресу: https://www.python.org/downloads/.
На компьютер также установится программа IDLE – среда для разработки и написания кода на Python.
Код языка Python просто читается, а интерактивная среда позволяет вводить программы и получать результат.
PEP (Python Enhancement Proposal) — документ-соглашение о том, как писать код для языка Python, включая стандартную библиотеку, входящую в состав Python.
Самый известный PEP имеет восьмой порядковый номер. PEP 8 содержит перечень принципов написания красивого и лаконичного программного кода на языке Python.
Некоторые принципы PEP 8
- Используйте 4 пробела на уровень отступа. Пробелы являются более предпочтительными, чем табуляция;
- Каждая строка должна быть не более 79 символов;
- Импорт всегда помещается в начало файла и должен быть в отдельных строках;
- В Python строки в одинарных и двойных кавычках — это одно и то же;
- Бинарные операторы нужно окружать одним пробелом с обеих сторон: присваивание ( = ), расширенное присваивание (+=, -= и т. д.), сравнения ( ==, <, >, !=, <=, >= ), логические операции.
Более подробно о PEP 8 можно узнать на официальном сайте https://peps.python.org/pep-0008/
Переменная — это именованная область памяти компьютера, хранящая информацию. Само ее название предполагает, что содержимое переменных может и будет меняться.
Имена переменным задаются только из латинских букв, цифр и символа нижнего подчеркивания. При этом имя переменной не должно начинаться с цифры и содержать пробел. Название переменной не может совпадать с названием ключевых операторов языка Python, например for, import, range, pass, None, break, def и т.п. Необходимо отметить, что разный регистр букв – это разные символы. Заглавная А – и строчная а это две разных переменные, т.к. они имеют разный уникальный код.
Для присвоения значения переменной необходимо воспользоваться оператором присваивания =.
Операция — это выполнение всевозможных действий над данными.
В Python, как в принципе, и в математике, с числами жоступны следующие операции:
+ – сложение
- – вычитание
* – умножение
** – возведение в степень
/ – деление
// – целочисленное деление (округление вниз)
% – остаток от деления
Приоритет операций:
- Скобки.
- Возведение в степень.
- Умножение, деление, получение остатка.
- Сложение и вычитание.
Тип данных — это характеристика данных, которая определяет их возможные значения, список допустимых операций и способ хранения этих данных.
Целые числа — int()
Вещественные числа — float()
Строковый тип данных — str()
Логический тип данных — bool()
Тема 1. Линейные алгоритмы
Линейная программа - это программа, в которой все строки выполняются последовательно без повторений.
Задача №1. Вывести на экран сообщение «Hello, World!»
Эта задача включает в себя лишь демонстрацию использования функции print(), которая будет единственной в теле нашей маленькой программы. С помощью неё мы будем осуществлять вывод на экран константы 'Hello World!' типа string. Функция print() — предназначена для вывода заданных объектов на экран.
Листинг 1.
print("Hello, World!")
Задача №2. Составьте программу для вычисления суммы двух целых чисел.
Функция input() — получает входные данные → обрабатывает их → записывает входные данные в переменную.
Важно отметить, что функция input считает всё, что введено символьной строкой, поэтому чтобы работать с числами необходимо введённые символьные строки преобразовать в числа с помощью функции int.
Листинг 2.
num1 = int(input("Введите первое число: "))
num2 = int(input("Введите второе число: "))
print(num1 + num2)
|
Входные данные |
Выходные данные |
|
Введите первое число: 40 Введите второе число: 60 |
100 |
Также данную задачу можно решить, используя множественное присваивание, применить функцию разделитель split() (разделим по пробелам) и функцию map, которая применяет другую функцию, в нашем случае int к каждой части.
Листинг 2.1
num1, num2 = map(int, input("Введите два числа через пробел ").split())
print(num1 + num2)
Задача №3. Составьте программу для вычисления длины ленты для картонного круга, если известен его радиус.
(Формула длины окружности: l = 2πr, принять π = 3.14)
|
Входные данные |
Выходные данные |
|
Введите радиус круга: 10 |
Длина ленты равна: 62.8 |
|
Введите радиус круга: 5 |
Длина ленты равна: 31.4 |
1. Определим переменную r, которая получит значение радиуса круга, введенное пользователем с клавиатуры.
2. Определим переменную length, которая будет равна длине ленты, обернутой вокруг круга. Для этого используется формула 2 * 3.14 * r, где r — это радиус круга, а 3.14 — это приближенное значение числа Пи (π).
3. Выведем результат на экран с помощью print, сообщая длину ленты, которая равна lenght.
Листинг 3.
r = int(input("Введите радиус круга: "))
lenght = 2 * 3.14 * r
print("Длина ленты равна:", lenght)
Задача №4. На вход программы подается два целых числа — длины сторон футбольного поля. Напишите программу, вычисляющую периметр и площадь поля, а также длину его диагоналей. В этой задаче нельзя использовать условные конструкции и циклы. Для взятия квадратного корня нужно возводить число в степень 0.5.
|
Входные данные |
Выходные данные |
|
5 12 |
34, 60, 13.0 |
Листинг 4.
#вводим длины сторон футбольного поля (прямоугольника)
lenght_1 = int(input())
lenght_2 = int(input())
#записываем формулы для периметра, площади прямоугольника и длины диагонали
p = 2 * (lenght_1 + lenght_2)
s = lenght_1 * lenght_2
#по теореме Пифагора
l = (lenght_1 ** 2 + lenght_2 ** 2) ** 0.5
print(p, s, l)
Задача №5. Написать программу нахождения площади параллелограмма, если известно его основание и высота.
|
Входные данные |
Выходные данные |
|
8 5 |
40 |
Листинг 5.
a = int(input())
h = int(input())
S = a * h
print(S)
Задача №6. На вход программе подается натуральное число N, лежащее в промежутке от 1 до 100. Напишите программу, выводящую в терминал строку из N склеенных строк "Python".
|
Входные данные |
Выходные данные |
|
3 |
PythonPythonPython |
Конкатенация — это процесс объединения двух или более строк, символов или последовательностей символов в одну строку.
Листинг 6.
N = int(input())
print(N * "Python")
Задача №7. За день машина проезжает 200 километров. Сколько дней нужно, чтобы проехать маршрут длиной n километров? Ответ выражается в виде вещественного числа. Программа получает на вход целое число n.
|
Входные данные |
Выходные данные |
|
800 |
4.0 |
Листинг 7.
n = int(input())
days = n / 200
print(days)
Задача №8. Представьте, что вам нужно создать анкету, чтобы понять, насколько хорошую игру вы создали. Такие опросники называются исследованиями пользовательского опыта. Напишите программу, которая запрашивает у пользователя ответы на несколько вопросов анкеты. Выведите заполненную анкету пользователя на экран.
Листинг 8.
# Получение ответов пользователя на вопросы анкеты
name = input("Введите ваше имя: ")
age = input("Введите ваш возраст: ")
favorite_game = input("Введите вашу любимую игру: ")
rating = input("Оцените игру от 1 до 10: ")
# Вывод заполненной анкеты пользователя
print("Анкета пользователя:")
print("Имя:", name)
print("Возраст:", age)
print("Любимая игра:", favorite_game)
print("Оценка игры:", rating)
Задача №9.
Напишите программу, которая принимает на вход с клавиатуры длину стороны квадрата (целое число) и определяет его площадь.
Листинг 9.
a = int(input())
print(a**2)
Задача №10. Напишите программу, которая выводит на экран фразу лесенкой (автор - В. Маяковский):
Я волком бы
выгрыз
бюрократизм.
Листинг 10.
# \n – перевод каретки на следующую строку
str = "Я волком бы\n выгрыз\n бюрократизм"
print(str)
Задача №11. В программу вводятся по очереди три натуральных числа, напишите программу, которая считывает эти три числа и выводит в терминал их среднее арифметическое.
|
Входные данные |
Выходные данные |
|
4 4 5 |
4.333333333333333 |
Листинг 11.
a, b, c = map(int, input().split())
summ = a + b + c
print(summ/3)
Задача №12. На вход с клавиатуры подается целое число, требуется написать программу, выводящую в терминал на одной строке три числа: введенное число и два его соседних.
|
Входные данные |
Выходные данные |
|
72 |
71 72 73 |
Листинг 12.
n = int(input())
a = n - 1
b = n + 1
print(a, n, b)
Задача №13. В программу на вход подается положительное вещественное число. Напишите программу, которая выведет в терминал сначала строку с целой частью числа, а затем с дробной.
Внимание! В этой задаче нельзя использовать операторы // и %.
|
Входные данные |
Выходные данные |
|
12.4 |
12 0.40000000000000036 |
|
5.0 |
5 0.0 |
Листинг 13.
n = float(input()) #ввод вещественного числа
n1 = int(n) #получаем целую часть, отбрасываю дробную
n2 = n - n1 #считаем дробную часть, вычитая целую из исходного
print(n1) #выводим целую часть, затем дробную
print(n2)
Задача №14. Берется некоторое натуральное число, его увеличивают на 3, затем приписывают к нему справа 0, после чего делят получившееся число нацело на 5. К итоговому числу записывают справа само себя и выводят в терминал. Напишите программу, которая на вход с клавиатуры получает натуральное число, выполняет с ним операции, перечисленные в условии, а затем выводит в терминал. Итоговое число должно быть натуральным.
|
Входные данные |
Выходные данные |
|
7 |
2020 |
|
21 |
4848 |
В данной задаче будем использовать конкатенацию для «приписывания» цифр
Листинг 14.
n = int(input())
n = n + 3
n = str(n) + "0"
n = int(n) // 5
n = str(n) * 2
print(n)
Задача №15. Напишите программу, которая получает реверсную запись трехзначного числа.
|
Входные данные |
Выходные данные |
|
341 |
143 |
Листинг 15.
n = int(input()) #вводим трехзначное число
a = n % 10 #последняя цифра (разряд) числа
n = n // 10 #отбрасываем последнюю цифру числа
#аналогично работаем с получившимся двузначным числом
b = n % 10
n = n // 10
c = n #крайний левый разряд
n = a * 100 + b * 10 + c #формируем реверсное число-результат по формуле
print(n)
Задача №16. Напишите программу, которая вводит с клавиатуры количество секунд и выводит то же самое время в часах, минутах и секундах.
|
Входные данные |
Выходные данные |
|
3665 |
1 час 1 мин 5 сек |
Листинг 16.
seconds = int(input("Введите количество секунд: "))
hours = seconds // 3600 # Находим количество часов
minutes = (seconds % 3600) // 60 # Находим количество минут
seconds = (seconds % 3600) % 60 # Находим количество секунд
print("{} час {} мин {} сек".format(hours, minutes, seconds))
Задача №17. Напишите программу, которая моделирует работу следующего автомата. Автомат получает на вход четырёхзначное число. Затем вычисляются три суммы: сумма первых двух цифр, сумма средних цифр и сумма последних двух цифр. Результат работы автомата - произведение этих сумм.
|
Входные данные |
Выходные данные |
|
3456 |
7 9 11 |
Листинг 17.
num = int(input("Введите четырехзначное число: "))
# Вычисляем суммы
sum1 = num // 1000 + (num // 100) % 10
sum2 = (num // 100) % 10 + (num % 100) // 10
sum3 = (num % 100) // 10 + num % 10
# Вычисляем произведение сумм
result = sum1 * sum2 * sum3
print(result)
Задача №18. Дано натуральное число меньше 16. Посчитать количество его единичных битов. Например, если дано число 9, запись которого в двоичной системе счисления равна 10012 (подстрочная цифра 2 справа от числа означает, что оно записано в двоичной системе счисления), то количество его единичных битов равно 2.
|
Входные данные |
Выходные данные |
|
15 |
4 |
Вспомним правило: остаток от деления любого десятичного числа x на число p дает нам разряд единиц числа x (его крайний разряд справа) в системе счисления с основанием p.
Листинг 18.
n = int(input())
count = 0 #счетчик
#Прибавляем к count разряд единиц в двоичной записи числа n, то есть остаток от деления n на 2
count = count + n % 2
#Учитываем разряд единиц в двоичной записи n, отбрасываем его, чтобы исследовать число далее
n = n // 2
#два раза повторяем, после чего останется единственный двоичный разряд числа n, который можно просто прибавить к счетчику без каких-либо дополнений
count = count + n % 2
n = n // 2
count = count + n % 2
n = n // 2
count = count + n
print(count)
Задача №19. Напишите программу, в которой для введённого с клавиатуры символа на экран выводится его код. Затем на экран выводится строка, представляющая собой последовательность из трёх символов используемой кодовой таблицы: символа, предшествующего исходному; исходного символа; символа, следующего за исходным.
|
Входные данные |
Выходные данные |
|
р |
1088 прс |
Чтобы найти код символа, используем функцию ord(), где в качестве параметра указываем символ. Чтобы по коду узнать символ, используем функцию chr(), где в качестве параметра указываем код символа.
Листинг 19.
a = input()
kod = ord(a)
print(kod)
b = chr(kod - 1) + a + chr(kod + 1)
print(b)
Задача №20. Напишем программу, определяющую истинность высказывания «Треугольник с длинами сторон а, b, с является равнобедренным» для произвольных целых чисел а, b, с.
|
Входные данные |
Выходные данные |
|
2 2 4 |
Треугольник с длинами сторон 2 , 2 , 4 является равнобедренным - True |
|
1 3 5 |
Треугольник с длинами сторон 1 , 3 , 5 является равнобедренным - False |
Листинг 20.
а = int(input('Введите значение а '))
b = int(input('Введите значение Ь '))
с = int(input('Введите значение с ' ))
ans = (а == b) or (а == с) or (b == с)
print('Треугольник с длинами сторон', а, ',', b, ',', с,' является равнобедренным -', ans)
Тема 2. Модули в Python (часть 1)
В Python модули (библиотеки) – это специальные файлы, которые мы можем использовать в программах для упрощения разработки кода. Некоторые модули уже встроены в язык Python, их можно подключить с помощью специальной команды, а другие необходимо сначала устанавливать, и только потом уже подключить и использовать. Рассмотрим вначале самые простые модули.
Модуль math
Вот некоторые функции модуля math:
ceil(n) – округление до ближайшего большего числа;
floor(n) – округление вниз;
pow(x, y) – выполняет возведение x в степень y. Аргументы x, y могут быть целыми или вещественными числами;
cos(n) – косинус угла n, n указывается в радианах;
sin(n) – синус n, n указывается в радианах;
sqrt(n) – квадратный корень из n
pi – число пи, равное 3,1415926…;
factorial(n) - вычисление факториала n.
fabs(n) - вычисления абсолютного значения числа n
Задача №21. Вычислить площадь параллелограмма, если известны две его смежные стороны и угол между ними.
|
Входные данные |
Выходные данные |
|
12 5 45 |
42.42640687119285 |
Листинг 21.
from math import * #импортируем все функции из библиотеки math
a = int(input())
b = int(input())
angle = int(input())
S = a * b * sin(angle * pi / 180)
print(S)
Задача №22. Вычислить площадь кольца с внешним радиусом r1 и внутренним радиусом r2 (S = πr12 – πr22, r1 > r2).
|
Входные данные |
Выходные данные |
|
5 3 |
50.26548245743669 |
Листинг 22.
from math import *
r1 = int(input())
r2 = int(input())
S = pi * r1 ** 2 - pi * r2 ** 2
print(S)
Задача №23. Напишите программу нахождения длин сторон треугольника, если известны координаты его вершин.
|
Входные данные |
Выходные данные |
|
-2 3 4 3 2 5 |
Длина стороны a: 6 Длина стороны b: 2.8284271247461903 Длина стороны c: 4.47213595499958 |
Для решения данной задачи можно использовать формулу расстояния между двумя точками в декартовой системе координат: S = √((x2 - x1)2 + (y2 - y1)2), где (x1, y1) и (x2, y2) - координаты двух точек.
Листинг 23.
from math import *
# Ввод координат вершин треугольника
x1, y1 = map(float, input("Введите координаты первой вершины (через пробел): ").split())
x2, y2 = map(float, input("Введите координаты второй вершины (через пробел): ").split())
x3, y3 = map(float, input("Введите координаты третьей вершины (через пробел): ").split())
# Вычисление длин сторон треугольника
a = sqrt((x2 - x1)**2 + (y2 - y1)**2)
b = sqrt((x3 - x2)**2 + (y3 - y2)**2)
c = sqrt((x3 - x1)**2 + (y3 - y1)**2)
# Вывод результатов
print("Длина стороны a: ", a)
print("Длина стороны b: ", b)
print("Длина стороны c: ", c)
Задача №24. Напишите программу вычисления расстояния между двумя точками на прямой.
|
Входные данные |
Выходные данные |
|
-4 -2 |
2.0 |
Листинг 24.
from math import *
# Ввод координат двух точек
x1 = float(input("Введите координату x первой точки: "))
x2 = float(input("Введите координату x второй точки: "))
# Вычисление расстояния
d = fabs(x2 - x1)
# Вывод результата
print(d)
Также данную задачу можно решить, не используя библиотеку math, применив функцию модуля числа abs()
Листинг 24.1
# Ввод координат двух точек
x1 = float(input("Введите координату x первой точки: "))
x2 = float(input("Введите координату x второй точки: "))
# Вычисление расстояния
d = abs(x2 - x1)
# Вывод результата
print(d)
Задача №25. Написать программу вычисления гипотенузы прямоугольного треугольника по известным катетам.
|
Входные данные |
Выходные данные |
|
3 4 |
5.0 |
Листинг 25.
from math import *
# Ввод длин катетов
a = float(input("Введите длину первого катета: "))
b = float(input("Введите длину второго катета: "))
# Вычисление гипотенузы по теореме Пифагора
c = sqrt(a**2 + b**2)
# Вывод результата
print(c)
Задача №26. Написать программу, расчёта факториала числа n, используя библиотеку math.
|
Входные данные |
Выходные данные |
|
5 |
120 |
Листинг 26.
from math import *
n = int(input())
print(factorial(n))
Модуль time
Этот модуль осуществляет различные действия со временем. Основная функция этого модуля: time(). Она позволяет получить время в секундах, которые прошли с начала эпохи. Началом эпохи - 1 января 1970. Чаще всего эту функцию применяют для измерения времени работы программы. Ее вызывают дважды: перед началом фрагмента кода и после него. Разница между двумя этими числами и будет время, за которое был выполнен данный фрагмент кода.
ctime() — функция, которая принимает в качестве аргумента количество секунд, прошедших с начала эпохи, и возвращает строку, представляющую собой местное время.
sleep() — функция, которая приостанавливает выполнение программы на заданное число секунд.
Модуль random
Данный модуль генерирует случайные числа, а точнее псевдослучайные числа. Псевдослучайное число выполняет роль случайного, но вычисленного с помощью определенного алгоритма.
Главные функции модуля random:
- randint(a, b) - получаем случайное число в диапазоне от а до b;
- uniform(a, b) - получаем случайное вещественное число типа float, то есть с дробной частью;
- random() – дробное число от 0 до 1.
Полный текст статьи см. в приложении.



