题
我的赋值是创建一个程序从文本文件打开和读取,计算等级,包括普通权重,给出最终成绩,将其更改为字母等级,然后将其写入新的文本文件。一切都在努力,直到将点转换为字母等级。所有等级都在70-89之间,因此我还没有打扰任何其他代码为A,B或E(f)。每当我尝试将成绩转换为字母等级时,它会将每个人的成绩改为C.我出错了吗?
infile = open("c:\\Python34\\MyFiles\\ClassGradebook.txt","r")
outfile = open("c:\\Python34\\myfiles\\ClassGrades.txt","w")
aline = infile.readline() # uses readline method to read the first line of the file
def quizsum():
quizsum1 = quiz1 + quiz2 + quiz3
quizavg = (quizsum1 / 30) * .3
return float(quizavg)
def midtermsum():
midtermsum1 = midterm1 + midterm2
midtermavg = (midtermsum1 / 200) * .4
return float(midtermavg)
def finalsum():
finalsum1 = final1
finalavg = (finalsum1 / 100) * .3
return float(finalavg)
def lettergrade():
if printedgrade >= 70 <= 79:
return "C"
else:
return "B"
while aline:
items = aline.split()
dataline = items[0] + " " + items[1]
quiz1 = int(items[2])
quiz2 = int(items[3])
quiz3 = int(items[4])
midterm1 = int(items[5])
midterm2 = int(items[6])
final1 = int(items[7])
quizavg = quizsum()
midtermavg = midtermsum()
finalavg = finalsum()
gradetotal = quizavg + midtermavg + finalavg
printedgrade = gradetotal * 100
printedgrade2 = lettergrade()
print(dataline)
print(printedgrade2)
outfile.write(printedgrade2 + '\n') newline character
aline = infile.readline()
infile.close()
outfile.close()
. 解决方案
因为您的if
始终是真实的,因为它是无序的。它应该是:
70 <= printedgrade <= 79
您的语句始终评估为真,因为当您所说,所有等级都是70-89,因此printedgrade
将大于或等于70,70小于79,因此它将始终是生成的。
虽然我强烈建议使您的代码适用于所有等级。你不能假设,因为这次等级在一定的范围内,它们总是会。
其他提示
if printedgrade >= 70 <= 79:
.
应该是
if printedgrade >= 70 and printedgrade <= 79:
.
你也可以做一些这样的事情:
if printedgrade >= 90:
return "A"
elif printedgrade >= 80:
return "B"
elif printedgrade >= 70:
return "C"
...
. 不隶属于 StackOverflow