J'avais corrigé la version GUI, mais j'avais oublié de reporter la correction dans la version CLI. Comme la simulation prend pas mal de temps avec les paramètres par défaut, j'ai rajouté l'affichage de la progression.
Au final, ça donne :
#!/usr/bin/env python3fromrandomimportrandintfromstatisticsimportmean,median,pstdevimporttimeNB_PEOPLE=500AMOUNT_START=2000NB_LOOP=5000000RATE=0.2DRATE=0.05defpays(customer,seller,base):# no advantage for the poorest as no poorestifseller==customer:customer-=base*RATEseller+=base*RATE# poorest receive the money so add DRATE in the transferelifseller>customer:customer-=base*(RATE+DRATE)seller+=base*(RATE+DRATE)# poorest pay the money so deduct DRATE in the transferelse:customer-=base*(RATE-DRATE)seller+=base*(RATE-DRATE)returncustomer,sellerpeople=[AMOUNT_START]*NB_PEOPLEtimestamp=time.time_ns()for_inrange(0,NB_LOOP):# select two random peoplewhileTrue:a=randint(0,NB_PEOPLE-1)b=randint(0,NB_PEOPLE-1)ifa!=b:breakbase=min(people[a],people[b])people[a],people[b]=pays(people[a],people[b],base)iftime.time_ns()-timestamp>1500000000:print(f"{round(100*_/NB_LOOP)}%",end='\r')timestamp=time.time_ns()print(f"{round(100*_/NB_LOOP)}%",end='\r')# final, show the resultspeople=sorted([int(p)forpinpeople])print(f"Last tranfert base: {base}.")print(f"people: {', '.join(str(p) for p in people)}")print(f"avg: {mean(people)} | median: {median(people)} | pstdev: {pstdev(people)}")
[^] # Re: Code ?
Posté par Claude SIMON (site web personnel) . En réponse au journal Un article de "Pour la science" m'ayant amené à coder pour une petite vérification perso.... Évalué à 2. Dernière modification le 23 juillet 2021 à 08:07.
J'avais corrigé la version GUI, mais j'avais oublié de reporter la correction dans la version CLI. Comme la simulation prend pas mal de temps avec les paramètres par défaut, j'ai rajouté l'affichage de la progression.
Au final, ça donne :
Pour essayer en ligne :
Zelbinium: pour la génération qui crée, pas celle qui scrolle...