使用计算PYTHON在while循环中设置新变量

时间:2016-06-11 11:58:44

标签: python variables while-loop

我正在运行一个填充模型,错误的数字总是会出现,因为我将变量设置为新值,但是当我想使用旧变量时,循环会自动更新并使用新的变量

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

一位朋友说要设置新的命名变量,但是经过一个循环,你不会再次遇到同样的问题吗?我希望变量更新,但只有在它们被打印之后,如果这是有意义的。 有什么建议吗?

2 个答案:

答案 0 :(得分:1)

您正在使用新值覆盖现有值。使用Python,您可以将所有四行合并为一行:

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

这将立即分配所有值,而不会先覆盖它们。

答案 1 :(得分:0)

Per @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