edubun
Русский

Числа и арифметика

В Python 3 выражение 7 / 2 даёт 3.5, 7 // 2 даёт 3, а 7 % 2 возвращает остаток 1.

Предскажи результаты четырёх делений, прежде чем читать дальше

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

print(7 / 2)
print(8 / 2)
print(7 // 2)
print(7 % 2)
Вывод
3.5
4.0
3
1

Вторая строка часто удивляет. 8 / 2 равно ровно 4, но Python выводит 4.0. Причина в том, что / всегда возвращает float, число с десятичной точкой, даже при делении нацело. Для целочисленного деления есть отдельный оператор //: он делит и округляет результат вниз до целого. Парный ему оператор % возвращает остаток. Вместе они отвечают на знакомый по начальной школе вопрос: «7 разделить на 2 будет 3 и 1 в остатке».

В 7 помещаются три шага по 2, остаётся 1: 7 // 2 даёт число шагов, 7 % 2 даёт остаток.

% полезен чаще, чем кажется. Число чётное, если n % 2 равно 0. Последнюю цифру числа даёт n % 10. Чтобы перевести 135 минут в часы и минуты, вычисли 135 // 60 часов и 135 % 60 минут.

minutes = 135
print(minutes // 60, "h", minutes % 60, "min")
print(2026 % 2, 2027 % 2)
print(4589 % 10)
Вывод
2 h 15 min
0 1
9

Остальные операторы и порядок действий в Python

ОператорЗначениеПримерРезультат
+сложение7 + 29
-вычитание7 - 25
*умножение7 * 214
/деление (float)7 / 23.5
//целочисленное деление с округлением вниз7 // 23
%остаток7 % 21
**возведение в степень7 ** 249

Python следует тому же порядку, что и на уроках математики: сначала **, затем *, /, // и %, затем + и -, слева направо внутри каждой группы. Скобки выполняются раньше всего, поэтому при сомнении добавь их. Это ничего не стоит, а следующему читателю будет понятнее твой замысел.

print(2 + 3 * 4)
print((2 + 3) * 4)
print(2 ** 10)
print(10_000 * 3)
Вывод
14
20
1024
30000

В последней строке показано удобство записи: Python разрешает подчёркивания внутри длинных чисел, поэтому 10_000 читать проще, чем 10000. При вычислении они игнорируются и в выводе не появляются. Запятые так использовать нельзя: запятая уже означает переход к следующему значению.

Дробные числа хранятся в двоичной форме, поэтому иногда возникает крошечная погрешность

Попробуй 0.1 + 0.2. В учебнике Python целая глава объясняет, почему ответ равен 0.30000000000000004, а не 0.3. Числа float хранятся в двоичной форме, и 0.1 нельзя точно представить в ней, как 1/3 нельзя точно представить конечной десятичной дробью. Погрешность мала, и round() скрывает её при выводе. Учти, что round() округляет значение ровно посередине к чётному соседу: на странице встроенных функций round(0.5) даёт 0, а round(1.5) даёт 2. Для денег в целых вонах или центах храни суммы как int, и проблемы не будет совсем.

print(0.1 + 0.2)
print(round(0.1 + 0.2, 2))
print(round(0.5), round(1.5), round(2.5))
print(int(3.99), float(7))
Вывод
0.30000000000000004
0.3
0 2 2
3 7.0

input() всегда возвращает строку

input() показывает приглашение, ждёт, пока пользователь введёт текст и нажмёт Enter, и возвращает введённое строкой. Даже при вводе 15 ты получишь "15", то есть текст. Для арифметики преобразуй его с помощью int() или float(). Применение int() к float отбрасывает дробную часть, а не округляет: int(3.99) даёт 3.

age = input("How old are you? ")
next_year = int(age) + 1
print("Next year you will be", next_year)
Вывод
How old are you? 14
Next year you will be 15
В примере выше 14 ввёл пользователь. В самой программе числа 14 нет.
/Деление, всегда возвращающее float: 8 / 2 даёт 4.0
//Деление с округлением вниз: 7 // 2 даёт 3
%Остаток: 7 % 2 даёт 1
**Степень: 2 ** 3 даёт 8
int()Преобразует "15" или 3.9 в целое число (15, 3)
input()Считывает введённую пользователем строку текста
round(x, n)Округляет до n знаков после точки; значения ровно посередине округляются к чётному соседу
  1. Что выведет этот код?
    print(9 / 3)
  2. Что выведет этот код?
    print(17 // 5, 17 % 5)
  3. Что выведет этот код?
    print(2 + 3 * 4 ** 2)
  4. Что выведет этот код?
    print(2 ** 3)
  5. Что выведет этот код?
    print(2 ^ 3)
    • 8
    • 6
    • 1
    • An error
  6. Что выведет этот код?
    print(int("20") + 5)
  7. Что выведет этот код?
    print("20" + "5")
  8. Что выведет этот код?
    print(int(7.9))
  9. Что выведет этот код?
    print(round(2.5))
  10. Булочка стоит 3500 вон, у тебя 10 000 вон. Что выведет этот код?
    won = 10000
    price = 3500
    print(won // price, won % price)
  11. Какое выражение проверяет, чётно ли n?
    • n / 2 == 0
    • n // 2 == 0
    • n % 2 == 0
    • n ** 2 == 0
Частые ошибки
  • «2 ^ 3 равно 8». В Python ^ является побитовым оператором, и 2 ^ 3 равно 1. Для степени нужен **, поэтому 2 ** 3 равно 8. Программа выполняется без ошибки, из-за чего такую оплошность трудно заметить.
  • «Если я введу число, input() вернёт число». Функция всегда возвращает строку. Выражение "14" + 1 вызывает TypeError: can only concatenate str (not "int") to str. Сначала преобразуй ввод: int(input(...)).
  • «0.1 + 0.2 == 0.3 даёт True». Получится False, потому что 0.1 + 0.2 равно 0.30000000000000004. Сравнивай округлённые значения, например round(0.1 + 0.2, 2) == 0.3, или считай целые единицы (воны, центы) с типом int.
Заметка для учителяНачни с предсказания результатов: неожиданного 4.0 достаточно, чтобы возник вопрос. Знакомые с делением с остатком ученики быстро понимают // и %, если назвать их так. Погрешность float стоит показать один раз, не задерживаясь на ней; важнее привычка хранить денежные суммы целыми числами. Результат 2 у round(2.5) противоречит школьному округлению, поэтому будь готов к вопросу и сошлись на документацию встроенных функций вместо спора. Ошибка преобразования input() чаще всего встречается ученикам в первых проектах.
Главное
  • / всегда возвращает float; // даёт целочисленное частное; % даёт остаток.
  • ** обозначает степень, а ^ нет.
  • Порядок: скобки, **, затем * / // %, затем + -.
  • 0.1 + 0.2 равно 0.30000000000000004; храни деньги как int.
  • input() возвращает строку; преобразуй её с помощью int() или float().
Источники курса (6)
  • Python Software Foundation, The Python Tutorial for Python 3.12 (docs.python.org/3.12/tutorial: 2 Using the Python Interpreter, 3 An Informal Introduction to Python (numbers, text, lists), 4 More Control Flow Tools (if, for, range, break and continue, defining functions, default argument values, 4.10 coding style: 4-space indentation), 5 Data Structures (list methods, 5.5 dictionaries, insertion order), 8 Errors and Exceptions (syntax errors, exceptions, reading the traceback, handling exceptions), 15 Floating-Point Arithmetic (0.1 + 0.2))
  • Built-in Functions (docs.python.org/3.12/library/functions.html: print, input, len, int, float, str, type, round (round half to even: round(0.5) and round(-0.5) are 0, round(1.5) is 2), range, sum, min, max, sorted)
  • Built-in Types (str methods upper, lower, replace, strip; dict.get; list.append, pop, remove, sort returning None)
  • General Python FAQ (docs.python.org/3.12/faq/general.html: Guido van Rossum began Python in the 1989 Christmas holidays, posted it to USENET in February 1991, named it after Monty Python's Flying Circus)
  • Curriculum for the Korean pages: 교육부 고시 제2022-33호 [별책 10] 정보과 교육과정 (PDF read 2026-10-19: 중학교 정보 [9정03-05] 리스트 등 데이터를 순차적으로 저장하는 구조, [9정03-06] 논리 연산과 중첩 제어 구조, [9정03-07] 함수 활용과 디버거로 오류 수정, [9정03-08] 실생활 문제를 프로그래밍으로 해결, 적용 시 고려 사항 「학생의 수준을 고려하여 적합한 프로그래밍 언어를 선정」; 고등학교 정보 [12정03-04] 자료형, [12정03-05] 표준입출력, [12정03-07] 제어 구조)
  • Bug story only: Smithsonian National Museum of American History, Log Book With Computer Bug, 1947, Harvard Mark II, "first actual case of bug being found", probably not Hopper's log book (americanhistory.si.edu/collections/object/nmah_334663, read 2026-10-19)

Проверено: 2026-10-19