我正在尝试将所有整数添加到'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对象不可迭代'
答案 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)
将元素添加到列表中。