Перейти к содержимому
Editor

Числа в Python: int, float и арифметические операции

Начальный20 min6 упр.110 XP

Этот урок переведён с английского оригинала.Read in EnglishLeer en españolСообщить об ошибке в переводе

0/6 упр.

Вы с тремя друзьями делите счёт в ресторане. Всего вышло 85 долларов. Сколько должен каждый? Вы тянетесь за калькулятором в телефоне, а программист на Python набирает 85 / 4 и сразу получает ответ.

Математика лежит в основе программирования. Игры с её помощью рассчитывают физику, приложения считают цены, а анализ данных без неё вообще невозможен. Хорошая новость: в Python математика похожа на очень мощный калькулятор.

В этом уроке вы узнаете, как Python работает с числами, какие в нём есть операторы и как избежать ошибок, на которых спотыкаются новички. К концу урока вы будете уверенно решать практические задачи с вычислениями.

Что такое целые числа и числа с плавающей точкой?

В Python два основных типа чисел. Целые числа (int) не имеют дробной части. Числа с плавающей точкой (float) записываются с десятичной точкой.

Представьте деньги. «5 долларов» можно записать целым числом, а «5,99 доллара» уже дробным. Вся разница в дробной части. (В коде Python её всегда отделяют точкой: 5.99, а не 5,99.)

Целые числа и float
# Integers - whole numbers
students = 30
lives = 3
year = 2025
negative = -15
# Floats - decimal numbers
price = 9.99
temperature = 98.6
pi = 3.14159
tiny = 0.001
print(type(students)) # <class 'int'>
print(type(price)) # <class 'float'>
print(type(negative)) # <class 'int'>
print(type(temperature)) # <class 'float'>
Вывод
<class 'int'>
<class 'float'>
<class 'int'>
<class 'float'>

Когда что использовать? Целые числа подходят для того, что вы считаете: людей, предметов, очков, жизней в игре. Float подходит для того, что вы измеряете: веса, температуры, процентов, денег.


Как выполнять математические операции в Python

Python поддерживает все базовые математические операции, которые вы уже знаете. Символы почти такие же, как при записи на бумаге.

Четыре основных оператора
# Addition
print(10 + 3) # 13
# Subtraction
print(10 - 3) # 7
# Multiplication
print(10 * 3) # 30
# Division (always returns a float!)
print(10 / 3) # 3.3333333333333335
Вывод
13
7
30
3.3333333333333335

Сложение, вычитание и умножение работают ровно так, как вы ожидаете. А у деления есть сюрприз: оно всегда возвращает float, даже если результат получился целым.

Деление всегда возвращает float
# Division ALWAYS gives a float
print(10 / 2) # 5.0 - not 5!
print(type(10 / 2)) # <class 'float'>
# Even when both numbers are integers
print(100 / 10) # 10.0
print(8 / 4) # 2.0
Вывод
5.0
<class 'float'>
10.0
2.0

С переменными можно выполнять те же вычисления, что и с обычными числами. Здесь и начинается самое полезное.

Вычисления с переменными
# Real-world example: calculating a total
price = 12.50
quantity = 4
tax_rate = 0.08
subtotal = price * quantity
tax = subtotal * tax_rate
total = subtotal + tax
print(f"Subtotal: ${subtotal}")
print(f"Tax: ${tax}")
print(f"Total: ${total}")
Вывод
Subtotal: $50.0
Tax: $4.0
Total: $54.0

Что такое целочисленное деление (//) и остаток от деления (%)?

В Python есть два особых оператора, которые ходят парой, как чай с лимоном: целочисленное деление (//) и остаток от деления (%). Они отвечают на два разных вопроса об одном и том же делении.

Представьте, что у вас 17 конфет и 5 друзей. 17 // 5 говорит, что каждому другу достанется по 3 конфеты. 17 % 5 говорит, что 2 конфеты останутся лишними.

Как работает целочисленное деление (//)?

Целочисленное деление (//) делит и округляет результат вниз до ближайшего целого. Дробная часть отбрасывается целиком.

Целочисленное деление с помощью //
# Regular division vs integer division
print(17 / 5) # 3.4 - regular division (float)
print(17 // 5) # 3 - integer division (rounds down)
print(10 / 3) # 3.3333333333333335
print(10 // 3) # 3
print(7 / 2) # 3.5
print(7 // 2) # 3
# Works with negative numbers too (rounds toward negative infinity)
print(-17 // 5) # -4 (not -3!)
Вывод
3.4
3
3.3333333333333335
3
3.5
3
-4

Как работает оператор остатка от деления (%)?

Оператор остатка от деления (%) возвращает остаток, который получается при делении. Он невероятно полезен и встречается гораздо чаще, чем можно подумать.

Оператор остатка от деления (%)
# Modulo gives the remainder
print(17 % 5) # 2 (17 = 5*3 + 2)
print(10 % 3) # 1 (10 = 3*3 + 1)
print(20 % 4) # 0 (20 = 4*5 + 0, divides evenly)
print(7 % 2) # 1 (7 = 2*3 + 1)
# The classic use: check if a number is even or odd
number = 42
if number % 2 == 0:
print(f"{number} is even")
else:
print(f"{number} is odd")
Вывод
2
1
0
1
42 is even

Чаще всего остаток нужен, чтобы проверить, делится ли число без остатка. Если x % y == 0, значит, x делится на y нацело. Так проверяют чётность, високосные годы и многое другое.


Как возводить число в степень в Python

Для возведения в степень в Python есть оператор **. Во многих языках для этого нужна функция, а в Python это оператор. Коротко и понятно.

Возведение в степень с помощью **
# Exponentiation with **
print(2 ** 3) # 8 (2 cubed: 2 * 2 * 2)
print(5 ** 2) # 25 (5 squared: 5 * 5)
print(10 ** 6) # 1000000 (10 to the 6th power)
# Works with floats too
print(9 ** 0.5) # 3.0 (square root of 9!)
print(27 ** (1/3)) # 3.0 (cube root of 27)
Вывод
8
25
1000000
3.0
3.0

Полезный приём: возведение в степень 0.5 даёт квадратный корень, а ** (1/3) даёт кубический. Для простых корней отдельная функция не нужна.

Сложные проценты с помощью степени
# Practical example: compound interest
# Formula: A = P * (1 + r) ** t
principal = 1000 # Starting amount
rate = 0.05 # 5% annual interest
years = 10 # Time period
amount = principal * (1 + rate) ** years
print(f"${principal} at {rate*100}% for {years} years = ${round(amount, 2)}")
Вывод
$1000 at 5.0% for 10 years = $1628.89

Каков порядок выполнения операций в Python?

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

Порядок выполнения операций
# Without parentheses - follows PEMDAS
print(2 + 3 * 4) # 14 (not 20!) - multiplication first
print(10 - 2 ** 3) # 2 - exponent first: 2**3=8, then 10-8=2
print(10 + 6 / 2) # 13.0 - division first: 6/2=3, then 10+3
# With parentheses - you control the order
print((2 + 3) * 4) # 20 - parentheses force addition first
print((10 - 2) ** 3) # 512 - parentheses first: 8**3=512
print((10 + 6) / 2) # 8.0 - parentheses first: 16/2=8
Вывод
14
2
13.0
20
512
8.0

Вот полный список приоритетов, от высшего к низшему:

  • () - скобки (всегда первыми)
  • ** - возведение в степень
  • *, /, //, % - умножение, деление, целочисленное деление, остаток от деления
  • +, - - сложение и вычитание
  • Запутанно: всё держится на приоритете операторов
    result = base + rate * hours - discount / 2
    print(result)
    Понятно: скобки показывают замысел
    result = base + (rate * hours) - (discount / 2)
    print(result)

    Какие встроенные математические функции есть в Python?

    В Python есть несколько встроенных функций для типичных математических задач. Импортировать ничего не нужно: они доступны везде.

    Как использовать abs(), round(), min() и max()

    abs() и round()
    # abs() - absolute value (distance from zero)
    print(abs(-10)) # 10
    print(abs(10)) # 10
    print(abs(-3.7)) # 3.7
    # round() - round to nearest value
    print(round(3.7)) # 4
    print(round(3.2)) # 3
    print(round(3.14159, 2)) # 3.14 (round to 2 decimal places)
    print(round(1234, -2)) # 1200 (round to nearest hundred!)
    Вывод
    10
    10
    3.7
    4
    3
    3.14
    1200
    min() и max()
    # min() - smallest value
    print(min(5, 3, 8, 1)) # 1
    print(min(-10, -20, -5)) # -20
    # max() - largest value
    print(max(5, 3, 8, 1)) # 8
    print(max(-10, -20, -5)) # -5
    # Practical: clamp a value between bounds
    score = 150
    clamped = min(max(score, 0), 100) # Keep between 0 and 100
    print(f"Score {score} clamped to {clamped}") # Score 150 clamped to 100
    Вывод
    1
    -20
    8
    -5
    Score 150 clamped to 100

    Как преобразовать целое число во float и обратно

    Иногда нужно перейти от одного типа чисел к другому. int() превращает float в целое число, а float() превращает целое число во float.

    Преобразование между типами чисел
    # float → int (truncates, does NOT round)
    print(int(3.9)) # 3 - chops off the decimal
    print(int(3.1)) # 3
    print(int(-2.7)) # -2 - truncates toward zero
    # int → float
    print(float(42)) # 42.0
    print(float(-7)) # -7.0
    # string → numbers
    print(int("25")) # 25
    print(float("3.14")) # 3.14
    Вывод
    3
    3
    -2
    42.0
    -7.0
    25
    3.14

    В некоторых случаях Python сам выполняет автоматическое преобразование. Если в одной операции участвуют целое число и float, Python автоматически превращает целое число во float.

    Автоматическое повышение типа
    # Mixing int and float - Python "promotes" to float
    result = 5 + 2.0
    print(result) # 7.0 (float, not int)
    print(type(result)) # <class 'float'>
    # This happens with all operators
    print(10 * 1.5) # 15.0
    print(7 - 0.5) # 6.5
    print(type(3 + 0.0)) # <class 'float'>
    Вывод
    7.0
    <class 'float'>
    15.0
    6.5
    <class 'float'>

    Какие ошибки с числами чаще всего допускают в Python?

    Разберём ошибки, на которых спотыкаются новички в Python. Если знать их заранее, можно сэкономить часы отладки.

    Ошибка 1: ждать от / целого числа

    Ошибка: ждём целое число от /
    total_items = 10
    people = 2
    each = total_items / people
    print(f"Each gets {each} items")  # "Each gets 5.0 items"
    Исправление: // для целого результата
    total_items = 10
    people = 2
    each = total_items // people
    print(f"Each gets {each} items")  # "Each gets 5 items"

    Ошибка 2: путать / и //

    Разница между / и //
    # / gives the full decimal answer
    print(7 / 2) # 3.5
    # // rounds DOWN to a whole number
    print(7 // 2) # 3
    # They give very different results!
    print(15 / 4) # 3.75
    print(15 // 4) # 3
    Вывод
    3.5
    3
    3.75
    3

    Ошибка 3: забыть скобки в формулах

    Ошибка: без скобок результат неверный
    # Converting Fahrenheit to Celsius
    fahrenheit = 212
    celsius = fahrenheit - 32 * 5 / 9
    print(celsius)  # 194.22... WRONG!
    Исправление: скобки задают правильный порядок
    # Converting Fahrenheit to Celsius
    fahrenheit = 212
    celsius = (fahrenheit - 32) * 5 / 9
    print(celsius)  # 100.0 CORRECT!

    Практические упражнения

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

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

    Упражнение 1: посчитайте общую стоимость
    Напишите код

    Вы покупаете товары в магазине. Посчитайте общую стоимость покупки и выведите её.

  • 3 тетради по 4,50 $ за штуку
  • 2 ручки по 1,25 $ за штуку
  • Выведите итог точно в таком формате:

    Total: $16.0
    # Item prices and quantities
    notebook_price = 4.50
    notebook_qty = 3
    pen_price = 1.25
    pen_qty = 2
    # Calculate the total cost
    # Print the result
    Упражнение 2: чётное или нечётное
    Напишите код

    С помощью оператора остатка от деления (%) проверьте, чётное число или нечётное.

    Дана переменная number со значением 37. Выведите результат точно в таком формате:

    37 is odd

    Если бы число было чётным (например, 42), вывод был бы таким:

    42 is even
    number = 37
    # Use modulo to check if number is even or odd
    # Print: "{number} is even" or "{number} is odd"
    Упражнение 3: исправьте ошибку в делении
    Исправьте ошибку

    Этот код должен поровну разделить 10 пицц между 3 группами и сообщить, сколько пицц останется. Но в нём стоят не те операторы деления!

    Исправьте код, чтобы вывод был таким:

    Each group gets 3 pizzas
    Leftover pizzas: 1
    total_pizzas = 10
    groups = 3
    # Bug: using the wrong division operators
    pizzas_each = total_pizzas / groups
    leftover = total_pizzas / groups
    print(f"Each group gets {pizzas_each} pizzas")
    print(f"Leftover pizzas: {leftover}")
    Упражнение 4: перевод из Фаренгейта в Цельсий
    Напишите код

    Переведите температуру из градусов Фаренгейта в градусы Цельсия по формуле:

    **Цельсий = (Фаренгейт - 32) * 5 / 9**

    Дана переменная fahrenheit со значением 72. Вычислите температуру по Цельсию, округлите её до 1 знака после запятой и выведите:

    72F = 22.2C
    fahrenheit = 72
    # Convert to Celsius using the formula
    # Round to 1 decimal place
    # Print the result
    Упражнение 5: предскажите вывод
    Угадайте вывод

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

    print(10 // 3) # Your prediction:
    print(10 % 3) # Your prediction:
    print(2 ** 4) # Your prediction:
    print(15 // 4) # Your prediction:
    print(15 % 4) # Your prediction:
    print(type(10 / 2)) # Your prediction:
    Упражнение 6: калькулятор сложных процентов
    Напишите код

    Посчитайте сложные проценты по формуле:

    **A = P * (1 + r) t

    Где:

  • P = начальная сумма вклада = 1000 $
  • r = годовая процентная ставка = 0,05 (5%)
  • t = количество лет = 10
  • A = итоговая сумма
  • Вычислите итоговую сумму и заработанные проценты, а затем выведите:

    Final amount: $1628.89
    Interest earned: $628.89

    Округлите оба значения до 2 знаков после запятой.

    principal = 1000
    rate = 0.05
    years = 10
    # Calculate the final amount using the formula
    # Calculate interest earned (final - principal)
    # Print the results

    Итоги: числа и математика в Python

    Краткая шпаргалка по всем операторам и функциям из этого урока:

    ОператорНазваниеПримерРезультат
    +Сложение5 + 38
    -Вычитание5 - 32
    *Умножение5 * 315
    /Деление5 / 31.666...
    //Целочисленное деление5 // 31
    %Остаток от деления5 % 32
    **Возведение в степень5 ** 3125

    Встроенные функции:

    ФункцияНазначениеПример
    abs(x)Модуль числаabs(-5) → 5
    round(x, n)Округление до n знаков после запятойround(3.14, 1) → 3.1
    min(a, b, ...)Наименьшее значениеmin(3, 1, 4) → 1
    max(a, b, ...)Наибольшее значениеmax(3, 1, 4) → 4
    int(x)Преобразование в целое числоint(3.9) → 3
    float(x)Преобразование во floatfloat(5) → 5.0

    Что дальше?

    В следующем уроке, [Строки в Python](/python/python-strings), вы научитесь работать с текстом. Вы познакомитесь со срезами и методами строк и узнаете, как соединять строки и числа в понятный вывод.

    Похожие уроки

    Урок был полезен?