在Python类中计算平均值和总数

0 投票
1 回答
2399 浏览
提问于 2025-04-18 04:09

我正在尝试第一次用Python写一个程序,使用了类,基本上已经搞明白了。唯一让我困惑的是,怎么统计程序中创建的学生数量。我本以为可以简单地创建一个变量“numStudents”,然后用“x = x + 1”来增加这个数字,但不知道为什么在类里这样做不行。有没有人知道解决办法?我还需要计算平均年龄,但我的列表似乎也有问题。

numStudents = 0
ageList = list()
class student(object):
    def __init__(self, name, stuID, age):
        self.name = name
        self.stuID = stuID
        self.age = age
    def student_display(self):
        numStudents = numStudents + 1
        stuID = str(self.stuID)
        age = str(self.age)
        ageList.append(self.age)
        print "This student's name is " + self.name + ", his student ID is " + stuID + ", and his age is " + age + "."

student1 = student("Justin", 10001, 21)
student2 = student("Charles", 10002, 23)
student3 = student("Erik", 10003, 20)
student4 = student("The Doctor", 99999, 22)
student5 = student("Steven", 10004, 21)
student6 = student("Melissa", 10005, 19)
student7 = student("Sarah", 10006, 21)
student8 = student("Eren", 10007, 18)
students = 0                                           #Can't figure out how to get rid of the "NONE" that keeps printing after every statement

print student1.student_display()
print student2.student_display()
print student3.student_display()
print student4.student_display()
print student5.student_display()
print student6.student_display()
print student7.student_display()
print student8.student_display()

print "There are " + numStudents + " students in the class."
average = 0
sum = 0
for n in ageList:
    sum = sum + n
average = sum/len(ageList)
print "The average age in the class is " + average + "."

1 个回答

4

你看到输出是None的原因是因为你在打印student_display的返回值,而这个函数没有返回任何东西,所以返回值就是None。你已经在这个方法里打印过了,所以不需要再打印一次。

至于你的num_studentsageLists不工作的原因是,你需要在student_display里加一个global关键字:

def student_display(self):
    global numStudents
    global ageLists
    numStudents = numStudents + 1

不过,话说回来,这样做其实是不太好的做法。有很多方法可以解决这个问题,但对于numStudents的情况,你可以简单地创建一个学生列表,像这样:

students = [
            student("Justin", 10001, 21),
            ...
            student("Eren", 10007, 18)]

然后可以这样打印所有学生:

for student in students:
    student.student_display()

至于计算平均年龄:

ages = [student.age for student in students]
print('Average Age Is: {}'.format(sum(ages)/len(ages))

撰写回答