Я действительно новичок в Python, я просто экспериментирую с кодом и вдруг заметил что-то довольно раздражающее.
# (mports
import random
import math
import time
import os
import sys
import csv
# Main
def clear():
os.system("cls")
Population = 2
timetaken = 0
while True:
timetaken += 1
PossibleBirths = Population / 2
PossibleBirths = int(PossibleBirths)
for n in range(PossibleBirths):
luck = random.randint(1, 100)
if luck >= 75:
Population += 1
else:
Population += 0
print("Years: "+str(timetaken))
print("Current Population: "+'{0:,.0f}'.format(Population))
time.sleep(0.25)
clear()
Примерно через 100 лет или после того, как он достигнет примерно 1 000 000, печать очень быстро замедлится, часто требуется 5 секунд, чтобы просто распечатать.
Есть идеи, почему?
После попытки увеличить/уменьшить время сна, я до сих пор не пришел к исправлению.
Проблема здесь не в печати, а в цикле for. Чем больше растет ваш Population
, тем выше становится PossibleBirths
. Поскольку вы зацикливаетесь на range(PossibleBirths)
, на каждом шаге вы делаете все больше и больше итераций в цикле for.
Решение здесь «простое»: заменить цикл for эквивалентной функцией вероятности, которая статистически дает тот же результат.
Если вас интересует только средний прирост, просто увеличьте население на (1-0.75)*PossibleBirths
.
Если вы действительно хотите что-то случайное, используйте биномиальный закон.
Как бы я сделал что-то подобное?