Работа с целыми числами в 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) # 3Int 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)