2016-06-02 2 views
0

私は多くの混乱の後に練習を完了し、彼のテストに合ったこのコードを作った。コードの改善、Pythonの難しい方法ex48

WORD_TYPES = { 
    'verb' : ['go', 'kill', 'eat'], 
    'direction' : ['north', 'south', 'east', 'west'], 
    'noun' : ['bear', 'princess'], 
    'stop' : ['the','in','of'] 
} 

def scan(sentance): 
    listy = [] 
    counter = 0 
    for word in sentance.split(): 
     try: 
      count = counter 
      for key, value in WORD_TYPES.iteritems(): 
       for ind in value: 
        if ind == word: 
         counter += 1 
         listy.append((key,ind)) 
      if count == counter: 
       raise KeyError 
     except KeyError: 
      try: 
       value = int(word) 
       listy.append(('number',value)) 
      except ValueError: 
       listy.append(('error',word)) 
    return listy 

著者はtryとexceptを使用したかったが、効率的に使用したとは思わない。ここでそれらを使用するより良い方法は何ですか?また、実際に試して除いているのはいつですか?コードを改善するための他のヒントも歓迎されます。

+3

コードレビューで移動する必要があります。http://codereview.stackexchange.com/ –

答えて

0

私はあなたが、著者は、一般的に、一般的な方法が何をしているため、それは正規表現を使用することであろう数字の解釈で「カンニング」しtryexceptを使用するように言うhttp://learnpythonthehardway.org/book/ex48.html

に運動を参照していると仮定します。 int()関数を使用して、未知語をintに変換しようとすると、数値が数字ではないことを適切な指標として解釈することができます。したがって、ValueError例外が発生します。

あなたの他の例外の使用は不要でした。

try-except構造は、モジュールがスローする例外を処理するためにのみ使用されます。それは、if-elseの代わりとして使われるべきではありません。

また、一致するものを見つけるためにリストのすべての要素を実行する必要はありません。in演算子を使用してください。

if ind in value: 
    # Do Stuff 
関連する問題