我有一个简单的程序,它获取一个ID号并打印与该ID匹配的人的信息。该信息存储在一个.dat文件中,每行一个ID号。
问题是,我的程序也正在从文件中读取换行符。我试过“name.split()方法,但这似乎对列表不起作用。
我的程序:
from time import localtime, strftime
files = open("grades.dat")
request = open("requests.dat", "w")
lists = files.readlines()
grades = []
for i in range(len(lists)):
grades.append(lists[i].split(","))
cont = "y"
while cont == "y" or cont == "Y":
answer = raw_input("Please enter the Student I.D. of whom you are looking: ")
for i in range(len(grades)):
if answer == grades[i][0]:
print grades[i][1] + ", " + grades[i][2] + (" "*6) + grades[i][0] + (" "*6) + grades[i][3]
time = strftime("%a, %b %d %Y %H:%M:%S", localtime())
print time
print "Exams - " + grades[i][11] + ", " + grades[i][12] + ", " + grades[i][13]
print "Homework - " + grades[i][4] + ", " + grades[i][5] + ", " + grades[i][6] + ", " + grades[i][7] + ", " +grades[i][8] + ", " + grades[i][9] + ", " + grades[i][10]
total = int(grades[i][4]) + int(grades[i][5]) + int(grades[i][6]) + int(grades[i][7]) + int(grades[i][8]) + int(grades[i][9]) + int(grades[i][10]) + int(grades[i][11]) + int(grades[i][12]) + int(grades[i][13])
print "Total points earned - " + str(total)
grade = float(total) / 550
grade = grade * 100
if grade >= 90:
print "Grade: " + str(grade) + ", that is equal to an A."
elif grade >= 80 and grade < 90:
print "Grade: " + str('%.2f' %grade) + ", that is equal to a B."
elif grade >= 70 and grade < 80:
print "Grade: " + str('%.2f' %grade) + ", that is equal to a C."
elif grade >= 60 and grade < 70:
print "Grade: " + str('%.2f' %grade) + ", that is equal to a D."
else:
print "Grade: " + str('%.2f' %grade) + ", that is equal to an F."
request.write(grades[i][0] + " " + grades[i][1] + ", " + grades [i][2] +
" " + time)
request.write("\n")
print
cont = raw_input("Would you like to search again? ")
if cont != "y" or cont != "Y":
print "Goodbye."
您可以使用
strip()
函数删除尾随(和前导)空格;传递参数将允许您指定哪些空格:不过,看起来您可以简化整个块,因为如果您的文件每行存储一个ID,那么
grades
只是lists
去掉了换行符:在
之前 之后(上面是一个list comprehension)
最后,您可以直接在列表上循环,而不是使用索引:
在
之前 之后str.strip()
返回一个删除了前导+尾随空白的字符串,.lstrip
和.rstrip
分别只返回前导和尾随空白。实际上,你可以通过将整个文件作为一个长字符串读取到内存中,然后使用它们将其拆分为成绩列表,从而很好地利用换行符。
相关问题 更多 >
编程相关推荐