4 回答

TA貢獻1797條經驗 獲得超6個贊
問題:
您正在訪問
myEvenList
andmyOddList
insidemedianCalculator
,但您不應該這樣做。medianCalculator
應與任何外部變量分離。參數
myEvenList
隱藏myEvenList
全局變量您決定運行偶數還是奇數算法取決于
n
,它是根據 計算的myOddList
,因此它始終只運行兩側之一。不要調用
sort()
參數,因為它會修改底層列表。先復印一份。
解決方案:
讓你的
medianCalculator
函數沒有副作用。這意味著,它不應該訪問其自身函數之外的任何變量,而只能對其輸入參數進行操作。medianCalculator
如果您想獲得多個答案,請多次致電。使用不同的參數讓它在不同的輸入上運行。
代碼:
myOddList = [1, 2, 3, 4, 5]
myEvenList = [1, 2, 3, 4, 5, 6]
def medianCalculator(myList):
myList = myList.copy()
myList.sort()
n = len(myList)
if n % 2 != 0:
answerOdd = myList[int(n/2)]
return answerOdd
else:
one = myList [(n-1) // 2]
two = myList [(n+1) // 2]
answerEven = (one + two) / 2
return answerEven
medianForEvenList = medianCalculator(myEvenList)
print(medianForEvenList)
medianForOddList = medianCalculator(myOddList)
print(medianForOddList)

TA貢獻1831條經驗 獲得超4個贊
myOddList = [1, 2, 3, 4, 5]
myEvenList = [1, 2, 3, 4, 5, 6]
def median(lst):
lst = sorted(lst)
lst_length = len(lst)
midpoint = lst_length/2
if lst_length % 2 != 0:
return lst[int(midpoint-0.5)]
else:
return (lst[int(midpoint-0.5)] + lst[int(midpoint+0.5)])/2
print(median(myOddList))
# 3
print(median(myEvenList))
# 3.5

TA貢獻1859條經驗 獲得超6個贊
你得到 3 因為你忽略了myEvenList
n = len(myOddList)
if n % 2 != 0: # always true
answerOdd = myOddList[int(n/2)]
return answerOdd # return 3
不要在函數中使用兩個列表,而只使用給定的參數

TA貢獻2041條經驗 獲得超4個贊
首先你創建一個 def,所以不要在那里創建你的列表,其次你應該定義一個 def 參數,因為你稍后想要使用。
def median_cal (my_list) :
my_list.sort()
n = len(my_list)
if n % 2 != 0 :
x = int(n/2)
answer = my_list[x]
print (answer)
else :
x = int(n/2) - 1
y = int(n/2)
answer = my_list[x] + my_list[y]
print (answer/2)
a = [1,2,3]
b = [1,2,3,4]
median_cal(a)
median_cal(b)
添加回答
舉報