【问题标题】:CSV programming read writeCSV编程读写
【发布时间】:2016-03-24 15:14:35
【问题描述】:

我正在尝试编写一个程序来读取CSV 学生分数的列表并执行以下操作:

程序计算每个学生的考试平均值,并使用数学 ceil 将其四舍五入为整数,然后将姓名和考试平均值写入另一个名为 csv 的文件 examScores.csv 5 分以内学生的姓名和分数的最高分,例如如果最高分是 98,则应打印所有得分 >= 93 的学生。
得分在 0 – 59、60 – 69、70 – 79、80 – 89、90 – 100 范围内的学生人数(要跟踪范围,您应该设置一个大小为 5 的计数器列表;当您处理第一个范围内的数字,您更新位置 0,在第二个范围内,位置 1 等)。

我对此感到相当困难。这是我到目前为止编写的代码:

inpt1=open("grades.csv","r")
outpt1=open("examscores.csv","w")
studentname=[]
studentlastname=[]
gradeav=[]
highav=0
inpt1.readline()

for line in inpt1:
   data=line.split(",")
   averages=math.ceil(data[2])+float(data[3])/2
   studentname.append(data[0])
   studentlastname.append(data[1])
   gradeav.append(averages)
inpt1.close()
outpt1.close()

我无法让数学 ceil 函数工作,并且我的附加功能也无法正常工作。当然,我不希望任何人为我解决这个问题,只需要提示或朝着正确的方向前进。

【问题讨论】:

  • 我建议查看涵盖正确打开和读取 csv 文件的线程,将这些数据保存到列表中,并对列表进行平均处理。您的代码中有几个错误,所有这些错误都在此处的所有 3 个很好的示例中进行了解释。最终使用字典列表来存储数据可能更容易,但如果过于复杂,您可以在技术上坚持使用一堆单独的列表。

标签: python list csv


【解决方案1】:

既然你要提示,我就试一试。

请注意,您将分别记录姓名和成绩。更有用的是将这些值记录在一个连贯的数据结构中。我更喜欢列表列表。开始

records = []

接着进行文件读取、行拆分和值提取。然后将其插入记录中。

records.append([average, last_name, first_name])

在循环结束时,按第一列降序对记录进行排序。提示:谷歌“python list of list sorted lambda”。从排序的列表中,挑选出最大值和它下面的 5 个点。我会把它留给你作为练习。

您还可以使用排序列表拆分为不同的范围。提示:谷歌“python bisect package”。

至于你对 math.ceil 的问题,试试

average = math.ceil(0.5* (float(data[2]) + float(data[3])))

如果需要更多提示,请告诉我。 :-)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-04-03
    • 2019-07-10
    • 2017-11-23
    • 1970-01-01
    • 2016-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多