2017-10-10 72 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