むるおか君のPythonパチンコシミュレーション

Pythonを使ってパチンコの新台解析やってます。たまに自分が処理したい作業のGUIも作ったり

P緋弾のアリア4の天井期待値&シミュレーション

# -*- coding: utf-8 -*-
"""
Created on Mon Jan 25 16:40:50 2021

@author: HOST1191
"""
import random
import statistics 
import collections
import matplotlib.pyplot as plt
import seaborn as sns
import csv
#デンチュー振り分け
def d_furi():
    d_furir = random.randint(1,400)
    d_dedama =  0
    d_kakuhen =  0
    if  d_furir  >=  1  and  d_furir <= 199:
        d_dedama +=  360
        d_kakuhen   =  1
    else:
        d_dedama  += 1200
        d_kakuhen  =  1
 
    return  d_dedama,d_kakuhen

#ヘソの振り分け
def h_furi():
    h_furir = random.randint(1,100)
    h_dedama =  0
    h_kakuhen =  0
    if  h_furir  >=  1  and  h_furir  <= 50:
        h_dedama +=  360
        h_kakuhen   =  1
    else:
        h_dedama  +=  360
        h_kakuhen   =  0
    return  h_dedama,h_kakuhen  

#ライトニグバレットチャンス
def l_furi():    
    l_kakuhen =  0
    l_tyusen = random.random()
    if l_tyusen <= (1/4):
        l_kakuhen  =  2
    return  l_kakuhen

#バレットアタックストックタイム
def v_renchan():
    v_st  =  0
    stock =  0
    while  v_st  <  38:
        v_tyusen  =  random.random()
        v_st  += 1
        if  v_tyusen  <=  (1/73):
            stock  += 1
        if  stock  >  4:
            stock  =  4
    return  stock
        
        
#連荘
def renchan(r_kakuhen):
    wk_st    = 0
    wk_jitan  = 0
    r_dedama  =  0
    wk_dedama =  0
    wk_ren  =  0
    end  =  0
#パラメータ説明
#r_kakuhen =  0  確変ではない
#          =  1  確変
#          =  2  ライトニングバレットチャンス 
    while  end  < 1:
        if  r_kakuhen ==  1:
            r_tyusen = random.random()
            wk_st  +=  1
            if r_tyusen <= (1/73):
#               ライトニングバレットチャンス発生時
                l_kakuhen = l_furi()
                if l_kakuhen == 2:
                    v_stock  =  1
                    while  v_stock  > 0:
                        v_stock -= 1
                        wk_ren += 1
                        r_dedama,r_kakuhen = d_furi()
                        wk_dedama  +=  r_dedama
                        v_stock +=  v_renchan()
                else:
                    wk_ren  +=  1
                    r_dedama,r_kakuhen = d_furi()
                    wk_dedama  +=  r_dedama
                wk_st  =  0
            if  wk_st  >=  100:
                end  +=  1
#       確変じゃないとき
        else:
            r_tyusen  =  random.random()
            wk_jitan  += 1
            if r_tyusen <= (1/199.1):
                r_dedama,r_kakuhen  =  h_furi()
                wk_ren  +=  1
                wk_dedama  +=  r_dedama
                wk_jitan  =  0
            if  wk_jitan  >=  54:
                end  +=  1
    return  wk_ren,wk_dedama

sikou  =  100000
#連荘回数
ren1 = []
#ラッシュの出玉数
dedama1 = []
for  sim  in  range(1,sikou+1):
#初当たりの振り分け処理天井考慮  
    sim3  =  0
    end1  =  0
    while  end1  <  1:
        t_tyusen  =  random.random()
        sim3  +=  1
        if  sim3  >=  500:
            d_dedama,d_kakuhen  =  d_furi()
            ren,dedama  =  renchan(d_kakuhen)
            ren  +=  1
            dedama  +=  d_dedama
            end1  +=  1
        else:
            if  t_tyusen  <=  (1/199.1):
                h_dedama,h_kakuhen  =  h_furi()
                ren,dedama  =  renchan(h_kakuhen)
                ren  +=  1
                dedama  +=  h_dedama
                end1  +=  1
    dedama1.append(dedama)
    ren1.append(ren)
#連荘平均数
m1 = statistics.mean(ren1)
m2 = statistics.mean(dedama1)
#連荘と出玉の整理
ren1.sort() 
dedama1.sort() 
#print ("連荘数=",ren1)
#print ("出玉数=",dedama1)
print('天井考慮連荘平均: {0:.2f}'.format(m1))
print('天井考慮出玉平均: {0:.1f}'.format(m2))

ren_bunpu = collections.Counter(ren1)
dedama_bunpu = collections.Counter(dedama1)
print("分布=",ren_bunpu)
#print("分布=",dedama_bunpu)
#print(ren_bunpu)
#出玉の円グラフ作表用定義
x1 = sum( x1 <=  1000 for x1 in dedama1)
x2 = sum(  1000 < x2 <=  5000 for x2 in dedama1) 
x3 = sum(  5000 < x3 <=  10000 for x3 in dedama1)
x4 = sum(  10000 < x4  for x4 in dedama1) 
Xgraph = ["{0:.1f}".format(x1/sikou*100),"{0:.1f}".format(x2/sikou*100),
          "{0:.1f}".format(x3/sikou*100),"{0:.1f}".format(x4/sikou*100)]
label = ["U1k","1k~5k","5k~10k","10kover"]
colors2 = ["0.3", "0.5", "0.7", "0.9", "1.1"]
plt.pie(Xgraph, labels=label, counterclock=False, startangle=90, colors=colors2,autopct="%1.1f%%")
plt.axis('equal')
print("x=",x1,x2,x3,x4)

d = list(ren_bunpu.keys())
e = list(ren_bunpu.values())
sns.set()
sns.set_style("darkgrid", {'grid.lines1tyle': '--'})
sns.set_context("paper", 1.0, {"lines.linewidth": 1})
sns.set_palette("winter_r", 2, 1)
sns.set('talk', 'darkgrid', 'dark', font_scale=1.0,
        rc={"lines.linewidth": 10, 'grid.linestyle': '--'})
fig, ax = plt.subplots(figsize = (10,5))
ax.set(xlabel ='ren', ylabel='occcurs', xlim=(0,30), ylim=(0,50000))
ax.bar(d,e)
plt.show()

