DAY30 函数专题1:函数定义与参数

前言:今天主要是完成了关于函数定义与参数的5个题目从中都有不一样的收获!

一、题目1:计算圆的面积

  1. 任务:编写一个名为calculate_circle_area的函数,该函数接收圆的半径radius作为参数,并返回圆的面积。圆的面积=Π*radius^2(可以使用math.pi作为Π的值)

  2. 要求:函数接收一个位置参数radius。计算半径为5、0、-1时候的面积

  3. 注意点:可以采取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)

运行结果:

思考:

书写思路

  1. 先引入所需要的库

  2. 再定义函数,并给定相关参数

  3. 在函数中采用try: except TypeError:结构 在try中进行数值类型判断并实现功能,在except TypeError:结构中给出错误情况转入的方向避免程序卡死,数据丢失

  4. 定义相关变量,对函数进行调用

二、题目2:计算矩形的面积

  1. 任务:编写一个名为calculate_rectangle_area的函数,该函数接收矩形的度length和宽度width作为参数,并返回矩形的面积。

  2. 公式:矩形面积=length*width

  3. 要求:函数接收两个位置参数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:计算任意数量数字的平均值

  1. 任务:编写一个名为calculate_average的函数,该函数可以接收任意数量的数字作为参数(引入可变位置参数(*args)),并返回它们的平均值。

  2. 要求:使用*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 :打印用户信息

  1. 任务:编写一个名为print_user_info的函数,该函数接收一个必需的参数user_id,以及任意数量的额外用户信息(作为关键字参数)。

  2. 要求:

(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()

五、题目五:格式化几何图形描述

  1. 任务:编写一个名为describe_shape的函数,该函数接收图形的名称shape_name(必需),一个可选的color(默认"black"),以及任意数量的描述该图形尺寸的关键字参数(例如radius=5对于圆,length=10,width=4对于矩形.)

  2. 要求: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}")

运行结果:

@浙大疏锦行

相关推荐
小oo呆2 小时前
【学习心得】Python的TypedDict(简介)
开发语言·python
文洪涛2 小时前
VS Code Python “第一次运行失败 / 先执行 python 再激活 Conda” 问题定位与解决
开发语言·python·conda
zd2005723 小时前
STREAMS指南:环境及宿主相关微生物组研究中的技术报告标准
人工智能·python·算法
Data_agent3 小时前
京东商品价格历史信息API使用指南
java·大数据·前端·数据库·python
云技纵横3 小时前
Stream API 从入门到实践:常用操作、易错点与性能建议
开发语言·windows·python
雪域迷影3 小时前
macOS系统上或首次使用Python的urllib模块时出现 ssl.SSLCertVerificationError 错误
python·macos·ssl
其美杰布-富贵-李3 小时前
PyTorch Optimizer 与 Scheduler 指南
人工智能·pytorch·python·优化·训练
Franklin3 小时前
如何解决git HEAD detached 分离头指针问题
git·python·pycharm