2017-10-13 1 views
0

파이썬에서 퀴즈를 만들려고하는데 외부 텍스트 파일에서 두 개 이상의 질문을 검색해야합니다. 첫 번째 질문을 성공적으로 검색 할 수 있지만 두 번째 검색 할 때 "범위를 벗어난 목록 인덱스"오류가 발생합니다.IndexError : 파일에서 텍스트를 가져올 때 인덱스가 범위를 벗어납니다.

이것은 현재 코드의 일부분입니다.

if choice1 == "CH": 
     choice2 = input ("Would you like to do the easy, medium or hard questions ?").lower() 
     if choice2 == "easy": 
      load_profile = open("chemistryquiz.txt","r") 
      question1 = load_profile.read().splitlines()[4] 
      print (question1) 
      question2 = load_profile.read().splitlines()[5] 
      print (question2) 

질문 2와 관련하여 의견을 말하면 프로그램이 제대로 작동합니다. 어디에서 잘못 됐습니까? P.S, 텍스트 파일을 확인하고 줄의 수를 5로 만들었습니다. 파이썬으로 프로그래밍 할 때 0부터 세는 것을 알고 있습니다.

또한, 이들은

Chemistry Quiz : 

Easy : 

1) What is the chemical symbol of Carbon ? A: C B: Ca 
2) What is the weight of an electron ? A: 0 B: 0.1 
+0

'chemistryquiz.txt'의 내용을 공유 할 수 있습니까? – Bahrom

+0

StackOverflow에 오신 것을 환영합니다. 도움말 설명서의 게시 지침을 읽고 따르십시오. [최소한의 완전하고 검증 가능한 예제] (http://stackoverflow.com/help/mcve)가 여기에 적용됩니다. MCVE 코드를 게시하고 문제를 정확하게 설명하기 전까지는 효과적으로 도움을 드릴 수 없습니다. 게시 된 코드를 텍스트 파일에 붙여넣고 설명한 문제를 재현 할 수 있어야합니다. – Prune

+0

@OSG 질문에 편집 해주십시오. (아마도 불필요한 부분을 바꾸시겠습니까?), 그에 따라 새 줄을 추가하십시오. – Bahrom

답변

1

Thye의 문제는 당신이 load_profile.read() 여러 번 호출하고 있다는 점이다. 이것을 호출 할 때마다 이전의 파일 읽기 기능이 중단 된 곳에서부터 읽기가 시작됩니다. 하지만 첫 번째 호출은 전체 파일을 읽으므로 두 번째 호출에는 읽을 수있는 것이 없습니다. 빈 문자열을 반환하고 splitlines()은 빈 목록을 반환합니다.

파일을 한 번 읽습니다.

lines = load_profile.read().splitlines() 
question1 = lines[4] 
question2 = lines[5] 
2

하자 스텝이를 통해 chemistryquiz.txt의 내용은 다음과 같습니다

load_profile = open("chemistryquiz.txt","r") 

파일이 열려; 파일 핸들은 load_profile입니다. 파일 북마크는 파일의 시작 부분에 있습니다.

question1 = load_profile.read().splitlines()[4] 

당신은, 전체 파일을 읽어 선으로 분할하고, question1에 5 라인을 할당했다.

print (question1) 
question2 = load_profile.read().splitlines()[5] 

북마크는 파일의 끝에 여전히 때문에

, 읽기()는 EOF 돌아갑니다. splitlines 유용한 것은 없습니다. 요소가 없습니다. KABOOM!.


파일에서 행을 읽는 텍스트로 돌아갑니다. 예를 들어 ...

with open("chemistryquiz.txt","r") as load_profile: 
    for input_line in load_profile: 
     # This loop will give you the file, one line at a time. 
관련 문제