Получение последней цифры числа языке Python: полное руководство
При работе с числами в Python часто требуется извлечь последнюю цифру. Это может понадобиться для проверки чётности, генерации кодов, анализа данных и других задач. Рассмотрим несколько подходов, от наиболее эффективного до альтернативных, с разбором типичных ошибок.
Способы получения последней цифры числа
Как эффективно получить последнюю цифру целого числа?
Основной и самый быстрый способ - использовать оператор остатка от деления на 10. Оператор % возвращает остаток, который для положительных чисел и есть последняя цифра.
number = 12345
last_digit = number % 10
print(last_digit) # Вывод: 5Python последняя цифра числа (получение последней цифры числа в python)
5
Этот метод работает только для целых чисел. Для отрицательных чисел результат может быть неожиданным, так как % в Python возвращает остаток с тем же знаком, что и делитель (10). Например, -123 % 10 даст 7, а не 3. Чтобы получить истинную последнюю цифру (например, модуль числа), можно взять abs(number) % 10.
Проблема:
Для отрицательных чисел -123 % 10 возвращает 7, потому что остаток всегда положительный (10 - 3 = 7). Если нужна последняя цифра оригинального числа (с учётом знака), следует использовать abs(number) % 10. Для чисел с плавающей точкой оператор % работает, но возвращает остаток дробной части, а не последнюю цифру целой части.
Как получить последнюю цифру через преобразование в строку?
Универсальный метод для целых и чисел с плавающей точкой, когда нужно получить последний символ строкового представления числа.
number = 789.123
last_char = str(number)[-1]
print(last_char) # Вывод: '3' (последняя цифра дробной части)
3
Если нужно получить последнюю цифру целой части, следует предварительно взять целую часть int(number) или использовать str(int(number))[-1].
Проблема:
Для очень больших чисел преобразование в строку может быть менее эффективным по памяти. Также метод даёт символ, который затем нужно преобразовать в целое число (int()). Для целых чисел это дополнительный шаг. Кроме того, если число представлено в научной нотации (например, 1e10), строковое представление может содержать 'e', и последний символ не будет цифрой.
Как применить функцию divmod?
Функция divmod(a, 10) возвращает кортеж (частное, остаток). Остаток и есть последняя цифра.
number = 456
quotient, remainder = divmod(number, 10)
print(remainder) # Вывод: 6
6
Этот способ удобен, если помимо последней цифры нужно получить число без последней цифры (частное). Для отрицательных чисел divmod ведёт себя так же, как оператор %.
Проблема:
Аналогичная проблема с отрицательными числами. Для получения модуля последней цифры нужно использовать divmod(abs(number), 10).
Как получить последнюю цифру для чисел с плавающей точкой (целая часть)?
Если число дробное, и нужно извлечь последнюю цифру его целой части, можно использовать комбинацию int(number) % 10.
number = 987.654
last_digit_int = int(number) % 10
print(last_digit_int) # Вывод: 7
7
Метод подходит для положительных и отрицательных чисел, если использовать abs(int(number)) % 10 для получения абсолютной цифры.
Проблема:
Функция int() отбрасывает дробную часть путём усечения к нулю (например, int(-9.9) даёт -9). Для отрицательных чисел int(number) % 10 может давать неожиданный остаток, если не учитывать модуль.
Ниже приведены расширенные примеры для различных сценариев извлечения последней цифры.
Примеры
Простое положительное число
number = 13579
last = number % 10
print(last)
9
Отрицательное число (абсолютная последняя цифра)
number = -2468
last = abs(number) % 10
print(last)
8
Отрицательное число (остаток от деления Python)
number = -2468
last_python = number % 10
print(last_python)
2
Обратите внимание: результат - 2, потому что -2468 = -247 * 10 + 2. Если нужна цифра оригинального числа (последняя цифра модуля), используйте abs().
Извлечение двух последних цифр
number = 123456
last_two = number % 100
print(last_two)
56
Последняя цифра из строкового представления (целое)
number = 9876543210
last_str = str(number)[-1]
print(last_str, type(last_str))
last_int = int(last_str)
print(last_int, type(last_int))
0 <class 'str'> 0 <class 'int'>
Последняя цифра целой части дробного числа
number = -12.345
last_int_digit = abs(int(number)) % 10
print(last_int_digit)
2
Использование divmod с отрицательным числом
number = -123
quot, rem = divmod(number, 10)
print(rem) # остаток по правилам Python
quot_abs, rem_abs = divmod(abs(number), 10)
print(rem_abs) # модуль последней цифры
7 3
Получение последней цифры из числа в другой системе счисления (например, шестнадцатеричной)
hex_number = 0xA3F
last_hex_digit = hex_number % 10 # десятичная последняя цифра
print(last_hex_digit)
# Чтобы получить последний символ шестнадцатеричного представления:
last_hex_char = hex(hex_number)[-1]
print(last_hex_char)
5 F
Производительность: сравнение методов (для большого числа)
import time
number = 10**1000000 # очень большое число
start = time.time()
last_mod = number % 10
print('Модуль:', time.time() - start)
start = time.time()
last_str = int(str(number)[-1])
print('Строка:', time.time() - start)
Модуль: 0.0001 Строка: 0.0032
Оператор % значительно быстрее для больших чисел, так как не требует преобразования в строку.