python3におけるKeyErrorについて

投稿者: Anonymous

pythonを勉強し始めた者です。
「N個の座標(x,y)に対し、それぞれの原点からの距離を求め、距離が小さいものから順に5つ足したものを出力する」
という問題があったとします。入力は以下の通りです。
一行目がN、以下が各x y座標とします。

7
1 2
3 4
6 5
4 2
8 9
3 5
3 2

それに対し、自分は以下のように作成しました。

import math
L = {}
XN = {}
YN = {}

value = 0
count = 0

N = int(input())
for i in range(N):
    XN[i], YN[i] = map(int, input().split())
    L[i] = math.sqrt(XN[i]**2+YN[i]**2)

while(count < 5):
    min = 999
    for i in range(N):
        if(min>L[i]):
            min = L[i]
            num = i
    value = value + min
    count = count + 1
    del L[i]
print(value)

すると,while内のif(min>L[i])にて
KeyErrorが発生してしまいました。
dic型は同一関数内でも別ループ内では使用できないのでしょうか?

解決

dic型は同一関数内でも別ループ内では使用できないのでしょうか?

参照は可能です。

ただこの問題は単純に範囲エラーのようです。

del L[i]

にて配列をdelしているにもかかわらず
ループ回数は

 for i in range(N):

とNで固定となっております。
len(L)等にしてみてはいかがでしょうか

回答者: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *