Ich habe ein Mini-Programm, das ein grundlegendes Modell für den Lebenszyklus einer Zelle von Geburt zu Meiose bis zum Tod sein soll. Während die meisten davon habe ich herausgefunden gotten, bin ich am folgenden stecken:Warum gibt meine Funktion früh auf?
class cell:
def __init__(self):
self.name = random.randint(1,1000)
self.type = [random.choice(b)]
self.age = 0
self.evos = random.randint(1,5) #<-- need to access this attr
def displayEvolutions(pop): # one of many methods, this one is a problem
p = []
for i in pop:
p.append(i.evos)
return p
community = [#a bunch of class instances]
cells_that_evolved = displayEvolutions(community)
Es soll in einer Schleife durch die Liste der Klasseninstanzen community
, den Zugriff auf ihre evo
Attribut, füllen cells_that_evolved
mit dieser Daten und Zeigen Sie dann diese Liste dem Benutzer an.
Es soll wie folgt aussehen:
cells_that_evolved = displayEvolutions(community)
print(cells_that_evolved)
[3, 4, 5, 6, 7, 8, 3, 1, 5] #<--- 9 instances, 9 values = instance.evos
Doch egal, was ich versuche, es hängt nur den ersten Wert auf die Liste, so dass die Liste wie folgt aussieht:
[3]
Warum?
Und natürlich einem prägnanten Der Weg wäre, ein Listenverständnis zu verwenden: 'def displayEvolutions (pop): return [ievos für i in pop]'. Dies hat den zusätzlichen Vorteil, dass die Möglichkeit von Einkerbungsproblemen nicht möglich ist. – SethMMorton
@SethMMorton Sie haben natürlich Recht - in dieser Antwort habe ich beschlossen, die einfachste mögliche Lösung für einen [selbst beschriebenen] (http://stackoverflow.com/revisions/40713367/1) Anfänger zu liefern. –
Ja, ich weiß. Ich dachte nur, da das Listenverständnis für genau diesen Zweck erstellt wurde, dachte ich, dass es sich lohnte, das Konzept dem OP vorzustellen. – SethMMorton