2017-04-24 1 views
2

저는 파이썬을 처음 접했고 이번 학기에 시작했습니다. 올바른 답을 취하고 목록으로 저장하는 코드를 작성한 다음 txt 파일의 20 개 질문에 대한 학생 응답을 읽고 다른 목록에 답변을 저장하는 방법을 찾는 데 어려움을 겪고 있습니다. 그 후에 목록을 비교하고 답을 인쇄하고 학생이 합격했는지 여부 (15 자 이상이 합격인지)와 정확한 총 수 및 잘못된 총 수를 나타내는 메시지가 프로그램에 표시됩니다. 예를 들어 A, C, A, A, D, B, C, A, C, B, A, D, C, A, D, C, B, 학생 대답은 테스트 할 자신 만의 텍스트 파일을 만들 것입니다. 어떤 도움도 내 현재 형식이 작동하지 않는 것 같아서 아래에 나와 있습니다.()Python을 사용하여 목록 비교하기?

데프 주 :

total = 0 
index = 0 
answers = [ 'A', 'C', 'A', 'A', 'D',\ 
      'B', 'C', 'A', 'C', 'B',\ 
      'A', 'D', 'C', 'A', 'D',\ 
      'C', 'B', 'B', 'D', 'A'] 

student_answers = open('student_solution.txt', 'r') 

for answer in student_answers: 
    print(answer.strip()) 

    while index in answers == student_answers: 
     if student_answers[0] == answers[0]: 
      total +=1 
     else: 
      total +=0 



student_answers.close() 
print('Total correct answers: ', total) 
print('Total of incorrect answers: ', 20 - total) 

if total >= 15: 
    print('Congratulations! You passed the exam.') 
else: 
    print('Sorry, you have failed the exam.') 

주()

은 여전히 ​​여기에 문제를 줄 것으로 보인다 업데이트 된 프로그램입니다. 내가 사용 학생의 대답은 ACAADBCACBADCADCBBDAC AADBCACBADCADCBBDD()

데프 주요 있습니다

total = 0 
index = 0 
answers = [ 'A', 'C', 'A', 'A', 'D',\ 
      'B', 'C', 'A', 'C', 'B',\ 
      'A', 'D', 'C', 'A', 'D',\ 
      'C', 'B', 'B', 'D', 'A'] 

infile = open('student_solution.txt', 'r') 

student_answers = infile.readline() 
infile.close() 
print(student_answers) 

for answer in student_answers: 
    for y in range(len(answer)): 
     if answer[y] == answers[y]: 
      total += 1 


print('Total correct answers: ', total) 
print('Total of incorrect answers: ', 20 - total) 

if total >= 15: 
     print('Congratulations! You passed the exam.') 
else: 
     print('Sorry, you have failed the exam.') 

주()

+1

:'이 일을하지 않는 질문은 당신이 그것을 –

+0

을하고 있다고 생각이 되었습니까? –

답변

2

당신은 total이 방법

total = 0 
for stdnt_ans,correct_ans in zip(student_answers, answers): 
    if stdnt_ans == correct_ans: 
     total += 1 
에서 두 목록을 압축하는 계산할 수 있습니다

증가하는 것보다 2 배 이상 빠름 total보다 작지만 느린 방법으로 0을 입력하십시오.

total += int(stdnt_ans == correct_ans) 
0

이렇게하면 합계가 계산됩니다. 루프를 수행하는 방식을 조정해야했습니다. 답변에 인덱스 == student_answers는 동안`

def main(): 

    total = 0 
    index = 0 
    answers = [ 'A', 'C', 'A', 'A', 'D',\ 
       'B', 'C', 'A', 'C', 'B',\ 
       'A', 'D', 'C', 'A', 'D',\ 
       'C', 'B', 'B', 'D', 'A'] 

    student_answers = [[ 'A', 'C', 'A', 'A', 'D',\ 
       'B', 'C', 'D', 'C', 'B',\ 
       'A', 'D', 'C', 'A', 'D',\ 
       'C', 'B', 'A', 'D', 'A'],\ 
       [ 'A', 'C', 'D', 'D', 'D',\ 
       'A', 'C', 'A', 'D', 'B',\ 
       'D', 'D', 'C', 'A', 'D',\ 
       'B', 'B', 'B', 'D', 'A']] 

    for answer in student_answers: 
     for i in range(len(answer)): 
      if answer[i] == answers[i]: 
       total += 1 
     print('Total correct answers: ', total) 
     print('Total of incorrect answers: ', 20 - total) 
     if total >= 15: 
      print('Congratulations! You passed the exam.') 
     else: 
      print('Sorry, you have failed the exam.') 
     total = 0 

main() 
+0

또한 파일 형식을 제거하여 사용할 콘텐트를 만들었습니다. student_answers를 원래대로 되돌릴 수 있습니다. – Aklys

+0

나는 당신의 방법을 시도했다, 도움이되는 것처럼 보였다, 지금 내가 가지고있는 문제는 단지 .txt 파일에 대한 readlines을 할 때이다. 나는 그 메모장을 수직으로 대 수평으로 게시 한 메모장을 저장함으로써 만들어졌다. 교수가 메모장에 테스트 및 붙여 넣기로 제공 한 답변 그것을 수평으로 붙여 넣으려고 할 때 범위가 최대 값에 도달했다고 말합니다 ... 나는이 응답을 1 요소 대 20으로 취하고있는 것으로 추측하고 있습니까? 그러나 infile = open ('student_solution.txt', 'r') 및 student_answers = infile.readlines()를 사용하여 형식을 약간 변경했습니다. –

+0

그러면이 문제를 해결할 수있는 두 가지 방법이 있습니다. 각 파일을 목록으로 변환하거나 각 행을 목록으로 변환 할 수 있습니다. 정말 전체 설정에 따라 다릅니다. 위의 코드는 목록 비교를 처리하는 방법에 대한 아이디어를 제공하기위한 것입니다. 목록을 별도로 작성한 다음 위와 같이 비교하거나 인라인으로 비교할 수 있습니다. 이는 소스에서 각 요소를 읽는 것을 의미합니다. 그것은 실제로 당신이 얻고있는 데이터의 구조에 달려 있습니다. – Aklys

-1
for index, value in enumerate(answers): 
    total += int(value == student_answers[index]) 

print('Pass' if total >= 15 else 'Fail') 
+0

이 코드 단편은 환영하며 도움을 줄 수도 있지만, * how *가 질문을 다루는 것은 설명을 포함하면 크게 개선 될 것입니다 (// meta.stackexchange.com/q/114762). 그것이 없으면 당신의 대답은 교육 가치가 훨씬 낮아집니다 - 당신이 지금 묻는 사람이 아니라 미래의 독자들에게 질문에 답하고 있다는 것을 기억하십시오! 설명을 추가하려면 답을 편집하고 어떤 제한 및 가정이 적용되는지 표시하십시오. –

관련 문제