我编写了一个简单的Python脚本来确定是否报告了所有学生的成绩。脚本首先循环并将学生添加到有关年级状态的数组中。然后我再次循环查看文件,以确定每个学生的成绩。最后我得到了三个数组,其中包括“所有成绩已报告”、“部分成绩已报告”、“未报告成绩”的学生。但是,我想用面向对象的方法来解决这个问题。我试图创建一个有效的类。我被困在如何循环并为每个学生创建一个对象,然后使用addcourse将每个课程推到对象中。任何帮助我可以成为一个更好的程序员将是伟大的!在
数据:
**id,fname,lname,course,grade,mode**
10001,Freddy,Freshman,Art-101,A,online
10001,Freddy,Freshman,Art-101,A,online
10002,Suize,Sophmore,Mat-102,C,inperson
10002,Suize,Sophmore,Bio-101, ,inperson
10002,Suize,Sophmore,Soc-201,D,online
10003,Jilly,Junior,mth-102, ,inperson
10003,Jilly,Junior,Bus-101, ,inperson
10003,Jilly,Junior,Che-204, ,inperson
工作代码:
^{pr2}$课堂尝试:
class Student(object):
def __init__(self, lname, fname, term, courses = []):
self.studid = studid
self.lname = lname
self.fname = fname
self.term = term
self.courses = []
def addcourse(self, course, grade, mode):
self.course = course
self.grade = grade
self.mode = mode
self.courses.append((self.course, self.grade, self.mode))
除了@JCVanHanne的答案之外,你可以在你的班级里定义另一个函数来收集信息,不管一个学生是没有成绩、部分成绩还是全部成绩。在
一种可能的方法(假设缺失的等级由空字符串表示,同时也可能存在诸如a+或其他非空值的等级)可以是:
您可能会使用状态码或其他方式(如返回值以进一步处理)来处理信息,而不仅仅是打印它们。以print命令为例:
^{pr2}$正如@blade建议的那样,您可以创建一个按学生id索引的字典,然后为输入文件的每一行从字典中获取现有的学生(如果存在的话),或者创建一个新的字典。在代码中,这看起来像:
有几件事需要注意。首先,我修改了
Student
类的构造函数,删除了term参数,因为不清楚在输入文件中指定了term
的位置。此外,由于您不使用courses
参数,所以我也放弃了它。(请注意,您可能不想使用[]
作为默认参数。阅读mutable default arguments here)你也不需要在你的addcourse
函数中为课程、年级和模式创建实例变量,你可以直接将它们附加到数组中。在我还为从输入文件中提取的每个项添加了对
strip
的调用,以清理每行末尾的换行。在这个怎么样:
相关问题 更多 >
编程相关推荐