我的代码模拟壁球游戏有什么问题?

时间:2012-12-13 20:05:11

标签: python

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

  • 只有服务器赢得一次集会才能获得积分。
  • 如果服务器赢得一次集会,他们会收到一个积分并继续作为服务器。
  • 如果返回者赢得一次集会,他们将成为服务器,但不会获得积分。
  • 第一名达到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

此代码返回苏西赢得9-0,在某些情况下,服务器应该交换到鲍勃赢得该点,但这不会发生。该服务与Susie保持一致,她赢得了这一点。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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