修复max_magnitude函数错误:输入25 0 -50未返回正确结果-50
修复max_magnitude函数的绝对值比较错误
你的max_magnitude函数逻辑判断存在错误,导致输入25、0、-50时返回25而非预期的-50。
错误原因分析
原代码中的条件判断逻辑有误:
if abs(val1) > abs(val2) and abs(val3):
这里的and abs(val3)并非比较abs(val1)是否大于abs(val3),而是检查abs(val3)是否为非零值(Python中所有非零数值都会被视为True)。以输入25、0、-50为例:
abs(val1)=25确实大于abs(val2)=0abs(val3)=50是非零值,被判定为True
因此第一个条件成立,直接返回val1=25,但实际上-50的绝对值更大。
修复方案
方案1:修正条件判断逻辑
将每个条件改为同时比较当前值的绝对值是否大于另外两个值的绝对值:
def max_magnitude(val1, val2, val3): if abs(val1) > abs(val2) and abs(val1) > abs(val3): return val1 elif abs(val2) > abs(val1) and abs(val2) > abs(val3): return val2 else: return val3 def main(): val1 = int(input()) val2 = int(input()) val3 = int(input()) print(max_magnitude(val1, val2, val3)) if __name__ == '__main__': main()
方案2:使用Python内置max函数(更简洁)
利用max函数的key参数指定按绝对值比较,一行代码即可实现需求,避免手动判断的逻辑错误:
def max_magnitude(val1, val2, val3): return max(val1, val2, val3, key=abs) def main(): val1 = int(input()) val2 = int(input()) val3 = int(input()) print(max_magnitude(val1, val2, val3)) if __name__ == '__main__': main()
两种方案输入25、0、-50时都会正确返回-50。
内容的提问来源于stack exchange,提问作者Kshitiz Susling
相关产品推荐
相关产品推荐

