2016-06-11 6 views
1

Ich führe ein Populationsmodell, und die falschen Zahlen kommen immer heraus, weil ich die Variablen auf neue Werte setze, aber wenn ich dann die alten Variablen verwenden möchte, Die Schleife aktualisiert sich automatisch und verwendet die neuen.Setzen neuer Variablen in einer While-Schleife mit Berechnungen PYTHON

juvenile_population = 10 
adult_population = 10 
senile_population = 1 
juvenile_survival = 1 
adult_survival = 1 
senile_survival = 0 
birth_rate = 2 
generations = 5 


counter = 0 
while counter < generations: 
    juvenile_population = adult_population * birth_rate 
    adult_population = juvenile_population * juvenile_survival 
    senile_population = (adult_population * adult_survival) (senile_population * senile_survival) 
    total_population = juvenile_population + adult_population + senile_population 



    print("Juvenile: ",juvenile_population) 
    print("Adult: ",adult_population) 
    print("Senile: ",senile_population) 
    print("Total: ",total_population) 
    counter += 1 

Ein Freund sagte, neue benannte Variablen zu setzen, aber dann nach einer Schleife, erhalten Sie nicht das gleiche Problem wieder? Ich möchte die Variablen aktualisieren, aber erst nachdem sie gedruckt wurden, wenn das Sinn macht. Irgendwelche Vorschläge?

+0

der einfachste Weg, dies zu tun ist, was Ihr Freund vorgeschlagen: verwenden Sie neue Variablen für die Speicherung und Drucken und sie dann zu den alten Variablen zuweisen, wenn Sie den Druck fertig sind. Ansonsten kannst du den Vorschlag in der Antwort verwenden und alle Berechnungen gleichzeitig durchführen – Aquiles

+0

Danke für die Klarstellung + weitere Tipps, was mein Freund über die neuen Variablen gesagt hat. Mein Code funktioniert jetzt :) – Ollie

Antwort

0

Per @Selcuk, könnten Sie direkt Variable Auspacken verwenden, aber auch mit schöner es Formatierung sieht unwieldly:

juvenile_population, adult_population, senile_population, total_population = (adult_population * birth_rate, 
                      juvenile_population * juvenile_survival, 
                      (adult_population * adult_survival) (senile_population * senile_survival), 
                      juvenile_population + adult_population + senile_population) 

Mein Vorschlag sein würde entweder eine Hilfsfunktion, und halten „wie“ Werte in einem schreiben Wörterbuch wie folgt:

populations = {'juvenile': 10, 
       'adult':  10, 
       'senile': 1 
       } 
survivals = {'juvenile': 1, 
      'adult':  1, 
      'senile':  0} 
birth_rate = 2 
generations = 5 

def update_population(pops): 
    juvie = pops['adult'] * birth_rate 
    adults = pops['juvenile'] * survivals['juvenile'] 
    seniles = pops['adult'] * survivals['adult'] + (pops['senile'] * survivals['senile']) 
    return {k:v for k,v in zip(['juvenile','adult','senile'],[juvie,adults,seniles])} 

counter = 0 
while counter < generations: 
    populations = update_population(populations.copy()) 
    total_population = sum(populations.values()) 



    print("Juvenile: ",populations['juvenile']) 
    print("Adult: ",populations['adult']) 
    print("Senile: ",populations['senile']) 
    print("Total: ",total_population) 
    counter += 1 
1

Sie überschreiben die vorhandenen Werte mit neuen Werten. Mit Python können Sie alle vier Zeilen in einer wie folgt zusammen:

juvenile_population, adult_population, senile_population, total_population = adult_population * birth_rate, juvenile_population * juvenile_survival, (adult_population * adult_survival) (senile_population * senile_survival), juvenile_population + adult_population + senile_population 

Dies wird zuweisen alle Werte auf einmal, ohne sie vorher zu überschreiben.

Verwandte Themen