INSIGHT

インサイト

2014年228

【CheckIOに挑戦】 CheckIOのIDE紹介&中央値を求める

こん○○は! PHPerです。

今日も、CheckIOにチャレンジします。ちなみにCheckIOのミッションの解答画面はこのようにIDEモドキになっています。かっこいい!

Solve Median    checkio.org.png

コードを入力して画面上のRun&Checkを押します。 実行エラーの場合は、画面左下にエラーメッセージがでます。 実行できてもテストに失敗すると、画面右に失敗したテストの結果がでます。 成功すると、画面右にその旨が表示されます。

さて、今回の問題は、を求めるというのものでした。ミッション② 整数型要素のリストの中央値

ひとまず、ソートして、要素数が偶数なら真ん中の要素2つの平均値を。奇数なら真ん中の要素1つの値を返すという、コードを書いてみます。Python list sortで検索してみたら、listオブジェクトのsortメソッドでソートできるようです。さっそく勢いよく書いてみました。

def checkio(data):
    sorted = data.sort()
    l = len(sorted)
    if l % 2 == 0:
        return (sorted[l / 2 - 1] + sorted[l / 2])/2
    else:
        return sorted[(l -1)/2]

結果は失敗・・・。

よく調べたら、sortは、オブジェクト自体をソートさせるメソッドで戻り値はないようです。ポカミスでしたので、修正。

def checkio(data):
    data.sort()
    l = len(data)
    if l % 2 == 0:
        return (data[l / 2 - 1] + data[l / 2])/2
    else:
        return data[(l -1)/2]

こちらは、実行できましたが、テストに失敗。

よく考えると、要素は整数型なんで、ただ除算すると整数に丸められてしまいますね。Python 型変換で調べてみたところ、float関数で浮動小数点型に変換できるようです。

def checkio(data):
    data.sort()
    l = len(data)
    if l % 2 == 0:
        return (float(data[l / 2 - 1]) + data[l / 2])/2
    else:
        return data[(l -1)/2]

これでパス!

ただ、なんかダサイコードですね・・・。