Каппес Даниил Олегович

ПРАКТИКУМ PYTHON · ЗАНЯТИЕ 1

Ввод-вывод данных, арифметические операции

Первое занятие: программа печатает то, что ей сказали, спрашивает данные у человека и считает.

Чему научимся

Как устроена команда печати

Команда print() печатает то, что стоит в скобках. Значений можно перечислить сколько угодно — через запятую, и тогда между ними встанет один пробел.

print('Привет', 'мир', 2026)

Результат

Привет мир 2026

В Python не нужен знак конца команды. Перевод строки сам говорит, что команда закончилась, — точка с запятой в конце строки не ставится.

Чтобы спрятать строку от исполнения, в её начале ставят #. Спрятать сразу несколько строк можно тройными кавычками:

# это примечание, оно не выполняется

'''
print('первая')
print('вторая')
print('третья')
'''

Тройные кавычки — это на самом деле длинная строка, которую программа никуда не девает. Работает как комментарий, но называть это комментарием неверно.

1.1

Числа из «Остаться в живых»

В сериале «Остаться в живых» использовалась последовательность чисел 4 8 15 16 23 42 — она помогла сорвать джекпот в лотерее. Напишите программу, которая выводит эту последовательность с одним пробелом между числами.

Текст '4 8 15 16 23 42' одной строкой не использовать. Нужно, чтобы print() напечатал шесть отдельных чисел.

Формат выходных данных
Одна строка: шесть чисел через пробел.
Вывод
4 8 15 16 23 42
Подсказка 1

print() умеет принимать несколько значений через запятую и сам ставит между ними пробел.

Подсказка 2

Значит, вся программа — это одна команда с шестью числами в скобках.

Разбор
  1. Пробел между значениями print() ставит сам — вручную его добавлять не нужно.
  2. Числа пишутся без кавычек: это числа, а не текст.
Решение
# print() сам ставит по одному пробелу между значениями
print(4, 8, 15, 16, 23, 42)

Шесть чисел — шесть значений в одной команде. Если бы числа были в кавычках, вывелся бы тот же текст, но это была бы уже строка, а не числа.

1.2

То же самое в столбик

Измените предыдущую программу так, чтобы каждое число последовательности 4 8 15 16 23 42 печаталось на отдельной строке.

Формат выходных данных
Шесть строк, в каждой одно число.
Вывод
4
8
15
16
23
42
Подсказка 1

Каждая новая команда print() печатает с новой строки.

Подсказка 2

Значит, команд нужно столько же, сколько чисел.

Разбор
  1. print() после печати всегда переводит строку — поэтому шесть команд дают шесть строк.
Решение
# каждая команда print() печатает с новой строки
print(4)
print(8)
print(15)
print(16)
print(23)
print(42)

Через несколько задач вы узнаете параметр sep — с ним эта же программа записывается одной строкой: print(4, 8, 15, 16, 23, 42, sep='\n'). Пока такого приёма мы не проходили, и шесть команд — правильное решение.

Данные от человека: input()

Команда input() останавливает программу и ждёт, пока человек наберёт строку и нажмёт Enter. Набранное надо куда-то положить — для этого заводят переменную:

name = input()
print('Привет,', name)

Слева от знака = — имя переменной, справа — то, что в неё кладут. Читается это не как равенство, а как «положи в name то, что ввели».

input() можно дать приглашение: input('Введите имя: '). На занятии так удобнее, но в задачах, где сверяют вывод, приглашение попадёт в ответ и его сочтут лишним. Поэтому в решениях приглашения не пишем.

1.3

Приветствие

На вход программе подаётся строка текста — имя человека. Напишите программу, которая выводит приветствие: слово «Привет» (без кавычек), затем запятая и пробел, а затем введённое имя.

Формат входных данных
Одна строка — имя человека.
Формат выходных данных
Строка вида Привет, Тимур.
Ввод
Тимур
Вывод
Привет, Тимур
Подсказка 1

Прочитанное имя надо сохранить в переменную, иначе его негде взять.

Подсказка 2

Запятая — часть текста, а пробел после неё print() поставит сам.

Разбор
  1. print('Привет,', name) печатает «Привет,», затем пробел (его ставит сама команда) и имя.
  2. Писать print('Привет, ', name) не нужно: получится два пробела подряд.
Решение
name = input()          # читаем имя и запоминаем его
print('Привет,', name)  # запятая — в тексте, пробел поставит сам print

Классическая ошибка — пробел и в кавычках, и от print(). Глазами такое не видно, а проверяющая программа разницу заметит.

1.4

Три строки наоборот

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

Формат входных данных
Три строки, каждая на отдельной строке.
Формат выходных данных
Те же три строки в обратном порядке.
Ввод
Hello
it's
me
Вывод
me
it's
Hello
Подсказка 1