#実戦シミュレーション
sikou  =  3000

for  sim  in  range(1,8):
#初当たりの振り分け処理天井考慮
    sim4  =  0
    sim3  =  0
#回転数
    kaiten1 = []
#出玉推移
    dedama1 = []
    soudedama  =  0
    while  sim4  <  sikou:
        t_tyusen  =  random.random()
        sim3  +=  1
        sim4  +=  1
        if  sim3  >=  500:
            d_dedama,d_kakuhen  =  d_furi()
            ren,dedama  =  renchan(d_kakuhen)
            dedama  +=  d_dedama
            soudedama  +=  dedama
            sim3  =  0
        else:
            if  t_tyusen  <=  (1/199.1):
                h_dedama,h_kakuhen  =  h_furi()
                ren,dedama  =  renchan(h_kakuhen)
                dedama  +=  h_dedama
                soudedama  +=  dedama
                sim3  =  0
            else:
                soudedama  =  soudedama  -   (250 / 18)
        dedama1.append(soudedama)
        kaiten1.append(sim4)
    plt.plot(kaiten1,dedama1,linewidth=1)
    plt.show()

#天井期待値の計算
#試行回数
sikou  =  10000
#千円当たりの回転数
kaitenritu =  0
#作図用
sk = []
dk = []
sim1   =  0
sim2   =  0
atari = 0
suru  = 0
for  tenzyo  in  range(0,500,50):
    for kaitenritu  in  range  (15,21):
        soudedama =  0
        for  a  in  range(1,sikou+1):
            suru  =  0
            sim1  =  0
            sim2  =  0
            while  suru  <  1: 
                t_tyusen = random.random()
#               天井到達時点
                if  sim1  ==  tenzyo:
                    t_dedama,t_kakuhen  =  d_furi()
                    ren,dedama  =  renchan(t_kakuhen)
                    ren  +=  1
                    soudedama  +=  t_dedama
                    soudedama  +=  dedama
                    suru  +=  1
                else:
                    sim1  +=  1
                    soudedama  =  soudedama  -  (250 / kaitenritu)
                    if  t_tyusen  <=  1/(199.1):
                        t_dedama,t_kakuhen  =  h_furi()
                        ren,dedama  =  renchan(t_kakuhen)
                        ren  +=  1
                        soudedama  +=  t_dedama
                        soudedama  +=  dedama
                        suru  +=  1
        sk.append(["{0:.0f}".format((soudedama/sikou)*4),tenzyo,kaitenritu])



print  ("作表用=",sk)
with open('data.csv', 'w') as file:
    writer = csv.writer(file, lineterminator='\n')
    writer.writerows(sk)
#plt.plot(atarikai,dedama1)
#plt.show()



P北斗無双3の天井解析プログラム

# -*- coding: utf-8 -*-
"""
Created on Wed Jul  1 10:56:29 2020

@author: HOST1191
"""
import random
import statistics 
import collections
import matplotlib.pyplot as plt
import seaborn as sns
import csv
#Pデンチュー振り分け
def d_furi():
    d_furir = random.randint(1,100)
    d_dedama =  0
    d_kakuhen =  0
    if  d_furir  >=  1  and  d_furir <= 25:
        d_dedama +=  1200
        d_kakuhen   =  1
    elif d_furir  > 26  and  d_furir  <=  50:
        d_dedama  += 810
        d_kakuhen  =  1
    else:
        d_dedama  += 420
        d_kakuhen  =  1
    return  d_dedama,d_kakuhen

#P北斗無双3ヘソの振り分け
def h_furi():
    h_furir = random.randint(1,200)
    h_dedama =  0
    h_kakuhen =  0
    if  h_furir  >=  1  and  h_furir  <= 25:
        h_dedama +=  390
        h_kakuhen   =  1
    else:
        h_dedama  +=  390
        h_kakuhen   =  0
    return  h_dedama,h_kakuhen  
#連荘
def renchan(r_kakuhen):
    wk_st    = 0
    r_dedama  =  0
    wk_dedama =  0
    wk_ren  =  0
    end  =  0
#パラメータ説明
#r_kakuhen =  0  確変ではない
#          =  1  確変
    while  end  < 1:
        r_tyusen = random.random()
        wk_st  +=  1
        wk_dedama  =  wk_dedama  -  0.5
        if r_tyusen <= (1/6.17):
            wk_ren  +=  1
            r_dedama,r_kakuhen = d_furi() 
            wk_dedama  +=  r_dedama
            wk_st  =  0
            r_kakuhen  =  1
        if  r_kakuhen  ==  1:
            if  wk_st  >=  13:
                end  +=  1
        else:
            if  wk_st  >=  4:
                end  +=  1
    return  wk_ren,wk_dedama

sikou  =  100000
#連荘回数
ren1 = []
#ラッシュの出玉数
dedama1 = []
for  sim  in  range(1,sikou+1):
#初当たりの振り分け処理天井考慮  
    sim3  =  0
    end1  =  0
    while  end1  <  1:
        t_tyusen  =  random.random()
        sim3  +=  1
        if  sim3  >=  950  and  sim3  <= 1205:
            if  t_tyusen  <=  (1/6.17):
                d_dedama,d_kakuhen  =  d_furi()
                ren,dedama  =  renchan(d_kakuhen)
                ren  +=  1
                dedama  +=  d_dedama
                end1  +=  1
        else:
            if  t_tyusen  <=  (1/319.68):
                h_dedama,h_kakuhen  =  h_furi()
                ren,dedama  =  renchan(h_kakuhen)
                ren  +=  1
                dedama  +=  h_dedama
                end1  +=  1
    dedama1.append(dedama)
    ren1.append(ren)
#連荘平均数
m1 = statistics.mean(ren1)
m2 = statistics.mean(dedama1)
#連荘と出玉の整理
ren1.sort() 
dedama1.sort() 
#print ("連荘数=",ren1)
#print ("出玉数=",dedama1)
print('天井考慮連荘平均: {0:.2f}'.format(m1))
print('天井考慮出玉平均: {0:.1f}'.format(m2))

