足球模拟赛是什么意思?
2.模拟原理:?通过输入各自的能力值(I),模拟游戏的进程(P),最后输出模拟结果(O)。
p简介:通过生成随机数,得出一场半场比赛的回合数,再通过生成随机数得出每回合比赛的难度。如果小于能力值,表示赢了这局,否则表示输了。
3.规则介绍:
①?比赛分为两个半场,每半场45分钟。
上半场:一方选择进攻目标,另一方获得开球权;
下半场:攻防方向互换,上半场没开球权的一方拿到开球权。
②进球后开球时,开球方为失球方。
③?比赛结束时,得分多的队获胜。如果两个队得分相同或没有得分,这场比赛就是平局。
4.代码实现
对了,这段代码和上面的主要区别是:GameOver(),其他功能都差不多。
功能名称功能描述
Printinfo()打印程序的介绍信息
Getinputs()获取用户输入的参数。
Printresult (n,winsa,winsb)输出模拟比赛结果。
SimNGames(n,probA,probb),probB)模拟n个游戏。
Simone Game (Proba,Probb)模拟一个游戏,包括上半场和下半场。
Simagame (n,proba,probb)模拟半场比赛。
Game over (n,scorea,scoreb)定义了半场比赛的结束条件。
'''
模拟足球比赛
@作者:bpf
'''
#游戏规则:
# 1.比赛分为两个环节,每个环节持续45分钟。
#上半场:一方选择进攻目标,另一方获得开球权。
#下半场:攻防方向互换,上半场没开球权的一方拿到开球权。
# 2.进球后开球时,开球方是失球的一方。
# 3.当没有违反任何游戏规则时,进攻队得分。
# 4.比赛结束时得分多的队获胜。如果两个队得分相同或没有得分,这场比赛就是平局。
从随机导入随机的
从时间导入时间
def printInfo():
'''
功能:打印节目介绍信息。
'''
打印(" {:* 70} "。格式(“产品介绍”))
打印(“产品名称:足球比赛模拟分析仪”)
Print("产品概述:通过输入甲、乙两支球队的能力值(用0到1之间的小数表示),可以多次模拟甲、乙两支球队的足球比赛,从而得出各自的胜率!")
打印(" {:* 70} "。格式("模拟开始"))
def getInputs():
'''
功能:获取用户输入的参数。
'''
ProbA = eval(input("请输入A队的能力值(0~1):")
ProbB = eval(input("请输入B队的能力值(0~1):")
N = eval(input("请输入要模拟的匹配数:"))
返回probA,probB,n
def printResult(n,via,winsA,winsB):
'''
功能:输出模拟比赛的结果。
'''
打印(" {:* 70} "。格式("模拟结束"))
Print("竞争分析开始,* * *模拟{}博弈。"。格式(n))
打印(" & gt& gt& gtA队赢了{}场,占{:0.1%}”。格式(Winsa,Winsa/n))。
打印(" & gt& gt& gtb队赢了{}场,占{:0.1%}”。格式(winsb,winsb/n))。
打印(" & gt& gt& gt两队战平{}场,占比{:0.1%}”。格式(via,via/n))。
def simNGames(n,probA,probB):
'''
功能:模拟n个游戏
n:模拟n个游戏
ProbA,probB:分别是A队和B队的能力值。
WinsA,winsB:A队和B队赢的场次,共***n场。
'''
via,winsA,winsB = 0,0,0
对于_在范围内(n):
scoreA,scoreB = simOneGame(probA,probB)
如果scoreA == scoreB:
via += 1
elif scoreA >。scoreB:
winsA += 1
否则:
winsB += 1
返回via,winsA,winsB
def simOneGame(probA,probB):
'''
功能:模拟一场比赛,分为上半场和下半场。
ProbA,probB:分别是A队和B队的能力值。
ScoreA,scoreB:分别是A队和B队一场比赛的比分。
Return:返回A队和B队在这场比赛中的得分。
'''
winA,winB = 0,0
对于范围(2)中的N:
scoreA,scoreB = simAGame(N,probA,probB)
winA += scoreA
winB += scoreB
返回winA,winB
def simAGame(N,probA,probB):
'''
功能:模拟半场比赛
ProbA,probB:分别是A队和B队的能力值。
ScoreA,scoreB:分别是A队和B队在半场比赛中的比分。
Return:返回A队和B队在这半场比赛中的得分。
'''
scoreA,scoreB = 0,0
如果N == 0:
Serving = 'A' #服务器
否则:
服务= 'B '
for _ in范围(gameOver()):
if serving == 'A ':
if random()& lt;普罗巴:
scoreA += 1
服务= 'B '
否则:
if random()& lt;probB:
scoreB += 1
服务= 'A '
返回scoreA,scoreB
def gameOver():
'''
功能:定义半场比赛的结束条件。
randint产生一个随机数作为半场游戏的回合数,如果达到半场游戏的回合数,游戏结束。
Return:如果满足游戏结束的条件,则返回true,否则返回false。
'''
return randint(3,10)
if __name__ == "__main__ ":
printInfo()
probA,probB,n = getInputs()
时间=时间()
via,winsA,winsB = simNGames(n,probA,probB)
Print("模拟时间:{:.1f} s "。format (time ()-time))
printResult(n,via,winsA,winsB)
5.运营结果
足球训练基地
1.简介:模拟两支不同的球队进行一场模拟足球比赛。
2.模拟原理:?通过输入各自的能力值(I),模拟游戏的进程(P),最后输出模拟结果(O)。
p简介:通过生成随机数,得出一场半场比赛的回合数,再通过生成随机数得出每回合比赛的难度。如果小于能力值,表示赢了这局,否则表示输了。
3.规则介绍:
①?比赛分为两个半场,每半场45分钟。
上半场:一方选择进攻目标,另一方获得开球权;
下半场:攻防方向互换,上半场没开球权的一方拿到开球权。
②进球后开球时,开球方为失球方。
③?比赛结束时,得分多的队获胜。如果两个队得分相同或没有得分,这场比赛就是平局。
4.代码实现
对了,这段代码和上面的主要区别是:GameOver(),其他功能都差不多。
功能名称功能描述
Printinfo()打印程序的介绍信息
Getinputs()获取用户输入的参数。
Printresult (n,winsa,winsb)输出模拟比赛结果。
SimNGames(n,probA,probb),probB)模拟n个游戏。
Simone Game (Proba,Probb)模拟一个游戏,包括上半场和下半场。
Simagame (n,proba,probb)模拟半场比赛。
Game over (n,scorea,scoreb)定义了半场比赛的结束条件。
1 # -*-编码:utf-8 -*-
2 '''
3模拟足球比赛
4 @作者:bpf
5 '''
6 #竞赛规则:
7 # 1.比赛分为两个环节,每个环节持续45分钟。
8 #上半场:一方选择进攻目标,另一方获得开球权。
9 #下半场:交换攻防方向,上半场没开球权的一方拿到开球权。
10 # 2.进球后开球时,开球方是丢球的一方。
11 # 3.当没有违反任何游戏规则时,进攻队得分。
12 # 4.比赛结束时得分多的队获胜。如果两个队得分相同或没有得分,这场比赛就是平局。
13
14来自随机导入随机,randint
15从时间导入时间
16 def printInfo():
17 '''
18功能:打印节目介绍信息。
19 '''
20打印(“{:* 70}”。格式(“产品介绍”))
21打印(“产品名称:足球比赛模拟分析仪”)
22 print("产品概述:通过输入A、B两支队伍的能力值(用0到1之间的小数表示),可以多次模拟A、B两支队伍的排球比赛,从而得出各自的胜率!")
23号打印(“产品作者:卜平凡-04”)
24打印(“{:* 70}”。格式("模拟开始"))
25
26 def getInputs():
27 '''
28功能:获取用户输入的参数。
29 '''
30 probA = eval(input("请输入A队的能力值(0~1):")
31 probB = eval(input("请输入B队的能力值(0~1):")
32 n = eval(input("请输入要模拟的匹配数:"))
33返回probA,probB,n
34
35 def printResult(n,via,winsA,winsB):
36 '''
37功能:输出模拟比赛结果。
38 '''
39打印(“{:* 70}”。格式(“模拟结束”))
40 print("竞争分析开始,* * *模拟{}游戏。"。格式(n))
41打印机(" & gt& gt& gtA队赢了{}场,占{:0.1%}”。格式(Winsa,Winsa/n))。
42打印(" >;& gt& gtb队赢了{}场,占{:0.1%}”。格式(winsb,winsb/n))。
43打印(" & gt& gt& gt两队战平{}场,占比{:0.1%}”。格式(via,via/n))。
四十四
45 def simNGames(n,probA,probB):
46 '''
47功能:模拟n场游戏
48 n:模拟n个游戏
49 probA,probB:分别是A队和B队的能力值。
50 winsA,winsB:A队和B队赢的场次,共***n场。
51 '''
52 via,winsA,winsB = 0,0,0
53 for _ in范围(n):
54 scoreA,scoreB = simOneGame(probA,probB)
55如果scoreA == scoreB:
56通孔+= 1
57 elif scoreA & gtscoreB:
58 winsA += 1
59其他:
60 winsB += 1
61返回via,winsA,winsB
62
63 def simOneGame(probA,probB):
64 '''
65功能:模拟一场比赛,分上下半场。
66 probA,probB:分别是A队和B队的能力值。
67 scoreA,scoreB:A队和B队分别在一场比赛中的比分。
68 return:返回A队和B队在这场比赛中的得分。
69 '''
70 winA,winB = 0,0
71表示范围(2)中的N:
72 scoreA,scoreB = simAGame(N,probA,probB)
73 winA += scoreA
74 winB += scoreB
75返回winA,winB
76
77 def simAGame(N,probA,probB):
78 '''
79功能:模拟半场比赛
80 probA,probB:分别是A队和B队的能力值。
81 scoreA,scoreB:A队和B队分别在半场比赛中的比分。
82 return:返回A队和B队在本半场比赛中的得分。
83 '''
84 scoreA,scoreB = 0,0
85如果N == 0:
86份= 'A' #服务器
87其他:
88份= 'B '
89 for _ in range(gameOver()):
90如果serving == 'A ':
91 if random()& lt;普罗巴:
92 scoreA += 1
93份= 'B '
94其他:
95 if random()& lt;probB:
96 scoreB += 1
97份= 'A '
98返回scoreA,scoreB
99
100 def gameOver():
101 '''
102功能:定义半场比赛结束条件。
103通过randint生成一个随机数作为半场游戏回合数,如果达到半场游戏回合数就结束游戏。
104 return:游戏结束条件满足则返回true,否则返回false。
105 '''
106 return randint(3,10)
107
108 if __name__ == "__main__ ":
109 printInfo()
110 probA,probB,n = getInputs()
111时间=时间()
112 via,winsA,winsB = simNGames(n,probA,probB)
113 print("模拟时间:{:.1f} s "。format (time ()-time))
114打印结果(n,via,winsA,winsB)
5.运行结果表明,为了便于查看,我仍然在cmd中运行代码。
第三,推广模拟
1.导读:前面两次模拟排球和足球,游戏规则的不同体现在代码的不同,所以这次模拟分析很多球队打乒乓球。
2.模拟原理:?通过输入各自的能力值(I),模拟游戏的进程(P),最后输出模拟结果(O)。
p简介:每个游戏的难度都是通过生成随机数获得的。如果小于能力值,则表示赢得比赛,否则表示输掉比赛。当有多个团队时,采用配对,但只有一次。所以这段代码的功能并不完善,仅供参考。
3.规则介绍:
①?一局:单打:采用七局两胜制;双打淘汰赛和团体赛:采用五局两胜制。
②?一局:第一局11为胜,10平局后,第二局为胜。
③?一局:每队发球两次后,接发球者成为发球者,以此类推。直到比赛结束或双方得分达到10,发球接发球顺序不变,但每队依次只发球一次。
4.代码实现
这段代码和上面的不一样,是用类方法实现的。但是由于我对乒乓球的不熟悉,加上python的使用有限,这段代码的功能有限,只能模拟偶数个队伍来打。技术改进了,代码也会改进和加强。
1 # -*-编码:utf-8 -*-
2 '''
3模拟乒乓球比赛
4 @作者:bpf
5 '''
6 #竞赛规则:
7 # 1.一场比赛:单打:采用七局两胜制。
8 #双打淘汰赛和团体赛:采用五局两胜制。
9 # 2.一局:第一局11为胜,10平局后,第二局为胜。
10 # 3.一局:每队发球两次后,接发球者成为发球者,以此类推,直到比赛结束。
11 #或双方得分达到10时,发球接发球顺序不变,但每队只依次发球一次。
12
13从随机导入随机
14来自熊猫进口数据框
15从时间导入时间
16级运动竞赛分析:
17
18 def PrintInfo(self):
19 '''
20功能:打印节目介绍信息。
21 '''
22打印(“{:* 70}”。格式(“产品介绍”))
23打印("产品名称:乒乓球比赛模拟分析仪(单淘汰制)")
24 print("产品概述:通过输入多支队伍的能力值(用0到1之间的小数表示),可以多次模拟多支队伍的乒乓球比赛,从而得出各自的胜率!")
25号打印(“产品作者:卜平凡-04”)
26打印(“{:* 70}”。格式("模拟开始"))
27
28 def GetInputs_for_Singal(self):
29 '''
30功能:获取用户输入的参数,得到单打每个选手的能力值。
31 '''
32 self.n = eval(input("请输入要模拟的匹配数:"))
33自我。概率list _ original = list (map (eval,input("(注:成对配对是通过输入的顺序进行的,即前两者分别是玩家A和B;诸如此类。)\n\
请输入每个玩家的能力值(0~1),用英文逗号分隔(输入2的倍数):")。拆分(','))。
35 self . probability list = self . probability list _ Original
36 self . probnum = len(self . probability list)
37
38 def GetInputs_for_Double(self):
39 '''
40功能:获取用户输入的参数,获取每支双打队伍中每名球员的能力值。
41 probAbilityList:用每队两名球员的平均能力值作为该队的能力值——双打。
42可能性列表_原始:存储每个玩家的原始能力值,以后可以使用。
43 '''
44 self.probAbilityList,self . probability list _ Original =[],[]
45 self.n = eval(input("请输入要模拟的匹配数:"))
46 Original = list(map(eval,input("(注:前四个是A队和B队;诸如此类。)\n\
请输入每个玩家的能力值(0~1),用英文逗号分隔(输入4的倍数):")。拆分(','))。
范围内的I为48(0,len(原始),2):
49 self . probability list . append((Original[I]+Original[I+1])/2)
50 self . probabilitylist _ Original . append(list([Original[I],Original[i+1]]))
51 self . probnum = len(self . probability list)
五十二个
53分辨率打印结果(自身):
54 '''
55功能:输出模拟比赛结果。
56数据:存储各队比赛信息。
57 '''
58打印(“{:* 70}”。格式(“模拟结束”))
59 print("竞技分析结束后,每组模拟{}场比赛。"。格式(自身n))
60数据= []
范围内I的61(self . probnum):
62 tmplist = []
63 tmplist。追加(自我。可能性列表_原始[I]) #存储容量值
64 tmplist。追加(自我。probwinlist [I]) #存储获胜游戏的数量。
65 tmplist。追加(自我。probwinlist [I]/self。n) #存储成功率
66数据追加(tmplist)
67数据表= DataFrame(数据,索引=列表(range(1,self.probNum+1)),列=列表(["能力","胜率"]))
68 #数据表。sort _ values (by = "wins ",inplace = true) #对胜率进行排序会混淆队伍之间的关系,所以不使用。
69打印(数据表)
70
71 def simNGames(自己,游戏,胜利):
72 '''
73功能:模拟n场游戏
74 probwinlist:存储每支球队赢得的比赛次数的列表。
75 winA,winB:A队和B队在一场比赛中赢的局数。
Winsa,Winsb:A队和B队赢的场次,共***n场。
77 '''
78 self.probwinsList = []
对于范围内的I为79(0,self.probNum,2):
80 print("玩家:",i+1,' VS ',i+2,"在游戏中...")
81 winsA,winsB = 0,0
82 for _ in范围(self.n):
83 winA,winB = self . simone game(self . probabilitylist[I],self . probabilitylist[I+1],GAMES,WINS)
84如果winA & gtwinB:
85 winsA