1

英語のルールを使用してスカッシュ ゲームのスコアリングをシミュレートしようとしています。これらは:

  • ラリーに勝った場合、サーバーのみがポイントを獲得します。
  • サーバーがラリーに勝った場合、ポイントを受け取り、サーバーとして続行します。
  • リピーターがラリーに勝った場合、彼らはサーバーになりますが、ポイントを受け取りません。
  • スコアが 8-8 に達しない限り、最初に 9 ポイントに達したプレーヤーがゲームに勝ちます。
  • スコアが 8-8 に達した場合、最初に 8 に達したプレイヤーが 9 と 10 のどちらでプレーするかを決定します。

私が持っているコードはこれです:

import random

def eng_game(a,b):
    A = 'bob'
    B = 'susie'
    players = [A, B]

    server = random.choice(players)
    print server

    points_bob = 0
    points_susie= 0

    prob_A_wins = 0.4
    prob_B_wins = 0.6

    while points_bob or points_susie < 9:
        probability = random.random()
        print probability
        if probability < prob_A_wins and server == A:
            points_bob += 1
        elif probability < prob_A_wins and server == B:
            server == A
            print server

        if probability > prob_A_wins and server == B:
            points_susie += 1
        elif probability > prob_A_wins and server == A:
            server == B
            print server

        print points_bob
        print points_susie

このコードは、場合によってはポイントを獲得するためにサーバーをボブに交換する必要がある場合に、スージーが 9-0 で勝利したことを返しますが、これは起こりません。サーブはスージーにとどまり、彼女はポイントを獲得します。

4

2 に答える 2

4

server == A問題はステートメントであり、比較の代わりに割り当てが行わserver == Bれるようにする必要があるserver = Aと思います。server = B

私が目にするもう 1 つのエッジ ケースのバグは、確率が正確に 0.4 になると、プログラムは仮想サーブが発生しなかったかのように動作することです。

ループを次のように変更します。

while points_bob < 9 and points_susie < 9:
    probability = random.random()
    print probability
    if probability <= prob_A_wins and server == A:
        points_bob += 1
    elif probability <= prob_A_wins and server == B:
        server = A
        print server

    if probability > prob_A_wins and server == B:
        points_susie += 1
    elif probability > prob_A_wins and server == A:
        server = B
        print server

    print points_bob
    print points_susie
于 2012-12-13T20:12:02.900 に答える
1

私はあなたのループ状態を疑う

while points_bob or points_susie < 9:

あなたが思うように行動していません。ブール値として解釈される場合、数値はFalseゼロの場合とTrueそうでない場合です。つまり、これは実際に をチェックし(points_bob != 0) or (points_susie < 9)ます。これはFalse、スージーが少なくとも 9 ポイントを持ち、ボブがポイントを持っていない場合にのみ発生します (つまり、ループが停止するだけです)。ボブがポイントを獲得した場合、ゲームは永遠に続きます。

これを修正するには、and条件に切り替える必要があります。これは、両方のプレイヤーが 9 点未満である間のみ継続します。別の言い方をすれば、誰かが 9 点に到達するとすぐに停止します。したがって、ループ条件は

while points_bob < 9 and points_susie < 9:

勝利条件を 10 ポイントに変更する場合は、プレイヤーのポイントを定数ではなく変数と比較し、必要に応じて変数を変更する必要があります。

winning_score = 9
while points_bob < winning_score and points_susie < winning_score:
    # ...
    # Accumulate your points etc.
    # ...

    # Now need to reach ten points to win.
    winning_score = 10
于 2012-12-13T20:29:30.593 に答える