我是新手程序员。我正在尝试使用Python分析一些名为test_score的简单CSV文件(我有一个非常大的文件,我正在分析,但我将其压缩以测试我的代码)。
CSV文件如下所示:
First Name,Last Name,Gender,Score
John,Smith,Male,100
Jane,Doe,Female,97
Henry,Vo,Male,75
Jennifer,Bradley,Female,80
目标是根据用户输入找到最接近的分数。用户选择是男性还是女性。用户还输入分数。
我的代码如下所示:
import csv
user_gender = input("Male or Female\n")
user_score = input("Closest test score\n")
path = r'C:\Users\Joe\Desktop\Exercise\test_score.csv'
with open(path, 'r') as csvfile:
readCSV = csv.DictReader(csvfile, delimiter=',')
for line in readCSV:
first_name = line['First Name']
last_name = line['Last Name']
gender = line['Gender']
score = int(line['Score'])
if user_gender.lower() == gender.lower():
print (score)
到目前为止,该代码适用于根据性别查找所有分数。我需要添加哪些代码才能专门找到最接近用户输入分数的分数?
谢谢
答案 0 :(得分:0)
您可以使用TRANSLATE( .. )
:
TRANSLATE(let! pattern = expr in cexpr) =
builder.Bind(expr, (fun pattern -> TRANSLATE(cexpr) ))
输出:
min
编辑:如果您想使用import csv
def closest_score(val, gender = 'check_all'):
data = list(csv.reader(open('filename.csv')))[1:]
if gender == 'check_all':
return min(data, key=lambda x:abs(val-int(x[-1])))
return min([i for i in data if i[-2].lower() == gender.lower()], key=lambda x:abs(val-int(x[-1])))
print(closest_score(70))
,则该功能变为:
['Henry', 'Vo', 'Male', '75']