2016-01-01 171 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

標記爲已回答! –