0

私はプログラミング、特にPythonに不慣れで、宿題の問題で問題を抱えています。

ここに問題があります:

クラップスは、5月のカジノでプレイされるサイコロベースのゲームです。ブラックジャックのように、プレイヤーは家と対戦します。ゲームは、プレーヤーが標準の6面サイコロを投げることから始まります。プレイヤーが合計7または11をロールした場合、プレイヤーが勝ちます。プレイヤーが合計2、3、または12をロールした場合、プレイヤーは負けます。他のすべてのロール値については、プレーヤーは、初期値を再度ロールする(この場合は勝つ)か7(この場合は負ける)まで、サイコロのペアを繰り返しロールします。

正の整数nを入力として受け取り、クラップスのnゲームをシミュレートし、プレーヤーが勝ったゲームの割合を返す関数testCraps()を実装します。

>>> testCraps(1000)
0.4844

>>> testCraps(1000)
0.492

これが私がこれまでに持っているものです:

import random

def roll():
   dice = (random.randrange(1,7) + random.randrange (1,7))
   return dice

def testCraps(n):
    dice = roll()
    total = 0
    count = 0

    for i in range (n):
        total = total + 1

        if dice == 2 or dice == 3 or dice == 12:
            count = count + 0
        elif dice == 7 or dice == 11:
            count += 1
        else:
            dice1 = roll()
             while dice1 != 7 or dice1 != dice:
                  if dice1 == 7:
                     count = count + 0
                  elif dice1 == dice:
                     count += 1
                  else: 
                     dice1 = roll()

     return(float(count/total))

私は何かが足りないのですか?ヒントをいただければ幸いです。

4

2 に答える 2

1

インデントがめちゃくちゃです。

行から開始

for i in range (n):

このコードは、関数「testcraps()」の一部ではなくなりました。

それだけが間違っているわけではないかもしれませんが、インデントを正しくすることから始めましょう。

インデントが修正されたので、回答を編集します。

私はあなたの宿題のためのコードを書くつもりはありませんが、私はあなたにこのアドバイスをします。あなたの問題は今や「論理的な」問題です。問題をより簡単に理解してテストできるより簡単なステップに分解する必要があります。まず、 1つのゲームだけをシミュレートし、そのゲームが勝ったか負けたかに応じて0/1(または必要に応じてTrue / False)を返す関数を作成します。残りの作業は簡単です。

于 2013-03-01T19:02:16.267 に答える
1

プログラムで「ハング」が発生している、またはプログラムが実行を完了できないことを意味する無限ループが発生していると思います。whileをループしますdice1 != 7 or dice1 != dice。これは、dice1が7との両方に等しくなるまでループが停止しないことdiceを意味します。つまり、7でない場合は永久にループしますdice

while dice1 != 7 or dice1 != dice:

次に2番目の問題です。コメント付きの修正コードは次のとおりです。

dice1 = roll()
while True: # Loop until either lost or won
    if dice1 == 7:
        break # Player lost, don't do anything
    elif dice1 == dice:
        count += 1 # Player won, increase count
        break
    else:
        dice1 = roll()
于 2013-03-01T19:29:18.133 に答える