PTA Python函数题 7-1 模拟乒乓球比赛

PTA Python函数题 7-1 模拟乒乓球比赛 ,第1张

7-1 模拟乒乓球比赛 (20 分)-函数版
中国选手与日本选手进行乒乓球比赛,每局先得11分者赢得此局,整个比赛5局3胜,如某队获胜达到3局,则赢得此场比赛。
假设中国选手每一分获胜的概率为m,(含m,m<1)。
请模拟比赛过程,并输出各队获胜情况。
请注意:
请使用random库中的random模拟胜率
输入格式:
请在第一行输入整数随机种子。
请在第二行输入中国队每一分获胜的概率(大于0小于1的数)
请在第三行输入要模拟的比赛次数
输出格式:

对每一组输入,根据模拟结果在一行中输出:
Chinese team:m,Japanese team:n。

输入样例:

在这里给出一组输入。例如:

3
0.6
100
输出样例:

在这里给出相应的输出。例如:

Chinese team:98,Japanese team:2

答案
复用的之前的代码,做了略微调整,使用函数。

必看# 必看# 必看# 必看 必看# 必看# 必看# 必看 必看# 必看# 必看# 必看

如果在测试区出现如下问题:

不要着急,直接提交试试。确实是有问题,但是提交可以成功。
本提示为了探究问题创建:
之前的测试结果应该是:
很明显,上个周的答案是没有问题的,但是到了今天,答案变了,和上个周不一样了。
发生甚么事了?
初步推断与random的seed方法有关,查看源代码后发现源代码并没有与时间关联,但是决定了随机数变化的只有seed方法,源代码如下:

都是常数运算,不该被时间影响啊。此提示仅为了一个猜想,若得到结果会留档保存的。
以下是成功案例

import random
def smallParty(theSeed,times,odds,CHWinCount,JPWinCount):
    random.seed(theSeed)
    for i in range(times):
        #     小局中国队获胜次数
        ChGameWinCount = 0
        #     小局日本队获胜次数
        JPGameWinCount = 0
        #     中国队日本队分数
        CHCount = 0
        JPCount = 0

        #     进入小局模拟循环 五局三胜
        while ChGameWinCount != 3 and JPGameWinCount != 3:
            Count = random.random();

            if (CHCount == 11 and CHCount - JPCount >= 2) or (JPCount == 11 and JPCount - CHCount >= 2) or (
                    CHCount > 11 and JPCount > 11 and (CHCount > JPCount or CHCount < JPCount)):
                if CHCount > JPCount:
                    ChGameWinCount += 1
                    CHCount = 0
                    JPCount = 0
                else:
                    JPGameWinCount += 1
                    CHCount = 0
                    JPCount = 0
            elif Count <= odds:
                CHCount += 1
            elif Count > odds:
                JPCount += 1

        #     判断是否大局获胜
        if ChGameWinCount == 3:
            CHWinCount += 1;
            ChGameWinCount = 0;
            JPGameWinCount = 0;
            CHCount = 0
            JPCount = 0
        else:
            JPWinCount += 1;
            ChGameWinCount = 0;
            JPGameWinCount = 0;
            CHCount = 0
            JPCount = 0
    return CHWinCount

theSeed = int(input())
odds = eval(input())
times = int(input())
# 大局中国队获胜分数
CHWinCount = 0
# 大局日本队获胜分数
JPWinCount = 0

# 函数接口
CHWinCount=smallParty(theSeed,times,odds,CHWinCount,JPWinCount)
JPWinCount = times-CHWinCount
print(f"Chinese team:{CHWinCount},Japanese team:{JPWinCount}")

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/728937.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-26
下一篇 2022-04-26

发表评论

登录后才能评论

评论列表(0条)

保存