2016-10-15 13 views
0

私はPythonチャレンジARG用の初心者向けのPythonスクリプトを作成しています。基本的な目的は、大量のテキストを読み取るスクリプトを作成し、小文字だけを正確に3つの大文字で両側を通過させることです。スクリプトは、リストから入ってくる文字を見て、次の3文字と前の3文字をリストに格納することになっています。これが起こると、スクリプトは入力文字が大文字であるかどうかを評価し、ループが開始された場合はスクリプトを評価し、リストの3文字すべてが大文字であるかどうかを評価します。条件が満たされていれば、スクリプトは現在の文字を出力しなければなりません。さもなければループが始まります。Pythonスクリプトは無限ループに詰まっています

私はこのスクリプトを実行するたびに、コードに関するデバッグ/エラー/警告は表示されませんが、ファイルには何も書き込まれず、書き込みも行われません。

ここに私が書いたコードがありますが、どんな助けもありがとうございます。

#code, where f = text to be processed, d = text file to be written to 

f = open("test.txt", "r+") 
f = f.read() 
fList = list(f) 
limit = len(fList) 

#Set location of result 
d = open("noided.txt", "r+") 
i, j, k = [0, 0, 0] 

#Main loop 
#While there are characters left to be processed 
while i < limit: 
    #Skip the first 4 characters 
    if i < 4: 
     #print i, fList[i] 
     i += 1 
    else: 
     #print i, fList[i] 
     currentChar = fList[i] 
     count = 0 
     prevChars = [fList[i-1],fList[i-2],fList[i-3]] 
     nextChars = fList[i:i + 3] 

     if currentChar.isupper(): 

      i += 1 

     else: 
      while k < 3: 
       if prevChars[k].isupper() and nextChars[k].isupper(): 
        count += 1 
        k += 1 
       elif count == 3: 
        print currentChar 
        d.write(currentChar) 
        i += 1 
       else: 
        i += 1 
+0

ここで変数は 'i' 、 'limit'と' k'は初期化されていますか?また、コードのインデントが正しくないように見える –

+0

インデントを修正してください。 'else'はおそらく' if'に属し、 'while'には属しません(これも可能ですが、このコンテキストではあまりありません)。また、 '&'はビット単位です。それが動作している間は、ここでも、代わりに 'と'を使用します。 –

+0

これはインデントには悪いものでしたが、気づいていなかったのですが、私のエディタで最初の質問に答えるようなものではなく、すべての変数が初期化されていました。 –

答えて

0

最初に、limitという名前の変数はありません。第二に、スタック型のリストを使用する方が簡単です。スタックを複数の紙の束と考えてください。ファイルから文字を(forループを使用して)スタックに解析できますが、スタックに入る前に各文字を比較できるので、このモジュールはこの種のプロジェクトに便利です。