2017-10-05 8 views
1

だから私は価格の権利の 'ショーケースショーダウン'のシミュレーションを実行しようとしている。本質的には、3人の選手がいる。このゲームは、 "ビッグホイール"と呼ばれる巨大なホイールで行われ、5セントから$ 1.00までのさまざまなセントの値で埋められています。 5¢、$ 1.00,15¢、80¢、35¢、60¢、20¢、40¢、75¢、55¢、95¢、50¢、85¢、30¢、65¢、10 ¢、45¢、70¢、25¢、90¢)。価格は正しい 'ショーケースショーダウン'

ゲームの目的は、あなたが行くことができない限り、$ 1.00に近づくことです。 $ 1.00以上のものはゲームを失う。各プレイヤーはホイールのスピンを2つまで取る。最初のスピンの後、スピナーは自分が着陸したままで滞在するか、または再びスピンするかを選択できます。 2回目のスピンでは、競技者が遭遇したものはすべて最初のスコアに加算され、$ 1.00を超えた場合(前述のように)、その競技者はゲームから除外されます。さもなければ、そのプレーヤーはスコアボードの下に立って、それを待つ。 3人の競技者がすべてスピンをしたとき、$ 1.00に最も近い競技者がゲームに勝利します

したがって、プレイヤー1の最初のスピンが$ .50だったときに何が起こるかをシミュレーションしたいと思います。だからランダムなスピンを生み出し、$ 1.00以上になると失うが、それが上がらなければプレーヤー2が回転する。プレーヤー2はプレーヤー1またはバストを倒し、バストすればプレーヤー3は行く。このコードは、プレーヤー1が獲得する勝敗の数を記録しています。

問題は、プレイヤー1の開始値($ .50、$ .40、$ .30、$ .60など)に入れたものは、勝率は常に15%で正しくないことです。何か案は?私はコードが醜いです知っているが、私はnoobのだと問題があなたの状態が存在しないので、我々はこの問題を解決することはできません

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)) 

答えて

2

学ぼうと赦し。まず、勝率は 15%、は初期値50を超えてゆっくりと低下します。最初のスピンの20の可能性をすべて実際に試してみましたが、プレイヤーは2番目のスピンを取る必要があります、あなたはより良い結果を参照してください。私はあなたの出力を変更し、テーブルを生成するために、あなたのメインプログラムをループ:

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% 

最初のプレーヤーがゲームに関する少なくとも情報を持っているため、最悪の勝率を持っています。 正確には彼女はゲームに勝つために必要な合計を知っているので、第3のプレーヤーは勝つための最高のチャンスを持っています。

+0

ありがとうございます。あなたは正しいです、私はすべての価値を試していない、ほんの一握りです。そのような視覚的に魅力的なテーブルに印刷するにはどうすればいいですか? –

+0

**印刷**フォーマットのオンラインチュートリアルを参照してください。ほとんどの場合、私はあなたの改行文字をタブに置き換えました。 – Prune