Целые числа в Python: тип int, функция int() и операции

Тип int хранит целые числа любой длины, а функция int() превращает в них строки и дроби, отбрасывая дробную часть.

Разбираем, чем / отличается от //, почему -7 // 2 даёт −4, какие методы есть у int и как проверить число на чётность и простоту.

Статью написал:
Ваня Буявец, продюсер, основатель Checkroi
Ваня Буявец
Основатель Checkroi, продюсер, эксперт в выборе онлайн-курсов
Все 3030 статей автора Подписаться на Телеграм-канал
Одобрено экспертом:
Наташа Буявец, основатель Checkroi, эксперт по онлайн-курсам
Наташа Буявец
Основательница Checkroi, продюсер Youtube-каналов, эксперт по онлайн-курсам
Все 3684 экспертных мнения Подписаться на Телеграм-канал
Обложка: Целые числа в Python: тип int, функция int() и операции

int в Python — встроенный тип для целых чисел: 5, −12, 1_000_000. Создаётся литералом (a = 42) или функцией int(), которая превращает строку или дробное число в целое. Размер числа ограничен только памятью компьютера, переполнения, как в C или Java, здесь нет.

Ниже разберём, как записывать целые числа, что делает int(), чем деление / отличается от //, какие методы есть у int и как решать типовые задачи: чётность, НОД, простые числа. Примеры работают в Python 3.12 и новее. Если вы только начинаете, сначала посмотрите первые простые программы на Python.

CheckroiCheckroiПодборка курсов по Python568 курсов • 51 школаСравните цены, школы, программу и найдите выгодные предложения по обучениюСравнить→

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

Рой пишет на Python первые примеры с целыми числами

Целое число пишется цифрами без точки. Тип Python определяет сам, объявлять его не нужно.

a = 42
b = -7
c = 1_000_000
print(type(a), c)
print(0b1010, 0o17, 0xFF)
print(isinstance(True, int), True + True)
<class 'int'> 1000000
10 15 255
True 2

Что здесь происходит:

  • подчёркивания внутри числа ничего не значат, они только делят разряды, чтобы миллион читался глазами;
  • префиксы 0b, 0o и 0x задают двоичную, восьмеричную и шестнадцатеричную запись, но в памяти это тот же int;
  • True и False тоже целые числа: в документации Python тип bool назван подтипом целых, поэтому True + True даёт 2.

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

Что делает функция int()

int() превращает значение в целое число. Чаще всего её зовут, чтобы получить число из строки, например из того, что пользователь ввёл с клавиатуры.

print(int("  42 "))
print(int(3.99), int(-3.99))
print(int("ff", 16), int("1010", 2), int("0x1f", 0))
print(int())
try:
    int("3.5")
except ValueError as e:
    print("ValueError:", e)
42
3 -3
255 10 31
0
ValueError: invalid literal for int() with base 10: '3.5'

Пять правил, которые видно по выводу:

  1. Пробелы по краям строки int() отбрасывает сам.
  2. Дробное число не округляется, а усекается к нулю: 3.99 станет 3, а −3.99 станет −3. Так прямо сказано в описании функции int().
  3. Второй аргумент задаёт основание системы счисления: int("ff", 16) вернёт 255.
  4. При основании 0 Python сам читает префикс 0x, 0o или 0b в строке.
  5. Без аргументов int() возвращает 0.

Строку с точкой вроде «3.5» int() не примет и выбросит ValueError. Чтобы получить целое из такой строки, сначала вызовите float(), потом int(): int(float("3.5")) даст 3. Как безопасно читать число с клавиатуры и проверять ввод, рассказали в статье про int(input()) в Python.

Канал основателя Checkroi Вани Буявца3 700 человек читают мой Телеграм-канал про нейросетиСобрал промпты для Claude Code и ChatGPT, разборы ИИ-инструментов и лайфхаки по продвижению бизнеса в одном местеПрисоединиться

Арифметика с целыми числами

С int работают все обычные операторы. Важно помнить, какой тип получится в ответе.

Оператор Что делает Пример Результат
+, -, * сложение, вычитание, умножение 6 * 7 42, тип int
/ обычное деление 7 / 2 3.5, всегда float
// целочисленное деление 7 // 2 3
% остаток от деления 7 % 2 1
** возведение в степень 2 ** 10 1024
divmod() частное и остаток сразу divmod(17, 5) (3, 2)
abs() модуль числа abs(-12) 12
print(7 / 2, 7 // 2, 7 % 2)
print(-7 // 2, -7 % 2)
print(2 ** 10, pow(3, 4, 5))
print(divmod(17, 5), abs(-12))
print(type(6 / 3), type(6 // 3))
3.5 3 1
-4 1
1024 1
(3, 2) 12
<class 'float'> <class 'int'>

Обратите внимание на вторую строку. Целочисленное деление в Python округляет вниз, к минус бесконечности, а не к нулю: -7 // 2 равно −4, а не −3. Остаток при этом получается 1, потому что −4 × 2 + 1 = −7. Документация описывает это прямо: результат // всегда округляется к минус бесконечности.

Даже 6 / 3 даёт 2.0, а не 2: оператор / всегда возвращает float. Если нужно целое, делите через //. Функция pow(3, 4, 5) с третьим аргументом считает остаток от степени по модулю и не строит огромное промежуточное число. Остальные знаки собраны в шпаргалке по операторам Python, а у остатка есть свой разбор с divmod() и math.fmod().

Большие числа и лимит в 4300 цифр

Цифры огромного числа, сложенные в длинную ленту

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

big = 2 ** 100
print(big)
print(big * big % 97)
import sys
n = 10 ** 5000
try:
    s = str(n)
except ValueError as e:
    print("ValueError:", e)
sys.set_int_max_str_digits(0)
print(len(str(n)))
1267650600228229401496703205376
62
ValueError: Exceeds the limit (4300 digits) for integer string conversion; use sys.set_int_max_str_digits() to increase the limit
5001

Считать Python умеет сколько угодно, но с версии 3.11 есть ограничение на перевод числа в десятичную строку и обратно: по умолчанию до 4300 цифр. Его ввели для защиты от атак, когда огромная строка из цифр надолго занимает процессор. Двоичную и шестнадцатеричную запись лимит не трогает.

Решение: если вам правда нужно напечатать число из 5000 цифр, поднимите лимит через sys.set_int_max_str_digits(). Ноль снимает ограничение целиком. Подробности и способы задать лимит заранее описаны в разделе Integer string conversion length limitation.

Методы int

У целого числа есть свои методы. Литерал перед точкой нужно взять в скобки, иначе Python решит, что вы пишете дробь: (10).is_integer(), а не 10.is_integer().

Метод Что возвращает С какой версии
bit_length() сколько битов нужно, чтобы записать число без знака 3.1
bit_count() сколько единиц в двоичной записи 3.10
to_bytes() число в виде байтов 3.2, аргументы по умолчанию с 3.11
int.from_bytes() число из байтов 3.2
is_integer() всегда True, нужен для совместимости с float 3.12
as_integer_ratio() пара (число, 1) 3.8
n = 255
print(n.bit_length(), n.bit_count())
print(n.to_bytes(2, "big"))
print(int.from_bytes(b"\x00\xff", "big"))
print((10).is_integer(), 7.0.is_integer())
print(bin(n), oct(n), hex(n))
8 8
b'\x00\xff'
255
True True
0b11111111 0o377 0xff

Версии методов взяты из раздела Additional Methods on Integer Types. Встроенные bin(), oct() и hex() не методы, но работают в паре с ними: возвращают строку с двоичной, восьмеричной и шестнадцатеричной записью. Запись без префикса 0b удобнее получить через f-строку: f"{n:b}" даст 11111111. Форматы чисел внутри строк разобраны в статье про f-строки в Python.

Побитовые операции

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

a, b = 0b1100, 0b1010
print(a & b, a | b, a ^ b, ~a)
print(1 << 4, 64 >> 2)
n = 64
print(n > 0 and n & (n - 1) == 0)
8 14 6 -13
16 16
True
  • & — побитовое И, | — побитовое ИЛИ, ^ — исключающее ИЛИ;
  • ~a равно -(a + 1), поэтому из 12 получилось −13;
  • << и >> сдвигают биты: сдвиг влево на n умножает на 2 в степени n, а вправо делит нацело;
  • последняя строка проверяет, является ли число степенью двойки: у таких чисел в двоичной записи ровно одна единица.
Ваня БуявецКанал основателя Checkroi Вани БуявцаЗабирайте промпты и обучение по нейросетям в моём Телеграм-каналеБольше 3 700 человек уже применяют Claude Code, ChatGPT и другие нейросети в работе, учёбе, бизнесе и жизниПерейти в канал

Типовые задачи с int

Рой радуется, что функция нашла все простые числа

На практике с целыми числами чаще всего решают пять задач: чётность и кратность, сумма цифр, НОД и НОК, целый корень и проверка на простоту. Такие упражнения часто стоят в первых модулях курсов по Python, а потренироваться можно на 30 задачах для начинающих.

import math

n = 2026
print(n % 2 == 0, n % 3 == 0)
print(sum(int(d) for d in str(n)))
print(math.gcd(48, 18), math.lcm(4, 6))
print(math.isqrt(50))

def is_prime(n):
    if n < 2:
        return False
    for d in range(2, math.isqrt(n) + 1):
        if n % d == 0:
            return False
    return True

print([x for x in range(30) if is_prime(x)])
True False
10
6 12
7
[2, 3, 5, 7, 11, 13, 17, 19, 23, 29]

По строкам вывода:

  1. Чётное ли число и кратно ли оно трём, проверяют через остаток: n % 2 == 0. 2026 чётное, на 3 не делится.
  2. Разделить число на цифры проще всего через строку: str(n) даёт символы, int(d) снова делает из них числа.
  3. math.gcd() ищет наибольший общий делитель, а math.lcm() находит наименьшее общее кратное. Вторая функция появилась в Python 3.9.
  4. math.isqrt(50) возвращает целую часть квадратного корня, то есть 7, без перехода к float.
  5. Функция is_prime() перебирает делители только до корня из числа: если делитель больше корня, парный к нему меньше, и мы его уже проверили.

Если функции через def пока незнакомы, начните со статьи о функциях в Python.

Частые ошибки с целыми числами

Эти ошибки встречаются у новичков чаще остальных.

Сложение строки с числом

input() всегда возвращает строку. Код age = input() и print(age + 1) упадёт с ошибкой TypeError: can only concatenate str (not "int") to str.

Решение: age = int(input()).

int() не округляет дробь

int(2.9) вернёт 2. Округление до ближайшего целого делает round(), а вверх округляет math.ceil().

Решение: выбирайте функцию под задачу. Про округление вверх есть разбор math.ceil.

Отрицательные числа и //

Код из других языков, где деление отбрасывает дробную часть, в Python даст другой ответ на отрицательных: -7 // 2 равно −4.

Решение: если нужно именно отбросить дробную часть, пишите int(-7 / 2), это −3. Для чисел больше 2 в 53-й степени ответ может разойтись на единицу, потому что деление идёт через float.

Сравнение через is

Числа сравнивают через ==. Оператор is проверяет, один ли это объект в памяти, и на числах работает непредсказуемо. Python 3.14 на строку x is 300 сам выдаёт предупреждение SyntaxWarning: "is" with 'int' literal. Did you mean "=="?.

Решение: is оставьте для None, True и False.

Где освоить Python системно

С целых чисел язык только начинается. Дальше идут строки, списки, циклы вроде while, функции и работа с файлами. Если хотите пройти этот путь по программе с проверкой заданий, а не по разрозненным статьям, сравните курсы по Python в каталоге: все курсы Python с ценами, длительностью и отзывами.

КурсШколаСтоимость со скидкойВ рассрочкуДлитель­ностьОбзор курса от Checkroi
Профессия «Python-разработчик»
Перейти на сайт курса
SkillboxSkillbox157 335 ₽5987 ₽/мес.10 месяцевОбзор курса
Fullstack-разработчик на Python
Перейти на сайт курса
НетологияНетология137 000 ₽7125 ₽/мес.21 месяцОбзор курса
ДО Профессия Python-разработчик
Перейти на сайт курса
GeekBrainsGeekBrains149 001 ₽3167 ₽/мес.10 месяцевОбзор курса
Автоматизированное тестирование на Python
Перейти на сайт курса
SkillboxSkillbox122 226 ₽4108 ₽/мес.9 месяцевОбзор курса
Программирование на Python ПРО
Перейти на сайт курса
SkillboxSkillbox119 600 ₽ - 17 месяцевОбзор курса

Больше программ — в полном каталоге курсов по Python

Часто задаваемые вопросы

Что такое int в Python?

Это встроенный тип для целых чисел: 0, 42, −7. Размер числа ограничен только памятью, переполнения, как в C или Java, нет.

Как проверить, что число целое?

Тип проверяют через isinstance(x, int). Если у вас float и нужно узнать, нет ли дробной части, вызовите x.is_integer(): 7.0.is_integer() вернёт True.

Чем int() отличается от round()?

int() отбрасывает дробную часть и усекает к нулю: int(2.9) даст 2, int(-2.9) даст −2. round() округляет до ближайшего целого: round(2.9) даст 3.

Почему -7 // 2 в Python равно −4?

Оператор // округляет результат вниз, к минус бесконечности. Так он устроен для всех чисел, поэтому на отрицательных ответ на единицу меньше, чем при простом отбрасывании дробной части.

Есть ли у int в Python максимальное значение?

Нет, у целых чисел неограниченная точность. С версии 3.11 есть только лимит на перевод числа в десятичную строку и обратно, по умолчанию 4300 цифр. Его меняют через sys.set_int_max_str_digits().

Читайте Checkroi первым в Google
Добавьте Checkroi в избранные источники — и наши разборы курсов и обзоры школ будут показываться выше в вашей выдаче Google.
Оставить комментарий
0 комментариев
Форма комментария

Оставьте комментарий

Напишите, что думаете. Нам важно ваше мнение!