帮助在Python中创建考试评分程序

时间:2011-04-12 08:56:39

标签: python list split line

我正在尝试创建一个程序,从txt文件中读取多项选择答案,并将它们与设置的答案键进行比较。这是我到目前为止所遇到的问题,但问题在于,当我运行它时,答案键在程序的整个生命周期中都会卡在一个字母上。我已经在answerKey行之后放了一个print语句并且它打印出来正确,但是当它将答案键的“考试”答案进行比较时它会卡住,并且总是认为“A”应该是正确的答案。这很奇怪,因为它是我的示例答案密钥中的第3个条目。

以下是代码:

answerKey = open("answerkey.txt" , 'r')
studentExam = open("studentexam.txt" , 'r')   
index = 0
numCorrect = 0
for line in answerKey:
    answer = line.split()
for line in studentExam:
    studentAnswer = line.split()
    if studentAnswer != answer:
        print("You got question number", index + 1, "wrong\nThe correct answer was" ,answer , "but you answered", studentAnswer)
        index += 1
    else:
        numCorrect += 1
        index += 1
grade = int((numCorrect / 20) * 100)
print("The number of correctly answered questions:" , numCorrect)
print("The number of incorrectly answered questions:" , 20 - numCorrect)
print("Your grade is" ,grade ,"%")
if grade <= 75:
    print("You have not passed")
else:
    print("Congrats! You passed!")

感谢你们给我的任何帮助!

3 个答案:

答案 0 :(得分:3)

问题是你没有正确嵌套循环。

此循环首先运行,最后将answer设置为answerKey的最后一行。

for line in answerKey:
    answer = line.split()

之后for line in studentExam:循环运行,但answer在此循环中不会更改并保持不变。

解决方案是使用zip组合循环:

for answerLine, studentLine in zip(answerKey, studentExam):
    answer = answerLine.split()
    studentAnswer = studentLine.split()

另外,请记住在完成文件后关闭文件:

answerKey.close()
studentExam.close()

答案 1 :(得分:2)

问题不在于您在answer key.txt中迭代所有行,然后最后只将其最后一行与所有学生的exam.txt行进行比较吗?

答案 2 :(得分:0)

您在for line循环的每次迭代中都会覆盖您的答案。 A很可能是答案密钥中的最后一个条目。尝试将两个for循环组合成一个!