古典的な Python の質問 100 問のスコア評価

質問: 学力スコアが 90 点以上の生徒は A で表され、スコアが 60 ~ 89 点の生徒は B で表され、スコアが 60 未満の生徒は C で表されます。

オプション 1: if ステートメントを使用して判断する

  1. Python の組み込み open() 関数を使用して txt ファイルを開き、read() メソッドを使用してファイルの内容を読み取り、splitlines() メソッドを使用して各行を分割します。
  2. 各行をたどり、各生徒のスコアを判断し、スコアに基づいて A、B、C の 3 つのカテゴリに分割し、評価結果を各行の末尾につなぎます。
  3. write() メソッドを使用して、評価されたコンテンツを txt ファイルに書き戻します

利点: 実装が簡単で理解しやすい

デメリット:コードの可読性が悪く、判定条件が多く複雑な場合はコード量が増加し、メンテナンスが困難になります。

with open('scores.txt', 'r') as f:
    lines = f.readlines()  # 读取所有行

with open('scores.txt', 'w') as f:
    for line in lines:
        score = int(line.strip())  # 去除换行符并转为整数
        if score >= 90:
            level = 'A'
        elif score >= 60:
            level = 'B'
        else:
            level = 'C'
        f.write('{} {}\n'.format(line.strip(), level))  # 写入原始分数和评级
 

オプション 2: リスト内包表記とラムダ関数を使用する

  1. Python の組み込み open() 関数を使用して txt ファイルを開き、read() メソッドを使用してファイルの内容を読み取り、splitlines() メソッドを使用して各行を分割します。
  2. 各行を走査し、リスト導出とラムダ関数を使用して各生徒のスコアを判断し、スコアに応じて A、B、C の 3 つのカテゴリに分割し、評価結果を各行の末尾につなぎます。
  3. write() メソッドを使用して、評価されたコンテンツを txt ファイルに書き戻します

利点: コードは簡潔で可読性が高く、単純なデータ操作に適しています。

デメリット:判定条件が複雑になると可読性が低下し、メンテナンスが困難になります。

# lambda函数用于将数值转换成对应的等级
get_grade = lambda score: 'A' if score >= 90 else ('B' if score >= 60 else 'C')

with open('scores.txt', 'r') as f:
    # 读取每一行并根据空格分割成列表
    scores = [line.strip().split() for line in f.readlines()]

# 将每个学生的成绩转换成对应的等级,并将结果追加到列表中
grades = [[*score, get_grade(int(score[-1]))] for score in scores]

with open('grades.txt', 'w') as f:
    # 将每个学生的信息写入文件中
    for grade in grades:
        f.write(' '.join(grade) + '\n')
 

オプション 3: データ処理に pandas ライブラリを使用する

  1. pandas ライブラリの read_csv() メソッドを使用して txt ファイルを読み取ります
  2. apply() メソッドを使用して各生徒の得点を判定し、その得点に基づいて A、B、C の 3 つのカテゴリに分類し、評価結果を新しい列に追加します。
  3. to_csv() メソッドを使用して、処理されたデータを txt ファイルに書き戻します

利点: pandas ライブラリには強力なデータ処理機能があり、データ操作を迅速かつ効率的に実行でき、コードは非常に読みやすいです。

欠点: 単純なデータ操作の場合、pandas ライブラリの使用は少し複雑すぎるため、サードパーティのライブラリ pandas をインストールする必要があります。

import pandas as pd

# 读取txt文件,假设文件中有两列,分别为name和score
df = pd.read_table('data.txt', sep='\s+', header=None, names=['name', 'score'])

# 定义评级函数
def get_grade(score):
    if score >= 90:
        return 'A'
    elif score >= 60:
        return 'B'
    else:
        return 'C'

# 添加评级列
df['grade'] = df['score'].apply(get_grade)

# 根据评级列进行排序
df.sort_values(by=['grade'], ascending=False, inplace=True)

# 将结果写入txt文件
df.to_csv('result.txt', index=False, sep='\t', header=None)
 

おすすめ

転載: blog.csdn.net/yechuanhui/article/details/132899984