我为一个数字的每个数字编写了以下程序。但是,它显示错误为" int"对象不可迭代。
def square_digits(num):
a = 1
for i in num:
a = i * i
return a
result = square_digits(12)
print(result)
答案 0 :(得分:2)
您正在寻找range(num)
功能。
您可能还想使用list
(由[brackets, and, commas]
表示)。
试试这个例子:
my_list = [] # empty list
for char in 'aword':
my_list.append(char * 2)
print(my_list)
或者要成为pythonic,您可以逐步浏览数据并使用列表理解同时创建列表。可以把它想象成一个返回for
:
list
循环
result = [char * 2 for char in 'aword']
print(result)
第一部分(char * 2
)告诉你在列表的每个条目中想要什么。在您的情况下,这将是对某些源数据的平方操作。第二部分(for char in 'aword'
)告诉您从哪里获取源数据。在您的情况下,它将是range(num)
。
答案 1 :(得分:1)
首先,这是修复代码的方法:
如果你想要一个从1到num的平方数字列表:
`
def square_digits(num):
# initialize an empty list
a = []
# why num + 1 when you want numbers until num? check out this link for an explanation
# on how to use and the different uses of the range() function
# http://pythoncentral.io/pythons-range-function-explained/
for i in range(1, num + 1):
# square the numbers beginning from 1,
squared_i = i * i
# and then add the result to the list that we have
a.append(squared_i)
# after everything is done, return the list
return a
result = square_digits(12)
print(result)
`
在您之前的示例中,您基本上是在努力完成这项工作:
`
for i in 12:
square_result = i * i
print ("the square of " + str(i) + " is " + str(square_result))
`
这是行不通的,因为你试图迭代12,这是一个int
但是如果你这样做:
`
for i in [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]:
square_result = i * i
print ("the square of " + str(i) + " is " + str(square_result))
`
然后你会有更好的结果,因为你在列表上进行迭代。
执行上述示例的较短方式是:
`
num = 12
for i in range(1, num + 1):
square_result = i * i
print ("the square of " + str(i) + " is " + str(square_result))
`
也应该有效,因为如果range(1, num + 1)
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
应该返回列表num = 12
在python2中。但是在python3中,范围函数不会返回一个列表,而是会返回一些可以像列表一样迭代的东西,用于此问题。
但是,我不确定它是否是您要查找的结果列表,如果没有,请随时澄清您的问题,希望其他人也可以加入。