Вам действительно не нужна концепция сетки, чтобы выполнить то, что вы хотите. Вам просто нужен 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
Большое спасибо !! Просто чтобы я мог лучше понять, что происходит, не могли бы вы объяснить, что ... '{:^10} \ t {:^8} \ t {:^6} \ t {:^7} \ t \ t {:^5} - делает? –
См. Документацию по мини-языку формата Python (ссылка выше). Каждый набор фигурных скобок ('{}' s) будет включать распакованные аргументы из вызова метода .format', а строки '^ 10' указывают, что каждое значение будет выровнено по центру в этом поле в строке. – Billy