您的位置:首页 > 移动开发 > Objective-C

function invoke objects DEMO

2015-07-10 09:11 387 查看
#quote from MIT 'introduction to computation and programming using python, Revised'
import datetime

class Person(object):

def __init__(self, name):
"""Create a person"""
self.name = name
try:
lastBlank = name.rindex(' ')
self.lastName = name[lastBlank+1:]
except:
self.lastName = name
self.birthday = None

def getName(self):
"""Returns self's full name"""
return self.name

def getLastName(self):
"""Returns self's last name"""
return self.lastName

def setBirthday(self, birthdate):
"""Assumes birthdate is of type datetime.date
Sets self's birthday to birthdate"""
self.birthday = birthdate

def getAge(self):
"""Returns self's current age in days"""
if self.birthday == None:
raise ValueError
return (datetime.date.today() - self.birthday).days

def __lt__(self, other):
"""Returns True if self'name is lexicographically
less than other's name, and False otherwise"""
if self.lastName == other.lastName:
return self.name < other.lastName
return self.lastName < other.lastName

def __str__(self):
"""Returns self's name"""
return self.name

class MITPerson(Person):
nextIdNum = 0 #identificaiton number

def __init__(self, name):
Person.__init__(self, name)
self.idNum = MITPerson.nextIdNum
MITPerson.nextIdNum += 1

def getIdNum(self):
return self.idNum

def __lt__(self, other):
return self.idNum < other.idNum

class Student(MITPerson):
pass

class UG(Student):
def __init__(self, name, classYear):
MITPerson.__init__(self, name)
self.year = classYear
def getClass(self):
return self.year

class Grad(Student):
pass

class Grades(object):
"""A mapping from students to a list of grades"""
def __init__(self):
"""Create empty grade book"""
self.students = []
self.grades = {}
self.isSorted = True

def addStudent(self, student):
"""Assumes: student is of type Student
Add student to the grade book"""
if student in self.students:
raise ValueError('Duplicate student')
self.students.append(student)
self.grades[student.getIdNum()] = []
self.isSorted = False

def addGrade(self, student, grade):
"""Assumes: grade is a float
Add grade to the list of grades for student"""
try:
self.grades[student.getIdNum()].append(grade)
except:
raise ValueError('Student not in mapping')

def getGrades(self, student):
"""Return a list of grades for students"""
try: #return copy of student's grades
return self.grades[student.getIdNum()][:]
except:
raise ValueError('Student not in mapping')

def getStudents(self):
"""Return a list of the students in the grade book"""
if not self.isSorted:
self.students.sort()
self.isSorted = True
for s in self.students:
yield s

def gradeReport(course):
"""Assumes course is of type Grades"""
report = ''
for s in course.getStudents():
tot = 0.0
numGrades = 0
for g in course.getGrades(s):
tot += g
numGrades += 1
try:
average = tot/numGrades
report += '\n' + str(s) + '\'s mean grade is ' + str(average)
except ZeroDivisionError:
report += '\n' + str(s) + ' has no grades'
return report


print gradeReport(g)

Eric Xing's mean grade is 95.6666666667

Robert Miller's mean grade is 84.0
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: