2016-11-09 169 views
-1

FizzBu​​zz問題有輕微變化,只是增加一個級別。Python,TypeError:'int'對象不可迭代

我已閱讀了關於這個錯誤消息的許多答案,他們都沒有幫助我理解我所缺少的東西。

所以,雖然我很欣賞答案,但我想要了解錯誤背後的原因。

無法使用簡單的循環/ if/elif結構完成此任務,而無需調用函數?

類型錯誤:「詮釋」對象不是可迭代

def solution(N): 
N = 0 
for i in N:  
    if i % 3 == 0 and i % 5 == 0 and i % 7 == 0: 
     print('FizzBuzzWoof') 
    elif i % 3 == 0 and i % 5 == 0: 
     print('FizzBuzz') 
    elif i % 3 == 0: 
     print('Fizz') 
    else: 
     print(i) 

    N = N+1 

def main(): 
    solution(35) 
main() 
+5

你的意思是'因爲我在範圍(整數)'? – Li357

+0

請發佈堆棧跟蹤。 Python告訴哪一行有錯誤...是不是你想分享的東西? – tdelaney

+0

我建議你也將函數參數重命名爲除int之外的其他內容,因爲當你在開始時聲明int = 0時它會將它變爲0.所以,當你嘗試在範圍int中找到i時,它不會做你任何好處。 – JackTheCrab

回答

1

您試圖通過單一號碼進行迭代。相反,您可以創建一個ints的數組並遍歷它。例如:

ints = [1, 2, 3] 
x.append([4, 5]) #append elements you need 
print (x) 
#result will be 1,2,3,4,5 

現在去這一點,通過1-5迭代:

for i in ints: 
    #your logic goes in here 
0

在你的代碼ints是一個整數,35所提供的例子。整數不是集合,因此不能使用該範圍作爲for-loop的範圍。正如@AndrewLi在他的評論中所建議的那樣,使用range(n)來獲取包含元素0n-1的迭代器。

在你的代碼中,你還用0代替ints作爲solution函數中的拳頭,有效地忽略瞭解析到該函數的參數。在下面的代碼中,我添加了range(arg),並將參數重命名爲arg而不是ints

def solution(arg): 
    ints = 0 
    for i in range(arg): 
    if i % 3 == 0 and i % 5 == 0 and i % 7 == 0: 
     print('FizzBuzzWoof') 
    elif i % 3 == 0 and i % 5 == 0: 
     print('FizzBuzz') 
    elif i % 3 == 0 and i % 5 == 0: 
     print('Fizz') 
    else: 
     print(i) 

    ints = ints+1 

def main(): 
    solution(35) 

main() 
+0

正在使用'range()'標準來處理這類for循環嗎?另外,我在想,我需要初始化變量'ints',即。 ints = 0,並且由於它位於for循環之前,因此它只會將值傳遞給循環,循環執行,然後每次循環迭代時不重置「ints」就結束。 – mrmjp

+0

根據你的代碼,我假設你想遍歷數字0 - 'ints',並打印_Fizz_,_FizzBu​​zz_或_FizzBu​​zzWoof_,如果相應的條件滿足。在你的代碼中你設置了'ints = 0',這意味着你拋棄了參數,用'0'覆蓋它。一般來說,當你想迭代一個數字序列時,使用_yes'range(start,end,step)',因爲它等於'for(i = 0; i Jonas

2

試試這個:

def solution(ints): 
for i in range(1, ints+1):  
    if i % 3 == 0 and i % 5 == 0 and i % 7 == 0: 
     print('FizzBuzzWoof') 
    elif i % 3 == 0 and i % 5 == 0: 
     print('FizzBuzz') 
    elif i % 3 == 0 and i % 5 == 0: 
     print('Fizz') 
    else: 
     print(i) 

def main(): 
    solution(35) 
main() 

range(0, ints+1)如果你想從0開始,包括35

+0

'0',可以省略。默認的_start_值是'0'。因此,'範圍(停止)'提供從0到停止-1的數字。 – Jonas

相關問題