2016-09-20 8 views
0

Ich frage mich, ob mir jemand mit diesem Geheimnis helfen kann. Wenn ich mein Programm starte zeigt es den Fehler an."TypeError: 'NoneType' Objekt ist nicht iterierbar" über Liste

TypeError: 'NoneType' object is not iterable

ich getestet habe, dass die Variable, dass ich es immer noch sagt, aber eine Liste zu iterieren versuche ist, dass es ungültig ist und zeigt den gleichen Fehler.

Mein Code gemeint, ein symmetrisches Dreieck von Sternchen drucken:

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)) 

Thank you very much. Sorry für die schlechten Variablennamen

EDIT; Danke für Ihre Hilfe.

spaces = reversed(stars) 

Arbeitete perfekt

+0

Bei der Codeeinrückung ist ein Fehler aufgetreten. Konsultieren Sie [Abmeldehilfe - Code und vorformatierter Text] (http://stackoverflow.com/editing-help#code) und bitte [bearbeiten] Sie Ihren Beitrag. –

Antwort

1

Das Problem ist hier:

spaces = stars.reverse() 

reverse, wie append, arbeitet an Ort und Stelle und gibt nil zurück. Um wieder eine neue Liste, die Sie tun müssen:

spaces = list(reversed(stars)) 

Ich muss allerdings sagen, ich verstehe nicht den Punkt Ihres iterat Generator. Wenn Sie Leerzeichen und Sterne als Generatoren in erster Linie nach links, würden Sie es nicht brauchen überhaupt:

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

Ihr Problem in der Leitung ist

spaces = stars.reverse() 

Der Rückgabewert der Listenfunktion reverse() ist nicht die umgekehrte Liste, sondern None, weil die Umkehrung vor Ort durchgeführt wird.

Verwenden Sie diese Zeile statt:

spaces = stars[::-1] 

Dies gibt eine Liste mit den umgekehrten Werte von stars.

Verwandte Themen