Python函数没有评估

dsa*_*ton 1 python

这是我从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
Run Code Online (Sandbox Code Playgroud)

这是Traceback:

In [18]: %run problem8.py
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
/home/dsaxton/Desktop/Python/project_euler/problem8.py in <module>()
     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()
Run Code Online (Sandbox Code Playgroud)

Rob*_*kal 6

您的错误实际上在if语句下面的行中:

if prod_over_str(s) > max_prod: 
    max_prod = prod_over_str
Run Code Online (Sandbox Code Playgroud)

首先检查函数的返回值,然后将函数本身分配给max_prod.

你需要做这样的事情:

if prod_over_str(s) > max_prod:
     max_prod = prod_over_str(s)
Run Code Online (Sandbox Code Playgroud)

要么:

prod = prod_over_str(s)
if prod > max_prod: 
    max_prod = prod
Run Code Online (Sandbox Code Playgroud)