日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

python网球比赛模拟_Python-体育竞技模拟

發(fā)布時(shí)間:2025/3/15 python 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python网球比赛模拟_Python-体育竞技模拟 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

體育競技分析的IPO模式:

輸入I(input):兩個(gè)球員的能力值,模擬比賽的次數(shù)(其中,運(yùn)動員的能力值,可以通過發(fā)球方贏得本回合的概率來表示,一個(gè)能力值為0.8的球員,在他發(fā)球時(shí),有80%的可能性贏得1分)

處理P(process):模擬比賽過程

輸出O(output):兩個(gè)球員獲勝的概率

該體育競技程序,我們采用自頂向下的設(shè)計(jì)方法。

一、排球比賽的模擬

模擬不同的兩個(gè)隊(duì)伍進(jìn)行排球的模擬比賽。

2. 模擬原理: 通過輸入各自的能力值(Ⅰ),模擬比賽的進(jìn)行( P ),最后輸出模擬的結(jié)果( O )。

P 簡介:通過產(chǎn)生隨機(jī)數(shù)得到每局比賽的難度,若小于能力值則表示贏得本局比賽,反之輸?shù)舯揪直荣悺?/p>

3. 規(guī)則簡介:

① 每場比賽采用 5局3勝制。

② 前四局采用25分制,每個(gè)隊(duì)只有在贏得至少25分,且同時(shí)超過對方2分時(shí)才勝一局。

③ 決勝局(第五局)采用15分制,先獲得15分,且同時(shí)超過對方2分為勝。

插入代碼之前,先對代碼做個(gè)簡單的介紹:

函數(shù)名稱

函數(shù)說明

printInfo()

打印程序的介紹信息

getInputs()

獲得用戶輸入的參數(shù)

printResult(n, winsA, winsB)

輸出模擬比賽的結(jié)果

simNGames(n, probA, probB)

模擬n場比賽

simOneGame(probA, probB)

模擬一場比賽,包括五局,采取五局三勝制

simAGame(N, probA, probB)

模擬一局比賽

GameOver(N, scoreA, scoreB)

定義一局比賽的結(jié)束條件

#-*- encoding:utf-8 -*-

from random importrandomdefprintInfo():'''function: 打印程序的介紹信息'''

print("產(chǎn)品名稱: 排球比賽模擬分析器")print("產(chǎn)品概述: 通過輸入2個(gè)隊(duì)伍A和B的能力值(0到1之間的小數(shù)表示),能夠模擬多次2個(gè)隊(duì)伍A和B的排球競技比賽,從而得出各自的勝率!")print("產(chǎn)品作者: 林崇宇 - 14\n")defgetInputs():'''function: 獲得用戶輸入的參數(shù)'''probA= eval(input("請輸入隊(duì)伍A的能力值(0~1):"))

probB= eval(input("請輸入隊(duì)伍B的能力值(0~1):"))

n= eval(input("請輸入需要模擬比賽的場次數(shù):"))returnprobA, probB, ndefsimNGames(n, probA, probB):'''function: 模擬n場比賽

n: 模擬n場比賽

probA, probB: 分別為隊(duì)伍A和B的能力值

winA, winB: 隊(duì)伍A和B在一場比賽中獲勝的局?jǐn)?shù)

winsA, winsB: 隊(duì)伍A和B贏得比賽的場數(shù),總共n場'''winsA, winsB=0, 0for _ inrange(n):

winA, winB=simOneGame(probA, probB)if winA >winB:

winsA+= 1

else:

winsB+= 1

returnwinsA, winsBdefsimOneGame(probA, probB):'''function: 模擬一場比賽,包括五局,采取五局三勝制

probA, probB: 分別為隊(duì)伍A和B的能力值

return: 返回隊(duì)伍A和B在本場比賽中獲勝的局?jǐn)?shù)

scoreA, scoreB: 分別為隊(duì)伍A和B一局比賽獲得的分?jǐn)?shù)

winA, winB: 分別為隊(duì)伍A和B一場比賽獲勝的局?jǐn)?shù)'''n= 1 #代表本次比賽的局次

winA, winB =0, 0for _ in range(5):

scoreA, scoreB=simNGame(n, probA, probB)if scoreA >scoreB:

winA+= 1

else:

winB+= 1n+= 1

if winA == 3 or winB == 3:break

returnwinA, winBdefsimNGame(n, probA, probB):'''function: 模擬一局比賽

N: 代表本次比賽的局次

probA, probB: 分別為隊(duì)伍A和B的能力值

return: 返回隊(duì)伍A和B在本局比賽中獲得的分?jǐn)?shù)'''scoreA, scoreB= 0, 0 #分別為隊(duì)伍A和B一局比賽獲得的分?jǐn)?shù)

