感谢您查看我的问题,并提前感谢您提供的任何帮助。 我正在写一个程序,从txt文件中读取行,然后以某种方式打印输出。他们都在这儿
这是我正在读的txt文件
JOE FRITZ AMERICAN GOVERNMENT B
JOE FRITZ CALCULUS I A
JOE FRITZ COMPUTER PROGRAMMING B
JOE FRITZ ENGLISH COMPOSITION A
LANE SMITH FUND. OF DATA PROCESSING B
LANE SMITH INTERMEDIATE SWIMMING A
LANE SMITH INTRO. TO BUSINESS C
JOHN SPITZ CHOIR C
JOHN SPITZ COLLEGE STATISTICS B
JOHN SPITZ ENGLISH LITERATURE D
JOHN SPITZ INTRO. TO BUSINESS B
我试图让我的输出看起来像这样:
GRADE REPORT
NAME COURSE GRADE
-----------------------------------------------------------
JOE FRITZ AMERICAN GOVERNMENT B
CALCULUS I A
COMPUTER PROGRAMMING B
ENGLISH COMPOSITION A
Total courses taken = 4
LANE SMITH FUND. OF DATA PROCESSING B
INTERMEDIATE SWIMMING A
INTRO. TO BUSINESS C
Total courses taken = 3
JOHN SPITZ CHOIR C
COLLEGE STATISTICS B
ENGLISH LITERATURE D
INTRO. TO BUSINESS B
Total courses taken = 4
Total courses taken by all students = 11
Run complete. Press the Enter key to exit.
编辑
多亏了你的帮助,我完成了这个项目。你知道吗
我知道这可能很难看,但我很高兴有正确的输出。你知道吗
以下是显示正确输出的源代码:
#-----------------------------------------------------------------------
# VARIABLE DEFINITIONS
name = ""
previousName = ""
course = ""
grade = ""
grandTotal = 0
courseCount = 0
eof = False
#-----------------------------------------------------------------------
# CONSTANT DEFINITIONS
#-----------------------------------------------------------------------
# FUNCTION DEFINITIONS
def startUp():
global gradeFile, grandTotal,courseCount, previousName, name
grandTotal = 0
courseCount = 0
gradeFile = open("grades.txt","r")
print
print ("grade report\n").center(60).upper()
print "name".upper(),"course".rjust(21).upper(),"grade".rjust(33).upper()
print "-" * 60
readRecord()
def readRecord():
global name, course, grade, eof, courseCount
studentRecord = gradeFile.readline()
if studentRecord == "":
eof = True
else:
name = studentRecord[0:20]
course = studentRecord[20:50]
grade = studentRecord[50:51]
eof = False
def processRecords():
global courseCount, previousName, name, grandTotal
while not eof:
if name != previousName:
if name == "JOE FRITZ ":
courseCount = 0
print name + course + " " + grade
previousName = name
courseCount += 1
else:
print "\t\t Total courses taken =",courseCount
print
courseCount = 0
print name + course + " " + grade
previousName = name
courseCount += 1
else:
print (" " * 20) + course + " " + grade
courseCount += 1
grandTotal +=1
readRecord()
print "\t\t Total courses taken =",courseCount
def closeUp():
gradeFile.close()
print "\nTotal courses taken by all students =",grandTotal
#-----------------------------------------------------------------------
# PROGRAM'S MAIN LOGIC
startUp()
processRecords()
closeUp()
raw_input("\nRun complete. Press the Enter key to exit.")
谢谢大家的帮助。我真的很感激。抱歉,如果我在这个过程中让任何人失望了。祝你过得愉快。和平
我只是在函数readRecord()中找出了代码中的一个错误,您只是在读取文件的第一行而已;您应该循环所有行或使readRecord()成为生成器。你知道吗
但尽管如此,说实话,我不太喜欢你的代码,如果我是你,我会这么做:
1)通过任何方式(csv,regex…)从文件中获取数据;我想我们已经在here中找到了答案
2)把数据放在字典里或别的什么地方(这样你就可以随时处理它们)。你知道吗
3)使用itertools.groupby()按学生分组并计算所需内容的总和。你知道吗
4)使用字符串Template(),因为格式可能会改变,不要像以前那样硬编码输出的格式。你知道吗
请在编写完函数后,逐个测试你的函数,因为如果不这样做,很难找出代码的哪一部分不起作用。你知道吗
编辑:
我不会问你为什么要这样做,因为如果你想再次把它们放进一个文件,你会遇到和以前一样的问题,如果你想再次检索它们,如果你的目标只是制作一个漂亮的输出,我会问你值得吗?你知道吗
最后一个建议是使用众所周知的格式,如csv,xml。。。你知道吗
祝你好运:)
这可能不是上世纪60年代你愚昧的导师希望你这样做的科波洛克方式,但总的想法是:
(1)itertools.groupby可以保存所有先前/当前检测名称更改的malarky
(2)您应该先将数据记录提取成一种合理的格式,去掉尾随空格(总是一个好主意)以除去不属于数据的多余换行符
(3)像您这样使用的全局变量是outter pox(在任何语言中)。你知道吗
实际输出:
相关问题 更多 >
编程相关推荐