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

Python面向对象编程:三角形面积计算代码错误排查

三角形面积计算代码错误排查与修正

原代码存在的问题

  • 构造方法定义错误:Python类的初始化方法必须是__init__,而非直接以类名作为方法名;类定义时不能将self作为类的参数,self是实例方法的第一个参数,仅在方法内部用来引用实例本身。
  • 参数设计不符合需求:原构造方法要求必须传入所有四个参数,但需求是两种独立场景(已知三边/已知两边+夹角),应支持可选参数,避免强制传入无关参数。
  • 实例方法缺少self参数:类中的实例方法必须以self作为第一个参数,用于访问实例存储的属性,原方法直接传入参数,完全没利用实例已有的属性。
  • 面积计算公式错误:
    • area方法直接将三边相乘,这不是三角形面积公式,已知三边需使用海伦公式计算。
    • area_of_given_angle方法缺少1/2的系数,且未导入math模块;若传入的是角度(度数),需先转换为弧度才能用math.sin计算。
  • 无输入合法性校验:未检查三边是否满足三角形三边关系(任意两边之和大于第三边),也未校验夹角的范围(0°<角度<180°),容易产生无效计算。

修正后的代码

import math

class Triangle:
    def __init__(self, side_A=None, side_B=None, side_C=None, angle=None):
        self.side_A = side_A
        self.side_B = side_B
        self.side_C = side_C
        self.angle = angle  # 单位:度数

    def area_by_three_sides(self):
        # 校验三边参数是否完整且合法
        if not all([self.side_A, self.side_B, self.side_C]):
            raise ValueError("请传入完整的三边长度")
        a, b, c = self.side_A, self.side_B, self.side_C
        if a + b <= c or a + c <= b or b + c <= a:
            raise ValueError("三边长度不满足三角形构成条件")
        # 海伦公式计算面积
        semi_perimeter = (a + b + c) / 2
        return math.sqrt(semi_perimeter * (semi_perimeter - a) * (semi_perimeter - b) * (semi_perimeter - c))

    def area_by_two_sides_and_angle(self):
        # 校验两边及夹角参数是否完整且合法
        if not all([self.side_A, self.side_B, self.angle]):
            raise ValueError("请传入两边长度及夹角(度数)")
        if not 0 < self.angle < 180:
            raise ValueError("夹角必须在0到180度之间")
        # 转换角度为弧度,计算面积
        angle_rad = math.radians(self.angle)
        return 0.5 * self.side_A * self.side_B * math.sin(angle_rad)

# 使用示例
if __name__ == "__main__":
    # 已知三边计算面积
    tri_with_three_sides = Triangle(side_A=3, side_B=4, side_C=5)
    print("三边为3,4,5的三角形面积:", tri_with_three_sides.area_by_three_sides())

    # 已知两边及夹角计算面积
    tri_with_two_sides_angle = Triangle(side_A=3, side_B=4, angle=90)
    print("两边3,4及夹角90度的三角形面积:", tri_with_two_sides_angle.area_by_two_sides_and_angle())

修正说明

  • 拆分两种计算场景为独立方法,命名更清晰,符合单一职责原则。
  • 构造方法使用可选参数,支持两种场景的初始化方式。
  • 添加参数合法性校验,避免无效输入导致错误结果。
  • 修复公式错误,补充math模块导入,处理角度转弧度的问题。

内容的提问来源于stack exchange,提问作者NoiseProgrammar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 00:52:21