-7

我在 CS 课上遇到了硬件问题。问题与在 python 中创建一个类有关。这是提示

你的类应该命名为 Student,你应该定义以下方法:

__init__:此方法初始化一个学生对象。

参数:姓名、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):

这就是我能想到的

4

2 回答 2

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

get_gpa 和 get_name

这些是简单的 getter,只从对象返回一个值。在这里,您有一个units的示例,即您应该自己找出实际想要的值:

def get_units (self):
    return self.units

请注意,拥有 getter(get_x方法)是相当不合常理的,因为您只希望人们直接访问属性(同时小心处理它们)。

于 2012-12-11T21:32:36.573 回答
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
于 2012-12-11T21:24:18.100 回答