程序设计方法论
体育竞技
from random import random
def printIntro ( ) :
print ( "这个程序模拟两个选手A和B 的某种竞技比赛" )
print ( "程序运行需要A和B的能力值(0-1)" )
def getInputs ( ) :
a = eval ( input ( "请输入选手A的能力值(0-1):" ) )
b = eval ( input ( "请输入选手B的能力值(0-1):" ) )
n = eval ( input ( "请输入模拟比赛的场次:" ) )
return a, b, n
def simNGames ( n, probA, probB) :
winsA, winsB = 0 , 0
for i in range ( n) :
scoreA, scoreB = simOneGame( probA, probB)
if scoreA > scoreB:
winsA += 1
else :
winsB += 1
return winsA, winsB
def gameOver ( a, b) :
return a == 15 or b == 15
def simOneGame ( probA, probB) :
scoreA, scoreB = 0 , 0
serving = "A"
while not gameOver( scoreA, scoreB) :
if serving == "A" :
if random( ) < probA:
scoreA += 1
else :
serving = "B"
else :
if random( ) < probB:
scoreB += 1
else :
serving = "A"
return scoreA, scoreB
def printSummary ( winsA, winsB) :
n = winsA + winsB
print ( "竞技分析开始,共模拟{}场比赛" . format ( n) )
print ( "选手A获胜{}场,占比{:0.1%}" . format ( winsA, winsA/ n) )
print ( "选手B获胜{}场,占比{:0.1%}" . format ( winsB, winsB/ n) )
def main ( ) :
printIntro( )
probA, probB, n = getInputs( )
winsA, winsB = simNGames( n, probA, probB)
printSummary( winsA, winsB)
main( )
这个程序模拟两个选手A和B 的某种竞技比赛
程序运行需要A和B的能力值(0-1)
请输入选手A的能力值(0-1):0.45
请输入选手B的能力值(0-1):0.5
请输入模拟比赛的场次:1000
竞技分析开始,共模拟1000场比赛
选手A获胜368场,占比36.8%
选手B获胜632场,占比63.2%
体育竞技测试用例
import Sports
print ( Sports. simNGames( 500 , 0.45 , 0.5 ) )
print ( Sports. simNGames( 1000 , 0.5 , 0.45 ) )
print ( Sports. simNGames( 5000 , 0.44 , 0.46 ) )
print ( Sports. gameOver( 15 , 10 ) )
print ( Sports. gameOver( 6 , 8 ) )
print ( Sports. gameOver( 3 , 15 ) )
print ( Sports. simOneGame( 0.45 , 0.5 ) )
print ( Sports. simOneGame( 0.5 , 0.45 ) )
(180, 320)
(672, 328)
(2299, 2701)
True
False
True
(10, 15)
(15, 14)
批量安装包
import os
libs = { "wordcloud" , "imageio" }
try :
for lib in libs:
os. system( "pip install" + lib)
print ( "successful" )
except :
print ( "false" )
successful