如何修复“ int对象不可迭代”

时间:2019-10-07 16:13:34

标签: python

我正在尝试将所有整数添加到'a'变量中,但是尽管其中包含各种不同的整数,但该'a'变量不能用作列表或字符串。

我正在编写一个Python程序,该程序给定一个由用户提供的正整数num,它打印出所有除数的总和。 我已经尝试过将此“ a”变量设置为列表,但是会发生相同的错误

import math
num = int(input("Num: "))
a = num + 1 # because range excludes the last number
b = range(1, a) 
for i in (b):
    x = num / i
    if math.floor(x) == x:
            c = list(i)

我已经尝试过使这个'a'变量成为列表,但是会发生相同的错误:'int对象不可迭代'

2 个答案:

答案 0 :(得分:1)

list()创建一个新列表,其参数必须是可迭代的(例如,元组,另一个列表等)。如果您仅传递一个数字i,它将不起作用。

我想您要做的不是在每次循环迭代中创建新列表,而是将i元素添加到已经存在的列表中。
您可以通过以下方式实现:

num = int(input("Num: "))
a = num + 1 # because range excludes the last number
b = range(1, a)
divisors = []  # create a new list where the results will be stored
for i in (b):
    x = num / i
    if math.floor(x) == x:
        divisors.append(i)  # add the number at the end of the list

如果要对所有除数求和,请使用:

sum(divisors)

获得相同结果的一种甚至更多的“ Pythonic”方法(尽管,坦白地说,如果您不习惯list comprehensions的话,不一定会更容易阅读):

num = int(input("Num: "))
divisors_sum = sum(i for i in range(1, num + 1) if num//i == num/i)

我假设您在这里使用Python 3。在Python 3中,//是地板分割,因此您不必使用math.floor。有关///的更多详细信息,请参见this post

答案 1 :(得分:0)

您可以在循环外部创建一个空列表:c = [],然后每次通过c.append(i)将元素添加到列表中。