質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.36%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

3回答

570閲覧

コードが理解できない

Tohmas_1010

総合スコア15

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

1クリップ

投稿2020/06/03 06:54

(1)
nearest_distの初期値を10000に設定しているのは、11行目変数distの計算結果よりも上の数なら何でもいいからとりあえず10000に設定しているのでしょうか?

(2)
15行目nearest_cap = pref_capitals[key]なのですが、なぜpref_capitals[key]をnearest_capに代入して、16行目でprintすると一番小さい値のvalueである、"青森県(青森市)"が出力されるのでしょうか?

python

1# 県庁所在地と緯度/経度をディクショナリに登録 2# タプルの緯度/経度をキーにする 3pref_capitals = {(43.06417, 141.34694):"北海道(札幌)",(40.82444, 140.74):"青森県(青森市)",(39.70361, 141.1525):"岩手県(盛岡市)"} 4 5loc = (41.768793, 140.72881) # 調べたい地点の緯度,経度 6nearest_cap = '' # 最寄りの県庁所在地名を保存する変数 7nearest_dist = 10000 # 最寄りの地点までの距離を保存する変数 8for key in pref_capitals.keys(): # キーでループ 9 # 緯度経度の差を二乗して距離を計算 10 dist = (loc[0]-key[0])**2+(loc[1]-key[1])**2 11 if nearest_dist > dist: 12 # より近い地点が見つかったので,変数を入れ替え 13 nearest_dist = dist 14 nearest_cap = pref_capitals[key] 15print(nearest_cap)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

(1)
dist = (loc[0]-key[0])**2+(loc[1]-key[1])**2
いわゆる三平方の定理による距離の算出方法です。

例えば北海道から日本の反対側であるブラジルまでの距離を
上記の三平方の定理で算出するとおよそ41,000程の数値が算出されます。
その為比較対象がどれだけ遠い場所であっても良い様にと
それよりも大きい数値として100,000という数字が代入されています。

(2)
こちらについては他の回答者さんが既におっしゃっている様に
for文内で随時nearest_distの値が更新されている為です。

投稿2020/06/03 08:02

nto

総合スコア1438

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Tohmas_1010

2020/06/03 08:29 編集

なるほどです! 回答ありがとうございました◎
guest

0

(1)
はい

(2)
より近い地点が見つかるたびに変数nearest_distnearest_capを更新してます。


それなら、pref_capitals[key]だと(40.82444, 140.74):"青森県(青森市)"のkey(緯度経度)をnearest_capに代入していると考えてしますのですが...

python

1pref_capitals = {(43.06417, 141.34694):"北海道(札幌)",(40.82444, 140.74):"青森県(青森市)",(39.70361, 141.1525):"岩手県(盛岡市)"} 2key = (43.06417, 141.34694) # 例えば札幌のキー 3print(pref_capitals[key]) # => 北海道(札幌) 4

投稿2020/06/03 07:16

編集2020/06/03 08:03
ozwk

総合スコア13551

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Tohmas_1010

2020/06/03 08:31 編集

分かりやすく書いていただきありがとうございます◎
guest

0

ベストアンサー

(1)nearest_distの初期値を10000に設定しているのは、11行目変数distの計算結果よりも上の数なら何でもいいからとりあえず10000に設定しているのでしょうか?
その通りだと思います。

(2)15行目nearest_cap = pref_capitals[key]なのですが、なぜpref_capitals[key]をnearest_capに代入して、16行目でprintすると一番小さい値のvalueである、"青森県(青森市)"が出力されるのでしょうか?
if nearest_dist > dist:によって、より近い県庁所在地が更新されていきます。その時の県庁所在地名というのは、その時のkey(緯度経度)に該当するpref_capitalsの値、つまり都市名です。
全部のkey(緯度経度)をfor文で確認し終わった時に、最も最後に更新された=最も近い都市名がnearest_capに残っています。

投稿2020/06/03 07:14

jeanbiego

総合スコア3966

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Tohmas_1010

2020/06/03 07:58

15行目pref_capitals[key]は、4行目のディクショナリを参照してるという解釈で間違いないですかね? それなら、pref_capitals[key]だと(40.82444, 140.74):"青森県(青森市)"のkey(緯度経度)をnearest_capに代入していると考えてしますのですが... どこかで誤った解釈をしているのですがどこなのか...
jeanbiego

2020/06/03 08:08

Pythonのdictは、keyを指定するとそれに対応する値(ここだと県庁所在地)が返ってきます。 この辺は基本的な使い方なので、ググってもらえれば分かりやすい説明がたくさん出てくると思います。
Tohmas_1010

2020/06/03 08:26

単純に対応する値を取り出せるんですね◎ 理解できましたありがとうございます◎
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問