Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用PYTHON在while循环中设置新变量_Python_Variables_While Loop - Fatal编程技术网

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

使用PYTHON在while循环中设置新变量,python,variables,while-loop,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

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

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
青少年人口=10
成人人口=10
老年人口=1
青少年生存率=1
成人生存率=1
老年人生存率=0
出生率=2
世代=5
计数器=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

这将一次分配所有值,而不首先覆盖它们。

根据@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)
我的建议是编写一个helper函数,并在字典中保留“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
populations={'10},
“成人”:10岁,
"老年人":1
}
生存值={'1':1,
“成人”:1,
“老年人”:0}
出生率=2
世代=5
def更新人口(pops):
juvie=pops[“成人”]*出生率
成人=持久性有机污染物['少年]*幸存者['少年']
老年人=持久性有机污染物['成人]]*存活['成人]+(持久性有机污染物['老年]]*存活['老年]]
返回{k:v代表k,v在zip中(['少年','成人','老年'],[juvie,成人,老年人])
计数器=0
而反代:
人口=更新人口(人口.复制())
总数=总和(populations.values())
打印(“青少年:”,人口[“青少年])
打印(“成人:”,人口[“成人])
打印(“老年:”,人口[“老年人])
打印(“总数:”,总人口)
计数器+=1

最简单的方法是按照您朋友的建议:在存储和打印时使用新变量,然后在完成打印时将它们分配给旧变量。否则,你可以使用答案中给出的建议,立即进行所有计算,以澄清我的朋友对新变量所说的更多提示。我的代码正在工作:)