You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 09:55:11