2017-02-13 139 views
1

我一直在编码约1年半,现在和关闭一格,但我仍然没有得到格在Python中是如何工作的。填充多变量

所以我的问题是,我必须做出一个网格,显示人口模型。所以我需要用不同的变量填充我的网格,这些变量对于网格中的每一行都有所不同:

回答

1

你真的不需要一个网格的概念来完成你想要的东西。您只需要generator即可将您的人口从一代传播到下一代。然后,您可以使用Python的Format Specification Mini-Language在与您的示例输出相匹配的表中打印值。

def propagate(num_generations, population_start = None): 
    if population_start is None: 
     population = [10, 10, 10, 30] 
    else: 
     population = population_start 
    for gen in range(num_generations): 
     yield population 
     population = [population[1]*2, population[0], population[1]] 
     population.append(sum(population)) 

def print_propagation(num_generations, population_start = None): 
    print('GENERATION\tJUVENILES\tADULTS\tSENILES\t\tTOTAL') 
    for gen, pops in enumerate(propagate(num_generations, population_start)): 
     print('{:^10}\t{:^8}\t{:^6}\t{:^7}\t\t{:^5}'.format(gen, *pops)) 

可以使用上述功能,像这样:

>>> list(propagate(6)) 
[[10, 10, 10, 30], 
[20, 10, 10, 40], 
[20, 20, 10, 50], 
[40, 20, 20, 80], 
[40, 40, 20, 100], 
[80, 40, 40, 160]] 

>>> print_propagation(6) 
GENERATION  JUVENILES  ADULTS SENILES   TOTAL 
    0    10    10  10    30 
    1    20    10  10    40 
    2    20    20  10    50 
    3    40    20  20    80 
    4    40    40  20    100 
    5    80    40  40    160 
+0

非常感谢您!为了让我能更好地理解发生了什么,请你能解释一下 - '{:^ 10} \ t {:^ 8} \ t {:^ 6} \ t {:^ 7} \ t \ t {:^ 5} - 是吗? –

+0

请参阅Python格式规范迷你语言文档(上面的链接)。每一组花括号('{}'s)将包含来自'.format'方法调用的解压缩参数,'^ 10'字符串表示每个值将在该字段中的该字段中心对齐。 – Billy