我要做的是阅读一个CSV文件,其中包含用于幻想足球队的统计数据。该文件如下所示:
Name Team G QBRat Comp Att Pct Pass Yds Pass YG Yds Att TD Int
Matt Flynn GNB 5 124.8 33 49 67.3 518 103.6 10.6 6 2
Aaron Rodgers GNB 15 122.5 343 502 68.3 4643 309.5 9.2 45 6
Tyrod Taylor BAL 3 118.8 1 1 100 18 6 18 0 0
Brian Hoyer NWE 3 118.8 1 1 100 22 7.3 22 0 0
Drew Brees NOR 16 110.6 468 657 71.2 5476 342.3 8.3 46 14
... etc.
我的时间有限,我需要它很简单 - 这意味着我不能使用csv
模块,我不能使用一堆高级命令来执行它(我的意思是我可以,但如果我无法理解,我不想使用它。)
我要做的是:
从文件中读取统计信息。基本上有6种不同的CSV文件,因为我必须根据四分卫,跑卫,接球员,紧身球,踢球者以及球队的整体防守来计算和返回统计数据列表。现在我将以四分卫为例。
从此CSV文件创建点系统。我必须浏览每个玩家的名字,并根据他们的统计数据加上或减去一定数量的积分:
每次通过TD(TD - Rush TD)4个点
每冲6便士(Rush TD)
每25码传球1次(传球次数)
10%如果完成率超过60%(Pct)
如果完成率超过70%(Pct)
-2每袋(Sack)
-6每个丢失的摸索(FumL)
根据有点像这样的点数返回(或打印,无论如何)前20名:
Name________________________Team__________________Points
====________________________====__________________======
player name_____________ their team______________how many points they have
我迷失了,我真的需要一些帮助,感谢所有能提供一些见解的人:)
这就是我所在的地方:
def qtrBacks():
qb = open('NFL2011QB.csv', 'r')
points = 0
for Name in qb:
print('Top Quarterbacks')
print()
print('Name\t\t Team\t Points')
print('====\t\t ====\t ======')
答案 0 :(得分:0)
我建议将工作分成几个功能。这可以帮助您将作品组织成可以单独调整或修改的单独部分。
首先,我建议处理文件解析。这很重要,因为它是我们确定将保存播放器数据的数据结构的地方。我认为将每个玩家的统计数据保存在字典中是有意义的,从每个统计名称(如“TD”)映射到值。这是一个函数,它使用列表推导来构建这样的字典列表,每个播放器一个,从文件的标题中获取统计名称。如果文件的每列没有正确的标题,则可能无法正常工作。
def read_player_file(filename):
with open(filename) as f:
head = f.readline().split("\t")
player_list = [dict(zip(head, line..strip().split("\t"))) for line in f]
return player_list
上面的代码几乎与您使用csv
模块所做的相同,但它可能也不会处理稍微混乱的文件。这是使用csv.DictReader
的替代版本:
def read_player_file(filename):
with open(filename, "rb") as f:
return player_list = list(csv.DictReader(f))
这两种实现都(希望)独立于文件的细节,因此您可以将它们用于每个CSV文件,即使它们具有不同的统计信息。
编码的下一件事是评分功能。我不完全确定如何针对您列出的规则执行此操作,因为示例数据中只有一个TD
列(没有单独运行的TD值),也没有用于麻烦或摸索的列。
def qb_score(player_dict): # FIXME: Replace ? values!
run_td = ?
pass_td = int(player_dict["TD"]) - run_td
pass_yards = int(player_dict["Yds Pass"])
sacks = ?
fumbles = ?
completion_rate = float(player_dict["Pct Pass"])
score = 4*pass_td + 6*run_td + pass_yards//25 - sacks*2 - fumbles*4
if completion_rate > 60:
score += 10
if completion_rate > 70: # maybe this should be an elif?
score += 20
return score
现在,我们可以将它们放在一起并返回得分最高的QB:
def top_qbs(count=20):
qb_list = read_player_file("NFL2011QB.csv")
for qb in qb_list:
qb["qb score"] = qb_score(qb)
qb_list.sort(key=lambda qb:qb["qb score"], reversed=True)
return qb_list[:count]
您可以使用以下内容进行打印输出:
def print_top_qbs():
qbs = top_qbs()
print('Top Quarterbacks')
print()
print('Name\t\t Team\t Points')
print('====\t\t ====\t ======')
for qb in qbs:
print("{Name}\t{Team}\t{qb score}".format(**qb))