2017-10-13 3 views
0

私はPythonでクイズを作成しようとしています。外部テキストファイルから複数の質問を取得する必要があります。 私は最初の質問を正常に取得することができますが、2番目の質問を取得しようとすると「範囲外のリストインデックス」エラーが発生します。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であることを確認しました。私はPythonでプログラミングするときに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

問題は、load_profile.read()を複数回呼び出すことです。これを呼び出すたびに、以前のファイルの読み込み機能がオフになっているところから読み込みを開始します。しかし、最初の呼び出しはファイル全体を読み取るので、2番目の呼び出しには何も読み込まれません。空の文字列を返し、splitlines()は空のリストを返します。

ファイルを1回だけ読みます。

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は役に立ちません。要素5はありません。 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. 
関連する問題