PTA Python函数题 7-1 模拟乒乓球比赛 (20 分)

本文介绍了一种基于随机概率的乒乓球比赛模拟方法,通过输入中国队胜率m,模拟5局3胜的比赛过程,输出中国队和日本队的胜局数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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}")
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值