2016-09-20 189 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反向值的列表。