2017-12-06 22 views
-1

나는 사용자가 입력 한 문자열에 대한 텍스트 파일을 검색하는 학교용 프로그램을 만들고자한다. 그러나 나는 오류가 계속하는 것은 : line 16, in <module>, while(test[i] != " ") IndexError: string index out of range문자열 인덱스가 범위를 벗어남 예외?

내 코드입니다 : 그렇게 인덱스 벗어나 려에서 문자열을 방지한다 라인 while(i <= len(test)-1):처럼 날 것으로 보인다 기본적으로

import os 
myList=[] 
while True: 
    ans = input("Please enter a filename or 'X' to exit") 
     if(ans == "X"): 
     exit() 
    else: 
     while True: 
      if os.path.exists(ans): 
       with open(ans,"r") as file: 
        test = file.read() 
        print(file) 
        i=0 
        while(i <= len(test)-1): 
         sol = "" 
         while(test[i] != " "): 
          sol = sol + test[i] 
          i += 1 
         myList.append(sol) 
         i += 1 
        ans2 = input("Please enter a word to search for or 'X' to exit") 
        if(ans2 == 'X'): 
         exit() 
        else: 
         if ans2 in myList: 
          print(ans2 + " is in " + ans) 
         else: 
          print(ans2 + " is NOT in " + ans) 
      else: 
       print("File does not exist. Try again.") 
       break 

I 내가 어디에서 색인을 벗어날 지 알 수 없다.

+4

하지만 루프 안에서 'i'를 증가시킵니다. 그래서 'i'는 당신이 그것을 확인할 때 가진 것과 다른 가치가 있습니다. – khelwood

+1

'while'루프 테스트는 루프 본문 중에 지속적으로 모니터링되지 않습니다. 'i'가 몸의 중간에'len (test) -1'을 지나면 루프를 멈추지 않을 것입니다. – user2357112

+2

for 루프를 사용하여 * 크게 * 단순화 할 수 있습니다. 또는 중첩 된 while 루프가' ""문자로 문자열을 분할하려고 시도하는 것처럼 보이지만 검사 할 수있는 것보다 문자열 목록을 반환하는'test.split ('')'를 사용할 수 있습니다. 그 목록의 문자열을 직접 ... –

답변

0

for-loops를 사용하여 크게 단순화 된 것처럼 보입니다. 또는 당신의 중첩 된 while 루프가 ""문자로 문자열을 분할하려고 시도하는 것처럼 보이지만 문자열 목록을 반환하는 test.split(' ')을 직접 사용할 수 있습니다.