2017-10-31 4 views
0

私はトリプル私のコードをチェックし、限り、私はそれを言うことができるようにブック(LPTHW、Pythonの2.7)で与えex40する実質的に同じですしている:LPTHW ex 40 not working? (辞書運動は、キー返しません:valueのペア)

cities = {'CA': 'San Francisco', 'MI': 'Detroit', 'FL': 'Jacksonville'} 

cities['NY'] = 'New York' 
cities['OR'] = 'Portland' 

def find_city(themap, state): 
     if state in themap: 
      return themap[state] 
    else: 
     return "Not found." 

cities['_find'] = find_city 

while True: 
    print "State? (ENTER to quit)", 
    state = raw_input("> ") 

    if not state: break 

city_found = cities['_find'](cities, state) 
print city_found 

期待される出力は次のようなものです:

State? (ENTER to quit) > CA 
San Francisco 
State? (ENTER to quit) > FL 
Jacksonville 
State? (ENTER to quit) > O 
Not found. 
State? (ENTER to quit) > OR 
Portland 
State? (ENTER to quit) > VT 
Not found. 
State? (ENTER to quit) > 

しかし、私はそれを実行したとき、私は空白行に入力してヒットするまで、入力行は、街を生産することはありません、繰り返されます。ように:

State? (Enter to quit) > KS 
State? (Enter to quit) > NY 
State? (Enter to quit) > LA 
State? (Enter to quit) > CA 
State? (Enter to quit) > 
Not found. 

誰も私が見落としている私に教えてもらえますか?

ありがとうございました。

答えて

1

ライン

city_found = cities['_find'](cities, state) # Better: city_found = find_city(cities, state) 
print city_found 

はない、それの後に、whileループ内にする必要があります。

cities['_find'] = find_cityの目的が何であるか分かりません。なぜ、その機能を都市辞書に追加するのではなく、直接呼び出すのはなぜですか?私には非常に不快ではないようです。

+0

ありがとうございます。新しいページで視覚的に見え方が違っていて、行番号からスペースを確認しませんでした。関数を直接呼び出すのではなく、関数を辞書に組み込む方法を教えていると思っています。 – themagicbean

+0

@themagicbeanそれは理にかなっていますが、正直言ってひどい例です。たとえば、コンテキストに応じてどの関数を呼び出すかを動的に選択する必要がある場合など、関数を辞書に入れると便利です。しかし、関数用の辞書とデータ用の辞書があります。それを混ぜることは混乱している。 –

関連する問題