ブログ


スパイシー技術メモ


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

CATEGORY: プログラム

こん○○は! 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]

結果は失敗・・・。

TypeError: object of type 'NoneType' has no len()
checkio, 3
<module>, 11


よく調べたら、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]

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

テストケース: [3,6,10,15,20,99]
Your result: 12
Right result: 12.5

よく考えると、要素は整数型なんで、ただ除算すると整数に丸められてしまいますね。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]

これでパス!

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






プレスリリース

人気ブログ記事

採用情報

最新ブログ記事








ページの先頭へ