Python编程中的TypeError

时间:2016-09-17 08:17:58

标签: python

我为一个数字的每个数字编写了以下程序。但是,它显示错误为" int"对象不可迭代。

def square_digits(num):

a = 1
for i in num:
  a = i * i        
  return a

result = square_digits(12)
print(result)

2 个答案:

答案 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中,范围函数不会返回一个列表,而是会返回一些可以像列表一样迭代的东西,用于此问题。

但是,我不确定它是否是您要查找的结果列表,如果没有,请随时澄清您的问题,希望其他人也可以加入。