在Python类中计算平均值和总数
我正在尝试第一次用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_students
和ageLists
不工作的原因是,你需要在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))