1

我正在尝试使用英语规则模拟壁球比赛的得分。这些都是:

  • 如果服务器赢得集会,则只有服务器会获得积分。
  • 如果服务器赢得一场集会,他们将获得一分并继续作为服务器。
  • 如果返回者赢得了一场集会,他们将成为服务器,但不会获得积分。
  • 首先达到 9 分的玩家获胜,除非比分达到 8-8。
  • 如果比分达到 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

此代码返回 Susie 以 9-0 获胜,而在某些情况下,应将服务器交换给 Bob 以赢得点数,但这并没有发生。苏西继续发球,她赢得了这一分。

4

2 回答 2

4

我认为问题是陈述server == Aserver == B应该是这样server = Aserver = B所以分配发生而不是比较。

我看到的另一个极端情况错误是,如果概率最终恰好为 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在 Susie 至少有 9 分而 Bob 没有积分时(即循环只会停止)——如果 Bob 得到任何积分,游戏将永远继续下去。

要解决此问题,您应该切换到一个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 回答