2017-02-21 150 views
0

我現在這裏有一個工作功能:在第二個函數中調用布爾函數? - Python的

def median(alist): 
    copylist = alist[:] 
    copylist.sort() 

    if len(copylist)%2 == 0: 
     rightmid = len(copylist)//2 
     leftmid = rightmid - 1 
     median = (copylist[leftmid] + copylist[rightmid])//2 
    else: 
     mid = len(copylist)//2 
     median = copylist[mid] 
    return median 

,我想這個函數來調用第二功能ISEVEN第一功能。這是第二個功能:

def isEven(n): 
    if n % 2 == 0: 
     return True 
    else: 
     return False 

這是正確的方法來做到這一點,或是有另一種縮短中位數函數中的代碼?

def median(alist): 
    copylist = alist[:] 
    copylist.sort() 

    if isEven(len(alist)) == True: 
     rightmid = len(copylist)//2 
     leftmid = rightmid - 1 
     median = (copylist[leftmid] + copylist[rightmid])//2 
    else: 
     mid = len(copylist)//2 
     median = copylist[mid] 
    return median 

回答

0

嘗試這樣的事情應該縮短位數代碼的數量相當多,甚至無需輔助方法isEven

def median(alist): 
    copylist = sorted(alist) 
    index = (len(alist) - 1) // 2 
    if len(alist) % 2: 
    return copylist[index] 
    else: 
    return (copylist[index] + copylist[index + 1])/2.0 

# Testing 
print(median([3,1,2])) #2 
print(median([4,2,3,1])) #2.5 

試試吧here!

0

你的問題已經已被回答,但如果您有興趣,我會添加以下可讀性增強功能:

我會cha NGE您isEven功能,具有以下特徵:

def hasEvenNumberOfMembers(list): 
    if len(list) % 2 == 0: 
     return True 
    else: 
     return False 

,然後更改if聲明median閱讀:

if hasEvenNumberOfMembers(alist):

我認爲這使事情很多更具可讀性。只是我的2c。

相關問題