Проверка окончания числа в Python: от простого к сложному
Основные способы проверки окончания числа
Как наиболее эффективно узнать последнюю цифру числа или несколько последних цифр?
Самый быстрый и надёжный способ - использовать арифметическую операцию взятия остатка от деления. Для получения последней цифры числа применяется оператор % 10, для двух последних - % 100 и так далее. Такой подход не требует преобразования типов и работает с целыми числами любой длины.
number = 12345
last_digit = number % 10 # 5
two_last = number % 100 # 45
print(last_digit, two_last) # 5 45Python число оканчивается на (проверка окончания числа в python)
Если нужно проверить, заканчивается ли число на определённую цифру, достаточно сравнить остаток с нужным значением:
if number % 10 == 0:
print('Число оканчивается на 0')
Возможные проблемы: для отрицательных чисел остаток от деления в Python всегда неотрицателен (-7 % 10 даст 3, а не -7). Если требуется учитывать знак, лучше использовать абсолютное значение или строковый метод.
Пример ошибки: попытка проверить окончание на 5 для отрицательного числа -125 - остаток будет 5, хотя визуально число заканчивается на 5. Решение: брать abs(number) % 10.
Как узнать последнюю цифру числа, преобразовав его в строку?
Преобразование числа в строку и извлечение последнего символа - интуитивно понятный метод, особенно если число может быть отрицательным или требуется работать с ведущими нулями.
number = 12345
last_char = str(number)[-1] # '5'
last_digit = int(last_char) # 5
Для проверки нескольких последних цифр берётся срез:
two_last_str = str(number)[-2:] # '45'
two_last = int(two_last_str) # 45
Возможные проблемы: для чисел с плавающей точкой строковое представление может содержать знак минус, точку или экспоненту. Метод подходит только для целых чисел. Также при извлечении последних цифр срез может вернуть меньше символов, если число короткое (например, str(5)[-2:] вернёт '5', а не '05').
Как проверить, что число оканчивается на определённую комбинацию цифр, например, на '123'?
Строковый метод удобен для проверки произвольных суффиксов:
number = 123123
if str(number).endswith('123'):
print('Число заканчивается на 123')
Как получить последние цифры с помощью деления и остатка в цикле?
Иногда нужно последовательно извлечь все цифры числа, начиная с конца. Для этого используется комбинация деления на 10 и остатка.
def get_last_n_digits(number, n):
for _ in range(n):
digit = number % 10
print(digit, end=' ')
number //= 10
print()
get_last_n_digits(12345, 3) # 5 4 3
Возможные проблемы: если n больше количества цифр числа, цикл продолжит выдавать нули (так как после исчерпания цифр number станет 0). Нужно заранее проверять длину числа.
Как проверить окончание числа без явного преобразования в строку, используя функцию divmod?
Функция divmod возвращает частное и остаток одновременно, что может быть удобно при работе с рекурсивным разбором цифр.
number = 12345
quotient, remainder = divmod(number, 10)
print(remainder) # 5
# для двух последних:
quotient, remainder = divmod(number, 100)
print(remainder) # 45
Возможные проблемы: та же проблема с отрицательными числами, что и с обычным остатком. Используйте abs() при необходимости.
Расширенные примеры проверки окончания числа
# Проверка, является ли число палиндромом (сравнение с перевёрнутой строкой)
def is_palindrome(num):
s = str(num)
return s == s[::-1]
print(is_palindrome(12321)) # True
print(is_palindrome(12345)) # False
True False
# Извлечение последних N цифр с фиксированной длиной (с ведущими нулями)
def last_n_with_zeros(num, n):
return str(num).zfill(n)[-n:]
print(last_n_with_zeros(5, 3)) # '005'
print(last_n_with_zeros(1234, 3)) # '234'
005 234
# Проверка, заканчивается ли число на определенную последовательность без преобразования в строку
# (только для маленьких чисел, через остатки)
def ends_with_number(num, suffix):
# suffix – целое число (например 12)
# находим количество цифр суффикса
n = len(str(suffix))
return num % (10**n) == suffix
print(ends_with_number(12312, 12)) # True
print(ends_with_number(12345, 12)) # False
True False
# Использование форматирования f-строк для получения последних цифр
number = 98765
# последние 2 цифры с ведущим нулём
print(f'{number:04d}'[-2:]) # '65' (если ширина 4, то '8765' -> срез '65')
# последняя цифра
print(f'{number}'[-1]) # '5'
65 5
# Проверка на число, заканчивающееся на 0, 5 (кратность 5)
numbers = [10, 15, 22, 30]
for n in numbers:
if n % 5 == 0:
print(f'{n} оканчивается на 0 или 5')
else:
print(f'{n} не оканчивается на 0 или 5')
10 оканчивается на 0 или 5 15 оканчивается на 0 или 5 22 не оканчивается на 0 или 5 30 оканчивается на 0 или 5
# Работа с отрицательными числами: корректное извлечение последних цифр
num = -12345
# Строковый метод сохраняет знак, поэтому берём последний символ как цифру
last_digit_str = str(num)[-1] # '5'
print(int(last_digit_str)) # 5
# Арифметический метод с abs
last_digit_abs = abs(num) % 10
print(last_digit_abs) # 5
5 5