Пока строку не сохранили в переменную, она потеряна: второй раз её не прочитать.

Подсказка 2

Нужны три переменные — по одной на каждую строку.

Разбор
  1. Три команды input() заполняют три переменные.
  2. Печатаем в обратном порядке: сначала третью, потом вторую, потом первую.
Решение
s1 = input()   # первая строка
s2 = input()   # вторая
s3 = input()   # третья

print(s3)      # печатаем с конца
print(s2)
print(s1)

Порядок чтения менять нельзя — строки приходят одна за другой. Переворачивается только порядок печати.

sep и end: чем разделять и чем заканчивать

По умолчанию print() разделяет значения пробелом, а в конце переводит строку. Оба правила меняются именованными параметрами sep (separator — разделитель) и end (окончание).

print('d', 'e', 'f', sep='**')

Результат

d**e**f
print('a', 'b', 'c', end='@')
print('d', 'e', 'f', end='@@')

Результат

a b c@d e f@@

Значения по умолчанию такие:

sep=' '     # пробел
end='\n'    # перевод строки

Последовательность \n называется управляющей и означает перевод строки. Поэтому print('Python') — то же самое, что print('Python', end='\n'), а print('Python', end='\n\n\n') оставит после себя ещё две пустые строки.

print() с пустыми скобками просто переводит строку. А чтобы не печаталось ничего лишнего вовсе, оба параметра делают пустыми: print('a', 'b', sep='', end='').

1.5

I*like*Python

Напишите программу, которая выводит на экран текст «I*like*Python» (без кавычек).

Формат выходных данных
Одна строка.
Вывод
I***like***Python
Подсказка 1

Три звёздочки стоят ровно там, где обычно был бы пробел между значениями.

Подсказка 2

Значит, дело не в тексте, а в разделителе sep.

Разбор
  1. Три слова — три значения в print().
  2. sep='***' заменяет пробел между ними на три звёздочки.
Решение
# три слова, а между ними — свой разделитель
print('I', 'like', 'Python', sep='***')

Написать print('I*like*Python') тоже можно, но задача — научиться менять разделитель, а не набрать нужные символы руками.

1.6

Свой разделитель

Напишите программу, которая считывает строку-разделитель и три строки, а затем выводит эти три строки через указанный разделитель.

Формат входных данных
Четыре строки: сначала разделитель, потом три строки.
Формат выходных данных
Одна строка: три введённые строки через разделитель.
Ввод
*
Раз
Два
Три
Вывод
Раз*Два*Три
Подсказка 1

Разделитель тоже читается с клавиатуры — значит, это переменная.

Подсказка 2

В sep= можно поставить не только текст в кавычках, но и имя переменной.

Разбор
  1. Первым читаем разделитель, потом три строки — порядок задан условием.
  2. sep=separator подставит в разделитель то, что лежит в переменной.
Решение
separator = input()   # чем разделять
s1 = input()
s2 = input()
s3 = input()

print(s1, s2, s3, sep=separator)   # разделитель берём из переменной

sep — обычный параметр, и ему всё равно, стоит там литерал '*' или переменная с тем же значением.

Числа: input() возвращает текст

input() всегда возвращает строку — даже если человек набрал цифры. Складывать и умножать строки как числа Python не станет. Поэтому введённое переводят в число:

x = int(input())     # целое число
y = float(input())   # число с дробной частью
КомандаЧто делает
int()превращает значение в целое число
float()превращает значение в число с плавающей точкой
str()превращает значение в строку
type()показывает, какого типа значение
type(input())        # str — введённое всегда текст

x = int(input())
type(x)              # int

Забытый int() — самая частая ошибка первых занятий. Программа при этом не ломается сразу: она честно склеивает строки, и 2 + 7 даёт 27.

1.7

Три числа подряд

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

Формат входных данных
Одно целое число.
Формат выходных данных
Три числа, каждое на отдельной строке.
Ввод 1
8
Вывод 1
8
9
10
Ввод 2
-341
Вывод 2
-341
-340
-339
Подсказка 1

«Следующее число» — это то же число плюс один.

Подсказка 2

Считать надо от введённого числа, а значит, оно должно быть числом, а не строкой.

Разбор
  1. int(input()) даёт число, с которым можно считать.
  2. Второе и третье получаются как number + 1 и number + 2 — переменную при этом менять не нужно.
Решение
number = int(input())   # int() обязателен: считать будем, а не печатать

print(number)
print(number + 1)
print(number + 2)

Отрицательные числа ничем не отличаются: -341 + 1 — это -340. Пример со вторым тестом в условии стоит именно для этого.

1.8

Куб: объём и площадь

