我的问题与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
有人可以解释为什么会发生这种情况以及如何解决这个问题吗?
答案 0 :(得分:5)
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