首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >我的模拟壁球游戏的代码有什么问题?

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

Stack Overflow用户
提问于 2012-12-13 20:05:11
回答 2查看 1.3K关注 0票数 1

我试着用英语规则来模拟壁球比赛的得分。它们是:

  • 如果他们赢了一场比赛,只有发球者才能得到一分。
  • 如果服务器赢得了一次集会,他们会得到一分并继续作为服务器。
  • 如果投手赢了一场比赛,他们就成了发球者,但没有得到一分。
  • 除非比分达到8-8,否则first球员将赢得比赛的9分。
  • 如果比分达到8-8,达到8first的球员将决定是打到9还是10。

我的代码是:

代码语言:javascript
运行
复制
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以赢得积分,但这种情况并没有发生。发球和苏茜在一起,她赢了。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-12-13 20:12:02

我认为问题在于server == Aserver == B的语句应该是server = Aserver = B,这样就可以进行赋值,而不是进行比较。

我看到的另一个边缘情况错误是,如果概率最终正好是0.4,你的程序就会表现得就像虚拟服务从未发生过一样。

我会把你的循环改为:

代码语言:javascript
运行
复制
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
票数 4
EN

Stack Overflow用户

发布于 2012-12-13 20:29:30

我怀疑你的循环状况

代码语言:javascript
运行
复制
while points_bob or points_susie < 9:

不是你想的那样。当将数字解释为布尔值时,如果数字为零,则为False,否则为True,这意味着这实际上将检查(points_bob != 0) or (points_susie < 9)。这只会是False (也就是说,循环只会停止)当Susie有至少9分而Bob没有点--如果Bob得到任何分,游戏就会永远继续下去。

要解决这个问题,您应该切换到一个and条件。这只会继续,当两个球员都有不到9分,或者说,它的另一种方式,它将停止,只要有人达到9分。因此,您的循环条件应该是

代码语言:javascript
运行
复制
while points_bob < 9 and points_susie < 9:

如果您想将获胜条件更改为10分,则需要将玩家的积分与变量而不是常量进行比较,然后根据需要更改变量:

代码语言:javascript
运行
复制
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
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13867578

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档