Python,TypeError:'int'对象不可迭代

问题描述:

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

您试图通过单一号码进行迭代。相反,您可以创建一个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 

在你的代码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

试试这个:

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