我对下面这个问题有疑问;我的输出应如下所示。
输出:
ID Exam1 Exam2 Homework Attendance Project1 Project2 Class Recap Final Grade Potential Grade
32165487 10 70 50 40 100 80 50 100 D
21321853 52 95 72 56 95 32 56 100 C+
41861235 95 12 47 32 68 92 35 100 D
84534853 58 38 84 84 89 68 74 100 C
代码:
def generateReport(gradebook):
outfile=open('gradebook.txt','w')
currentstud=[]
for stu in d:
#print(stu)
currentstud.append(d[stu])
whatever={}
lst1=[]
for students in currentstud:
print(students)
grades1=[]
for grades in students:
outfile.write(grades + '\t')
outfile.write('\n')
for val in students.values():
outfile.write(val + '\t')
outfile.close
d={'37340752': {'exam1': '50', 'project1': '40', 'classrecap': '39', 'homework': '62', 'exam2': '3', 'attendance': '17', 'project2': '86', 'id': '37340752'},
'95255664': {'exam1': '76', 'project1': '60', 'classrecap': '39', 'homework': '81', 'exam2': '57', 'attendance': '19', 'project2': '42', 'id': '95255664'},
'47718233': {'exam1': '81', 'project1': '55', 'classrecap': '53', 'homework': '46', 'exam2': '46', 'attendance': '4', 'project2': '14', 'id': '47718233'},
'55527760': {'exam1': '34', 'project1': '89', 'classrecap': '39', 'homework': '19', 'exam2': '99', 'attendance': '78', 'pta': 65, 'project2': '99', 'id': '55527760'},
'32548926': {'exam1': '9', 'project1': '7', 'classrecap': '77', 'homework': '98', 'exam2': '1', 'attendance': '43', 'project2': '86', 'id': '32548926'}}
print(generateReport(d))
这是我获得的上述代码的输出。如何让它打印所有行而不是只打印一行?
project1 homework attendance id exam2 exam1 project2 classrecap
55 46 4 47718233 46 81 14 53
答案 0 :(得分:3)
为所有学生提供成绩(成绩循环应该在学生中)
def generateReport(gradebook):
outfile=open('gradebook.txt','w')
currentstud=[]
for stu in d:
currentstud.append(d[stu])
for grades in currentstud[0]:
outfile.write(grades + '\t')
outfile.write('\n')
for students in currentstud:
for val in students.values():
outfile.write(str(val) + '\t')
outfile.write('\n')
outfile.close
d={'37340752': {'exam1': '50', 'project1': '40', 'classrecap': '39', 'homework': '62', 'exam2': '3', 'attendance': '17', 'project2': '86', 'id': '37340752'},
'95255664': {'exam1': '76', 'project1': '60', 'classrecap': '39', 'homework': '81', 'exam2': '57', 'attendance': '19', 'project2': '42', 'id': '95255664'},
'47718233': {'exam1': '81', 'project1': '55', 'classrecap': '53', 'homework': '46', 'exam2': '46', 'attendance': '4', 'project2': '14', 'id': '47718233'},
'55527760': {'exam1': '34', 'project1': '89', 'classrecap': '39', 'homework': '19', 'exam2': '99', 'attendance': '78', 'pta': 65, 'project2': '99', 'id': '55527760'},
'32548926': {'exam1': '9', 'project1': '7', 'classrecap': '77', 'homework': '98', 'exam2': '1', 'attendance': '43', 'project2': '86', 'id': '32548926'}}
print(generateReport(d))
答案 1 :(得分:0)
真的?我得到的输出是:
> TypeError: unsupported operand type(s) for +: 'int' and 'str'
将您的代码放入repl.it,它会向您显示许多警告中的问题:
您写入文件的唯一位置是第14行和第17行,它们位于循环for grades in students:
和for val in students.values()
中,但您尚未在任何位置定义students
。
你确实在之前的循环中使用它作为循环变量,因此students
具有前一循环的结束值。
要修复它,您需要在成绩簿上循环一次以一次获得一个学生,然后对于每个条目,您需要循环学生的数据以处理该文件的行。
关于'按顺序'你的头衔是什么?目前尚不清楚您是否应该订购列,行或两者,或订单是什么。但是当你使用一个有序的数据结构(一个元组,一个列表)时,你会使用一个无序的数据结构(一个字典),这会让你的生活变得更加容易。
(那么你想要的输出中哪些列不存在于你的数据中,比如潜在等级?或者你想要的标题与你的数据的大写/间距不同的方式,而Python是区分大小写的,所以这很烦人?或者csv
模块的存在方式可以为你做很多工作。)
您将数据传递到名为generateReport
的{{1}} - 使用该名称。当你使用gradebook
进入函数时,进入父范围,这是纠结和棘手的,这意味着d
永远不会被使用,这对于阅读它的任何人来说都是令人困惑和无益的。
使用有用的名称 - gradebook
来迭代学生ID,而不是student_id
。 stu
单数用于单一事物,而不是student
。不是students
。
并使用whatever
关闭outfile以调用close方法。
并且不打印generateReport()的输出...因为没有返回输出来打印。
解决所有这些问题让我看到了这一点:列作为示例输出排序和装入,输入仍作为示例输入,学生行按ID排序。
()
你可以run online at repl.it,然后有一个使用CSV模块的版本,注释掉。