Welcome, guest | Sign In | My Account | Store | Cart

After wondering about how populations can increase in size, a simulator was written with a very simplistic model for total human growth. This is the result of an old experiment and served its purpose well at the time. This is committed for archival to be run under Python 2.5 or later versions.

Python, 151 lines
 ``` 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151``` ```# for randomness from random import random # minimum finder def minimum(value_one, value_two): if value_one < value_two: return value_one return value_two # main function def simulate(boys, girls, years, total, fast): # make sure the ages are DIFFERENT b_ages = range(70) g_ages = range(70) # setup the ages for age in range(70): b_ages[age] = g_ages[age] = 0 b_ages = boys g_ages = girls # simulator for year in range(years): # slow printer if not fast: print 'Year =', year sum = 0 for age in range(70): sum += b_ages[age] print 'Boys =', sum sum = 0 for age in range(70): sum += g_ages[age] print 'Girls =', sum print 'Boy Ages =', str(b_ages)[1:-1] print 'Girl Ages =', str(g_ages)[1:-1] # find out the number of offspring b_born = g_born = 0 for age in range(20, 50): pairs = minimum(b_ages[age], g_ages[age]) total_born = int(random() * (pairs + 1)) half = int(random() * (total_born + 1)) b_born += total_born - half g_born += half # make everyone age one year for age in range(68, -1, -1): b_ages[age + 1] = b_ages[age] g_ages[age + 1] = g_ages[age] # add the offspring b_ages = b_born g_ages = g_born # check for total population if total != 0: sum = 0 for age in range(70): sum += b_ages[age] + g_ages[age] if total <= sum: break # pause for reading if not fast: raw_input('Pausing ...') # finish the simulation print 'Year =', year + 1 sum = 0 for age in range(70): sum += b_ages[age] print 'Boys =', sum sum = 0 for age in range(70): sum += g_ages[age] print 'Girls =', sum print 'Boy Ages =', str(b_ages)[1:-1] print 'Girl Ages =', str(g_ages)[1:-1] # calculate the total sum = 0 for age in range(70): sum += b_ages[age] + g_ages[age] print 'There are a total of', sum, 'people.' # get input def start(): global notes_words loop = True while loop: try: boys = int(raw_input('How many boys should we start with? ')) loop = False except: pass loop = True while loop: try: girls = int(raw_input('How many girls should we start with? ')) loop = False except: pass loop = True while loop: try: years = int(raw_input('How many years should we simulate? ')) loop = False except: pass loop = True while loop: try: total = int(raw_input('How many people do we want? ')) loop = False except: pass # more vocabulary accept = ['yes', 'y', 'yeah', 'si'] deny = ['no', 'n', 'nada', 'never'] loop = True while loop: try: fast = raw_input('Should we go fast? ') if fast.lower() in accept: fast = True loop = False elif fast.lower() in deny: fast = False loop = False elif fast.lower() in notes_words: print 'The available commands are ' + str(accept)[1:-1] + ', ' \ + str(deny)[1:-1] + ', ' + str(notes_words)[1:-1] + '.' else: print '"' + fast + '" is not something that I understand.' except: pass try: simulate(boys, girls, years, total, fast) except: print 'The simulation crashed !!!' # define the vocabulary start_words = ['start', 'begin', 'exe', 'execute'] break_words = ['break', 'exit', 'end', 'quit'] notes_words = ['help', '?', '/?', '-?'] # get command print 'Executing Population Simulator ...' while True: prompt = raw_input('Please enter a command: ') if prompt.lower() in start_words: start() elif prompt.lower() in break_words: break elif prompt.lower() in notes_words: print 'The available commands are ' + str(start_words)[1:-1] + ', ' + \ str(break_words)[1:-1] + ', ' + str(notes_words)[1:-1] + '.' else: print '"' + prompt + '" is not something that I understand.' ``` Created by Stephen Chappell on Thu, 12 Jul 2012 (MIT)