【问题标题】:Python- using sum in for loop with an errorPython-在for循环中使用sum并出现错误
【发布时间】:2020-11-05 02:58:12
【问题描述】:

我为什么要这样写这个程序(第一种方式):

sum = 0
for i in range(1, 10):
    if (i % 3 == 0) or (i % 5 == 0):
        sum = sum + i
print(sum)
         

为什么我不能这样写?(第二种方式):

for i in range(1, 10):
    if (i % 3 == 0) or (i % 5 == 0):
    print(sum(i))

第二种方式我收到此错误:

TypeError: 'int' 对象不可迭代

这个错误到底是什么意思? 我可以在哪里使用 sum 函数?哪里没有?

我必须列一个列表才能使用 sum 函数吗?

非常感谢

【问题讨论】:

  • 第二个应该是print(i),因为你只有一个值
  • 您已将 inbuild 函数 sum 覆盖为 int 变量 sum,因此由于您无法遍历整数,因此会收到此错误

标签: python sum


【解决方案1】:

正如the doc 所说,内置函数sum() 的第一个参数必须是可迭代的。

列表和元组是可迭代的示例。 int 不是可迭代的。

现在,在您的第一种方法中,sum 是您引入的变量,不幸的是它与内置函数同名。一般来说,应该避免这种情况(引入与标准函数或模块名称冲突的用户定义名称)

在您的第二种方法中,sum 指的是该名称的内置函数,并且它需要一个可迭代(例如,列表或元组)作为其第一个参数,但您传递的是 i,这是一个int对象

【讨论】:

  • 非常感谢。很有帮助
【解决方案2】:

当您编写sum=0 时,您已经覆盖了python 函数sum()。 因此,当您编写 sum(1) 时,您要求 python 计算 0(1) 这是不可能的,因为 0 不可迭代

一般来说,不建议将sum 赋值给一个值

可以使用以下任一代码:

s=0
for i in range(1, 10):
   if (i % 3 == 0) or (i % 5 == 0):
       s+=1
       print(s)

如果你想使用 sum 函数更好:

print(sum([i for i in range(10) if (i % 3 == 0) or (i % 5 == 0)]))

【讨论】:

  • "你让python计算0(1)"。这不是错误“int object is not iterable”发生的正确解释。
猜你喜欢
  • 1970-01-01
  • 2019-05-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多