2017-10-31 5 views
0
내가 트리플 내 코드를 확인하고 지금까지 내가 말할 수있는 책 (LPTHW, 파이썬 2.7)에 주어진 ex40에 실질적으로 동일했다

:LPTHW ex 40이 작동하지 않습니까? (사전 운동, 키 반환하지 않습니다. 값 쌍을)

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 그것은 의미가 있지만, 솔직히 말해서 그것은 끔찍한 예입니다. 예를 들어 문맥에 따라 호출 할 함수를 동적으로 선택해야하는 경우와 같이 사전에 함수를 넣는 것이 유용 할 수 있습니다. 그러나 함수에 대한 사전과 데이터에 대한 사전이 있습니다. 그 물건을 섞으면 혼란스러워. –