Даны два натуральных числа m и n (n<=9999, n<=9999 ). Проверить есть ли в записи числа m цифры, одинаковые с цифрами в записи числа n

Уровень моих знаний не велик поэтому я решил вот так: Буду сильно благодарен, если решите с объяснением как новичку))спасибо заранее!

from math import*
m, n = map(int, input().split())
m4= m%10
m3= m//10%10
m2=m//100%10
m1= m//1000
n4= n%10
n3= n//10%10
n2=n//100%10
n1= n//1000
if m1==n1 or m1==n2 or m1== n3 or m1==n4 or m2==n1 or m2==n2 or m2==n3 or m2==n4 or 
m3==n1 or m3==n2 or m3==n3 or m3==n4 or m4==n1 or m4==n2 or m4==n3 or m4==n4:
print("YEs")
else:
print("No")

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

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

для нахождения пересечения (одинаковых цифр) удобно использовать тип данных set (множество), для этого у множеств есть метод intersection. но сначала надо сделать из числа множество, то есть разобрать его на цифры. для этого можно воспользоваться циклом:

m1, n1 = set(),set()  # пустые множества
while m:              # разбираем на цифры число m
    m1|={m%10}        # добавляем в множество последнюю цифру
    m//=10            # отбрасываем последнюю цифру
while n:
    n1|={n%10}
    n//=10
print('Yes' if n1 & m1 else 'No')  # если есть пересечение печатаем Yes

то же самое можно сделать с помощью рекурсивной функции:

f = lambda n: {n} if n<10 else {n%10}|f(n//10)  # делаем из числа множество
print('Yes' if f(n)&f(m) else 'No')
→ Ссылка
Автор решения: Stanislav Volodarskiy

Работать с числами не надо. Вводим две строки, строим из них множества, проверяем множества на пересечение:

s1, s2 = map(set, input.split())
if s1 & s2:
    print('Yes')
else:
    print('No')
→ Ссылка
Автор решения: MiniMax

С использованием списка, при условии, что ноль не входит в натуральные числа.

def same_digits(a, b):
    lst = [False] * 10

    while a:
        lst[a % 10] = True
        a //= 10

    while b:
        if lst[b % 10]:
            return True
        b //= 10

    return False


print(same_digits(165, 1280))
print(same_digits(765, 5270))
print(same_digits(5, 1270))

Output

True
True
False
→ Ссылка