@Xlemon2

Где ошибка в написании программы по нахождению одинаковых цифр числе?

Написал программу, по нахождению одинаковых цифр в числе. Не могу найти ошибку
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)):
    while i<=1:
        if a[i] == a[i+1]:
            print('да')
            break
else:
        print("нет")
  • Вопрос задан
  • 598 просмотров
Пригласить эксперта
Ответы на вопрос 4
@alexbprofit
Junior SE
def sample(n: int) -> bool:
    x = str(n)
    
    y = list(x)
    
    for i in range(len(y)):
        for j in range(len(y)):
            if y[i] == y[j] and i != j:
                return True
    return False
    
if __name__ == '__main__':
    n = int(input("Введите число: "))
    if sample(n):
        print("В числе есть повторяющиеся цифры")
    else:
        print("Все цифры числа разные")
Ответ написан
Комментировать
nullnull
@nullnull
Конкретно в вашем коде ошибка такая:

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

def array(x):
    global a
    a = []
    while x > 0:
            b = x % 10
            a.append(b)
            x //= 10
            return list(reversed(a)) <----------- этот return стоит внутри цикла и, поэтому, он вернёт только одну цифру. Это ошибка.


print(array(x))
for i in range(len(a)): <------------ из-за a[i+1] вы нарушили граничные значения, будет ошибка.
    while i<=1: <---------------------- этот цикл зациклился, т.к. вы не изменяете i внутри цикла while. 
И если первые две цифры не будут равны, то ничего не произойдёт, бесконечный while.
        if a[i] == a[i+1]:
            print('да')
            break
else:
        print("нет")


Как бы я предложила бы улучшить этот код:
  1. Хорошо подумать и написать алгоритм на листочке: что есть (данные), что нужно сделать (действия), что должно получиться (данные).
  2. Заменить while на for (с другим счётчиком, разумеется), потому что тема while'ов у вас не раскрыта :)
  3. Изучить область работы break: какой цикл остановится. На примере вашего кода break не останавливает for, если что.
  4. Аналогично изучить работу return
  5. Изучить тему "соседние элементы в массиве", "границы в массиве", "как изменять границы если индексы i+1,i+2, i-1, i-3"
Ответ написан
Комментировать
@denis_igoria
Вы работаетете с числом как со строкой, незачем переводить в int.
divmod лучше
while x > 0:
            b = x % 10
            a.append(b)
            x //= 10

while x:
    x, b = divmod(x, 10)
    a.append(b)

ошибочный отступ
return list(reversed(a))
не видно условие остановки
while i<=1:
Ответ написан
Комментировать
solotony
@solotony
покоряю пик Балмера
import collections
collections.Counter(input())
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы