こん○○は! PHPerです。
今日も、CheckIOにチャレンジします。ちなみにCheckIOのミッションの解答画面はこのようにIDEモドキになっています。かっこいい!
コードを入力して画面上の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]
これでパス!
ただ、なんかダサイコードですね・・・。