计算两个有序数组中位数时的浮点转整数异常:预期返回3却得到3.0
解决Python中位数返回浮点型而非整数的问题
嘿,我一眼就发现问题出在哪了——运算符优先级搞混了,导致你写的整数处理分支根本没被触发!
你看这段条件判断:
if(e+q%2==0):
在Python里,取模运算符%的优先级比加法+高,所以这行代码实际计算的是 e + (q % 2),而不是你想要的 (e + q) % 2。
当e=2、q=4时,2 + (4%2)的结果是2+0=2,显然不等于0,所以条件不成立,代码直接走到了else分支,执行(e+q)/2,也就是6/2=3.0,自然返回的是浮点型结果。
修正方案
只需要给e+q加上括号,确保先计算两者的和再取模:
for i in array2: array1.append(i) arr = array1 arr.sort() n = len(arr) if n % 2 == 0: z = n // 2 e = int(arr[z]) q = int(arr[z - 1]) # 修正运算符优先级,给e+q添加括号 if (e + q) % 2 == 0: ans = (e + q) // 2 # 这里int()可以省略,因为//对整数运算返回整数 return ans else: ans = (e + q) / 2 return ans else: z = n // 2 ans = arr[z] return ans
修正后,当e=2、q=4时,(2+4)%2=6%2=0,条件成立,代码进入整数处理分支,(2+4)//2会返回整数3,完全符合你的预期。
内容的提问来源于stack exchange,提问作者Inderjeet Singh
相关产品推荐
相关产品推荐

