Как написать программу по нахождению одинаковых цифр в числе?

Написал программу, по нахождению одинаковых цифр в числе. Не могу найти ошибку upd нужно просто проверить есть ли повторяющиеся цифры или нет.

x = int(input('Введите число:'))

def array(x):
    global a
    a = []
    while x > 0:
        b = x % 10
        a.append(b)
        x //= 10
        return list(reversed(a))


print(array(x))
for i in range(len(a)):
    if a[i] == a[i+1]:
        print('да')
        break
    else:
        print("нет")

Ответы (5 шт):

Автор решения: ioprst

У вас цикл while завершается на первой итерации. Уберите отступ перед return.

Вторая ошибка заключается в том, что у вас цикл for выполняется len(a) раз. Поэтому на последней итерации a[i+1] приведет к исключению IndexError. Используйте цикл до len(a) - 1.

Ну и сам алгоритм сравнения чисел неверный. Для числа 121 вы не найдете совпадений, т.к. 1 != 2 и 2 != 1. Можно сравнить длину множества от a с длиной a. Множество содержит только уникальные элементы последовательности, поэтому, если длины разные, то можно сделать вывод, что какое-то число повторяется.

Избавьтесь от глобальных переменных.

def array(x):
    nums = []
    while x > 0:
        b = x % 10
        nums.append(b)
        x //= 10
    return list(reversed(nums))


x = int(input('Введите число: '))
a = array(x)
print('Да' if len(set(a)) != len(a) else 'Нет')
→ Ссылка
Автор решения: asanisimov

Можно решить вопрос просто стандартными структурами. Построить список со всеми символами числа, потом множество этих символов (удалит дубли), если длина этих двух переменных не равна то, очевидно, есть дубли. Предварительно можно проверить, что если кол-во символов в списке больше 10 (столько всего есть цифр) то, очевдно, цифры повторяются.

def double_exist(number: int) -> bool:
    list_number = [s for s in str(number)]
    if len(list_number) > 10:
        return True

    set_number = set(list_number)
    if len(list_number) != len(set_number):
        return True
    return False


number = int(input('Введите число: '))

if double_exist(number):
    print('Да')
else:
    print('Нет')

→ Ссылка
Автор решения: Alex A
import re

def check(text):
    s = re.findall(r'(.)\1+', text)
    print(s)

check('wsgf443333534554iuhouih99ghd55')
check('wsgf4353454iuhouih9ghd5')
→ Ссылка
Автор решения: Alexey Trukhanov

Можно не переводить ввод в число, взять от ввода множество и сравнить размеры введенной строки и множества.

x = input('Введите число: ')
print('Да' if len(set(x)) != len(x) else 'Нет')
→ Ссылка
Автор решения: Runneso

Реализуем функцию double_exist, которая вернёт нам True, если есть одинаковые цифры и False в противном случае. Будем записывать найденные цифры в set, чтобы за O(1) проверять находили ли мы их раньше.

Сложность по времени: O(n), где n - число разрядов в числе.

Сложность по памяти: O(1)

def double_exist(num: int) -> bool:
    seen = set() # Создаём set
    while num > 0:
        last_digit = num % 10 # Берём последнюю цифру
        if last_digit in seen: # Проверяем последнюю цифру
            return True
        seen.add(last_digit) # Добавляем последнюю цифру в найденные
        num //= 10 # Удаляем последнюю цифру
    return False


x = int(input("Введите число: "))
result = double_exist(x)
print("Да" if result else "Нет")
→ Ссылка