ren_bunpu = collections.Counter(ren1)
dedama_bunpu = collections.Counter(dedama1)
print("分布=",ren_bunpu)
#print(ren_bunpu)
#出玉の円グラフ作表用定義
x1 = sum( x1 <=  1000 for x1 in dedama1)
x2 = sum(  1000 < x2 <=  5000 for x2 in dedama1) 
x3 = sum(  5000 < x3 <=  10000 for x3 in dedama1)
x4 = sum(  10000 < x4  for x4 in dedama1) 
Xgraph = ["{0:.1f}".format(x1/sikou*100),"{0:.1f}".format(x2/sikou*100),
          "{0:.1f}".format(x3/sikou*100),"{0:.1f}".format(x4/sikou*100)]
label = ["U1k","1k~5k","5k~10k","10kover"]
colors2 = ["0.3", "0.5", "0.7", "0.9", "1.1"]
plt.pie(Xgraph, labels=label, counterclock=False, startangle=90, colors=colors2,autopct="%1.1f%%")
plt.axis('equal')
xx1 = sum( xx1 <=  1000 for xx1 in dedama1)
xx2 = sum(  1000 < xx2 <=  2500 for xx2 in dedama1) 
xx3 = sum(  2500 < xx3 <=  5000 for xx3 in dedama1)
xx4 = sum(  5000 < xx4 <=  7500 for xx4 in dedama1) 
xx5 = sum(  7500 < xx5 <=  10000 for xx5 in dedama1)
xx6 = sum(  10000 < xx6 <=  20000 for xx6 in dedama1) 
xx7 = sum(  20000 < xx7 <=  30000 for xx7 in dedama1)
xx8 = sum(  30000 < xx8 <=  40000 for xx8 in dedama1) 
xx9 = sum(  40000 < xx9 <=  50000 for xx9 in dedama1)
xx10 = sum(  50000 < xx10  for xx10 in dedama1) 
print("x=",xx1,xx2,xx3,xx4,xx5,xx6,xx7,xx8,xx9,xx10)

d = list(ren_bunpu.keys())
e = list(ren_bunpu.values())
sns.set()
sns.set_style("darkgrid", {'grid.linestyle': '--'})
sns.set_context("paper", 1.0, {"lines.linewidth": 1})
sns.set_palette("winter_r", 2, 1)
sns.set('talk', 'darkgrid', 'dark', font_scale=1.0,
        rc={"lines.linewidth": 10, 'grid.linestyle': '--'})
fig, ax = plt.subplots(figsize = (10,5))
ax.set(xlabel ='ren', ylabel='occcurs', xlim=(0,30), ylim=(0,50000))
ax.bar(d,e)
plt.show()

#実戦シミュレーション
sikou  =  30000

for  sim  in  range(1,8):
#初当たりの振り分け処理天井考慮
    sim4  =  0
    sim3  =  0
#回転数
    kaiten1 = []
#出玉推移
    dedama1 = []
    soudedama  =  0
    while  sim4  <  sikou:
        t_tyusen  =  random.random()
        sim3  +=  1
        sim4  +=  1
        if  sim3  >=  950  and  sim3  <=  1205:
            if  t_tyusen  <=  (1/6.17):
                d_dedama,d_kakuhen  =  d_furi()
                ren,dedama  =  renchan(d_kakuhen)
                dedama  +=  d_dedama
                soudedama  +=  dedama
                sim3  =  0
            else:
                dedama = dedama  -  1
        else:
            if  t_tyusen  <=  (1/319.68):
                h_dedama,h_kakuhen  =  h_furi()
                ren,dedama  =  renchan(h_kakuhen)
                dedama  +=  h_dedama
                soudedama  +=  dedama
                sim3  =  0
            else:
                soudedama  =  soudedama  -   (250 / 18)
        dedama1.append(soudedama)
        kaiten1.append(sim4)
    plt.plot(kaiten1,dedama1,linewidth=1)
    plt.show()

#天井期待値の計算
#試行回数
sikou  =  100000
#千円当たりの回転数
kaitenritu =  0
#作図用
sk = []
dk = []
sim1   =  0
sim2   =  0
atari = 0
suru  = 0
for  tenzyo  in  range(0,950,50):
    for kaitenritu  in  range  (15,21):
        soudedama =  0
        for  a  in  range(1,sikou+1):
            suru  =  0
            sim1  =  0
            sim2  =  0
            while  suru  <  1: 
                t_tyusen = random.random()
    #       天井到達時点
                if  sim1  ==  tenzyo:
                    soudedama = soudedama  -  0.5
                    if  t_tyusen  <=  1/(6.17):
                        t_dedama,t_kakuhen  =  d_furi()
                        ren,dedama  =  renchan(t_kakuhen)
                        ren  +=  1
                        soudedama  +=  t_dedama
                        soudedama  +=  dedama
                        suru  +=  1
                    else:
                        sim2  +=  1
                        if  sim2  >=  255:
                            soudedama  +=  0
                            suru +=  1
                else:
                    sim1  +=  1
                    soudedama  =  soudedama  -  (250 / kaitenritu)
                    if  t_tyusen  <=  1/(319.68):
                        t_dedama,t_kakuhen  =  h_furi()
                        ren,dedama  =  renchan(t_kakuhen)
                        ren  +=  1
                        soudedama  +=  t_dedama
                        soudedama  +=  dedama
                        suru  +=  1
        sk.append(["{0:.0f}".format((soudedama/sikou)*4),tenzyo,kaitenritu])



print  ("作表用=",sk)
with open('data.csv', 'w') as file:
    writer = csv.writer(file, lineterminator='\n')
    writer.writerows(sk)
#plt.plot(atarikai,dedama1)
#plt.show()

Pルパン三世マモーの新しいやつ、pythonによる出玉シミュレーション

# -*- coding: utf-8 -*-
"""
Created on Wed Jun 24 18:19:03 2020

@author: HOST1191
"""
import random
import statistics 
import collections
import matplotlib.pyplot as plt
import seaborn as sns

#ルパン三世マモー電チュー振り分け    
def d_furi():
    d_dedama =  280
    return  d_dedama

#ルパン三世マモーヘソ振り分け    
def h_furi():
    h_furiwake  =  random.random()
    if  h_furiwake  >=  0  and  h_furiwake  <=  (3.8/100):
        h_dedama  =  280
        h_flg     =  1
    elif  h_furiwake  >  (3.8/100)  and  h_furiwake  <= (6.4/100):
        h_dedama  =  280
        h_flg     =  2
    else:
        h_dedama  =  28
        h_flg     =  0
    return  h_dedama,h_flg
    
#Pルパン三世復活のマモー連荘の関数定義
def d_renchan(d_kaisu,d_flg):
    if  d_kaisu  ==  7:
        d_bunbo  =  22
    else:
        d_bunbo  =  19    
    ren   = 1
    dedama  =  280
    s_suru  = 0
    s_st    = 0
    g_st    = 0
    d_zan   = 0
    while  s_suru  < 1:
        d_tyusen  =  random.random()
        if  d_tyusen  <= (1/d_bunbo):
            d_zan  =  7  -  d_kaisu
            if  d_zan  ==  0:
                d_zan  +=  7
            ren  +=  1
            dedama  +=  (280  *  d_zan)
            s_suru  +=  2
        else:
            if  d_flg   ==  2:
                s_st  +=  1
                if  s_st  >=  18:
                    s_suru  +=  1
    if  s_suru  ==  2:
        g_st  =  0
        while  s_suru  < 3:
            d_bunbo  =  22
            d_tyusen2  =  random.random()
            if  d_tyusen2  <= (1/d_bunbo):
                dedama  +=  (d_furi()  *  7)
                ren  +=  1
                g_st  =  0
            else:
                g_st  +=  1
                if  g_st  >=  27:
                    s_suru  +=  1
#    print ("ren=",ren)          
    return  ren,dedama
"""ここからラッシュ評価"""
#連荘性能の評価
#ラッシュ突入回数
sikou  =  10000
#連荘回数
ren1 = []
#ラッシュの出玉数
dedama1 = []
a =  0
b =  0
for  sim  in  range(1,sikou+1):
#初当たりの振り分け処理
    d_flg  =  0
    a  =  0
    d_kaisu  =  0
    while  d_flg  <  1:  
        if  d_kaisu  ==  7:
            d_kaisu  =  1
        a,d_flg  =  h_furi()
        d_kaisu  +=  1
    ren,dedama  =  d_renchan(d_kaisu,d_flg)
    dedama1.append(dedama)
    ren1.append(ren)
#連荘平均数
m1 = statistics.mean(ren1)
m2 = statistics.mean(dedama1)
#連荘と出玉の整理
ren1.sort() 
dedama1.sort() 
#print ("連荘数=",ren1)
#print ("出玉数=",dedama1)
print('連荘平均: {0:.2f}'.format(m1))
print('出玉平均: {0:.1f}'.format(m2))

ren_bunpu = collections.Counter(ren1)
#dedama_bunpu = collections.Counter(dedama1)
print(ren_bunpu)
#print(dedama_bunpu)
#出玉の円グラフ作表用定義
x1 = sum( x1 <=  1000 for x1 in dedama1)
x2 = sum(  1000 < x2 <=  5000 for x2 in dedama1) 
x3 = sum(  5000 < x3 <=  10000 for x3 in dedama1)
x4 = sum(  10000 < x4  for x4 in dedama1) 
Xgraph = ["{0:.1f}".format(x1/sikou*100),"{0:.1f}".format(x2/sikou*100),
          "{0:.1f}".format(x3/sikou*100),"{0:.1f}".format(x4/sikou*100)]
label = ["tan","ika","manti","manpatu"]
colors2 = ["0.3", "0.5", "0.7", "0.9", "1.1"]
plt.pie(Xgraph, labels=label, counterclock=False, startangle=90, colors=colors2,autopct="%1.1f%%")
plt.axis('equal')


d = list(ren_bunpu.keys())
e = list(ren_bunpu.values())
sns.set()
sns.set_style("darkgrid", {'grid.linestyle': '--'})
sns.set_context("paper", 1.0, {"lines.linewidth": 1})
sns.set_palette("winter_r", 2, 1)
sns.set('talk', 'darkgrid', 'dark', font_scale=1.0,
        rc={"lines.linewidth": 10, 'grid.linestyle': '--'})
fig, ax = plt.subplots(figsize = (10,5))
ax.set(xlabel ='ren', ylabel='occcurs', xlim=(0,80), ylim=(0,1000))
ax.bar(d,e)
plt.show()


#実戦シミュレーション
sikou  =  30000
sim3  =  0
sim2  =  1
for  sim  in  range(1,8):
#実試行回数
    sim4  =  0
#回転数
    kaiten1 = []
#出玉推移
    dedama1 = []
    soudedama  =  0
    sim  =  1
    while  sim4  <  sikou:
        t_tyusen  =  random.random()
        sim3  +=  1
        sim4  +=  1
        if  sim  ==  1:
            t_bunbo  =  22
        else:
            t_bunbo  =  19
            if  sim  ==  7:
                sim  =  1

        if  t_tyusen  <=  (1/t_bunbo):
            h_dedama,h_flg  =  h_furi()
            if  h_flg  ==  0:
                soudedama  +=  h_dedama
                sim  +=  1
            else:
                sim  +=  1
                soudedama  +=  h_dedama
                ren,dedama  =  d_renchan(sim,h_flg)
                soudedama  +=  dedama
                sim3  =  0
        else:
            soudedama  =  soudedama  -   (250 / 13)
        dedama1.append(soudedama)
        kaiten1.append(sim4)
    plt.plot(kaiten1,dedama1,linewidth=1)
    plt.show()

Pエウレカセブンハイエボルのスペック天井解析

# -*- coding: utf-8 -*-
"""
Created on Wed Jul  1 10:56:29 2020

@author: HOST1191
"""
import random
import statistics 
import collections
import matplotlib.pyplot as plt
import japanize_matplotlib
import seaborn as sns
import csv
#エウレカセブンデンチュー振り分け
def d_furi():
    d_furir = random.randint(1,100)
    d_dedama =  0
    d_kakuhen =  0
    if  d_furir  >=  1  and  d_furir  <= 60:
        d_dedama +=  1400
        d_kakuhen   =  1
    elif d_furir  >=  61  and  d_furir  <=  75:
        d_dedama  += 980
        d_kakuhen  =  1
    else:
        d_dedama  += 420
        d_kakuhen  =  1
    return  d_dedama,d_kakuhen

#エウレカセブンヘソの振り分け
def h_furi():
    h_furir = random.randint(1,100)
    h_dedama =  0
    h_kakuhen =  0
    if  h_furir  >=  1  and  h_furir  <= 99:
        h_dedama +=  420
        h_kakuhen   =  0
    else:
        h_dedama  += 1400
        h_kakuhen  =  1
    return  h_dedama,h_kakuhen  
#連荘
def renchan(r_kakuhen):
    wk_jitan = 0
    wk_st    = 0
    r_dedama  =  0
    wk_dedama =  0
    wk_ren  =  0
    end  =  0
#パラメータ説明
#r_kakuhen =  0  確変ではない
#          =  1  確変
    while  end  < 1:
        if  r_kakuhen  ==  1:
            r_tyusen = random.random()
            wk_st  +=  1
            wk_dedama  =  wk_dedama  -  0.5
            if r_tyusen <= (1/94.2):
                wk_ren  +=  1
                r_dedama,r_kakuhen = d_furi() 
                wk_dedama  +=  r_dedama
                wk_st  =  0
                wk_jitan  =  0
            else:
                if  wk_st  >  150:
                    end  +=  1
        #時短の処理
        else:
            #引き戻し抽選
            r_tyusen2 = random.random()
            wk_jitan  +=  1
            wk_dedama  =  wk_dedama  -  0.5
            if  r_tyusen2  <=  (1/199.8):
                wk_ren  +=  1
                r_dedama,r_kakuhen = d_furi()
                wk_dedama  +=  r_dedama
                wk_st  =  0
                wk_jitan  =  0                           
            else:
                if  wk_jitan  >= 104:
                    end  +=  1
    return  wk_ren,wk_dedama

sikou  =  100000
#連荘回数
ren1 = []
#ラッシュの出玉数
dedama1 = []
no1  =  0
for  sim  in  range(1,sikou+1):
#初当たりの振り分け処理天井考慮  
    sim3  =  0
    end1  =  0
    while  end1  <  1:
        t_tyusen  =  random.random()
        sim3  +=  1
        if  sim3  >=  599  and  sim3  <=  699:
            if  t_tyusen  <=  (1/199.8):
                d_dedama,d_kakuhen  =  d_furi()
                ren,dedama  =  renchan(d_kakuhen)
                ren  +=  1
                dedama  +=  d_dedama
                end1  +=  1
        else:
            if  t_tyusen  <=  (1/199.8):
                h_dedama,h_kakuhen  =  h_furi()
                ren,dedama  =  renchan(h_kakuhen)
                ren  +=  1
                dedama  +=  h_dedama
                end1  +=  1
    dedama1.append(dedama)
    ren1.append(ren)
#連荘平均数
m1 = statistics.mean(ren1)
m2 = statistics.mean(dedama1)
#連荘と出玉の整理
ren1.sort() 
dedama1.sort() 
#print ("連荘数=",ren1)
#print ("出玉数=",dedama1)
print('天井考慮連荘平均: {0:.2f}'.format(m1))
print('天井考慮出玉平均: {0:.1f}'.format(m2))

ren_bunpu = collections.Counter(ren1)
dedama_bunpu = collections.Counter(dedama1)
print("分布=",ren_bunpu)
#print(ren_bunpu)
#出玉の円グラフ作表用定義
x1 = sum( x1 <=  1000 for x1 in dedama1)
x2 = sum(  1000 < x2 <=  5000 for x2 in dedama1) 
x3 = sum(  5000 < x3 <=  10000 for x3 in dedama1)
x4 = sum(  10000 < x4  for x4 in dedama1) 
Xgraph = ["{0:.1f}".format(x1/sikou*100),"{0:.1f}".format(x2/sikou*100),
          "{0:.1f}".format(x3/sikou*100),"{0:.1f}".format(x4/sikou*100)]
label = ["U1k","1k~5k","5k~10k","10kover"]
colors2 = ["0.3", "0.5", "0.7", "0.9", "1.1"]
plt.pie(Xgraph, labels=label, counterclock=False, startangle=90, colors=colors2,autopct="%1.1f%%")
plt.axis('equal')


d = list(ren_bunpu.keys())
e = list(ren_bunpu.values())
sns.set()
sns.set_style("darkgrid", {'grid.linestyle': '--'})
sns.set_context("paper", 1.0, {"lines.linewidth": 1})
sns.set_palette("winter_r", 2, 1)
sns.set('talk', 'darkgrid', 'dark', font_scale=1.0,
        rc={"lines.linewidth": 10, 'grid.linestyle': '--'})
fig, ax = plt.subplots(figsize = (10,5))
ax.set(xlabel ='ren', ylabel='occcurs', xlim=(0,30), ylim=(0,50000))
ax.bar(d,e)
plt.show()

#実戦シミュレーション
sikou  =  3000
sim3  =  0
for  sim  in  range(1,8):
#初当たりの振り分け処理天井考慮
    sim4  =  0
#回転数
    kaiten1 = []
#出玉推移
    dedama1 = []
    soudedama  =  0
    while  sim4  <  sikou:
        t_tyusen  =  random.random()
        sim3  +=  1
        sim4  +=  1
        if  sim3  >=  599  and  sim3  <=  699:
            if  t_tyusen  <=  (1/199.8):
                d_dedama,d_kakuhen  =  d_furi()
                ren,dedama  =  renchan(d_kakuhen)
                dedama  +=  d_dedama
                soudedama  +=  dedama
                sim3  =  0
            else:
                dedama = dedama  -  0.5
        else:
            if  t_tyusen  <=  (1/199.8):
                h_dedama,h_kakuhen  =  h_furi()
                ren,dedama  =  renchan(h_kakuhen)
                dedama  +=  h_dedama
                soudedama  +=  dedama
                sim3  =  0
            else:
                soudedama  =  soudedama  -   (250 / 18)
        dedama1.append(soudedama)
        kaiten1.append(sim4)
    plt.plot(kaiten1,dedama1,linewidth=1)
    plt.show()

#天井期待値の計算
#試行回数
sikou  =  1000
#千円当たりの回転数
kaitenritu =  0
#作図用
sk = []
dk = []
sim1   =  0
sim2   =  0
atari = 0
suru  = 0
for  tenzyo  in  range(0,601,50):
    for kaitenritu  in  range  (15,21):
        soudedama =  0
        for  a  in  range(1,sikou+1):
            suru  =  0
            sim1  =  0
            sim2  =  0
            while  suru  <  1: 
                t_tyusen = random.random()
    #       天井到達時点
                if  sim1  ==  tenzyo:
                    soudedama = soudedama  -  0.5
                    if  t_tyusen  <=  1/(199.8):
                        t_dedama,t_kakuhen  =  d_furi()
                        ren,dedama  =  renchan(t_kakuhen)
                        ren  +=  1
                        soudedama  +=  t_dedama
                        soudedama  +=  dedama
                        suru  +=  1
                    else:
                        sim2  +=  1
                        if  sim2  >=  100:
                            soudedama  +=  0
                            suru +=  1
                else:
                    sim1  +=  1
                    soudedama  =  soudedama  -  (250 / kaitenritu)
                    if  t_tyusen  <=  1/(199.8):
                        t_dedama,t_kakuhen  =  h_furi()
                        ren,dedama  =  renchan(t_kakuhen)
                        ren  +=  1
                        soudedama  +=  t_dedama
                        soudedama  +=  dedama
                        suru  +=  1
        sk.append(["{0:.0f}".format((soudedama/sikou)*4),tenzyo,kaitenritu])



print  ("作表用=",sk)
with open('data.csv', 'w') as file:
    writer = csv.writer(file, lineterminator='\n')
    writer.writerows(sk)
#plt.plot(atarikai,dedama1)
#plt.show()

Pythonによる仕置人天井シミュレーション

# -*- coding: utf-8 -*-
"""
Created on Wed Jul  1 10:56:29 2020

@author: HOST1191
"""
import random
import statistics 
import collections
import matplotlib.pyplot as plt
import seaborn as sns
import csv
#仕置人デンチュー振り分け
def d_furi():
    d_furir = random.randint(1,200)
    d_dedama =  0
    d_kakuhen =  0
    d_jitan  =  0
    if  d_furir  >=  1  and  d_furir  <= 33:
        d_dedama +=  900
        d_kakuhen   =  1
        d_jitan    =  1
    elif d_furir  >=  34  and  d_furir  <=  99:
        d_dedama  += 900
        d_kakuhen  =  1
        d_jitan   =  0
    elif  d_furir  >=  100  and  d_furir  <= 132:
        d_dedama  +=  270
        d_kakuhen  =  1
        d_jitan  =  1
    elif  d_furir  >=  133  and  d_furir  <= 198:
        d_dedama  =  270
        d_kakuhen =  1
        d_jitan  =   0
    elif  d_furir  ==  199:
        d_dedama  +=  900
        d_kakuhen  =  0
        d_jitan  =  2
    else:
        d_dedama  += 270
        d_kakuhen  =  0
        d_jitan  =  2
    return  d_dedama,d_kakuhen,d_jitan

#仕置人ヘソの振り分け
def h_furi():
    h_furir = random.randint(1,100)
    h_dedama =  0
    h_kakuhen =  0
    h_jitan  =  0
    if  h_furir  >=  1  and  h_furir  <= 99:
        h_dedama +=  270
        h_kakuhen   =  0
        h_jitan    =  3
    else:
        h_dedama  += 270
        h_kakuhen  =  1
        h_jitan  =  0
    return  h_dedama,h_kakuhen,h_jitan   
#連荘
def renchan(r_kakuhen,r_jitan):
    wk_jitan = 0
    wk_st    = 0
    r_dedama  =  0
    wk_dedama =  0
    wk_ren  =  0
    end  =  0
#パラメータ説明
#r_jitan  =  0  時短無し
#         =  1 時短50回
#         =  2  時短279回
#r_kakuhen =  0  確変ではない
#          =  1  確変
    while  end  < 1:
        if  r_kakuhen  ==  1:
            r_tyusen = random.random()
            wk_st  +=  1
#            dedama  =  dedama  -  0.5
            if r_tyusen <= (1/86.3):
                wk_ren  +=  1
                r_dedama,r_kakuhen,r_jitan = d_furi() 
                wk_dedama  +=  r_dedama
                wk_st  =  0
                wk_jitan  =  0
            else:
                if  wk_st  >  120:
                    if  r_jitan   !=  0:
                        r_kakuhen  =  0
                        wk_jitan   =  0
                    else:
                        end  +=  1
        #時短の処理
        else:
            #引き戻し抽選
            r_tyusen2 = random.random()
            wk_jitan  +=  1
            if  r_tyusen2  <=  (1/99.9):
                wk_ren  +=  1
                r_dedama,r_kakuhen,r_jitan = d_furi()
                wk_dedama  +=  r_dedama
                wk_st  =  0
                wk_jitan  =  0
                                
            else:
                if  r_jitan  ==  1:
                    if  wk_jitan  >=  54:
                        end  +=  1
                elif r_jitan  == 2:
                    if  wk_jitan  >=  663:
                        end  +=  1
                elif r_jitan  == 3:
                    if  wk_jitan  >=  44:
                        end  +=  1
                elif r_jitan  == 4:
                    if  wk_jitan  >= 383:
                        end  +=  1
                else:
                    print ("時短フラグ異常=",r_jitan)
                    end  +=  1
    return  wk_ren,wk_dedama

sikou  =  100000
#連荘回数
ren1 = []
#ラッシュの出玉数
dedama1 = []
no1  =  0
for  sim  in  range(1,sikou+1):
#初当たりの振り分け処理  
    t_tyusen = random.random()
    if  t_tyusen  <=  (94/100):
        h_dedama,h_kakuhen,h_jitan  =  h_furi()
        ren,dedama  =  renchan(h_kakuhen,h_jitan)
        ren  +=  1
        dedama  +=  h_dedama
    else:
        ren,dedama  = renchan(0,4)
        if  ren  == 0:
            no1  +=  1
    dedama1.append(dedama)
    ren1.append(ren)
#連荘平均数
m1 = statistics.mean(ren1)
m2 = statistics.mean(dedama1)
#連荘と出玉の整理
ren1.sort() 
dedama1.sort() 
#print ("連荘数=",ren1)
#print ("出玉数=",dedama1)
print('連荘平均: {0:.2f}'.format(m1))
print('出玉平均: {0:.1f}'.format(m2))

ren_bunpu = collections.Counter(ren1)
dedama_bunpu = collections.Counter(dedama1)
print("分布=",ren_bunpu)
#print(ren_bunpu)
#出玉の円グラフ作表用定義
x1 = sum( x1 <=  1000 for x1 in dedama1)
x2 = sum(  1000 < x2 <=  5000 for x2 in dedama1) 
x3 = sum(  5000 < x3 <=  10000 for x3 in dedama1)
x4 = sum(  10000 < x4  for x4 in dedama1) 
Xgraph = ["{0:.1f}".format(x1/sikou*100),"{0:.1f}".format(x2/sikou*100),
          "{0:.1f}".format(x3/sikou*100),"{0:.1f}".format(x4/sikou*100)]
label = ["1000発以下","1000発~5000発","5000発~万発","万発over"]
colors2 = ["0.3", "0.5", "0.7", "0.9", "1.1"]
plt.pie(Xgraph, labels=label, counterclock=False, startangle=90, colors=colors2,autopct="%1.1f%%")
plt.axis('equal')


d = list(ren_bunpu.keys())
e = list(ren_bunpu.values())
sns.set()
sns.set_style("darkgrid", {'grid.linestyle': '--'})
sns.set_context("paper", 1.0, {"lines.linewidth": 1})
sns.set_palette("winter_r", 2, 1)
sns.set('talk', 'darkgrid', 'dark', font_scale=1.0,
        rc={"lines.linewidth": 10, 'grid.linestyle': '--'})
fig, ax = plt.subplots(figsize = (10,5))
ax.set(xlim=(0,30), ylim=(0,50000))
ax.bar(d,e)
plt.show()

#天井期待値の計算
#試行回数
sikou  =  100000
#千円当たりの回転数
kaitenritu =  0
#作図用
sk = []
dk = []
sim1   =  0
sim2   =  0
atari = 0
suru  = 0
for  tenzyo  in  range(0,281,50):
    for kaitenritu  in  range  (15,21):
        soudedama =  0
        for  a  in  range(1,sikou+1):
            suru  =  0
            sim1  =  0
            sim2  =  0
            while  suru  <  1: 
                t_tyusen = random.random()
    #       天井到達時点
                if  sim1  ==  tenzyo:
                    soudedama = soudedama  -  0.5
                    if  t_tyusen  <=  1/(99.9):
                        t_dedama,t_kakuhen,t_jitan  =  d_furi()
                        ren,dedama  =  renchan(t_kakuhen,t_jitan)
                        ren  +=  1
                        soudedama  +=  t_dedama
                        soudedama  +=  dedama
                        suru  +=  1
                    else:
                        sim2  +=  1
                        if  sim2  >=  379:
                            soudedama  +=  0
                            suru +=  1
                else:
                    sim1  +=  1
                    soudedama  =  soudedama  -  (250 / kaitenritu)
                    if  t_tyusen  <=  1/(99.9):
                        t_dedama,t_kakuhen,t_jitan  =  h_furi()
                        ren,dedama  =  renchan(t_kakuhen,t_jitan)
                        ren  +=  1
                        soudedama  +=  t_dedama
                        soudedama  +=  dedama
                        suru  +=  1
        sk.append(["{0:.0f}".format(soudedama/sikou*4),tenzyo,kaitenritu])



print  ("作表用=",sk)
with open('data.csv', 'w') as file:
    writer = csv.writer(file, lineterminator='\n')
    writer.writerows(sk)
#plt.plot(atarikai,dedama1)
#plt.show()

Pythonによる仮面ライダー轟音の天井期待値算出シミュレーション方法

仮面ライダー轟音を天井まで50G刻みで期待値算出できるようにしました。

変数のkaitenrituを好きな回転数に変えたら

その回転数の期待値が出てきますのでお試しあれ。

# -*- coding: utf-8 -*-
"""
Created on Wed Jul  1 10:56:29 2020

@author: HOST1191
"""
import random
import statistics 
import collections
import matplotlib.pyplot as plt
import seaborn as sns

#仮面ライダー轟音振り分けデンチュー 
def furi():
    furir = random.randint(1,100)
    furideda =  0
    furiflg  =  0
    if  furir  >=  1  and  furir  <= 35:
        furideda +=  1400
        furiflg   =  0
    elif furir  >=  36  and  furir  <=  80:
        furideda  += 1400
        furiflg  +=  1
    elif  furir  >=  81  and  furir  <= 85:
        furideda  +=  280
        furiflg  =  0
    else:
        furideda  += 280
        furiflg  +=  1
    return  furideda,furiflg

#仮面ライダー轟音振り分けヘソ   

    
#仮面ライダー轟音連荘の関数定義
def renchan(kakuhen1,flg):
    ren   = 1
    suru  = 0
    jitan = 0
    st    = 0
    dedama  =  0
    while  suru  < 1:
        #転落抽選
        #確変
        if  kakuhen1  ==  0:
            tyusen1 = random.random()
            st  +=  1
            dedama  =  dedama  -  0.5
            if tyusen1 <= (1/74.7):
                ren  +=  1
                furideda,flg = furi() 
                dedama  +=  furideda
                st  =  0
                jitan  =  0
            else:
                if  st  >  120:
                    if  flg   ==  0:
                        kakuhen1  +=  1
                        jitan  =  0
                    else:
                        suru  +=  1
        #時短の処理
        else:
            #引き戻し抽選
            tyusen2 = random.random()
            jitan  +=  1
            dedama  =  dedama  -  0.5
            if  jitan  >=  124:
                suru  +=  1
            else:
                if  tyusen2  <=  (1/319.7):
                    ren  +=  1
                    furideda,flg =  furi()
                    dedama  +=  furideda
                    kakuhen1  =  0
                    jitan  =  0
                    st     =  0
#    print ("ren=",ren)          
    return  ren,dedama

#試行回数
sikou  =  10000
#千円当たりの回転数
kaitenritu =  16
#低確分母
bunbo1 =  319.7
#作図用
atarikai = []
dedama1 = []
bunbo1 =  319.7
sim1   =  0
sim2   =  0
atari = 0
suru  = 0
for  tenzyo  in  range(0,951,50):
    soudedama =  0
    for  a  in  range(1,sikou+1):
        suru  =  0
        sim1  =  0
        sim2  =  0
        while  suru  <  1: 
            tyusen1 = random.random()
#       天井到達時点
            if  sim1  ==  tenzyo:
                soudedama = soudedama  -  0.5
                if  tyusen1  <=  1/(bunbo1):
                    furideda,furiflg  =  furi()
                    soudedama  +=  furideda
                    ren,dedama  =  renchan(0,furiflg)
                    soudedama  +=  dedama
                    suru  +=  1
                else:
                    sim2  +=  1
                    if  sim2  >=  1200:
                        soudedama  +=  0
                        suru +=  1
            else:
                sim1  +=  1
                soudedama  =  soudedama  -  (250 / kaitenritu)
                if  tyusen1  <=  1/(bunbo1):
                    furiwake1  =  random.randint(1,100)
                    if  furiwake1 >= 1  and  furiwake1  <= 50:
                        soudedama  +=  420
                        ren,dedama = renchan(1,1)
                    elif  furiwake1  >= 51  and  furiwake1  <=  89:
                        soudedama  +=  420
                        ren,dedama  =  renchan(0,1)
                    elif  furiwake1  >=  90  and  furiwake1  <= 99:
                        soudedama  +=  420
                        ren,dedama  = renchan(0,0)
                    else:
                        soudedama  +=  1400
                        ren,dedama  =  renchan(0,0)
                    soudedama  +=  dedama
                    suru  +=  1
    dedama1.append("{0:.0f}".format((soudedama/sikou)*4))
    atarikai.append(tenzyo)
print  ("期待値=",dedama1)
print  ("天井まで=",atarikai)
#plt.plot(atarikai,dedama1)
#plt.show()


Pythonによる仮面ライダー轟音平均出玉シミュレーション値

そのままコピペしてpython動く環境で動かしてもらえばシミュレーション値は出るかも。

# -*- coding: utf-8 -*-
"""
Created on Wed Jun 24 18:19:03 2020

@author: HOST1191
"""
import random
import statistics 
import collections
import matplotlib.pyplot as plt
import seaborn as sns

#仮面ライダー轟音振り分け    
def furi():
    furir = random.randint(1,100)
    furideda =  0
    furiflg  =  0
    if  furir  >=  1  and  furir  <= 35:
        furideda +=  1400
        furiflg   =  0
    elif furir  >=  36  and  furir  <=  80:
        furideda  += 1400
        furiflg  +=  1
    elif  furir  >=  81  and  furir  <= 85:
        furideda  +=  280
        furiflg  =  0
    else:
        furideda  += 280
        furiflg  +=  1
    return  furideda,furiflg
    
#仮面ライダー轟音連荘の関数定義
def renchan(kakuhen1,flg):
    hatu = random.randint(1,100)
    if  hatu  >=  1  and  hatu  <=  99:        
        dedama = 420
    else:
        dedama  =  1400
    ren   = 1
    suru  = 0
    jitan = 0
    st    = 0
    while  suru  < 1:
        #転落抽選
        #確変
        if  kakuhen1  ==  0:
            tyusen1 = random.random()
            st  +=  1
            if tyusen1 <= (1/74.7):
                ren  +=  1
                furideda,flg = furi() 
                dedama  +=  furideda
                st  =  0
                jitan  =  0
            else:
                if  st  >  120:
                    if  flg   ==  0:
                        kakuhen1  +=  1
                        jitan  =  0
                    else:
                        suru  +=  1
        #時短の処理
        else:
            #引き戻し抽選
            tyusen2 = random.random()
            jitan  +=  1
            if  jitan  >=  124:
                suru  +=  1
            else:
                if  tyusen2  <=  (1/319.7):
                    ren  +=  1
                    furideda,flg =  furi()
                    dedama  +=  furideda
                    kakuhen1  =  0
                    jitan  =  0
                    st     =  0
#    print ("ren=",ren)          
    return  ren,dedama
"""ここからラッシュ評価"""
#連荘性能の評価
#ラッシュ突入回数
sikou  =  100000
#連荘回数
ren1 = []
#ラッシュの出玉数
dedama1 = []
for  sim  in  range(1,sikou+1):
#初当たりの振り分け処理
    furiwake1  =  random.randint(1,100)
    if  furiwake1 >= 1  and  furiwake1  <= 50:
        ren,dedama = renchan(1,1)
    elif  furiwake1  >= 51  and  furiwake1  <=  89:
        ren,dedama  =  renchan(0,1)
    elif  furiwake1  >=  90  and  furiwake1  <= 99:
        ren,dedama  = renchan(0,0)
    else:
        ren,dedama  =  renchan(0,0)
    dedama1.append(dedama)
    ren1.append(ren)
#連荘平均数
m1 = statistics.mean(ren1)
m2 = statistics.mean(dedama1)
#連荘と出玉の整理
ren1.sort() 
dedama1.sort() 
print ("連荘数=",ren1)
#print ("出玉数=",dedama1)
print('連荘平均: {0:.2f}'.format(m1))
print('出玉平均: {0:.1f}'.format(m2))

ren_bunpu = collections.Counter(ren1)
dedama_bunpu = collections.Counter(dedama1)
#print(ren_bunpu)
#出玉の円グラフ作表用定義
x1 = sum( x1 <=  1000 for x1 in dedama1)
x2 = sum(  1000 < x2 <=  5000 for x2 in dedama1) 
x3 = sum(  5000 < x3 <=  10000 for x3 in dedama1)
x4 = sum(  10000 < x4  for x4 in dedama1) 
Xgraph = ["{0:.1f}".format(x1/sikou*100),"{0:.1f}".format(x2/sikou*100),
          "{0:.1f}".format(x3/sikou*100),"{0:.1f}".format(x4/sikou*100)]
label = ["tan","ika","manti","manpatu"]
colors2 = ["0.3", "0.5", "0.7", "0.9", "1.1"]
plt.pie(Xgraph, labels=label, counterclock=False, startangle=90, colors=colors2,autopct="%1.1f%%")
plt.axis('equal')


d = list(ren_bunpu.keys())
e = list(ren_bunpu.values())
sns.set()
sns.set_style("darkgrid", {'grid.linestyle': '--'})
sns.set_context("paper", 1.0, {"lines.linewidth": 1})
sns.set_palette("winter_r", 2, 1)
sns.set('talk', 'darkgrid', 'dark', font_scale=1.0,
        rc={"lines.linewidth": 10, 'grid.linestyle': '--'})
fig, ax = plt.subplots(figsize = (10,5))
ax.set(xlabel ='ren', ylabel='occcurs', xlim=(0,80), ylim=(0,1000))
ax.bar(d,e)
plt.show()