Python 打印出的 int 达到 1,000,000 后速度变慢
Python slowing down after int printed out reaches 1,000,000
我真的是 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 秒才能打印出来。
知道为什么吗?
尝试 increase/decrease 睡眠时间后,我仍然没有解决。
这里的问题不在于打印,它来自 for 循环。您的 Population
增长得越多,PossibleBirths
就越高。由于您正在循环 range(PossibleBirths)
,因此您在 for 循环中的每一步都会进行越来越多的迭代。
这里的解决方案很“简单”:用统计上给出相同结果的等效概率函数替换 for 循环。
如果您只对平均增长率感兴趣,那么只需将人口增加 (1-0.75)*PossibleBirths
。
如果你真的想要随机的东西,那么使用 binomial law。
我真的是 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 秒才能打印出来。
知道为什么吗?
尝试 increase/decrease 睡眠时间后,我仍然没有解决。
这里的问题不在于打印,它来自 for 循环。您的 Population
增长得越多,PossibleBirths
就越高。由于您正在循环 range(PossibleBirths)
,因此您在 for 循环中的每一步都会进行越来越多的迭代。
这里的解决方案很“简单”:用统计上给出相同结果的等效概率函数替换 for 循环。
如果您只对平均增长率感兴趣,那么只需将人口增加 (1-0.75)*PossibleBirths
。
如果你真的想要随机的东西,那么使用 binomial law。