Напишите программу, вычисляющую объём куба и площадь его полной поверхности по введённой длине ребра.

Объём куба и площадь полной поверхности считаются по формулам V = a³ и S = 6 · a².

Формат входных данных
Одно целое число — длина ребра.
Формат выходных данных
Две строки с поясняющими надписями.
Ввод
25
Вывод
Объем = 15625
Площадь полной поверхности = 3750
Подсказка 1

Возведение в степень в Python — это **, а не ^.

Подсказка 2

Надпись и число печатаются одной командой: print('Объем =', V).

Разбор
  1. Читаем ребро и сразу переводим в целое.
  2. a ** 3 — куб, 6 * a ** 2 — шесть квадратов граней. Скобки не нужны: степень выполняется раньше умножения.
Решение
a = int(input())     # длина ребра

V = a ** 3          # объём: ребро в кубе
S = 6 * a ** 2      # площадь: шесть граней по a²

print('Объем =', V)
print('Площадь полной поверхности =', S)

Знак ^ в Python — это не степень, а другая операция (исключающее «или»). 2 ^ 3 даст 1, а не 8, и программа не сломается — просто соврёт.

Пять действий и ещё три

Кроме сложения +, вычитания -, умножения * и деления / в Python есть ещё три операции:

ОператорЧто делаетПример
**возведение в степень2 ** 5 → 32
//целочисленное деление17 // 5 → 3
%остаток от деления17 % 5 → 2

Порядок действий. Выше всех — степень **, затем *, /, //, %, и только потом + и -. Степень к тому же считается справа налево, как в математике: x y z — это x (y z).

print(2 ** 2 ** 3)   # 2 ** (2 ** 3) = 2 ** 8

Результат

256

Деление нацело округляет вниз, а не к нулю. Это важно для отрицательных чисел: −4 меньше, чем −3.

