Целочисленные переменные: подробное руководство
Целочисленные переменные в Python
Целочисленная переменная в Python представляет собой объект типа int. Она может хранить целые числа произвольного размера (без ограничения на количество разрядов). Ниже рассмотрены основные способы работы с целыми числами, включая присваивание, преобразование и типичные проблемы.
Как объявить целочисленную переменную простым присваиванием?
Самый распространённый способ — напрямую присвоить переменной целое число:
count = 10
price = -5
temp = 0Python значение переменной (значение переменной в python)
При этом Python автоматически определяет тип int. Переменная готова к использованию в выражениях.
Типичные ошибки:
- Попытка использовать имя переменной до присваивания вызывает NameError.
- Случайное использование зарезервированных слов (например, class) в качестве имени переменной.
Как преобразовать строку или число с плавающей точкой в целое?
Для преобразования используется встроенная функция int(). Она принимает один обязательный аргумент (строку или число) и возвращает целое значение.
a = int("42")
b = int(3.14) # отбрасывает дробную часть
c = int("1010", 2) # из двоичной строкиизменить значение переменной python (изменение значения переменной в python)
a = 42, b = 3, c = 10
целая переменная в python (целочисленная переменная)
Проблемы:
- Передача строки, не являющейся числом, вызывает ValueError.
- При передаче числа с плавающей точкой дробная часть отбрасывается (не округляется).
- Если указано основание системы счисления (второй аргумент), строка должна соответствовать этому основанию.
Как присвоить одно и то же значение нескольким переменным?
Можно использовать множественное присваивание:
x = y = z = 100Все три переменные указывают на один и тот же объект int со значением 100. В Python целые числа неизменяемы, поэтому изменение одной переменной не повлияет на другие.
Важно: Для изменяемых типов (например, списков) такое присваивание создаёт ссылки на один объект, что может привести к неожиданному поведению.
Как задать число в двоичной, восьмеричной или шестнадцатеричной системе?
Python поддерживает литералы с префиксами: 0b (двоичная), 0o (восьмеричная), 0x (шестнадцатеричная).
bin_val = 0b1010 # 10
oct_val = 0o12 # 10
hex_val = 0xA # 10Все эти литералы создают объект типа int.
Ошибка: если цифры не соответствуют системе (например, 0b102), возникает SyntaxError.
Как работать с очень большими целыми числами?
Python автоматически использует длинную арифметику (big integers). Размер ограничен только доступной памятью.
big = 2**1000
print(big)10715086071862673209484250490600018105614048117055336074437503883703510511249361224931983788156958581275946729175531468251871452856923140435984577574698574803934567774824230985421074605062371141877954182153046474983581941267398767559165543946077062914571196477686542167660429831652624386837205668069376
Преобразование в другие типы (например, float) может привести к потере точности.
Типичная ошибка: попытка вычислить факториал большого числа с использованием рекурсии без учёта глубины стека.
Как проверить, является ли значение целым числом?
Используйте функцию isinstance() или сравнение type():
val = 5
if isinstance(val, int):
print("Это целое число")Это целое число
Логическая ошибка: isinstance(val, int) вернёт True даже для подклассов int (если они есть).
Какие арифметические операции доступны для целых чисел?
Стандартные операции: +, -, *, / (возвращает float), // (целочисленное деление), % (остаток), ** (возведение в степень).
a = 10
b = 3
print(a + b) # 13
print(a // b) # 3
print(a % b) # 1
print(a ** b) # 100013 3 1 1000
Частая ошибка: путаница между / и //. Деление одного целого на другое возвращает float, если не используется //.
Как изменить значение целочисленной переменной (инкремент, составные операторы)?
Поскольку целые числа неизменяемы, операция x = x + 1 создаёт новый объект и присваивает его переменной. Составные операторы (+=, -= и т.д.) работают аналогично:
counter = 0
counter += 5 # то же, что counter = counter + 5
counter -= 2
counter *= 3Значение counter после всех операций: 9.
Ошибка: использование ++ или -- в стиле C в Python не поддерживается.
Дополнительные примеры работы с целыми числами
В этом разделе приведены более сложные сценарии использования целочисленных переменных, включая работу с системами счисления, битовые операции и большие числа.
Пример: перевод числа из одной системы счисления в другую
Функции bin(), oct(), hex() возвращают строковое представление целого числа.
num = 255
print(bin(num)) # '0b11111111'
print(oct(num)) # '0o377'
print(hex(num)) # '0xff'0b11111111 0o377 0xff
Пример: битовые операции над целыми числами
Python поддерживает побитовые операторы: & (И), | (ИЛИ), ^ (исключающее ИЛИ), ~ (НЕ), << (сдвиг влево), >> (сдвиг вправо).
a = 0b1100 # 12
b = 0b1010 # 10
print(a & b) # 8 (0b1000)
print(a | b) # 14 (0b1110)
print(a ^ b) # 6 (0b0110)
print(~a) # -13
print(a << 2) # 48 (0b110000)
print(a >> 1) # 6 (0b110)8 14 6 -13 48 6
Пример: вычисление факториала большого числа и проверка длины
import math
fact = math.factorial(100)
print(fact)
print("Количество цифр:", len(str(fact)))93326215443944152681699238856266700490715968264381621468592963895217599993229915608941463976156518286253697920827223758251185210916864000000000000000000000000 Количество цифр: 158
Пример: использование целых чисел в генераторах списков
squares = [x**2 for x in range(1, 11)]
print(squares)[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
Пример: проверка числа на чётность с помощью побитовой операции
def is_even(n):
return (n & 1) == 0
print(is_even(10)) # True
print(is_even(7)) # FalseTrue False
Пример: создание целого числа из байтов
Функция int.from_bytes() позволяет интерпретировать последовательность байтов как целое число.
byte_data = b'\x00\x10' # два байта
num = int.from_bytes(byte_data, byteorder='big')
print(num) # 1616
Пример: работа с числами в разных контекстах (машинный эпсилон для целых)
Поскольку целые числа в Python не имеют ограничения точности, понятие машинного эпсилон к ним не применимо. Однако при преобразовании в float возможна потеря:
big_int = 10**100
big_float = float(big_int)
print(big_float == big_int) # False из-за округленияFalse