前言:今天主要是完成了关于函数定义与参数的5个题目从中都有不一样的收获!
一、题目1:计算圆的面积
-
任务:编写一个名为calculate_circle_area的函数,该函数接收圆的半径radius作为参数,并返回圆的面积。圆的面积=Π*radius^2(可以使用math.pi作为Π的值)
-
要求:函数接收一个位置参数radius。计算半径为5、0、-1时候的面积
-
注意点:可以采取try-except使函数变得更加稳健,如果传入的半径为负数,函数应该返回0(或者可以考虑引发一个ValueError)。
代码:
python
import math
def cal_circle_area(r):
try:
if r < 0 :
return 0
else:
area = math.pi*(r**2)
return area
except TypeError:
print(f"ValueError")
#测试
test_r = [5,0,-1]
print("计算不同半径圆的面积")
print("-" * 30)
for r in test_r:
area = cal_circle_area(r)
print(f"半径 = {r},面积 = {area}")
test_e = "a"
area_e = cal_circle_area(test_e)
运行结果:

思考:
书写思路
-
先引入所需要的库
-
再定义函数,并给定相关参数
-
在函数中采用try: except TypeError:结构 在try中进行数值类型判断并实现功能,在except TypeError:结构中给出错误情况转入的方向避免程序卡死,数据丢失
-
定义相关变量,对函数进行调用
二、题目2:计算矩形的面积
-
任务:编写一个名为calculate_rectangle_area的函数,该函数接收矩形的度length和宽度width作为参数,并返回矩形的面积。
-
公式:矩形面积=length*width
-
要求:函数接收两个位置参数length和width。
(1)函数返回计算得到的面积。
(2)如果长度或宽度为负数,函数应该返回0。
代码:
python
def calculate_rectangle_area(length,width):
try:
if length < 0 or width < 0:
return 0
else:
area = length * width
return area
except TypeError:
print(f"ValueError")
test_case = [(3,2),
(3,0),
(0,3),
(0,0),
(-1,5),
(1.5,2)
]
print("计算不同长宽矩形的面积")
print("-" * 30)
for length , width in test_case:
area = calculate_rectangle_area(length,width)
print(f"长度 = {length}, 宽度 = {width}, 面积 = {area}")
运行结果:

思考:
此题目与题目一最大的区别在于,此题目的参数要传两个,故我们采用元组列表(list of tuples)来对相关测试变量进行存贮。
三、 题目3:计算任意数量数字的平均值
-
任务:编写一个名为calculate_average的函数,该函数可以接收任意数量的数字作为参数(引入可变位置参数(*args)),并返回它们的平均值。
-
要求:使用*args来接收所有传入的数字。
(1)、如果没有任何数字传入,函数应该返回0。
(2)、函数返回计算得到的平均值。
代码:
python
def calculate_average(*args):
"""
计算任意数量数字的平均值
参数:
*args: 可变数量的数值参数
返回:
所有数字的平均值。如果没有传入任何数字,返回0
"""
# 检查是否传入了数字
if len(args) == 0:
return 0
try:
# 计算总和
total = sum(args)
# 计算平均值
average = total / len(args)
return average
except (TypeError, ZeroDivisionError):
# 处理可能的异常(虽然len(args)!=0时不会除零)
return 0
# 测试函数
print("测试计算平均值函数:")
print("-" * 30)
# 测试用例
test_cases = [
(1, 2, 3, 4, 5), # 多个整数
(10, 20, 30), # 三个数
(3.5, 4.5, 5.5), # 小数
(7,), # 只有一个数
(), # 没有参数
(0, 0, 0, 0), # 全是0
(-1, 0, 1), # 包含负数
(2.2, 3.3, 4.4, 5.5) # 多个小数
]
# 2. enumerate(test_cases, 1)的作用:
# enumerate()函数会同时返回索引和元素值。
# enumerate(test_cases, 1) 相当于:
# 1, (1, 2, 3, 4, 5)
# 2, (10, 20, 30)
# 3, (3.5, 4.5, 5.5)
# 4, (7,)
# 5, ()
# 6, (-1, 0, 1)
for i, numbers in enumerate(test_cases, 1):
result = calculate_average(*numbers)
if len(numbers) == 0:
print(f"测试{i}: 无参数传入, 平均值 = {result}")
else:
print(f"测试{i}: 数字 {numbers}, 平均值 = {result:.4f}")
运行结果:

思考:
此函数的参数使用 *args可接收任意数量的参数!
四、题目4 :打印用户信息
-
任务:编写一个名为print_user_info的函数,该函数接收一个必需的参数user_id,以及任意数量的额外用户信息(作为关键字参数)。
-
要求:
(1)user_id是一个必需的位置参数。
(2)使用**kwargs来接收额外的用户信息。
(3)函数打印出用户ID,然后逐行打印所有提供的额外信息(键和值)。
(4)函数不需要返回值
代码:
python
# **kwargs:可变关键字参数,接收任意数量的键值对
# 在函数内部,kwargs是一个字典 可以像操作字典一样访问:kwargs.items(), kwargs.keys(), kwargs.values()
def print_user_info(user_id, **kwargs):
"""
打印用户信息
参数:
user_id: 必需的用户ID(位置参数)
**kwargs: 任意数量的关键字参数,包含额外用户信息
"""
# 打印用户ID
print(f"用户ID: {user_id}")
# 打印额外信息(如果有的话)
if kwargs:
print("额外信息:")
# 逐行打印所有关键字参数
for key, value in kwargs.items():
print(f" {key}: {value}")
else:
print("无额外信息")
# 函数不需要返回值,所以不写return语句或只写return
# 测试函数
print("=== 测试1: 只有用户ID ===")
print_user_info("A001")
print("\n=== 测试2: 有额外信息 ===")
print_user_info("B002", name="张三", age=25, city="北京")
print("\n=== 测试3: 多个额外信息 ===")
print_user_info("C003",
name="李四",
age=30,
email="lisi@example.com",
department="技术部",
phone="13800138000")
运行结果:

思考:
**kwargs的特点:
1、接收任意数量的关键字参数
2、在函数内部,kwargs是一个字典
3、可以像操作字典一样访问:kwargs.items(), kwargs.keys(), kwargs.values()
五、题目五:格式化几何图形描述
-
任务:编写一个名为describe_shape的函数,该函数接收图形的名称shape_name(必需),一个可选的color(默认"black"),以及任意数量的描述该图形尺寸的关键字参数(例如radius=5对于圆,length=10,width=4对于矩形.)
-
要求:shape_name是必需的位置参数。
(1)ocolor是一个可选参数,默认值为"black"。
(2)使用**kwargs收集描述尺寸的参数。
(3)函数返回一个描述字符串
python
def describe_shape(shape_name, color="black", **kwargs):
"""
格式化几何图形描述
参数:
shape_name: 必需的位置参数,图形名称
color: 可选参数,颜色,默认为"black"
**kwargs: 描述图形尺寸的关键字参数
返回:
描述字符串
"""
# 基础描述部分
description = f"A {color} {shape_name}"
# 尺寸描述部分
if kwargs:
# 如果有尺寸参数
dimensions = []
for key, value in kwargs.items():
dimensions.append(f"{key}={value}")
dimensions_str = ", ".join(dimensions)
description += f" with dimensions: {dimensions_str}."
else:
# 如果没有尺寸参数
description += " with no specific dimensions."
return description
# 测试函数
print("=== 测试 describe_shape 函数 ===")
print("-" * 40)
# 测试1: 有尺寸参数的圆
circle_desc1 = describe_shape("circle", color="red", radius=5)
print(f"测试1: {circle_desc1}")
# 测试2: 有多个尺寸参数的矩形
rectangle_desc = describe_shape("rectangle", color="blue", length=10, width=4, height=2)
print(f"测试2: {rectangle_desc}")
# 测试3: 使用默认颜色
triangle_desc = describe_shape("triangle", side1=3, side2=4, side3=5)
print(f"测试3: {triangle_desc}")
# 测试4: 没有尺寸参数
square_desc = describe_shape("square", color="green")
print(f"测试4: {square_desc}")
# 测试5: 多个参数组合
pentagon_desc = describe_shape("pentagon", "yellow", side=7, apothem=4.8)
print(f"测试5: {pentagon_desc}")
# 测试6: 只有必需参数
shape_desc = describe_shape("hexagon")
print(f"测试6: {shape_desc}")
运行结果:
