所以我试图运行一系列价格正确的'Showcase Showdown'模拟。基本上,有三个球员。这个游戏是在一个名为“大转轮”的巨大轮子上进行的,它充满了各种分值,从5¢一直到1.00美元,增量为5。按此顺序排列(5美分,1美元,15美分,80美分,35美分,60美分,20美分,40美分,75美分,55美分,95美分,50美分,85美分,30美分,65美分,10美分,10美分¢,45¢,70¢,25¢,90¢)。
游戏的目标是尽可能接近1.00美元而不必经过。任何超过1.00美元的东西都会失败。每位玩家最多需要两次旋转;在第一次旋转之后,旋转器可以选择保持他/她降落或再次旋转;在第二次旋转时,无论参赛者的命中率是否会被添加到第一个分数中,并且(如前所述)如果他/她超过1.00美元,那么该选手将被淘汰出局。否则,该玩家站在记分牌下等待它。 当所有三名参赛者都进行了旋转时,最接近$ 1.00的选手将赢得比赛
所以我想对玩家1的第一次旋转为$ .50并且他再次旋转时会发生一系列模拟。所以它产生一个随机旋转,如果它超过$ 1.00就输了,但是如果它没有结束,则玩家2旋转。玩家2要么击败玩家1,要么垮掉,如果玩家破产,则玩家3会去。代码记录了玩家1获得的胜利/损失数量。
问题是,无论我把玩家1的起始值($ .50,$。40,$。30,$ .60等等)放在哪里,胜率百分比总是15%,这是不对的。有任何想法吗?我知道代码是UGLY但原谅我是一个菜鸟并且正在努力学习
from random import randint
def test(spin):
w=0
l=0
ties=0
gain=0
wins=0
tests=100000
for i in range(tests):
new=spin+5*randint(1,21) #new money value
if new>100: #if new value is over 100
l+=1 # you lose
else:
p2_spin_one=5*randint(1,21) #p2's first spin
if p2_spin_one>=new: #if its higher than p1's final
l+=1 #p1 loses
else:
p2_spin_two=p2_spin_one+5*randint(1,21) #if its lower,
#spin again
if p2_spin_two>new and p2_spin_two<=100: #if its higher
#and less than 100
l+=1 #p1 loses
else:
p3_spin_one=5*randint(1,21) #p3's first spin
if p3_spin_one>=new: #if its higher than p1's final
l+=1 #p1 loses
else:
p3_spin_two=p3_spin_one+5*randint(1,21) #if its
#lower, spin again
if p3_spin_two>new and p3_spin_two<=100: #if second
#spin is higher and less than 100
l+=1
elif new==p2_spin_two and new==p3_spin_two:
ties+=1
elif p2_spin_two>100 and new==p3_spin_two:
ties+=1
elif p2_spin_two<new and new==p3_spin_two:
ties+=1
elif new==p2_spin_two and p3_spin_two<new:
ties+=1
elif new==p2_spin_two and p3_spin_two>100:
ties+=1
else:
w+=1
return ("\nPlayer 1 spin again when first spin is
"+str(first_spin)+"\n\n"+"Wins:"+str(w)+"\nLosses:"+str(l)+"\nTies:
"+str(ties)+"\nWin Percentage: "+str(100*w/tests)+"%")
#Set This equal to the number the person spun first
first_spin=30
print(test(first_spin))
答案 0 :(得分:2)
我们无法解决此问题,因为您声明的问题不存在。首先,获胜百分比仅约 15%,并且 缓慢降低超过初始值50.你是否真的尝试了第一次旋转的所有20种可能性,以及作为一个合理的策略建立第一个玩家是否应该进行第二次旋转,你会看到更好的结果。我修改了你的输出并循环你的主程序来生成一个表:
for first_spin in range(5, 105, 5):
print(test(first_spin))
输出:
spin 1:5 W:15736 L:82317 T:1947 Pct: 15.736%
spin 1:10 W:15597 L:82533 T:1870 Pct: 15.597%
spin 1:15 W:15623 L:82359 T:2018 Pct: 15.623%
spin 1:20 W:15700 L:82333 T:1967 Pct: 15.7%
spin 1:25 W:15604 L:82452 T:1944 Pct: 15.604%
spin 1:30 W:15623 L:82458 T:1919 Pct: 15.623%
spin 1:35 W:15598 L:82547 T:1855 Pct: 15.598%
spin 1:40 W:15411 L:82688 T:1901 Pct: 15.411%
spin 1:45 W:15382 L:82756 T:1862 Pct: 15.382%
spin 1:50 W:15004 L:83193 T:1803 Pct: 15.004%
spin 1:55 W:15037 L:83197 T:1766 Pct: 15.037%
spin 1:60 W:14346 L:83994 T:1660 Pct: 14.346%
spin 1:65 W:13800 L:84570 T:1630 Pct: 13.8%
spin 1:70 W:13064 L:85467 T:1469 Pct: 13.064%
spin 1:75 W:11878 L:86769 T:1353 Pct: 11.878%
spin 1:80 W:10587 L:88275 T:1138 Pct: 10.587%
spin 1:85 W:8586 L:90505 T:909 Pct: 8.586%
spin 1:90 W:6467 L:92845 T:688 Pct: 6.467%
spin 1:95 W:3450 L:96216 T:334 Pct: 3.45%
spin 1:100 W:0 L:100000 T:0 Pct: 0.0%
第一位玩家拥有最少的游戏信息,因此获胜率最低。第三个玩家将获得最佳获胜机会,因为她知道完全她赢得比赛所需的总数,如果第一个不够好的话,只需要进行第二次旋转。