2017-11-07 9 views
0

파일에서 한 줄을 가져 와서 출력 한 다음 답변을 입력하고 다른 줄과 일치하는 코드를 'correct '. 그 부분은 작동하지만 우리가 네 번째 질문에 도달했을 때 그것은 단지 반복을 계속 한 다음 오류를줍니다. 텍스트 파일에서 줄은 '/'로 구분됩니다.파이썬에서 if 문으로 파일을 다시 호출하는 방법

슬래시가 stuff./When 헤이스팅스 전투였다 구분 :

 def Q(): 
    a = 1 
    b = 2 
    while True: 
     file = open("AA.txt", "r") 
     for line in file: 
      sec=line.split("/") 
     print(sec[a]) 
     answer = input("Type your answer: ").strip() 
     if answer == sec[b].strip() and b >8: 
      print ("Correct!") 
      a = a + 2 
      b = b + 2 
     elif answer == sec[b].strip() and b ==8: 
       print ("Done.") 
       break     
     else: 
      print ("Wrong it's " + sec[b]) 
      a = a + 2 
      b = b + 2 
    file.close() 

Q() 

이 텍스트 파일은? 1066, 1078 또는 1088/1066/런던의 위대한 불은 언제 있었습니까? 1777 또는 1666/1666/헨리 8 세는 몇 아내가 있습니까? 8 또는 6/6 월스트리트 크래시는 언제 있었습니까? 1929 또는 1933/1929/

+2

'=='은 비교를위한 것이며'= '는 할당을위한 것입니다. 'switch == True' 라인은 아무 것도하지 않습니다. 아마도'switch = True'를 의미했을 것입니다. – smarx

+1

@smarx가 말한 것에 덧붙여, 루프를 빠져 나오기 위해서'break'를 사용할 수 있습니다. 대신에'switch' 변수를 없애십시오 ('while True' 대신에). –

+1

때로는 문자열을 처리 할 때 꼬리말 등이있는 경우를 대비하여 비교하기 전에 맹목적으로 모든 공백을 제거하는 것이 좋습니다. 그래서,'대답 = 입력 ("대답 입력 :") .strip()'과'대답 == 초 [b] .strip() :'을 대신하십시오. 어쩌면 그게 전부 일거야. – Arne

답변

0

코드에서 버그를 찾는 데 어려움을 겪었습니다. 문제는 당신이 while 루프를 작성하고 이상한 결과를내는 복잡한 제어 메커니즘을 포함해야한다는 것입니다. 외부 루프가 텍스트 파일의 행을 반복하는 방식으로 코드를 작성하는 편이 훨씬 낫다는 생각이들 것입니다. 파이썬 프로그램에서 루프를 보는 것은 거의 볼 수 없으며 간단한 까닭은 간단합니다. -loop은 보통 당신이 어쨌든하고 싶은 것입니다.

그래서 설명을 올바르게 이해하면이 코드는 다소 효과가있을 것입니다. 맞습니까? 당신이 지정한대로 한 줄에 하나의 질문이있는 텍스트 파일을 가정합니다 :

def ask_questions(filename): 
    for line in open(filename, "r"): 
    question, answer = line.strip().split("/") 
    print(question) 
    user_answer = input("Type your answer: ").strip() 
    if user_answer == answer: 
     print ("Correct!") 
    else: 
     print("Wrong, the correct answer is " + answer)