Вывести на экран все двухзначные числа в записи которых есть хотя бы одна цифра N

Вывести на экран все двухзначные числа в записи которых есть хотя бы одна цифра N Написал следующий код :

a = int(input())
for i in range(10, 99): 
    if ((i / 10 == a) or (i % 10 == a)):
     
     print(i, end=' ')

Но он почему то не выводит цифру 21 при a=2


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

Автор решения: Fox Fox
N = input("Введите цифру N: ")
print([i for i in range(10, 100) if N in str(i)])
→ Ссылка
Автор решения: CrazyElf

Проблема в том, что вы использовали не целочисленное деление для проверки (/ вместо //).

А вообще можно короче проверить сразу оба условия, используя встроенную функцию divmod:

a = int(input())
print(*(i for i in range(10, 100) if a in divmod(i, 10)))
# 12 20 21 22 23 24 25 26 27 28 29 32 42 52 62 72 82 92

a in divmod(i, 10) - это одновременная проверка, что a либо равно целочисленному результату деления i//10, либо a равно остатку от деления i на 10.

P.S. range не включает конечное значение в перебор, поэтому нужно задавать диапазон до 100, а не до 99.

P.P.S. Спасибо rotabor за идею, ещё одно решение, которое не перебирает весь диапазон 10-99 (т.е. 90 чисел) и не проверяет результаты деления и взятия остатка, а перебирает и выводит только те числа, где действительно есть искомая цифра, таких чисел всегда будет не более 18.

a = int(input())
for i in range(1, 10):
    if i == a:
        for j in range(10):
            print(f'{i}{j}', end=' ')
    else:
        print(f'{i}{a}', end=' ')
→ Ссылка