我试图在程序的末尾创建一个新文件来添加信息,但是由于某种原因没有创建该文件(代码中要查看的地方是#曲线区域)。我最好的猜测是,在程序开始时建立的变量“filename”并没有一直传递到我建立新文件名的地方。我的代码如下:
import statistics
# input
filename = input("Enter a class to grade: ")
try:
# open file name
open(filename+".txt", "r")
print("Succesfully opened", filename,".txt", sep='')
print("**** ANALYZING ****")
with open(filename+".txt", 'r') as f:
counter1 = 0
counter2 = 0
right = 0
answerkey = "B,A,D,D,C,B,D,A,C,C,D,B,A,B,A,C,B,D,A,C,A,A,B,D,D"
a = []
# validating files
for line in f:
if len(line.split(',')) !=26:
print("Invalid line of data: does not contain exactly 26 values:")
print(line)
counter2 += 1
counter1 -= 1
if line.split(",")[0][1:9].isdigit() != True:
print("Invalid line of data: wrong N#:")
print(line)
counter2 += 1
counter1 -= 1
if len(line.split(",")[0]) != 9:
print("Invalid line of data: wrong N#:")
print(line)
counter2 += 1
counter1 -= 1
counter1 += 1
#grading students
score = len(([x for x in zip(answerkey.split(","), line.split(",")[1:]) if x[0] != x[1]]))
score1 = 26 - score
score2 = score1 / 26
score3 = score2 * 100
a.append(score3)
sscore3 = str(score3)
# results file
results = open(filename+"_grades.txt", "a")
results.write(line.split(",")[0])
results.write(",")
results.write(sscore3[:2])
results.write("\n")
results.close()
# in case of no errors
if counter2 == 0:
print("No errors found!")
# calculating
number = len(a)
sum1 = sum(a)
max1 = max(a)
min1 = min(a)
range1 = max1 - min1
av = sum1/number
# turn to int
av1 = int(av)
max2 = int(max1)
min2 = int(min1)
range2 = int(range1)
# median
sort1 = sorted(a)
number2 = number / 2
number2i = int(number2)
median = a[number2i]
median1 = int(median)
# mode
from statistics import mode
mode = mode(sort1)
imode = int(mode)
# printing
print ("**** REPORT ****")
print ("Total valid lines of data:", counter1)
print ("Total invalid lines of data:", counter2)
print ("Mean (average) score:", av1)
print ("Highest score:", max2)
print("Lowest score:", min2)
print("Range of scores:", range2)
print("Median Score:", median1)
print("Mode score(s):", imode)
# curve
part = input("Would you like to apply a curve to the scores? (y)es or (n)o?")
if part == "y":
newmean = input("Enter desired mean score:")
part1 = newmean - av1
part2 = sscore3 + part1
results = open(filename+"_grades_with_curve.txt", "a")
results.write(line.split(",")[0])
results.write(",")
results.write(sscore3[:2])
results.write(",")
results.write(part2)
results.write("\n")
results.close()
except:
print("File cannot be found.")
当我在末尾输入“y”尝试创建新列表时,它会跳转到except块,这意味着问题就在创建这个新列表的范围内。你知道吗
代码太长,需要重新组织。你知道吗
很可能,您的代码还有其他问题,您试图修复错误的问题。你知道吗
一些提示:
未将文件对象指定给变量之前,不要打开文件
你打开文件,却没有机会关闭它,因为你忽略了返回的文件 文件对象。你知道吗
使用
with
块打开/关闭文件在任何地方都要学会这样做。你知道吗
不重新打开文件以写入结果
您的代码会重复打开结果文件(在“a”模式下)。你最好只打开一次。你知道吗
您甚至可以在一个上下文块中打开多个文件:
重复使用一次计算结果
在许多地方,你把这行分开:
line.split(",")
。你知道吗你应该把结果放入变量中并重用它。你知道吗
永远不要忽略例外!!!(最严重问题)
最后一个块是捕获所有异常,而不给出任何迹象,什么地方出错了(甚至 更糟的是,它告诉您可能是错误的信息,文件没有找到)。你知道吗
所以不是:
至少重新发布异常以从中吸取教训:
实际上,您可以完全忽略完整的顶级try-except块,让异常显示出来 告诉你哪里出了问题。你知道吗
把代码分成小块
将代码拆分成更小的函数可以简化调试和使用
相关问题 更多 >
编程相关推荐