Skip to main content
 首页 » 编程设计

Python 函数不评估

2025年05月04日14虾米姐

这是我用于解决 Project Euler 中的编程难题的一小段代码。我正在阅读一个 1,000 位数字的文件,并试图找到 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 <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() 

请您参考如下方法:

您的错误实际上是在 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