#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 в один!