整数之和 - 'int'对象不可迭代

时间:2015-11-18 20:56:00

标签: python

我的问题与python中的sum函数有关。

所以我的代码是

def black_jack(a, b):
    if sum(a, b) > 21:
        return 0
    else:
        return sum(a, b)


print black_jack(10, 5)

我收到错误消息:

'int' object is not iterable

有人可以解释为什么会发生这种情况以及如何解决这个问题吗?

5 个答案:

答案 0 :(得分:5)

查看the documentation

  

sum(iterable [,start])

     

从左到右汇总开始和迭代的项目并返回总数。默认为0。可迭代的项目是   通常是数字,起始值不允许是字符串。

所以你必须传递一个iterable作为参数,而不是一个int!

sum((a, b))应该可以正常使用。

这是一个在列表中存储了许多值时使用的函数(例如),如果要对两个值求和,则只需使用a + b

答案 1 :(得分:1)

以下是什么问题?

def black_jack(a, b):
    if a + b > 21:
        return 0
    else:
        return a + b

print black_jack(10, 5)

在二十一点中,你可以拥有的不仅仅是两张牌,但是以你的例子为例,你可以假设一只牌只有两张牌。如果您允许使用可变数量的卡,那么您需要使用其他人建议的可迭代对象:

def black_jack(values):
    total = sum(values)
    return 0 if total > 21 else total

print black_jack(10, 5)

来自sum()的文档:

  

<强> sum( iterable [, < EM> start ])

     

从左到右汇总开始和可迭代的项目并返回总计。 开始默认为0 iterable 的项目通常是数字,起始值不允许是字符串。

     

对于某些用例,sum()有很好的替代方案。连接字符串序列的首选快速方法是调用''.join(sequence)。要以扩展精度添加浮点值,请参阅math.fsum()。要连接一系列迭代,请考虑使用itertools.chain()

     

版本2.3中的新内容。

答案 2 :(得分:0)

sum期望可迭代对象(如list)。所以代码应该是:

def black_jack(a, b):
    if sum([a, b]) > 21:
        return 0
    else:
        return sum([a, b])

print black_jack(10, 5)

答案 3 :(得分:0)

sum将第一个参数作为列表。这是:

def black_jack(a, b):
    if (sum([a], b) > 21):
        return 0
    else:
        return sum([a], b)


print black_jack(10, 5)

答案 4 :(得分:0)

sum is builtin function, look at the documentation:

In [1]: sum?
Docstring:
sum(sequence[, start]) -> value

Return the sum of a sequence of numbers (NOT strings) plus the value
of parameter 'start' (which defaults to 0).  When the sequence is
empty, return start.
Type:      builtin_function_or_method

so you need to pass it a iterable! :
solution1

sum([a, b]) #list

solution2

sum((a, b)) #tuple