2017-01-16 95 views
0

請幫我理解這裏發生了什麼。我的目標是創建一個讀取「input.txt」並返回文本文檔中每行的最小值,最大值和平均值的函數。在文檔中的文本如下:Python27 TypeError:不支持的操作數類型(s)+ ='int'和'str'

min:1,2,3,4,5,6 
max:1,2,3,4,5,6 
avg:1,2,3,4,5,6 

我的代碼如下所示:

import re 

def process(): 

    file = open("input.txt", "r") 

    for line in file: 
     newL = re.findall("\d+", line) 

    minimum = min(newL) 
    maximum = max(newL) 
    length = len(newL) 
    numSum = sum(newL) 

    print newL 
    print minimum 
    print maximum 
    print length 
    print numSum 

    file.close() 

process() 

一切都打印出來,除了numSum,這給在標題中提到的錯誤罰款。

+0

可能重複的[我如何連接str和int對象?](http://stackoverflow.com/questions/25675943/how-can-i-concatenate-str-and-int-對象) – Faibbus

回答

1

re.findall返回字符串列表,例如["foo", "bar", "baz"]。的sum實現是這樣的:

def sum(xs): 
    total = 0 
    for x in xs: 
     total += x 
    return total 

所以,在某些時候,它會嘗試執行這行total = 0 + "foo"和跌倒,因爲Python不知道如何將int添加到string。事實上,你知道你所有的字符串實際上包含int s是不重要的,因爲表達式1+'1'可能明智地評估爲'11'2,並且Python不會猜測哪個字符。

當你在每一行中閱讀,你應該將每個字符串轉換爲一個int。這應該解決您的問題

+1

@ZeroPiraeus,的確,我想要一個更簡單的例子。鑑於OP似乎很新,這可能是一個家庭作業問題,我不想僅僅提供解決方案。 – ymbirtt

+0

非常感謝。我添加了一個列表理解來將所有字符串轉換爲整數,並且它可以工作。 'newL2 = [int(物品)爲newL中的物品]' – Muzi

+0

@Muzi,別擔心。如果這個答案解決了你的問題,你可能想用綠色的勾號來接受它。編輯我的答案以包含您的解決方案,您可能會發現它也很有建設性。 – ymbirtt

相關問題