185 задач на языке python. Задачник-практикум

Автор: Васин Дмитрий Юрьевич

Организация: МБОУ «Пекшинская СОШ» Петушинского района

Населенный пункт: Владимирской область, д. Пекша

Данный задачник-практикум предназначен для тех, кто готов начать изучать базовые основы программирования на языке Python. Python – один из популярнейших языков программирования, на котором можно писать, как простые приложения и игры, так и сложные программы. Этот язык имеет низкий порог входа, не сложен в изучении для начинающих, поэтому его часто изучают ещё со школы. Задачник-практикум содержит 185 решённых задач с пояснениями и комментариями по таким темам как линейные алгоритмы, условия, циклы, функции, списки, множества, библиотеки и др.

Книга предназначена для учащихся средних и старших классов общеобразовательных школ, студентов средних и высших учебных заведений, а также преподавателей информатики. Задачник-практикум будет полез при подготовке к ОГЭ и ЕГЭ по информатике.

 

Предисловие

Данное учебное пособие написано выпускником 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.

 

Полный текст статьи см. в приложении.


Приложения:
Для доступа к приложениям, Войдите в систему или зарегистрируйтесь

Опубликовано: 01.03.2026