Помогите создать программу оценки экзаменов в Python - PullRequest
0 голосов
/ 12 апреля 2011

Я пытаюсь создать программу, которая читает ответы с несколькими вариантами ответов из текстового файла и сравнивает их с установленным ключом ответа. Это то, что у меня есть до сих пор, но проблема в том, что когда я его запускаю, ключ ответа застревает на одной букве на протяжении всей жизни программы. Я поместил оператор print сразу после строки for answerKey, и он печатается правильно, но когда он сравнивает ответы «экзамена» с ключом ответа, он застревает и всегда думает, что «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 ]

3 голосов
/ 12 апреля 2011

Проблема в том, что вы не правильно размещаете циклы.

Этот цикл запускается первым и заканчивается установкой 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()
2 голосов
/ 12 апреля 2011

Не проблема ли в том, что вы перебираете все строки в answerkey.txt, а затем сравниваете последнюю строку только со всеми строками studentexam.txt?

0 голосов
/ 12 апреля 2011

Вы перезаписываете свой ответ на каждой итерации цикла for. Скорее всего, последняя запись в вашем ключе ответа. Попробуйте объединить два цикла for в один!

...