Как написать программу по нахождению одинаковых цифр в числе?
Написал программу, по нахождению одинаковых цифр в числе. Не могу найти ошибку 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 шт):
У вас цикл 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 'Нет')
Можно решить вопрос просто стандартными структурами. Построить список со всеми символами числа, потом множество этих символов (удалит дубли), если длина этих двух переменных не равна то, очевидно, есть дубли. Предварительно можно проверить, что если кол-во символов в списке больше 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('Нет')
import re
def check(text):
s = re.findall(r'(.)\1+', text)
print(s)
check('wsgf443333534554iuhouih99ghd55')
check('wsgf4353454iuhouih9ghd5')
Можно не переводить ввод в число, взять от ввода множество и сравнить размеры введенной строки и множества.
x = input('Введите число: ')
print('Да' if len(set(x)) != len(x) else 'Нет')
Реализуем функцию 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 "Нет")