39017


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

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

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

[code]

    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)
    
[/code]

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


CC BY-SA 3.0
2017-10-25T04:38:05.713
39015
2017-10-25T05:11:17.970
25869
question
python python3
python3におけるKeyErrorについて


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

参照は可能です。

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

[code]

    del L[i]
    
[/code]

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

[code]

     for i in range(N):
    
[/code]

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


CC BY-SA 3.0
2017-10-25T05:11:17.970
39017
2017-10-25T05:11:17.970
19716
39015
answer