这是我从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
这是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()
答案 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