我正在运行总体模型,总是错误的数字,因为我将变量设置为新值,但是当我想使用旧变量时,循环会自动更新并使用新变量。
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
一位朋友说要设置新的命名变量,但是在一个循环之后,您是否会再次遇到相同的问题?我希望变量能够更新,但是只有在它们被打印之后才更新,如果那是有道理的。有什么建议么?
对于@Selcuk,您可以直接使用变量解包,但是即使格式更好,它看起来也很笨拙:
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)
我的建议是要么编写一个辅助函数,然后将“ like”值保留在字典中,如下所示:
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
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句