2016-09-20 102 views
0

我想知道是否有人可以帮助我解决这个谜题。 当我运行我的程序时,它显示错误。“TypeError:'NoneType'object is not iterable”over list

TypeError: 'NoneType' object is not iterable

我已经测试了,我想迭代变量是一个列表但它仍说,它是无效的,并显示了同样的错误。

我的代码,这意味着打印星号的对称三角形:

def iterat(num): 
    for x in num: 
     yield x 

number=int(input("Enter Positive Number: ")) 

stars = list(range(number)) 
print(type(stars)) 
spaces = stars.reverse() 
yeildStar = iterat(stars) 
yeildSpace = iterat(spaces) 

for star,space in zip(yeildStar,yeildSpace): 
    print(" "*(space)+"*"*((star*2)-1)) 

非常感谢你。对不起,变量名称为

编辑;感谢您的帮助。

spaces = reversed(stars) 

工作完全

+0

代码缩进出错。请参阅[Markdown帮助 - 代码和预格式化文本](http://stackoverflow.com/editing-help#code)并请[编辑]您的文章。 –

回答

1

的问题是在这里:

spaces = stars.reverse() 

reverse,像append,经营就地和返回nil。要返回你需要做一个新的列表:

spaces = list(reversed(stars)) 

我必须说,我不明白你iterat发电机的地步。如果你离开了空间和明星作为发电机摆在首位,你就不需要它了:

stars = range(number) 
spaces = reversed(stars) 
for star,space in zip(stars, spaces): 
    print(" "*(space-1)+"*"*((star*2)-1)) 
0

您的问题是在该行

spaces = stars.reverse() 

列表功能reverse()的返回值不是反向列表,但是None,因为反转是在原地完成的。

使用此行:

spaces = stars[::-1] 

此方法返回的stars反向值的列表。