# 舊版 import random import numpy as np import matplotlib.pyplot as plt import matplotlib.ticker as ticker from tqdm.auto import tqdm people=10000000 max_count=200 record=np.zeros(max_count) sum=0 damn_count=0 full_count=0 for i in tqdm(range(people)): count=0 A=B=C=0 while not (A and B and C): count+=1 if count%35==0: A+=1 if B>=2 and C==0: B-=1 C=1 if C>=2 and B==0: C-=1 B=1 else: result=random.random() if result<0.025: A+=1 elif result<0.125: B+=1 elif result<0.225: C+=1 if count==35: full_count+=1 elif count>35: damn_count+=1 record[count]+=1 sum+=count plt.figure(figsize=(max_count/2,3)) plt.bar(range(0,max_count*5,5),record,width=0.5,color='black') plt.xticks(range(0,max_count*5,5)) plt.show() sum*=(5/people) print('Avg. diamond: '+str(sum)) print('People who draw 35 times: '+str(full_count/people)) print('People who draw more that 35 times: '+str(damn_count/people)) # ++9 import random import numpy as np import matplotlib.pyplot as plt import matplotlib.ticker as ticker from tqdm.auto import tqdm people=10000000 max_count_plus_1=51 record=np.zeros(max_count_plus_1) sum=0 for i in tqdm(range(people)): count=0 A=B=C=False coin=100 get=0 while get<3: count+=1 coin+=10 if count%10==0: coin+=30 result=random.random() if result<0.04: result=random.random() if get==0: get+=1 elif get==1 and result<0.6666666666666667: get+=1 elif get==2 and result<0.3333333333333334: get+=1 if (get*250+coin)>=750: break record[count]+=1 sum+=count plt.figure(figsize=(max_count_plus_1/2,3)) plt.bar(range(0,max_count_plus_1*5,5),record,width=0.5,color='black') plt.xticks(range(0,max_count_plus_1*5,5)) plt.show() sum*=(5/people) print('avg diamond: '+str(sum))