Помогите решить 4-ую задачу из Проекта Эйлера

Задача звучит так:

  • "Число-палиндром с обеих сторон (справа налево и слева направо) читается одинаково. Самое большое число-палиндром, полученное умножением двух двузначных чисел – 9009 = 91 × 99. Найдите самый большой палиндром, полученный умножением двух трехзначных чисел."
def up(x, y):
    if y == 999:
        x += 1
        return x, y
    else:
        y += 1
        return x, y
def four(x, y):
    while x != 1000:
        num = str(x*y)
        if num == num[::-1]:
            guess = num
            x, y = up(x, y)
            print(guess)
        else:
            x, y = up(x, y)
    return guess
print(four(100, 100))

Выдает ошибку "local variable 'guess' referenced before assignment", хотя если уменьшить передаваемое значение при вызове функции до десяти всё работает как надо.

print(four(10, 10)) #вот так вот

Я так и не смог понять почему в первом случае работает, а во втором нет.


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

Автор решения: Stanislav Volodarskiy

При вызове four(100, 100) функция не находит ни одного кандидата в ответы, а в этой ситуации код не определяет переменную guess и возникает ошибка в операторе return guess.

Распечатка пар x * y показывает что перебираются пары вида 100 * y и вида x * 999:

100 * 100
100 * 101
...
100 * 998
100 * 999
101 * 999
102 * 999
...
998 * 999
999 * 999

Среди этих пар нет нужной.

→ Ссылка