Не понимаю проблему в коде

Решаю 5ое задание ЕГЭ ИКТ. Начал писать код, но столкнулся с проблемой. Без одной строки код отказывается работать вовсе. Ошибку я обнаружил, но не могу понять почему это работает именно так. Вот само задание:

(А. Сардарян) На вход алгоритма подаётся два натуральных числа М и N. Алгоритм ‘строит по ним новое число R следующим образом.

  1. Вычисляется произведение Р1 всех ненулевых чётных цифр чисел М и N.

  2. Вычисляется произведение Р2. всех нечётных цифр чисел М и N.

  3. Результат R вычисляется как модуль разности Р1 и Р2. Например, для N = 256 и M = 108 получаем Р1 = 2* 6* 8 = 96 и, P2 = 5*1 = 5, так что R = |96 - 5|= 91. Укажите минимальное число М, при котором для N = 120 получается R = 29.

Мой код

def f(a):
    t=1
    for x in a:
        t*=x
    return t
p1 = 1
p2 = 1
for m in range(1,1111):
    s = map(int,list(str(m)))
    s1 = [int(x) for x in s if x%2==0 and x!=0]
    s = map(int,list(str(m))) #1
    s2 = [int(x) for x in s if x%2!=0]
    p1 = f(s1)*2
    p2 = f(s2)
    r=abs(p1-p2)
    if r==29:
        print(m)

Если убрать строку #1, то код не работает. В чем проблема?


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

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

Приведенный Вами код не будет работать, что с этой строкой, что без нее. Преобразование должно выглядеть как-то так

s = list(map(int,str(m)))

, а не как у Вас сейчас.

→ Ссылка