Здесь представлен небольшой кусок кода, который я имею для работы над программистской головоломкой из Project Euler. Я читаю файл из 1000 цифр и пытаюсь найти 13 соседних цифр, которые имеют наибольшее произведение. Проблема в том, что строка max_prod = prod_over_str(s) не устанавливает max_prod в возвращаемое значение prod_over_str, а вместо этого функцию, и запуск скрипта вызывает ошибку в утверждении if prod_over_str(s) > max_prod, потому что каким-то образом prod_over_str(s) является int, а max_prod - функция. Однако если я выведу значение prod_over_str(s) на экран, то это будет число. Как это исправить?

def prod_over_str(s):
    prod = 1
    for c in s:
        prod *= int(c)
    return prod

with open('/path/text.txt') as f:
    s = f.read(13)
    max_prod = prod_over_str(s)

    while True:
        c = f.read(1)
        if not c:
            break
        s = s[1:] + c
        if prod_over_str(s) > max_prod:
            max_prod = prod_over_str

Здесь есть обратная связь:

In [18]: %run problem8.py
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
/home/dsaxton/Desktop/Python/project_euler/problem8.py in ()
     14             break
     15         s = s[1:] + c
---> 16         if prod_over_str(s) > max_prod:
     17             max_prod = prod_over_str
     18 

TypeError: unorderable types: int() > function()

dsaxton

Ответов: 1

Ответы (1)

Ваша ошибка на самом деле находится в строке под оператором if:

if prod_over_str(s) > max_prod: 
    max_prod = prod_over_str

Сначала вы проверяете возвращаемое значение функции, а затем присваиваете самой функции значение max_prod.

Вам нужно сделать примерно следующее:

if prod_over_str(s) > max_prod:
     max_prod = prod_over_str(s)

Или:

prod = prod_over_str(s)
if prod > max_prod: 
    max_prod = prod

2022 WebDevInsider