Python,TypeError:'int'对象不可迭代
FizzBuzz问题有轻微变化,只是增加一个级别。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()
您试图通过单一号码进行迭代。相反,您可以创建一个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)
来获取包含元素0
到n-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()
正在使用'range()'标准来处理这类for循环吗?另外,我在想,我需要初始化变量'ints',即。 ints = 0,并且由于它位于for循环之前,因此它只会将值传递给循环,循环执行,然后每次循环迭代时不重置“ints”就结束。 – mrmjp
根据你的代码,我假设你想遍历数字0 - 'ints',并打印_Fizz_,_FizzBuzz_或_FizzBuzzWoof_,如果相应的条件满足。在你的代码中你设置了'ints = 0',这意味着你抛弃了参数,用'0'覆盖它。一般来说,当你想迭代一个数字序列时,使用_yes'range(start,end,step)',因为它等于'for(i = 0; i
试试这个:
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',可以省略。默认的_start_值是'0'。因此,'范围(停止)'提供从0到停止-1的数字。 – Jonas
你的意思是'因为我在范围(整数)'? – Li357
请发布堆栈跟踪。 Python告诉哪一行有错误...是不是你想分享的东西? – tdelaney
我建议你也将函数参数重命名为除int之外的其他内容,因为当你在开始时声明int = 0时它会将它变为0.所以,当你尝试在范围int中找到i时,它不会做你任何好处。 – JackTheCrab