0

私がやろうとしているのは、ファンタジー フットボール チームに使用されている統計を含む 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 - ラッシュ TD)

    • ラッシュTD(Rush TD)1回につき6pts

    • 25ヤードのパスごとに1ポイント(パスヤード)

    • 完了率が 60% (Pct) 以上の場合は 10 ポイント

    • 完了率が 70% (Pct) 以上の場合、20 ポイントのボーナス

    • -2 袋ごとに (Sack)

    • 失われたファンブルごとに-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 ======')
4

1 に答える 1

0

作業をいくつかの機能に分割することをお勧めします。これにより、作業を個別に調整または変更できる個別の部分に編成するのに役立ちます。

まず、ファイルの解析を処理することをお勧めします。これは、プレイヤー データを保持するデータ構造を決定する場所であるため、重要です。各プレーヤーの統計を辞書に保持し、各統計名 (「TD」など) から値にマッピングすることは理にかなっていると思います。これは、リスト内包表記を使用して、ファイルのヘッダーから統計名を取得して、各プレーヤーに 1 つずつ、そのような辞書のリストを作成する関数です。ファイルに各列の正しいヘッダーがない場合、これは正しく機能しない可能性があります。

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。サンプルデータには列が 1 つしかなく (個別の実行中の 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))
于 2012-11-20T06:33:53.077 に答える