Python 网球记分板

0 投票
2 回答
7226 浏览
提问于 2025-04-16 07:58

我需要一些帮助,关于一个年终的网球程序作业:

在这个问题中,你需要提供一个界面和显示一个网球比赛的情况。以下是网球比赛计分的规则。

• 比赛有两个选手,我们称他们为选手1和选手2。

• 选手们互相击球,赢得每次击球的选手会得一分。

• 一局比赛是由多个得分组成的。每位选手开始时得分为0(称为“Love all”),赢得比赛的选手需要满足以下条件:
– 该选手得4分;并且
– 该选手的得分比另一位选手多2分。

• 英国人有一个巧妙的计分系统。
得0分的选手称为“Love”。如果得1分,称为“15”;得2分称为“30”;得3分称为“40”。如果两位选手的得分都在3分或以上且相等,则称为“Deuce”。

如果两位选手的得分都在3分或以上,但不相等,则领先的选手称为“Advantage”。

• 一盘比赛是由多个局组成的。
赢得一盘的选手是第一个达到:
6局且至少比对手多2局;或者
– 7局。

如果两位选手的局数都是6局平,那么第13局的计分规则会有所不同。这局称为“tiebreak”,由第一个得7分且比对手多2分的选手获胜。在tiebreak中,不使用英国的计分方式;相反,得分从0-0开始,分数按顺序递增。

• 一场比赛是由多盘组成的。在男子比赛中,赢得比赛的选手是第一个达到3盘的选手。在女子比赛中,赢得比赛的选手是第一个达到2盘的选手。

完成函数 points_str(p1, p2),该函数接受选手1的得分 p1 和选手2的得分 p2,返回一个字符串,表示选手1得分的英国计分方式。如果选手1有优势,返回“Adv”,如果选手2有优势,返回“-”。

例如,
• points_str(0, 2) 应该返回 "Love"。
• points_str(3, 1) 应该返回 "40"。
• points_str(3, 3) 应该返回 "Deuce"。
• points_str(5, 4) 应该返回 "Adv"。
• points_str(4, 5) 应该返回 "-"。

编写一个Python程序来模拟一场网球比赛。在询问用户每位选手的名字和性别后,程序将在每次得分后显示记分板。

要确定谁赢得下一分,程序将调用导入的函数 umpire(),该函数返回整数1表示选手1赢得该分,返回2表示选手2赢得该分。你可以假设 umpire() 只会返回整数1或2。

程序应在任一选手赢得比赛时结束。输出最终的记分板,并显示谁赢得了比赛的消息。输出格式应遵循示例所示。

以下是我目前为该函数编写的代码。它只计算第一分的赢家并显示出来。我该如何正确循环,以便最终计算出局、盘和比赛的赢家呢?

请帮帮我 :) 谢谢!

def points_str(p1, p2):
    p1setscore=0
    p2setscore=0           # setting starting parameters for scorekeeping for games and   
    p1gamescore=0
    p2gamescore=0

male_setmax=3
female_setmax=2        # setting parameters for maximum amount sets/games for male/female rules
gamemax=7


umpire()
if umpire()== 1:
        p1gamescore=p1gamescore+1

else:
        p2gamescore=p2gamescore+1

print p1gamescore, p2gamescore

2 个回答

0

可以把它想象成一种状态。总共有六种状态:

  1. 正常状态(分数在[0123]-[0123]之间,除了3-3的情况)
  2. 平局回合(分数是3-3)
  3. 玩家1获胜(分数是4-[012]或者5-3)
  4. 玩家2获胜(分数是[012]-4或者3-5)
  5. 平局下玩家1占优(分数是4-3)
  6. 平局下玩家2占优(分数是3-4)
1

写一个函数,用来判断谁赢了(可以选择性地显示是谁赢的),再写一个函数来检查玩家的分数,并返回一个描述分数情况的字符串。然后通过不断调用 umpire() 来循环,累加分数,并获取和输出当前的分数情况,直到有人赢为止(提示:可以用 while not winnerfunc(...): 这样的方式)。

撰写回答