【发布时间】:2018-07-14 03:10:16
【问题描述】:
我正在尝试在我构建的类中获得一种工作方法。这个类累积给定学生的课程历史。每门课程都是一个列表(姓名、成绩、学分等),是该学生所有课程总列表的一部分。这是一个示例课程历史:
[['English 1', 4, 3, 'Fall', '2009'],
['English 2', 3.7, 3, 'Spring', '2010'],
['English 3', 2.7, 3, 'Fall', '2010'],
['English 4', 3.0, 3, 'Spring', '2011'],
['English 5', 3.7, 3, 'Fall', '2011'],
['English 6', 3.3, 3, 'Spring', '2012'],
['Math 1', 3.3, 3, 'Fall', '2009'],
['Math 2', 2.7, 3, 'Spring', '2010'],
['Science 1', 3.7, 4, 'Fall', '2009'],
['Science 2', 4, 4, 'Spring', '2010']]
我可以计算出累积 GPA,但我发现很难确定一个学期的 GPA。这是我的相关代码:
class StudentInfo(object):
def __init__(self, last, first, dob):
self.last=last
self.first=first
self.dob=dob
self.gradehist=[]
def __add__(self, course):
return self.gradehist.append(course)
def cumulativegpa(self):
cred = [item[2] for item in self.gradehist]
grad = [item[1] for item in self.gradehist]
gc = [grad[i]*cred[i] for i in range(len(grad))]
hrs = sum(cred)
gpasum = sum(gc)
cumgpa = gpasum/hrs
return cumgpa
def semgpa(self, x, y):
semcred=[]
semgrad=[]
for i in self.gradehist:
if self.gradehist[3] == x and self.gradehist[4] == y:
semcred.append([item[2] for item in self.gradehist])
for i in self.gradehist:
if self.gradehist[3] == x and self.gradehist[4] == y:
semgrad.append([item[1] for item in self.gradehist])
return semcred, semgrad`
s1=StudentInfo('Bob','Dole', '1-1-1911')
s1 + ['English 1', 4, 3, 'Fall', '2009']
s1 + ['English 2', 3.7, 3, 'Spring', '2010']
etc
当我输入 s1.cumulativegpa() 时,它会返回正确的总 gpa,但 s1.semgpa('Fall','2009') 会返回 "[],[]" 我哪里错了?
编辑:更新 def semgpa(self, x, y): 以包含
for course in self.gradehist:
if course[3] == x and course[4] == y:
semcred.append([item[2] for item in course])
【问题讨论】:
-
您正在迭代
gradehist,但随后您访问的是gradehist、self.gradehist[3]中的第四个值,而不是内部列表i[3]的第四个值。您还应该努力将事物命名得更具描述性,这有助于及早发现此类问题。 -
谢谢,这绝对是一个错误。我已切换到
if i[3] == x and i[4] == y,但仍然得到空列表。 -
您是否更改了所有错误地使用
self.gradehist而不是i的地方?您能否在帖子的编辑中添加更新的行? -
另外,当你解决上述问题时,你不想
.append([item[2] for item in self.gradehist])绝对不是你想要的... -
@juanpa.arrivillaga 我只是这样写的,因为这在我包含的累积 gpa 方法中运行良好......我主要是在努力让这个条件子句起作用!
标签: python python-3.x class methods