2016-09-17 61 views
-2

我爲一個數字的每個數字寫了下面的程序。但是,它顯示一個錯誤,因爲「int」對象是不可迭代的。Python中的TypeError編程

def square_digits(num): 

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

result = square_digits(12) 
print(result) 
+0

好,'int's真的AREN不可迭代...你能給出一個示例輸入和你想要得到的輸出嗎? – Mureinik

回答

2

您正在尋找range(num)函數。

您可能還想使用list(表示爲[brackets, and, commas])。

試試這個,例如:

my_list = [] # empty list 
for char in 'aword': 
    my_list.append(char * 2) 
print(my_list) 

或將真正Python的您可以逐步通過數據,並在同一時間列表解析創建列表。你可以把它像一個在線for環路返回list

result = [char * 2 for char in 'aword'] 
print(result) 

第一部分(char * 2)告訴你在列表中的每個條目想要什麼。在你的情況下,這將是一些源數據的平方運算。第二部分(for char in 'aword')告訴你從哪裏獲取源數據。在你的情況下,它將是range(num)

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)應在python2返回列表[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]如果num = 12 。然而,在python3中,range函數不會返回一個列表,相反,它會返回一些可以像列表一樣爲這個問題迭代的東西。

但是,我不能肯定它是否是一個列表中尋找結果,如果沒有,請隨時澄清你的問題,希望其他人也可以插入內容。

+0

請注意,如果他正在使用Python 3,正如他的'print'語句中的parens所建議的那樣,'range'不會返回一個列表,但實際上會生成一個列表。 –

+0

感謝您的支持。我在回答中添加了一些澄清性說明以涵蓋此事實。 –

+0

非常感謝你BB :) – Imrankhan