質問: 学力スコアが 90 点以上の生徒は A で表され、スコアが 60 ~ 89 点の生徒は B で表され、スコアが 60 未満の生徒は C で表されます。
オプション 1: if ステートメントを使用して判断する
- Python の組み込み open() 関数を使用して txt ファイルを開き、read() メソッドを使用してファイルの内容を読み取り、splitlines() メソッドを使用して各行を分割します。
- 各行をたどり、各生徒のスコアを判断し、スコアに基づいて A、B、C の 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: リスト内包表記とラムダ関数を使用する
- Python の組み込み open() 関数を使用して txt ファイルを開き、read() メソッドを使用してファイルの内容を読み取り、splitlines() メソッドを使用して各行を分割します。
- 各行を走査し、リスト導出とラムダ関数を使用して各生徒のスコアを判断し、スコアに応じて A、B、C の 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 ライブラリを使用する
- pandas ライブラリの read_csv() メソッドを使用して txt ファイルを読み取ります
- apply() メソッドを使用して各生徒の得点を判定し、その得点に基づいて A、B、C の 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)