我正在尝试创建一个程序,从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!")
感谢你们给我的任何帮助!
答案 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循环组合成一个!