首先提供最直接的实现方式:1. 定义函数calculate_rectangle_area接收长和宽;2. 直接返回二者乘积;3. 添加docstring说明参数和返回值;4. 可选添加类型提示增强可读性;其次为确保输入有效性:1. 使用isinstance检查参数是否为数字类型,否则抛出typeerror;2. 检查长和宽是否为正数,否则抛出valueerror;再次为提升通用性,采用面向对象设计:1. 创建rectangle类封装长和宽属性;2. 使用@property和setter方法确保属性赋值时的合法性校验;3. 提供calculate_area和calculate_perimeter等方法实现相关计算;最后为验证函数准确性,编写单元测试:1. 使用unittest框架创建测试类;2. 编写测试方法验证正整数、浮点数等正常输入;3. 使用assertequal和assertalmostequal验证输出结果;4. 可扩展测试异常输入情况以确保健壮性。完整的解决方案涵盖了从简单函数到健壮类设计再到自动化测试的全过程,确保代码正确、安全且易于维护。

写一个计算长方形面积的Python函数,其实核心就是接收长和宽两个数值,然后把它们乘起来返回结果。听起来简单,但里面有些小细节,比如怎么让它更健壮、更好用,就值得琢磨了。
最直接的实现方式,可能就是这样:
def calculate_rectangle_area(length, width):
"""
计算长方形的面积。
参数:
length (float 或 int): 长方形的长度。
width (float 或 int): 长方形的宽度。
返回:
float 或 int: 长方形的面积。
"""
return length * width
# 随便试试看
area1 = calculate_rectangle_area(5, 10)
print(f"长为5,宽为10的长方形面积是: {area1}")
area2 = calculate_rectangle_area(7.5, 3)
print(f"长为7.5,宽为3的长方形面积是: {area2}")这个函数,
calculate_rectangle_area
length
width
return length * width
length: float
立即学习“Python免费学习笔记(深入)”;
说起来,我们刚才那个函数,虽然能算面积,但如果有人不小心传入了负数,或者根本不是数字的东西,它会怎么样?比如
calculate_rectangle_area(-5, 10)
-50
我通常会这么做:
def calculate_rectangle_area_robust(length, width):
"""
计算长方形的面积,并对输入参数进行基本校验。
参数:
length (float 或 int): 长方形的长度。
width (float 或 int): 长方形的宽度。
返回:
float 或 int: 长方形的面积。
抛出:
ValueError: 如果长度或宽度为负数或非数字。
"""
if not isinstance(length, (int, float)) or not isinstance(width, (int, float)):
raise TypeError("长度和宽度必须是数字类型(整数或浮点数)。")
if length <= 0 or width <= 0:
raise ValueError("长度和宽度必须是正数。")
return length * width
# 试试看错误处理
try:
print(calculate_rectangle_area_robust(5, -10))
except ValueError as e:
print(f"错误: {e}")
try:
print(calculate_rectangle_area_robust("abc", 10))
except TypeError as e:
print(f"错误: {e}")
print(f"校验后正常计算: {calculate_rectangle_area_robust(6, 8)}")这里,我加了两层检查。先用
isinstance
TypeError
ValueError
有时候,我们不光要算长方形面积,可能还要算周长,或者以后会有圆形、三角形等等。如果每个都写一个独立的函数,代码可能会有点散。我个人倾向于,对于这种相关联的几何概念,可以考虑用面向对象的方式来组织。
比如,我们可以定义一个
Rectangle
class Rectangle:
def __init__(self, length, width):
if not isinstance(length, (int, float)) or not isinstance(width, (int, float)):
raise TypeError("长度和宽度必须是数字类型。")
if length <= 0 or width <= 0:
raise ValueError("长度和宽度必须是正数。")
self._length = length # 使用下划线表示这是内部属性
self._width = width
@property
def length(self):
return self._length
@property
def width(self):
return self._width
@length.setter
def length(self, value):
if not isinstance(value, (int, float)):
raise TypeError("长度必须是数字类型。")
if value <= 0:
raise ValueError("长度必须是正数。")
self._length = value
@width.setter
def width(self, value):
if not isinstance(value, (int, float)):
raise TypeError("宽度必须是数字类型。")
if value <= 0:
raise ValueError("宽度必须是正数。")
self._width = value
def calculate_area(self):
"""计算长方形的面积。"""
return self._length * self._width
def calculate_perimeter(self):
"""计算长方形的周长。"""
return 2 * (self._length + self._width)
# 用法示例
try:
my_rectangle = Rectangle(10, 5)
print(f"我的长方形面积是: {my_rectangle.calculate_area()}")
print(f"我的长方形周长是: {my_rectangle.calculate_perimeter()}")
# 尝试修改尺寸
my_rectangle.length = 12
print(f"修改长度后,面积是: {my_rectangle.calculate_area()}")
# 尝试错误输入
# invalid_rectangle = Rectangle(0, 5) # 解开注释会抛出错误
except (ValueError, TypeError) as e:
print(f"创建或操作长方形时出错: {e}")通过一个
Rectangle
Circle
calculate_area
写完函数,总得确保它能正常工作,对吧?尤其是在实际项目中,哪怕是再简单的函数,也需要测试。我习惯用Python内置的
unittest
pytest
unittest
测试的思路很简单:给定一些已知的输入,然后检查函数的输出是否和我们预期的结果一致。
import unittest
# 假设这是我们要测试的函数,就用最开始那个简单的版本吧
def calculate_rectangle_area_simple(length, width):
return length * width
class TestRectangleAreaCalculation(unittest.TestCase):
def test_positive_integers(self):
# 测试正整数输入
self.assertEqual(calculate_rectangle_area_simple(5, 10), 50)
self.assertEqual(calculate_rectangle_area_simple(1, 1), 1)
def test_positive_floats(self):
# 测试浮点数输入
self.assertAlmostEqual(calculate_rectangle_area_simple(2.5, 4.0), 10.0)
self.assertAlmostEqual(calculate_rectangle_area_simple(0.5, 0.5), 0.25)
def test_zero_input(self):
# 边界情况:零输入。根据业务需求,可能需要抛出错误,这里假设返回0
self.assertEqual(calculate_rectangle_area_simple(0, 10), 0)
self.assertEqual(calculate_rectangle_area_simple(5, 0), 0)
self.assertEqual(calculate_rectangle_area_simple(0, 0), 0)
# 如果是上面带校验的robust版本,测试会更复杂,需要测试正常和异常情况
# def test_negative_input_raises_value_error(self):
# with self.assertRaises(ValueError):
# calculate_rectangle_area_robust(-5, 10)
# with self.assertRaises(ValueError):
# calculate_rectangle_area_robust(5, -10)
#
# def test_non_numeric_input_raises_type_error(self):
# with self.assertRaises(TypeError):
# calculate_rectangle_area_robust("abc", 10)
# with self.assertRaises(TypeError):
# calculate_rectangle_area_robust(5, None)
# 运行测试
if __name__ == '__main__':
# unittest.main() # 正常运行时使用
# 在Jupyter或某些IDE中,需要传入argv和exit=False避免冲突
unittest.main(argv=['first-arg-is-ignored'], exit=False)上面这个测试类
TestRectangleAreaCalculation
unittest.TestCase
test_
test_positive_integers
self.assertEqual
self.assertAlmostEqual
通过编写这些测试,我能确保每次修改代码后,基础功能仍然是正确的,这给我很大的信心。毕竟,手
以上就是Python函数怎样写一个计算长方形面积的函数 Python函数面积计算功能的编写技巧的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号