print(10 // 3)
print(-10 // 3)
print(10 % 3)
print(-10 % 3)

Результат

3
-4
1
2

Остаток нужен чаще, чем кажется: число делится на n нацело тогда и только тогда, когда число % n == 0. А если делимое меньше делителя, остаток равен самому делимому: 5 % 9 → 5.

1.9

Сумма, разность, произведение

Напишите программу, в которой вычисляется сумма, разность и произведение двух целых чисел, введённых с клавиатуры.

Формат входных данных
Два целых числа, каждое на отдельной строке.
Формат выходных данных
Три строки вида 2 + 7 = 9.
Ввод
2
7
Вывод
2 + 7 = 9
2 - 7 = -5
2 * 7 = 14
Подсказка 1

Знак действия внутри строки — это текст в кавычках, а само действие — вне кавычек.

Подсказка 2

В одной команде print() спокойно уживаются числа, текст и вычисления.

Разбор
  1. print(a, '+', b, '=', a + b) печатает пять значений: число, знак, число, знак равенства и результат.
  2. Пробелы между ними print() расставит сам.
Решение
a = int(input())
b = int(input())

# в кавычках — знак действия как текст, вне кавычек — само действие
print(a, '+', b, '=', a + b)
print(a, '-', b, '=', a - b)
print(a, '*', b, '=', a * b)

Если забыть int(), программа не упадёт: '2' + '7' даст 27, а умножение уже приведёт к ошибке. Тем и коварна забытая строка.

1.10

Сантиметры в метры

Напишите программу, которая находит полное число метров по заданному числу сантиметров.

Формат входных данных
Натуральное число — количество сантиметров.
Формат выходных данных
Одно число — полное число метров.
Ввод
345
Вывод
3
Подсказка 1

«Полное число метров» — это сколько раз в длине помещается 100 см; остаток отбрасывается.

Подсказка 2

Ровно это и делает целочисленное деление.

Разбор
  1. 345 // 100 — это 3, а 345 / 100 дало бы 3.45.
  2. Дробная часть здесь не нужна вовсе, поэтому берём //.
Решение
centimeters = int(input())

# // отбрасывает остаток: 345 см — это 3 полных метра
print(centimeters // 100)

Обычное деление / в Python всегда даёт дробное число, даже когда делится нацело: 300 / 100 → 3.0. Для «полного числа» это уже неверный ответ.

1.11

Мандарины

n школьников делят k мандаринов поровну, неделящийся остаток остаётся в корзине. Сколько целых мандаринов достанется каждому школьнику? Сколько останется в корзине?

Формат входных данных
Два целых числа: сначала количество школьников, потом количество мандаринов.
Формат выходных данных
Два числа, каждое на отдельной строке.
Ввод
3
6
Вывод
2
0
Подсказка 1

Задача — про те самые две операции: сколько раз поместилось и что осталось.

Подсказка 2

Следите за порядком чтения: первым вводится число школьников, а делить надо мандарины.

Разбор
  1. k // n — сколько целых мандаринов достанется каждому.
  2. k % n — то, что не поделилось и осталось в корзине.
Решение
n = int(input())   # школьников
k = int(input())   # мандаринов

print(k // n)      # каждому досталось
print(k % n)       # осталось в корзине

Проверить себя легко: k // n * n + k % n всегда равно k — розданное плюс остаток даёт всё, что было.

1.11а

Танос

Безумный титан Танос собрал все 6 камней бесконечности и намеревается уничтожить половину населения Вселенной по щелчку пальцев. Если население — нечётное число, титан проявит милосердие и округлит количество выживших в большую сторону. Помогите Мстителям подсчитать количество выживших.

Формат входных данных
Целое число n — население Вселенной.
Формат выходных данных
Одно число — количество выживших.
Ввод 1
99
Вывод 1
50
Ввод 2
100
Вывод 2
50
Подсказка 1

Половина от чётного числа считается ровно, а от нечётного — с остатком, который надо отдать выжившим.

Подсказка 2

Проверять чётность не нужно: есть приём, который работает сразу для обоих случаев.

Разбор
  1. Если к числу прибавить единицу и разделить нацело на 2, чётное не изменится, а нечётное округлится вверх.
  2. 99 → (99 + 1) // 2 = 50; 100 → (100 + 1) // 2 = 50.
Решение
n = int(input())

# +1 перед делением нацело даёт округление вверх:
# у чётного числа ничего не меняется, у нечётного добавляется единица
print((n + 1) // 2)

Разбирать чётное и нечётное по отдельности тоже можно, но для этого нужен условный оператор — он будет на следующем занятии. Здесь достаточно арифметики.

1.12

Минуты в часы

Напишите программу для пересчёта временного интервала, заданного в минутах, в часы и минуты.

Формат входных данных
Целое число — количество минут.
Формат выходных данных
Строка вида 150 мин - это 2 час 30 минут.
Ввод
150
Вывод
150 мин - это 2 час 30 минут.
Подсказка 1

Часы — это сколько раз шестьдесят помещается в минутах; минуты — то, что осталось.

Подсказка 2

Точка в конце — часть текста; приклеить её к числу без лишнего пробела поможет отдельное значение в print()... или подумайте, как обойтись.

Разбор
  1. minutes // 60 — целые часы, minutes % 60 — оставшиеся минуты.
  2. Слова «мин», «- это», «час», «минут.» печатаются как текст между числами; пробелы print() ставит сам.
Решение
minutes = int(input())

# // — целые часы, % — минуты, которые не сложились в час
print(minutes, 'мин - это', minutes // 60, 'час', minutes % 60, 'минут.')

Точка стоит внутри последнего куска текста — 'минут.'. Отдельным значением её ставить нельзя: print() поставил бы перед ней пробел.

1.13

Номер купе

В купейном вагоне 9 купе по четыре места в каждом. Напишите программу, которая определяет номер купе, где находится место с заданным номером. Нумерация мест сквозная и начинается с 1.

1,32,415,76,829,1110,12313,1514,16417,1918,20521,2322,24625,2726,28729,3130,32833,3534,369
Места 1–4 — первое купе, 5–8 — второе и так далее. Внизу — номера купе.
Формат входных данных
Целое число — номер места.
Формат выходных данных
Одно число — номер купе.
Ввод 1
1
Вывод 1
1
Ввод 2
4
Вывод 2
1
Ввод 3
5
Вывод 3
2
Ввод 4
36
Вывод 4
9
Подсказка 1

Места 1–4 — первое купе, 5–8 — второе. Похоже на деление на 4, но что-то мешает.

Подсказка 2

Мешает место 4: оно ещё в первом купе, а 4 // 4 уже даёт 1. Сдвиньте нумерацию так, чтобы места считались от нуля.

Разбор
  1. Вычитаем единицу — места становятся 0…35, и каждая четвёрка идёт ровно от одного значения // 4.
  2. Делим нацело на 4 и прибавляем единицу, чтобы вернуть счёт купе к привычному «с первого».
Решение
place = int(input())

# сдвигаем нумерацию к нулю, делим по четыре места и возвращаем счёт с единицы
print((place - 1) // 4 + 1)

Приём «−1, поделить, +1» встречается всюду, где что-то нумеруют с единицы: страницы в книге, коробки по n штук, ряды в зале.

Итог занятия

Что стоит запомнить с первого занятия. print() разделяет значения пробелом и переводит строку — оба правила меняются через sep и end. input() всегда возвращает текст, и без int() или float() считать не получится. Целочисленное деление // и остаток % работают в паре: одно отвечает «сколько поместилось», другое — «что осталось».