2016-01-01 173 views
1

这里有一小段代码用于处理来自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)的值打印到屏幕上,它就是一个数字。我怎样才能解决这个问题?Python函数没有评估

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() 
+2

如何改变'str'另一个变量的名字,说'my_str'以避免阴影内置的方法' str' –

+0

你的脚本产生了什么样的错误?请给出一个完整的堆栈跟踪。 –

+0

这样做有什么不同吗? –

回答

6

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

是的,我忽略了这一点。谢谢您的帮助。 – dsaxton

+0

标记为已回答! –