Помогите решить 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
Среди этих пар нет нужной.