serving = 'A' #發(fā)球方

while notGameOver(n, scoreA, scoreB):if serving == 'A':if random() >probA:

scoreB+= 1serving= 'B'

else:

scoreA+= 1

if serving == 'B':if random() >probB:

scoreA+= 1serving= 'A'

else:

scoreB+= 1

returnscoreA, scoreBdefGameOver(n, scoreA, scoreB):'''function: 定義一局比賽的結(jié)束條件

N: 代表當(dāng)前局次(第五局為決勝局)

return: 若比賽結(jié)束的條件成立返回真,否則為假'''

if n <= 4:return (scoreA>=25 and abs(scoreA-scoreB)>=2) or (scoreB>=25 and abs(scoreA-scoreB)>=2)else:return (scoreA>=15 and abs(scoreA-scoreB)>=2) or (scoreB>=15 and abs(scoreA-scoreB)>=2)defprintResult(n, winsA, winsB):'''function: 輸出模擬比賽的結(jié)果'''

print("競技分析開始,共模擬{}場比賽。".format(n))print(">>>隊(duì)伍A獲勝{}場比賽,占比{:0.1%}".format(winsA,winsA/n))print(">>>隊(duì)伍B獲勝{}場比賽,占比{:0.1%}".format(winsB,winsB/n))defmain():

printInfo()

probA,probB,n=getInputs()

winsA,winsB=simNGames(n,probA,probB)

printResult(n,winsA,winsB)

main()

二、籃球賽事的模擬

賽事規(guī)則:

1.1 籃球比賽

籃球比賽由兩個(gè)隊(duì)參加,每隊(duì)出場5名隊(duì)員。每隊(duì)目標(biāo)是在對方球籃得分,并阻止對方隊(duì)在本方球籃得分。

籃球比賽由裁判員、記錄臺人員和技術(shù)代表(如到場)管理。

1.2 球籃:本方/對方

被某隊(duì)進(jìn)攻的球籃是對方的球籃,由某隊(duì)防守的球籃是本方的球籃。

1.3 比賽的勝者

在比賽時(shí)間結(jié)束時(shí)得分較多的隊(duì),將是比賽的勝者。

代碼解釋:

函數(shù)名

函數(shù)說明

printIntro

打印程序的介紹信息

getInputs

輸入選手的能力值

simNGame(n,proA,proB)

n場比賽

gameOver(a,b)

比賽的結(jié)束約束條件

simOneGame(proA,proB)

一局比賽

printsummary(winsA,winsB)

比賽結(jié)果

#-*- coding: utf-8 -*-

"""Created on Mon May 13 19:46:23 2019

@author: 18 EliO FanG"""

from math importfabsfrom random importrandomdefprintIntro():'''function: 打印程序的介紹信息'''

print("模擬籃球比賽的代碼分析")print("這個(gè)程序模擬兩支隊(duì)伍A和B的籃球比賽")print("程序運(yùn)行需要A和B的能力值(以0到1之間的小數(shù)表示)")print("作者:18 EliO FanG\n")defgetInputs():

a= eval(input("請輸入A隊(duì)的能力值(0-1):"))

b= eval(input("請輸入B隊(duì)的能力值(0-1):"))

n= eval(input("模擬比賽的場次:"))returna, b, ndefsimNGames(n, probA, probB):

winsA, winsB=0, 0for i inrange(n):

scoreA, scoreB=simOneGame(probA, probB)if scoreA >scoreB:

winsA+= 1

else:

winsB+= 1

returnwinsA, winsBdefgameOver(a,b):return a>b or b>adefsimOneGame(probA, probB):

scoreA, scoreB=0, 0

serving= "A"

while notgameOver(scoreA, scoreB):if serving == "A":if random()

scoreA+= 1

else:

serving="B"

else:if random()

scoreB+= 1

else:

serving="A"

returnscoreA, scoreBdefprintSummary(winsA, winsB):

n= winsA +winsBprint("籃球比賽分析開始,共模擬{}場比賽".format(n))print("A隊(duì)獲勝{}場比賽,占比{:0.1%}".format(winsA, winsA/n))print("B隊(duì)獲勝{}場比賽,占比{:0.1%}".format(winsB, winsB/n))defmain():

printIntro()

probA, probB, n=getInputs()

winsA, winsB=simNGames(n, probA, probB)

printSummary(winsA, winsB)

main()

關(guān)鍵是誰先發(fā)球

三、羽毛球比賽模擬

賽事規(guī)則:

1. 21 分制,3局2勝為佳

2. 每球得分制

3. 每回合中,取勝的一方加 1 分

4. 當(dāng)雙方均為 20 分時(shí),領(lǐng)先對方 2 分的一方贏得該局比賽

