Python函数调用报错:调用order_three后提示M未定义,求解决
问题排查与解决
错误原因
你在tri_test函数里调用order_three(a, b, c)时,没有接收函数返回的元组值,而且L、M、S是order_three内部的局部变量,外部函数无法直接访问,这才导致了"M未定义"的报错。
修复后的代码
方法1:接收返回值并修正变量引用
修改tri_test函数,先接收order_three返回的三个值,再用这些值进行判断:
def tri_test(a, b, c): # 接收order_three返回的大、中、小边值 L, M, S = order_three(a, b, c) # 直接用返回的变量判断,避免原变量名覆盖导致的混淆 if S ** 2 + M ** 2 == L ** 2: print("Right") elif S ** 2 + M ** 2 > L ** 2: print("Acute") elif S ** 2 + M ** 2 < L ** 2: print("Obtuse")
方法2:简化order_three函数
你原来的order_three写了大量elif分支,逻辑冗余且容易遗漏情况,用Python内置的sorted函数可以大幅简化代码:
def order_three(a, b, c): # 排序后反转,直接得到大、中、小的元组 return tuple(sorted([a, b, c], reverse=True))
补充说明
- 函数内部定义的局部变量仅在该函数作用域内有效,外部必须通过函数返回值来获取这些变量的值。
- 使用内置排序函数替代手动条件判断,既能减少代码量,也能避免因逻辑疏漏导致的排序错误。
内容的提问来源于stack exchange,提问作者CraigenShearer
相关产品推荐
相关产品推荐

