Как определить, содержит ли число заданную цифру, и найти подстроку в числе

Раздел: Основы Python -> Числовые операции

Методы поиска цифры или числа в числе

Как проще всего проверить, содержит ли число определённую цифру?

Самый простой способ - преобразовать число в строку и использовать оператор in. Это работает для целых чисел и чисел с плавающей точкой, но нужно учитывать десятичную точку и знак.

number = 123456
digit = '5'
if digit in str(number):
    print(f'Цифра {digit} найдена')
else:
    print(f'Цифра {digit} не найдена')

как найти число в числе python (как найти цифру в числе python)

Проблема: для отрицательных чисел знак минус может быть воспринят как часть строки, поэтому лучше использовать str(abs(number)).

Ошибка: если нужно искать цифру как число (int), прямой оператор in не применим к целым числам. Данный подход работает только со строками.

Цели: быстрая проверка наличия цифры в числе, удобно для пользовательского ввода.

Как найти цифру в числе с помощью математических операций (без строк)?

Можно извлекать цифры числа, последовательно деля его на 10 и беря остаток. Это позволяет работать с числом как с последовательностью цифр без преобразования в строку.

def has_digit_math(number, target):
    number = abs(number)
    while number > 0:
        digit = number % 10
        if digit == target:
            return True
        number //= 10
    return False

# Пример
print(has_digit_math(12345, 5))  # True
print(has_digit_math(12345, 9))  # False

Проблема: число 0 обрабатывается отдельно, так как цикл не выполняется. Нужно добавить условие if number == 0 and target == 0: return True.

Также метод неэффективен для очень больших чисел, но для обучения и небольших данных подходит.

Цели: изучение основ работы с цифрами числа, использование арифметических операций, когда строковые методы недоступны.

Как найти все позиции (индексы) определённой цифры в числе?

Если нужно получить индексы вхождений цифры в строковом представлении числа, используется метод enumerate в сочетании с циклом.

number = 1020304050
str_num = str(number)
target = '0'
positions = [i for i, ch in enumerate(str_num) if ch == target]
print(f'Цифра {target} встречается на позициях: {positions}')

Проблема: позиции считаются относительно строки, включая знак минус (если число отрицательное) и десятичную точку. Нужно учитывать это при интерпретации.

Цели: поиск индексов для дальнейшей обработки, например, замена цифры на определённой позиции.

Как найти подстроку (число) внутри числа?

Чтобы узнать, содержится ли одно число как часть другого, можно преобразовать оба в строки и использовать оператор in или метод find.

big_number = 123456789
small_number = 345
if str(small_number) in str(big_number):
    print(f'{small_number} содержится в {big_number}')
else:
    print('Не содержится')

Проблема: поиск подстроки чувствителен к расположению десятичной точки и знака. Для чисел с плавающей точкой может дать неожиданный результат (например, '0.5' in '1.05' вернет False, так как строковое представление разное).

Цели: проверка, является ли одно число частью другого, например, поиск номера заказа в большом идентификаторе.

Как извлечь все цифры числа в отдельный список?

Преобразовав число в строку, можно использовать list comprehension или map для получения списка целых цифр.

number = 987654
# Способ 1: с помощью list comprehension
digits_list = [int(d) for d in str(abs(number))]
print(digits_list)
# Способ 2: с помощью map
digits_list2 = list(map(int, str(abs(number))))
print(digits_list2)

Проблема: при использовании str(abs(number)) теряется информация о знаке. Если нужен знак, можно сохранить его отдельно.

Цели: получение массива цифр для дальнейшей математической обработки, например, подсчёт суммы цифр или проверка на палиндром.

Дополнительные примеры и нестандартные сценарии

Ниже приведены расширенные примеры, демонстрирующие различные нюансы поиска цифр и чисел.

Пример 1: подсчёт количества вхождений каждой цифры в числе

Пример
from collections import Counter

number = 1122334455
str_num = str(abs(number))
counter = Counter(str_num)
for digit, count in sorted(counter.items()):
    print(f'Цифра {digit}: {count} раз(а)')
Цифра 1: 2 раз(а)
Цифра 2: 2 раз(а)
Цифра 3: 2 раз(а)
Цифра 4: 2 раз(а)
Цифра 5: 2 раз(а)

Проблема: Counter считает символы, включая десятичную точку. Если нужно считать только цифры, предварительно отфильтруйте строку методом filter(str.isdigit, str_num).

Пример 2: поиск числа в числе с плавающей точкой

Пример
pi = 3.1415926535
search = '1415'
if search in str(pi):
    print(f'Подстрока {search} найдена в числе {pi}')
else:
    print('Не найдена')
Подстрока 1415 найдена в числе 3.1415926535

Проблема: строковое представление числа с плавающей точкой может быть в научном формате (например, 1e10). Для надёжности используйте repr или явное форматирование.

Пример 3: рекурсивный подсчёт цифр числа

Пример
def count_digits(n):
    n = abs(n)
    if n < 10:
        return 1
    else:
        return 1 + count_digits(n // 10)

print(count_digits(12345))  # 5
print(count_digits(0))      # 1
5
1

Проблема: глубокая рекурсия для очень больших чисел (более ~1000 цифр) может вызвать переполнение стека.

Пример 4: поиск цифры с помощью регулярного выражения

Пример
import re

number = 1234567890
pattern = r'5'  # ищем цифру 5
if re.search(pattern, str(number)):
    print('Цифра 5 найдена')
else:
    print('Не найдена')
Цифра 5 найдена

Проблема: регулярные выражения избыточны для простого поиска одной цифры, но полезны для сложных шаблонов (например, поиск последовательности цифр, начинающейся с определённой).

Пример 5: поиск цифры в числе, представленном в другой системе счисления

Пример
num_hex = hex(255)[2:]  # 'ff'
search = 'f'
if search in num_hex:
    print(f'Цифра {search} найдена в шестнадцатеричном представлении')
else:
    print('Не найдена')
Цифра f найдена в шестнадцатеричном представлении

Проблема: при работе с разными системами счисления строковое представление может содержать буквы (a-f). Поиск всегда регистрозависим.

Как найти цифру в числе Python - comments

En
как найти число в числе python (python)