python画球员传球图_《Python入门经典》的四分卫传球率算法

四分卫(Quarterback)是美式橄榄球队进攻的核心队员,负责率队贯彻教练意图,完成指定战术。四分卫水平的好坏、传球成功率的高低,直接影响比赛的结果。

在本书第1章习题32和第2章习题18都是关于美式足球四分卫传球率的算法实现。但是第1章习题32关于传球得分率的算法表述不太正确。

要计算传球手的得分率,应该是需要输入一下五个值

COMP = Number of completions(传球完成次数)

ATT = Number of passing attempts(传球总次数)

YARDS = Passing yards(传球码数)

TD = Touchdown passes(传球达阵次数)

INT = Interceptions(传球被抄截次数)

计算公式:

C是"每次传球的成功率" 乘以100,减去30,然后除以20

Y是"每次传球码数"减3,除以4

T是"每次传球达阵率"乘以20

I是2.375减去("每次传球被拦截率"乘以25) [书本在这里错误!]

传球得分率是(C+Y+T+I)/ 6 * 100

0818b9ca8b590ca3270a3433284dd417.png

限制条件:

(当C、Y、T、I四项中任意一个小于0或大于2.375时,将对应项的值替换为0或2.375进行计算)PS:这个在《python入门经典》中没有提及到,在此算法中也就不考虑了!但是在真实的传球率计算中是有相关规定的。

代码解决是采用了python中的字典。(新手,代码写得有点渣,将就着看吧,不足之处,还请留言交流)

0818b9ca8b590ca3270a3433284dd417.png

# -*- coding: cp936 -*-

dataValue = {} #dictionary for athlete data

count = 1

print "输入运动员信息,以null结束!:"

while True:

print "Number:", count

name = raw_input("Enter Name:")

if name == "null":

break

completionPass = int(raw_input("Enter number of success Passes:"))

numberPass = int(raw_input("Enter number of passes:"))

totalYards = int(raw_input("Enter total yards:"))

touchdownTimes = int(raw_input("Enter touchdown times:"))

interceptTimes = int(raw_input("Enter intercept times:"))

dataValue.setdefault(name,[completionPass,numberPass,totalYards,touchdownTimes,interceptTimes])

count = count + 1

print "\n",

scoreRateDic = {} #dictionary for score rate

for key,val in dataValue.items(): #读取字典中的输入数据,计算每名运动员传球得分率

eachSucPassRate = float(val[0]) / float(val[1])

eachYard = float(val[2]) / float(val[1])

eachTouchdownRate = float(val[3]) / float(val[1])

eachInterceotRate = float(val[4]) / float(val[1])

C = ((eachSucPassRate * 100) - 30) / 20

Y = (eachYard - 3) * 0.25

T = eachTouchdownRate * 20

I = 2.375 - (eachInterceotRate * 25)

scoreRate = (C + Y + T + I) / 6 * 100

scoreRateDic.setdefault(key,scoreRate)

for key,val in scoreRateDic.items(): #评级功能

if val > 95:

print key,":",val,":Great Athlete!"

elif 90 < val <=95:

print key,":",val,":Good Athlete!"

elif 85 < val <=90:

print key,":",val,":Ordinary Athlete!"

else:

print key,":",val,":Bad Athlete!"

验证结果:

0818b9ca8b590ca3270a3433284dd417.png

程序执行结果:

0818b9ca8b590ca3270a3433284dd417.png

资源来源:

谢谢!

PALE





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值