求改改python

class Student:
def __init__(self, name):
self.name = name
self.attendance = 0
self.marks = []
self.grade = ()

def add_mark(self, mark):
self.marks.append(mark)

def present(self):
self.attendance = self.attendance + 1

def get_average(self):
try:
return sum(self.marks)/len(self.marks)
except ZeroDivisionError:
return 0

def change_mark(self, oldmark, newmark):
position = self.marks.index(oldmark)
self.marks[position] = newmark

def grade(get_average):

if get_average >= 80:
return "A"
elif get_average >= 68:
return "B"
elif get_average >= 55:
return "C"
elif get_average >= 50:
return "D"
else:
return "F"

def __str__(self):
print "%-15s %-15s %-15s %s" % ("Student", "Mark", "Grade", "Attendance")
print
print "%-15s" % (self.name)
print "%-15s" % str(self.get_average())
print "%-15s" % (self.grade())
print "%s" % str(self.attendance)

class StudentTracker :
def __init__(self, initial_student_list):
self.student_names = initial_student_list
self.students = {}
for name in self.student_names:
self.students[name] = Student(name)

def another_day(self, absent=[]):
for name in self.student_names:
if name not in absent:
self.students[name].present()

def add_mark(self, name, mark):
self.students[name].add_mark(mark)

def change_mark(self, student, oldmark, newmark):
self.students[name].change_mark(oldmark, newmark)

def prettyprint_students(self):
print "%30s" % ("Student Report")
print
for student in self.students.values():
print student

def Main():
o = StudentTracker(["Bobe", "Nono", "Beryl", "Shirley", "Joanna"])
o.another_day()
o.add_mark("Beryl", 90)
o.add_mark("Nono", 89)
o.add_mark("Bobe", 68)
o.add_mark("Shirley", 70)

o.another_day()
o.add_mark("Beryl", 70)
o.add_mark("Nono", 65)
o.add_mark("Shirley", 78)
o.add_mark("Joanna", 55)
o.add_mark("Bobe", 56)

o.another_day(["Joanna", "Bobe"])
o.add_mark("Beryl", 90)
o.add_mark("Nono", 70)
o.add_mark("Shirley", 66)

o.prettyprint_students()

Main()

=====================吐槽================================
楼上都什么情况……抄我的也不看看对不对应……这么不相干的回答你们也能翻出来……
证据:http://zhidao.baidu.com/question/120819827.html

======================正式回答: 更正=====================
1、student 类,初始化了属性叫做self.grade=(),是个tuple,后来又定义了一个方法也叫grade(),系统当然搞不清楚你究竟是指的哪一个。把初始化里面的grade改为grades就好了~~
2、提示错误说返回非str对象,是因为,如果用print命令调用类的__str__方法,__str__中虽然用print执行了输出,但是对于最初的print命令,却没有得到回应,因为都是__str__里面的print在操作,最初的print得到的是空结果。解决方法是把__str__里面的最后一个print改成return,最后一行由最初的print来执行,就行了。
3、这个不是错误,仅仅是个人推荐。不建议用Main()来做测试,直接定义为test()方法就好了,这个建议体现在了我最后的结果中

===========================以下是完整代码========================
class Student:
def __init__(self, name):
self.name = name
self.attendance = 0
self.marks = []
self.grades = ()

def add_mark(self, mark):
self.marks.append(mark)

def present(self):
self.attendance = self.attendance + 1

def get_average(self):
try:
return sum(self.marks)/len(self.marks)
except ZeroDivisionError:
return 0

def change_mark(self, oldmark, newmark):
position = self.marks.index(oldmark)
self.marks[position] = newmark

def grade(get_average):

if get_average >= 80:
return "A"
elif get_average >= 68:
return "B"
elif get_average >= 55:
return "C"
elif get_average >= 50:
return "D"
else:
return "F"

def __str__(self):
print "%-15s %-15s %-15s %s" % ("Student", "Mark", "Grade", "Attendance")
print
print "%-15s" % (self.name)
print "%-15s" % str(self.get_average())
print "%-15s" % (self.grade())
return "%s" % str(self.attendance)

class StudentTracker :
def __init__(self, initial_student_list):
self.student_names = initial_student_list
self.students = {}
for name in self.student_names:
self.students[name] = Student(name)

def another_day(self, absent=[]):
for name in self.student_names:
if name not in absent:
self.students[name].present()

def add_mark(self, name, mark):
self.students[name].add_mark(mark)

def change_mark(self, student, oldmark, newmark):
self.students[name].change_mark(oldmark, newmark)

def prettyprint_students(self):
print "%30s" % ("Student Report")
print
for student in self.students.values():
print student

def test():
o = StudentTracker(["Bobe", "Nono", "Beryl", "Shirley", "Joanna"])
o.another_day()
o.add_mark("Beryl", 90)
o.add_mark("Nono", 89)
o.add_mark("Bobe", 68)
o.add_mark("Shirley", 70)

o.another_day()
o.add_mark("Beryl", 70)
o.add_mark("Nono", 65)
o.add_mark("Shirley", 78)
o.add_mark("Joanna", 55)
o.add_mark("Bobe", 56)

o.another_day(["Joanna", "Bobe"])
o.add_mark("Beryl", 90)
o.add_mark("Nono", 70)
o.add_mark("Shirley", 66)

o.prettyprint_students()

test()
温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-12-18
使用方法如下:把zip中的py解压到python25\\lib下,然后import num2word_EN反正大致意思就是这样,你自己再改改就好了
第2个回答  2010-12-18
flag=1
while flag:
datain = raw_input(r"Enter the height (in metres): ")
if datain == "exit" :
flag = 0
else :
num_metre = float(datain)
num_feet = num_metre/0.9144*3
print "It is " + str(num_feet) + "' high"

要显示为 five feet 等有点难,因为如果设置一个字典,1:one,但是到11,12等不规则的就不好办了

======================================
设置dict就是
my_dict = 这样

不过告诉你个好消息,有个模块叫做 number to words (),可以执行这个操作

你可以在这个地方下载到他

使用方法如下:把zip中的py解压到python25\lib下,然后import num2word_EN即可,用这个模块你想输出法文,意大利文,西班牙文随意……

我直接在你的代码下改了:
======================================

import num2word_EN

#下面是你的程序

metres = float(raw_input("Enter the height (in metres): "))
total_inches = int(round(39.37 * metres, 0))
feet = total_inches / 12
inches = total_inches % 12
print "It is " + str(feet) + "' " + str(inches) + '" high.'

#这里添加一行

print "It is " + num2word_EN.to_card(feet) + " feet," + num2word_EN.to_card(inches) + ' inches high.'

================程序如上===================

反正大致意思就是这样,你自己再改改就好了