2016-11-02 7 views
1

私は辞書の機能を理解するのが大変です。私が書いてみようとしている関数は、現在の場所がどこにあるかの最も近い場所(辞書に与えられている)を見つけて返す必要があります。距離式が含まれていると言われていますが、それを関数辞書に実装する方法がわかりません。何も見つからない場合は、noneを返します。機能:辞書の最小値を返す

def closest_location(d, place, now): 
     close_lst = []# New list 
     for d in closest.place(): 
      for d in closest.now(): 
       if now != place: 
        return None 
       elif now <= place: #If location at now is less than place we want to go to... 
        close_val = now - place 
       close_lst.append(close_val) 
     return(min(d, key=close_lst.get))# returns closest value in list? 

実験:

check that closest({(3,1):'gas', (1,4):'gas', (2,1):'food', (5,5):'food'},'food',(5,5)) == (5,5). 
check that closest({(3,1):'gas', (1,4):'gas', (2,1):'food', (5,5):'food'},'hotel',(1,4)) == None. 
+1

'closest.what()'と 'closest.now()'とは何ですか?定義されているのはどこですか? –

+0

ユークリッド(x、y)平面のように見えますか? [距離式](http://www.cut-the-knot.org/pythagoras/DistanceFormula.shtml) – CAB

+0

はい、シンプル(x、y)です。 –

答えて

2

タプルを仮定は、xであり、yは、グリッド上の座標、距離の式は、ピタゴラスによって与えられる。

(x1 - x2)^2 + (y1 - y2)^2 = distance^2 

我々は、ちょうどそれを引き出しますよ読みやすさのためにそれ自身の関数になっています。

from math import sqrt 
def find_distance(a,b): 
    ax, ay = a 
    bx, by = b 
    return sqrt((ax-bx)**2 + (ay-by)**2) 

def closest_location(d, place, now): 
    locations = [loc for loc, attraction in d.items() if attraction==place] 
    if not locations: 
     return None 
    else: 
     return min(locations, key=lambda x: find_distance(x, now)) 
関連する問題