Помощь в создании программы оценивания экзамена на Python

#python #list #split #line

#python #Список #разделение #строка

Вопрос:

Я пытаюсь создать программу, которая считывает ответы с несколькими вариантами ответов из текстового файла и сравнивает их с заданным ключом ответа. Это то, что у меня есть на данный момент, но проблема в том, что когда я ее запускаю, ключ ответа застревает на одной букве на протяжении всего срока службы программы. Я поместил инструкцию print сразу после строки for answerKey, и она печатается правильно, но когда она сравнивает ответы «экзамен» с ключом ответа, она застревает и всегда думает, что «A» должно быть правильным ответом. Что странно, потому что это третья запись в моем примере ключа ответа.

Вот код:

 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, "wrongnThe 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!")
  

Спасибо за любую помощь, которую вы можете мне оказать!

Комментарии:

1. Что означает формат текстовых файлов?

2. Пожалуйста, предоставьте примеры входных файлов и выходных данных, которые вы получаете при запуске вашей программы с этими входными файлами.

3. Можете ли вы добавить какой-нибудь пример answerkey.txt и studentexam.txt файл. Я думаю, проблема в том, что вы сравниваете два массива ( studentAnswer != answer ) вместо их содержимого…

Ответ №1:

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

Этот цикл выполняется первым и заканчивается установкой answer в последнюю строку ключа ответа.

 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:

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

Ответ №3:

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