问题分析:毫厘是多少?如何科学分析体育竞技比赛
输入:球员水平
输出:可预测比赛成绩
计算思维:抽象+自动化
规则:
自顶向下(设计):
自底向上(执行):
程序总体框及步骤:
四个函数完成四个步骤
#Sport
from random import random
#主函数
def main():
printIntro()
probA,probB,n=getInputs()
winsA,winsB = simNGames(n,probA,probB)
printSummary(winsA,winsB)
#打印介绍信息
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
#模拟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 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 serving == 'B':
if random() < probB:
scoreB += 1
else:
serving = 'A'
return scoreA,scoreB
#判断比赛是否结束
def gameOver(a,b):
return a == 15 or b == 15
#表示模拟结果
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))
main()
这个程序模拟两个选手A和B的某种竞技比赛
程序运行需要A和B的能力值(以0到1之间的小数表示)
竞技分析开始,共进行10000场比赛
选手A获胜10000场比赛,占比100.0%
选手B获胜0场比赛,占比0.0%
pip install <第三方库>
:安装第三方库pip install -U<第三方库>
:更新第三方库pip unstall <第三方库>
:卸载指定第三方库pip downlooad<第三方库>
:下载不安装第三方库pip show<第三方库>
:列出指定第三方库的详细信息pip search<关键字>
:根据关键字在名称和介绍中搜索第三方库pip list
:列出已经安装好的库os.path.abspath(path)
:返回path在当前系统中的绝对路径os.path.normpath(path)
:归一化path的表示形式,统一用\分隔路径os.path.relpath(path)
:返回当前程序与文件之间的相对路径(relative path)os.path.dirname(path)
:返回path中目录名称os.path.basename
:返回path中最后文件名称os.path.join(path,*paths)
:组合path与paths,返回一个路径字符串os.path.exists(path)
:判断path对应文件路径或者目录是否存在,返回True或Falseos.path.isfile(path)
:判断path对应文件是否为已存在文件,返回True或者Falseos.path.isdir(path)
:判断path所对应是否为已存在的目录,返回True或者Falseos.path.getatime(path)
:返回path对应文件或目录的上一次访问时间os.path.getmtime(path)
:返回path对应文件目录最近一次修改时间os.path.getctime(path)
:返回path对应文件或目录的创建时间os.path.size(file)
:判断path所存在文件大小os.system(程序路径)
os.chdir(path)
:修改当前程序的操作路径os.getcwd()
:获得当前路径os.getloginin()
:获得当前登录用户名os.cpu_count()
获得当前cpu数量os.urandom(n)
:获得n个字节长度的随机字符串,通常用于加解密运算import os
print(os.getcwd())
print(os.getlogin())
print(os.cpu_count())
print(os.urandom(4))
f:\Users\Administrator\Documents\笔记\记录笔记\北理python\jupyter note\基础
Administrator
12
b'V\x81\x9dq'
#BatchInstall
import os
libs={"numpy","matplotlib","pillow","sklearn","requests",\
"jieba","beautifulsoup4","wheel","networkx","sympy",\
"pyinstaller","django","flask","werobot","pyqt5",\
"pandas","pyopengl","pypdf2","docopt","pygame"}
try:
for lib in libs:
os.system('pip install'+lib)
print('successful')
except:
print('failed somehow')
successful
描述
获得用户的任何可能输入,将其中的英文字符进行打印输出,程序不出现错误。
#英文字符的鲁棒输入
s=input()
for i in s:
if i in ['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z']:
print(i,end='')
abce
#参考答案
alpha = []
for i in range(26):
alpha.append(chr(ord('a') + i))
alpha.append(chr(ord('A') + i))
s = input()
for c in s:
if c in alpha:
print(c, end="")
描述
获得用户输入的一个数字,可能是浮点数或复数,如果是整数仅接收十进制形式,且只能是数字。对输入数字进行平方运算,输出结果。
要求:
(1)无论用户输入何种内容,程序无错误;
(2)如果输入有误,请输出"输入有误"。
#数字的鲁棒输入
s = input()
try:
if complex(s)==complex(eval(s)):
print(pow(eval(s),2))
except:
print('输入有误')
输入有误