5. 當(dāng)雙方均為 29 分時(shí),先取得 30 分的一方贏得該局比賽

6. 一局比賽的獲勝方在下一局率先發(fā)球

#-*- coding: utf-8 -*-

"""Created on Mon May 13 19:46:23 2019

@author: 18 EliO FanG"""

from math importfabsfrom random importrandomdefprintIntro():'''function: 打印程序的介紹信息'''

print("模擬羽毛球比賽的代碼分析")print("這個(gè)程序模擬兩個(gè)選手A和B的羽毛球比賽")print("程序運(yùn)行需要A和B的能力值(以0到1之間的小數(shù)表示)")print("作者:18 EliO FanG\n")defgetInputs():

a= eval(input("請輸入選手A的能力值(0-1):"))

b= eval(input("請輸入選手B的能力值(0-1):"))

n= eval(input("模擬比賽的場次:"))returna, b, ndefsimNGames(n, probA, probB):

winsA, winsB=0, 0for i inrange(n):

scoreA, scoreB=simOneGame(probA, probB)if scoreA >scoreB:

winsA+= 1

else:

winsB+= 1

returnwinsA, winsBdefgameOver(a,b):if (a==20 and b==20):return a==22 or b==22

if(a==29 and b==29):return a==30 or b==30

else:return a==21 or b==21

defsimOneGame(probA, probB):

scoreA, scoreB=0, 0

serving= "A"

while notgameOver(scoreA, scoreB):if serving == "A":if random()

scoreA+= 1

else:

serving="B"

else:if random()

scoreB+= 1

else:

serving="A"

returnscoreA, scoreBdefprintSummary(winsA, winsB):

n= winsA +winsBprint("羽毛球比賽分析開始,共模擬{}場比賽".format(n))print("選手A獲勝{}場比賽,占比{:0.1%}".format(winsA, winsA/n))print("選手B獲勝{}場比賽,占比{:0.1%}".format(winsB, winsB/n))defmain():

printIntro()

probA, probB, n=getInputs()

winsA, winsB=simNGames(n, probA, probB)

printSummary(winsA, winsB)

main()

#-*- coding: utf-8 -*-

"""Created on Mon May 13 19:46:23 2019

@author: 18 EliO FanG"""

from math importfabsfrom random importrandomdefprintIntro():'''function: 打印程序的介紹信息'''

print("模擬羽毛球比賽的代碼分析")print("這個(gè)程序模擬兩個(gè)選手A和B的羽毛球比賽")print("程序運(yùn)行需要A和B的能力值(以0到1之間的小數(shù)表示)")print("作者:18 EliO FanG\n")defgetInputs():

a= eval(input("請輸入選手A的能力值(0-1):"))

b= eval(input("請輸入選手B的能力值(0-1):"))

n= eval(input("模擬比賽的場次:"))returna, b, ndefsimNGames(n, probA, probB):

winsA, winsB=0, 0for i inrange(n):

scoreA, scoreB=simOneGame(probA, probB)if scoreA >scoreB:

winsA+= 1

else:

winsB+= 1

returnwinsA, winsBdefgameOver(a,b):if (a==20 and b==20):return a==22 or b==22

if(a==29 and b==29):return a==30 or b==30

else:return a==21 or b==21

defsimOneGame(probA, probB):

scoreA, scoreB=0, 0

serving= "A"

while notgameOver(scoreA, scoreB):if serving == "A":if random()

scoreA+= 1

else:

serving="B"

else:if random()

scoreB+= 1

else:

serving="A"

returnscoreA, scoreBdefprintSummary(winsA, winsB):

n= winsA +winsBprint("羽毛球比賽分析開始,共模擬{}場比賽".format(n))print("選手A獲勝{}場比賽,占比{:0.1%}".format(winsA, winsA/n))print("選手B獲勝{}場比賽,占比{:0.1%}".format(winsB, winsB/n))defmain():

printIntro()

probA, probB, n=getInputs()

winsA, winsB=simNGames(n, probA, probB)

printSummary(winsA, winsB)

main()

四、在python中,為了更加方便的顯示出結(jié)果,則可以用里面的pyinstaller打包可以執(zhí)行的文件,生成exe文件,則可以直接運(yùn)行結(jié)果。

1.首先要安裝pyinstaller庫

在cmd中輸入下面一句代碼:

pip install pyinstaller

2.使用pyinstaller時(shí);在上述代碼的main函數(shù)的最后加上 input() 語句,防止程序一運(yùn)行完就自動退出。

3.運(yùn)行結(jié)果在pyinstaller中的顯示:

記得結(jié)尾加input()

總結(jié)

以上是生活随笔為你收集整理的python网球比赛模拟_Python-体育竞技模拟的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。