我在CS课程中遇到麻烦问题。问题与在python中创建类有关。继承人提示
您的班级应该命名为Student,您应该定义以下方法:
__init__
:此方法初始化Student对象。
参数:名称,GPA和许多单位
•应该根据名称,GPA和单位初始化实例变量 传入的信息。如果GPA或单位数为负数,则将其设置为0.(不要担心此方法中的非数字值。)
update:如果Student接受新类,则此方法更新Student对象的实例变量。
•参数:新班级的单位,新班级的成绩(作为数字)。
•应修改单位的实例变量以添加新类的单位
•应修改GPA以包含新课程中获得的成绩。 (请注意,这将是使用单位计数和两组GPA的加权平均值。)
get_gpa:此方法应返回学生的GPA。
get_name:此方法应返回学生的姓名。
继承人我拥有的
class Student:
def__init__(self,name,GPA,units):
if units <0:
units=0
if GPA<0:
GPA=0
self.name=name
self.GPA=GPA
self.units=units
def update(newunits,GPE):
这就是我能提出的所有内容
答案 0 :(得分:3)
让我们通过一些有希望帮助你的观点:
__init__
)如果GPA或单位数为负数,则将其设置为0.
所以你可能想分别检查每个:
if units < 0:
units = 0
if GPA < 0:
GPA = 0
方法通常将当前对象的引用作为第一个参数,按照约定命名为self
(就像在__init__
中一样)。因此,您的更新方法声明应如下所示:
def update(self, newunits, GPE):
...
应修改单位的实例变量以添加新类的单位
正如您在构造函数中所做的那样,您可以使用self.varname
访问实例变量。所以你可能想做这样的事情:
self.units += newunits
应修改GPA以包含新课程中获得的成绩。 (请注意,这将是使用单位计数和两组GPA的加权平均值。)
在您更新self.units
时,您必须在此处更新self.GPA
。不幸的是,我不知道GPA是什么以及如何计算,所以我只能猜测:
self.GPA = ((self.GPA * oldunits) + (GPE * newunits)) / self.units
请注意,我在这里引入了一个新的局部变量oldunits
,它只是在更新之前暂时存储单位(更新后oldunits = self.units - newunits
)。
这些是简单的getter,只返回对象的值。这里有单位的示例,即您应该自己弄清楚实际的需求值:
def get_units (self):
return self.units
请注意,使用getter(get_x
方法)是非常简单的,因为您只希望人们直接访问属性(同时小心处理它们)。
答案 1 :(得分:0)
我会帮助你完成这个问题,但首先让我指出一个小错误:
if units <0 and GPA <0:
units=0
GPA=0
只有当它们都是负数时,才会将单位和GPA设置为零。如果它是负数,你将要将每个设置为零,即使另一个不是。将其更改为:
if units < 0: units = 0
if GPA < 0: GPA = 0
关于您的更新方法,正确的签名将是:
def update(self, newunits, GPE):
Python对象方法应始终以self开头。
现在,我不确定如何计算GPA(我使用的是不同的系统),但根据一些相当谷歌的查询,你的更新方法应该是这样的:
def update(self, newunits, GPE):
GPE_earned_before = self.GPA * self.units
total_GPE = GPE_earned_before + GPE
self.GPA = total_GPE / (self.units + newunits)
self.units += newunits
我在这里使用了很多变量来说清楚,但这可以简化为:
def update(self, newunits, GPE):
self.GPA = (self.GPA * self.units + GPE) / (self.units + newunits)
self.units += newunits