2017-12-06 19 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 

は、基本的には私には思えます私はどこから出て行くのか分からない。

+4

しかし、あなたはループの中で 'i'を増やします。だから '私は'あなたがそれをチェックしたときとは異なる値を持っています。 – khelwood

+1

'while'ループテストは、ループ本体中では継続的に監視されません。 'i'が身体の中央で' len(test)-1'を過ぎるとループを止めません。 – user2357112

+2

forループを使って*大幅に*簡略化できるようです。あるいは正直なところ、ネストされたwhileループが '" "文字で文字列を分割しようとしているように見えますが、チェックできるよりも文字列のリストを返す' test.split( '') 'を使うだけですそのリストの文字列を直接... –

答えて

0

forループを使用してこれを大幅に簡略化できるようです。または正直なところ、ネストされたwhileループが文字列で文字列を分割しようとしているようですが、test.split(' ')を使用すると、文字列のリストを直接返すことができます。

関連する問題