2017-07-14 2 views
0

[OK]問題は、数値のリストの中央値(中間の数値)を検索するよう求めます。リストに偶数の数字がある場合は、2つの中間の数字の平均を返します。codeacademyのpythonの数学は、int vs floatで割ると変な動作をします。動的に型付けされた/キャストの問題

私はいくつかのコードに出くわしましたが、サイトでは動作しませんが、PyCharmでは動作します。私は、コードアカデミーの学習のpythonのコードの一部が古いので、それは想像(例えばその印刷機能やraw_input()現在は非推奨されている)

下記の注意

def median(ls): 
    ls = sorted(ls) 
    length = len(ls) 
    median = 0.0 
    temp = 0 

    if length % 2 == 0: 
     temp = int(length/2) 
     median = float (ls[temp-1] + ls[temp])/2 #why is this a problem? 
     return median 
    else: 
     temp=int((length-1)/2) 
     median = ls[temp] 
     return median 
CodeAcademy

上では動作しません。上記の値は、4.5の代わりに4.0を返します。[4,5,5,4]

ただし、/ 2を以下のように/2.0に変更すると動作します。

def median(ls): 
    ls = sorted(ls) 
    length = len(ls) 
    median = 0.0 
    temp = 0 

    if length % 2 == 0: 
     temp = int(length/2) 
     median = float (ls[temp-1] + ls[temp])/2.0 #here 
     return median 
    else: 
     temp=int((length-1)/2) 
     median = ls[temp] 
     return median 

注:上記が正しく4.5私はこの問題を解決する方法を考え出したにも関わらず、そのため、[4,5,5,4]

を通過したとき、私はそれがなぜ起こったか知りたいを返します。両方のコード例が新しいバージョンのPythonで動作するとしても、正しいかクリーナーか、それはなぜですか?

答えて

0

私は、奇妙な結果を返す最初のコード例で起こったことは、最初の2つの数値をintに分割してintに分割することです([4,4,5,5] (ソート後))、答えが (4)のフロートにキャストして4.0を与えます。私が2.0で割ったときには、それらの数字を最初に浮動小数点数にキャストして、正しい4.5を与えました。これにより、浮動小数点への明示的なキャストを取り除くことができ、コード・アカデミーでテストされたときに

関連する問題