基于CSV文件中数据计算的返回列表(不带CSV模块)

2024-10-16 20:43:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我要做的是读一个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模块,也不能使用一堆高级命令来执行它(我的意思是我可以,但是如果我不能理解它,我就不想使用它)。在

我要做的是:

  1. 从文件中读取统计信息。基本上有6个不同的CSV文件,因为我必须计算并返回基于四分卫、跑垒手、边路接球手、罚球手和球队整体防守的统计数据列表。现在我只想以四分卫为例。

  2. 从这个CSV文件创建一个点系统。我必须查看每个球员的名字,根据他们的统计数据加减一定数量的积分:

    • 每通过TD 4分(TD-Rush TD)

    • 每个冲刺TD得6分(Rush TD)

    • 每25码传球1分(传球Yds)

    • 完成率超过60%,得10分。

    • 如果完成率超过70%(Pct),则奖励20分

    • -每袋(袋)2个

    • -6次失手(FumL)

  3. 根据点数返回(或打印,无论怎样)前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 ======')

Tags: 文件csvnamepassteamatt统计数据td
1条回答
网友
1楼 · 发布于 2024-10-16 20:43:12

我建议把工作分成几个功能。这可以帮助您将作品组织成可以单独调整或修改的单独部分。在

首先,我建议处理文件解析。这一点很重要,因为它是我们确定保存玩家数据的数据结构的地方。我认为将每个玩家的统计数据保存在字典中是有意义的,从每个属性名(比如“TD”)映射到值。这里有一个函数,它使用列表理解来构建这样的字典的列表,每个播放器一个,从文件头获取stat名称。如果文件的每个列的标题都不正确,则可能无法正常工作。在

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的替代版本:

^{pr2}$

这两个实现(希望)独立于文件的细节,因此您可以将它们用于每个CSV文件,即使它们有不同的统计信息。在

接下来要编码的是评分函数。我不完全确定如何对您列出的规则执行此操作,因为您的示例数据中只有一列TD列(没有单独的运行TD值),没有用于sacks或fulls的列。在

^{3}$

现在,我们可以将零件组合在一起,并返回最佳评分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))

相关问题 更多 >