2017-10-10 71 views
0

想不出適合我的問題的標題。Python - 關於變量聲明

所以無論如何,我一直在尋找一種算法來找出一個列表是平衡與否,我已經碰到這個問題就來了:Algorithm for finding if an array is balanced

答案之一是現貨上什麼,我需要完成。但是,我想知道如果從下面的代碼更改第2行,會發生什麼情況。

def balanced(numbers): 
    left_total, right_total = 0, sum(numbers) 
    for pivot, value in enumerate(numbers): 
     if left_total == right_total: 
     return pivot 
    left_total += value 
    right_total -= value 
    return None 

我想知道爲什麼它拋出一個類型錯誤:

left_total = 0 
right_total = 0 
sum(numbers) 

希望有人能幫助我瞭解:如果我這樣做2號線「廉政」對象不是可迭代。 謝謝!

+1

'right_total'被分配了一筆'(數字)'的值。不是0 – byxor

+0

這三行*不會拋出該錯誤。他們也不會像他們正在取代的那樣做同樣的事情。 – jonrsharpe

+0

和數字是一個列表,這就是錯誤的意思 –

回答

3

你傳入的「numbers」變量是一個int。

不能(1)例如做總和但是可以做總和([1,2])或總和((1,2))

傳遞給平衡變量必須是一個可迭代類型。 AKA列表,元組,一組等

完全無關的錯誤:

你不應該做

left_total = 0 
right_total = 0 
sum(numbers) 

而是

left_total = 0 
right_total = sum(numbers) 

如果你想模仿功能在做什麼。

欲瞭解更多的left_total,right_total問題看:Is there a standardized method to swap two variables in Python?

https://docs.python.org/3/reference/expressions.html#evaluation-order

+0

謝謝,這是我想要的問,但我不知道如何解釋我的問題。 :) – BlueHam