2017-07-14 38 views
0

好,所以問題要求在數字列表中找到中位數(中間數字)。如果列表中有偶數的數字,則返回兩個中間數字的平均值。Codeacademy的python數學除以int和float分隔時會變得很奇怪。動態鍵入/投射問題

我碰到一些代碼在網站上不起作用,但在PyCharm中有效。我想這是因爲一些在代碼學院的學習蟒蛇的代碼是舊的(例如它們的打印功能和的raw_input()現在已廢棄)

下面不上CodeAcademy

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 

注意工作:當通過[4,5,5,4]

但是當我將/ 2更改爲/2.0像下面它的工作時,上面返回4.0而不是4.5。

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

好吧,我相信在第一個返回奇怪結果的代碼示例中發生的事情是,Python將前兩個數字轉換爲整數以除以int(在傳遞時產生4 [4,4,5,5] (在排序後)),然後將答案 (4)轉換爲4.0的浮動。但是當我除以2.0時,它將這些數字轉換爲浮點數,然後給出正確的4.5。這也允許我刪除顯式演員爲浮動和測試工作在代碼學院