Работа с целыми числами в Python: тип int

Раздел: Типы данных -> Основы работы с типом int

Основы работы с типом int

Тип int в Python представляет целые числа произвольной точности. Он поддерживает все стандартные арифметические операции, битовые манипуляции и методы для преобразования.

Базовое создание и преобразование

Самый распространённый способ получить целое число - использовать литерал или функцию int() для преобразования из строки или другого типа.

# Создание целого числа
num = 42
print(num)  # 42

# Преобразование строки в число
s = "123"
num_int = int(s)
print(num_int)  # 123

# Преобразование числа с плавающей точкой (отбрасывает дробную часть)
f = 3.99
result = int(f)
print(result)  # 3

Int python (тип int в python)

Функция int() также принимает необязательный аргумент base для чисел в других системах счисления.

# Двоичная строка в int
binary = "1010"
num_bin = int(binary, 2)
print(num_bin)  # 10

# Шестнадцатеричная
hex_str = "1A"
num_hex = int(hex_str, 16)
print(num_hex)  # 26

Как получить целое число из пользовательского ввода?

user_input = input("Введите число: ")
try:
    number = int(user_input)
    print("Вы ввели:", number)
except ValueError:
    print("Ошибка: введите целое число")

При преобразовании ввода всегда следует предусматривать обработку исключения ValueError.

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

Целые числа поддерживают побитовые операторы: &, |, ^, ~, <<, >>.

a = 60  # 111100
b = 13  # 001101
print(a & b)   # 12 (001100)
print(a | b)   # 61 (111101)
print(a ^ b)   # 49 (110001)
print(~a)      # -61 (дополнительный код)

Как узнать количество бит, необходимых для представления числа?

Метод bit_length() возвращает количество бит без учёта знака.

num = 256
print(num.bit_length())  # 9 (так как 256 = 2^8, требует 9 бит)

neg = -7
print(neg.bit_length())  # 3 (биты абсолютного значения)

Распространённые проблемы и их решение

  • ValueError: возникает при попытке преобразовать нечисловую строку. Решение - проверять входные данные или использовать обработку исключений.
  • OverflowError не возникает для int в Python, так как числа имеют произвольную точность.
  • Ошибка деления на ноль: ZeroDivisionError - перед делением нужно проверять делитель.
  • Потеря точности при преобразовании из float: int(3.999) даёт 3, а не 4. Для округления используйте round().

Дополнительные примеры работы с int

Преобразование с базой и обработка ошибок

Пример
# Преобразование строки в 36-ричной системе
value = "zz"
result = int(value, 36)
print(result)  # 1295 (35*36 + 35)

# Ошибка при неверном символе для базы
try:
    invalid = int("1g", 16)
except ValueError as e:
    print(e)  # invalid literal for int() with base 16: '1g'
1295
invalid literal for int() with base 16: '1g'

Методы to_bytes и from_bytes

Целые числа можно преобразовывать в последовательности байтов и обратно.

Пример
num = 1024
byte_repr = num.to_bytes(2, byteorder='big')
print(byte_repr)  # b'\x04\x00'

restored = int.from_bytes(byte_repr, byteorder='big')
print(restored)   # 1024

# Для отрицательных чисел нужно указать signed=True
neg = -5
neg_bytes = neg.to_bytes(2, byteorder='little', signed=True)
print(neg_bytes)  # b'\xfb\xff'

neg_restored = int.from_bytes(neg_bytes, byteorder='little', signed=True)
print(neg_restored)  # -5

Использование int в цикле для подсчёта

Пример
counter = 0
for char in "hello world":
    if char == 'l':
        counter += 1
print("Количество 'l':", counter)  # 3

Сравнение производительности: int vs eval

Пример
import time
s = "123456789"
start = time.perf_counter()
for _ in range(10000):
    n = int(s)
print("int():", time.perf_counter() - start)

start = time.perf_counter()
for _ in range(10000):
    n = eval(s)
print("eval():", time.perf_counter() - start)
# eval() медленнее и опаснее, не рекомендуется
int(): 0.0012
eval(): 0.0543

Битовые маски и флаги

Пример
READ = 1    # 001
WRITE = 2   # 010
EXECUTE = 4 # 100

permissions = READ | WRITE  # 011 (3)
print(permissions)  # 3
print(permissions & READ)   # 1 - есть право на чтение
print(permissions & EXECUTE) # 0 - нет права на выполнение

Получение абсолютного значения и размера

Пример
num = -123
print(abs(num))        # 123
print(num.__abs__())   # 123 (метод)
print(num.__sizeof__()) # размер объекта в байтах (зависит от величины)

Тип int в Python - comments

En
Int python (python)