2016-04-03 8 views
0

私はPythonを学ぶのに数週間です。これを "except"という条件付きの行を理解するのを手伝ってください。

私は簡単なデコーダプログラムを構築する方法を見つけ出すことができました。彼はコードを提案していく​​つか変更しましたが、私にとって重要なことは何が起こっているのか理解していたことでした。 decode()except: i += 1行を除いてこのコードの97%を理解しています。現時点ではコードは機能しますが、その行を理解したいと思います。

基本的にこのコードは、特定の基準に基づいて暗号化された単語を解読します。このサンプルの暗号化された単語を入力して試してみることができます。 "0C1gA2uiT3hj3S"答えは私は除いて交換しようとした"CATS"

する必要があります:私はちょうど、動作していないエラー句を持っていたことを、条件を除き/トライを見たことがないので、値エラーでi += 1。しかし、それをValue Errorに置き換えることで、決して終わりのないループが作られました。

私の質問は、それ以外の文章を書く目的は何ですか?i += 1そのままです。

もしあなたがこの質問に答えることができたら、「紛失」してください。申し訳ありませんが、古いスレッドについて

def unscramble(elist): 

    answer = [] 
    i = 0 

    while i <= len(elist): 

     try: 
      if int(elist[i]) > -1: 
       i = i + int(elist[i]) + 1 
       answer.append(elist[i]) 
     except: 
      i += 1 

    return "".join(answer) 

def boom(): 
    eword = input("paste in your encrypted message here >> ") 
    elist = list(eword) 
    answer = unscramble(elist) 
    print (answer) 

clear() 
boom() 
+2

良いコードではありません、私はあなたから学ぶために何かを見つけることをお勧めします。 – jonrsharpe

+0

ここから始めてください:https://docs.python.org/3/tutorial/errors.html –

答えて

0

目的はelist[i]が数字でない場合、すなわちintへのキャストが失敗した場合、現在の文字を、スキップ、1でiを進めることです。

+0

ありがとうございました!誰もが本当にここで役に立つ。 – user3564925

0

は、tryブロックの内部で発生する可能性よりも、エラーのカップルがあります:whileループはこれまでに一つのインデックスを実行するため

  1. iは、インデックスの外にあります。
  2. elist[i]
  3. はValueErrorを
  4. i = i + int(elist[i]) + 1につながる大きなを取得し、次のインデックスへのアクセスは、いずれかの方法ではIndexError

にもつながるの数、ではない、を除いて、句は次を無視しますキャラクター。そしてループが続く。

正しい実装が例外を必要はありません。

def unscramble(elist): 
    answer = [] 
    i = 0 
    while i < len(elist): 
     i += int(elist[i]) + 1 
     answer.append(elist[i]) 
     i += 1 
    return "".join(answer) 
+0

私はダニエルを参照してください!ありがとうございました。あなたのコードははるかにクリーンです。 – user3564925

+0

ただし、コードは同等ではありません。元のコードは "0CX1gA2uiT3hj3S"を "CATS"に解読しますが、これはエラーを投げます。 – wonce

関連する問題