目录
[1.1 函数的基本概念详解](#1.1 函数的基本概念详解)
[1.2 为什么函数如此重要?](#1.2 为什么函数如此重要?)
[1.3 函数的四大优势](#1.3 函数的四大优势)
[2.1 函数定义的完整语法结构](#2.1 函数定义的完整语法结构)
[2.2 函数定义的实际示例](#2.2 函数定义的实际示例)
[2.3 函数定义的注意事项](#2.3 函数定义的注意事项)
[3.1 函数调用的基本原理](#3.1 函数调用的基本原理)
[3.2 不同类型的函数调用](#3.2 不同类型的函数调用)
[3.3 函数调用的实际场景](#3.3 函数调用的实际场景)
[4.1 return语句的详细解析](#4.1 return语句的详细解析)
[4.2 各种return情况的示例](#4.2 各种return情况的示例)
[4.3 return语句的特殊用法](#4.3 return语句的特殊用法)
[5.1 实战项目一:个人日记管理系统](#5.1 实战项目一:个人日记管理系统)
[5.2 实战项目二:简易银行账户系统](#5.2 实战项目二:简易银行账户系统)
[6.1 编写高质量函数的指导原则](#6.1 编写高质量函数的指导原则)
[6.2 文档字符串和注释的规范](#6.2 文档字符串和注释的规范)
[6.3 错误处理和输入验证](#6.3 错误处理和输入验证)
嘿,朋友们!👋
我是你们的学习伙伴,一个热爱编程、喜欢把复杂技术讲简单的普通开发者。在写这些教程的时候,我总是在想:怎么才能让你们学得更轻松、更有趣呢?
如果你觉得我的讲解方式对你有帮助,或者喜欢我这种"不装高深、只说人话"的风格,欢迎来我的小窝坐坐~
我的技术博客 :python全栈蛇行者-CSDN博客那里有更多精心整理的学习笔记、实战项目,还有我在学习中踩过的坑和总结的经验。
专栏订阅也不容错过哦!我会持续更新这个Python全栈系列,从基础到实战,手把手带你走进编程的世界。订阅之后,新文章会第一时间推送到你面前,再也不用担心错过精彩内容啦!
好啦,唠叨完毕,让我们开始今天的学习吧!
一、什么是函数?------深入理解函数的概念
1.1 函数的基本概念详解
函数是编程中最重要的概念之一,它是组织代码的基本单元。让我们用一个更加生活化的方式来理解函数。
想象一下日常生活中的场景:
- 
咖啡机:你只需要按下按钮,咖啡机就会自动完成磨豆、加热、冲泡等一系列复杂操作,最终给你一杯香浓的咖啡。你不需要知道内部如何工作,只需要知道按哪个按钮得到什么结果。 
- 
快递服务:你告诉快递员收件地址和寄件地址,快递员就会完成取件、运输、派送的整个过程。你不需要关心具体走哪条路线、用什么交通工具。 
在编程中,函数就是这样的"黑盒子":
- 
输入 → 处理 → 输出 
- 
你只需要知道给函数什么(输入),它会返回什么(输出) 
- 
不需要关心函数内部是如何实现的 
1.2 为什么函数如此重要?
让我们通过对比来理解函数的价值:
没有函数的情况:
            
            
              python
              
              
            
          
          # 计算三个圆的面积,没有使用函数
radius1 = 5
area1 = 3.14 * radius1 * radius1
print(f"半径{radius1}的圆面积是: {area1}")
radius2 = 8
area2 = 3.14 * radius2 * radius2
print(f"半径{radius2}的圆面积是: {area2}")
radius3 = 10
area3 = 3.14 * radius3 * radius3
print(f"半径{radius3}的圆面积是: {area3}")使用函数的情况:
            
            
              python
              
              
            
          
          def calculate_circle_area(radius):
    """计算圆的面积"""
    area = 3.14 * radius * radius
    return area
# 计算三个圆的面积,使用函数
print(f"半径5的圆面积是: {calculate_circle_area(5)}")
print(f"半径8的圆面积是: {calculate_circle_area(8)}")
print(f"半径10的圆面积是: {calculate_circle_area(10)}")对比分析:
- 
代码重复:没有函数的代码重复了计算公式 
- 
维护困难:如果要修改计算公式,需要修改多处 
- 
可读性差:没有函数的代码意图不够明确 
- 
错误风险:重复代码增加了出错的可能性 
1.3 函数的四大优势
1. 代码重用(Reusability)
- 
一次定义,多次使用 
- 
避免重复编写相同代码 
- 
提高开发效率 
2. 模块化(Modularity)
- 
将复杂问题分解为小问题 
- 
每个函数解决一个特定问题 
- 
便于团队协作开发 
3. 可维护性(Maintainability)
- 
修改只需在一处进行 
- 
不影响其他部分的代码 
- 
降低维护成本 
4. 可读性(Readability)
- 
有意义的函数名让代码自文档化 
- 
隐藏实现细节,突出业务逻辑 
- 
便于其他人理解和维护 
二、定义函数------从零开始创建函数
2.1 函数定义的完整语法结构
            
            
              python
              
              
            
          
          def 函数名(参数列表):
    """文档字符串(描述函数功能)"""
    函数体代码块
    return 返回值让我们详细分解每个部分:
def关键字
- 
必须的关键字,告诉Python"我要定义一个函数" 
- 
类似于说"我要创建一个新的工具" 
函数名
- 
函数的名称,要遵循标识符命名规则 
- 
应该使用小写字母,单词间用下划线分隔 
- 
要有描述性,让人一看就知道函数做什么 
- 
好的例子: calculate_area,get_user_info
- 
不好的例子: func1,abc,do_something
括号和参数
- 
括号是必须的,即使没有参数也要写空括号 
- 
参数是函数的输入,今天我们先学习无参数函数 
冒号
- 
非常重要的符号,表示函数定义的开始 
- 
忘记冒号是初学者常见错误 
文档字符串
- 
用三引号包围的字符串,描述函数功能 
- 
不是必须的,但强烈推荐使用 
- 
可以通过 函数名.__doc__访问
函数体
- 
缩进的代码块,实现函数的具体功能 
- 
Python使用缩进来标识代码块,通常用4个空格 
return语句
- 
用于返回函数的结果 
- 
不是必须的,没有return的函数返回None 
- 
遇到return语句,函数立即结束执行 
2.2 函数定义的实际示例
让我们通过多个例子来深入理解函数定义:
示例1:最简单的函数
            
            
              python
              
              
            
          
          def say_hello():
    """这个函数用于向世界打招呼"""
    print("Hello, World!")
    print("欢迎来到Python编程世界!")示例2:执行特定任务的函数
            
            
              python
              
              
            
          
          def show_current_time():
    """显示当前时间信息(模拟)"""
    print("当前时间:2024年1月1日 10:30:00")
    print("今天是星期一")
    print("天气:晴朗")示例3:计算型函数
            
            
              python
              
              
            
          
          def calculate_rectangle_area():
    """计算矩形的面积(使用固定值)"""
    length = 10
    width = 5
    area = length * width
    print(f"长为{length},宽为{width}的矩形面积是:{area}")
    return area示例4:返回多个值的函数
            
            
              python
              
              
            
          
          def get_student_info():
    """返回学生信息"""
    name = "张三"
    age = 18
    grade = "三年级"
    score = 95.5
    
    return name, age, grade, score2.3 函数定义的注意事项
1. 命名规范
            
            
              python
              
              
            
          
          # 好的命名
def calculate_total_price():
def get_user_name():
def validate_email_format():
# 不好的命名  
def func1():
def abc():
def do_it():2. 文档字符串的重要性
            
            
              python
              
              
            
          
          def process_data():
    """
    处理用户数据
    
    这个函数执行以下操作:
    1. 读取数据文件
    2. 清洗数据
    3. 计算统计信息
    4. 生成报告
    
    返回:
        dict: 包含处理结果的字典
    """
    # 函数实现...
    pass3. 代码缩进
            
            
              python
              
              
            
          
          # 正确的缩进
def correct_function():
    print("这一行有4个空格的缩进")
    print("这一行也有4个空格的缩进")
# 错误的缩进(会导致错误)
def wrong_function():
print("这一行没有缩进")  # 这会报错!
    print("这一行有缩进")三、调用函数------让函数真正工作起来
3.1 函数调用的基本原理
函数定义只是创建了函数,就像买了一台咖啡机放在厨房里。只有当你按下按钮(调用函数)时,咖啡机才会开始工作。
调用函数的语法:
函数名()调用过程详解:
- 
Python找到函数定义 
- 
跳转到函数体的第一行代码 
- 
按顺序执行函数体内的所有语句 
- 
遇到return语句或函数体结束,返回到调用位置 
- 
继续执行调用位置后面的代码 
3.2 不同类型的函数调用
1. 调用无返回值的函数
            
            
              python
              
              
            
          
          def display_welcome_message():
    """显示欢迎信息"""
    print("🌟" * 30)
    print("      欢迎使用学生管理系统")
    print("🌟" * 30)
    print("请选择您要执行的操作:")
    print("1. 添加学生")
    print("2. 查询学生")
    print("3. 删除学生")
# 调用函数
display_welcome_message()2. 调用有返回值的函数
            
            
              python
              
              
            
          
          def get_pi_value():
    """返回圆周率的近似值"""
    return 3.1415926
# 方式1:直接使用返回值
print(f"圆周率的值是: {get_pi_value()}")
# 方式2:保存返回值到变量
pi = get_pi_value()
print(f"使用变量存储的圆周率: {pi}")
# 方式3:在表达式中使用返回值
circle_length = 2 * get_pi_value() * 5
print(f"半径为5的圆周长: {circle_length}")3. 调用返回多个值的函数
            
            
              python
              
              
            
          
          def get_system_info():
    """返回系统信息"""
    os_name = "Windows 10"
    version = "21H2"
    architecture = "64位"
    return os_name, version, architecture
# 接收多个返回值
os, ver, arch = get_system_info()
print(f"操作系统: {os}")
print(f"版本: {ver}") 
print(f"架构: {arch}")
# 也可以用一个变量接收(得到元组)
all_info = get_system_info()
print(f"所有信息: {all_info}")3.3 函数调用的实际场景
场景1:组织程序流程
            
            
              python
              
              
            
          
          def initialize_system():
    """初始化系统"""
    print("正在加载配置文件...")
    print("正在连接数据库...")
    print("系统初始化完成!")
def load_user_data():
    """加载用户数据"""
    print("正在读取用户信息...")
    print("用户数据加载完成!")
    return ["用户1", "用户2", "用户3"]
def show_main_interface():
    """显示主界面"""
    print("\n=== 主界面 ===")
    print("1. 用户管理")
    print("2. 数据统计")
    print("3. 系统设置")
# 组织程序执行流程
print("程序启动中...")
initialize_system()
users = load_user_data()
show_main_interface()
print(f"当前在线用户: {len(users)}人")场景2:重复执行相同任务
            
            
              python
              
              
            
          
          def print_separator():
    """打印分隔线"""
    print("-" * 50)
def show_section_header(title):
    """显示章节标题"""
    print_separator()
    print(f"    {title}")
    print_separator()
# 在多个地方使用相同的格式
show_section_header("个人信息")
print("姓名: 张三")
print("年龄: 25")
show_section_header("教育背景") 
print("学校: 某某大学")
print("专业: 计算机科学")
show_section_header("工作经历")
print("公司: 科技公司")
print("职位: 软件工程师")四、函数的返回值------理解函数的输出机制
4.1 return语句的详细解析
return语句是函数与外部世界沟通的桥梁,它决定了函数执行后会产生什么结果。
return语句的作用:
- 
结束函数的执行 
- 
返回一个值给调用者 
- 
没有return或return后面没有值,函数返回None 
4.2 各种return情况的示例
情况1:没有return语句
            
            
              python
              
              
            
          
          def no_return_function():
    """这个函数没有return语句"""
    print("这个函数会执行打印操作")
    # 函数执行完自动返回None
result = no_return_function()
print(f"没有return的函数的返回值: {result}")  # 输出: None
print(f"返回值类型: {type(result)}")          # 输出: <class 'NoneType'>情况2:有return但没有值
            
            
              python
              
              
            
          
          def empty_return_function():
    """这个函数有return但没有返回值"""
    print("执行一些操作...")
    return  # 相当于 return None
result = empty_return_function()
print(f"空return的函数的返回值: {result}")  # 输出: None情况3:返回单个值
            
            
              python
              
              
            
          
          def get_current_temperature():
    """返回当前温度(模拟)"""
    return 25.5
temperature = get_current_temperature()
print(f"当前温度: {temperature}°C")情况4:返回多个值(实际上是返回元组)
            
            
              python
              
              
            
          
          def analyze_numbers(numbers):
    """分析数字列表,返回统计信息"""
    if not numbers:
        return 0, 0, 0  # 如果列表为空,返回默认值
    
    total = sum(numbers)
    average = total / len(numbers)
    maximum = max(numbers)
    
    return total, average, maximum
# 使用函数
scores = [85, 92, 78, 96, 88]
total_score, avg_score, max_score = analyze_numbers(scores)
print(f"总分: {total_score}")
print(f"平均分: {avg_score:.2f}")
print(f"最高分: {max_score}")4.3 return语句的特殊用法
提前返回(Early Return)
            
            
              python
              
              
            
          
          def check_eligibility(age, has_id):
    """检查是否具备资格"""
    # 如果年龄不够,立即返回
    if age < 18:
        return "年龄不符合要求"
    
    # 如果没有身份证,立即返回
    if not has_id:
        return "需要提供身份证"
    
    # 所有条件都满足
    return "符合资格,可以继续"
# 测试
print(check_eligibility(16, True))   # 输出: 年龄不符合要求
print(check_eligibility(20, False))  # 输出: 需要提供身份证
print(check_eligibility(20, True))   # 输出: 符合资格,可以继续条件返回
            
            
              python
              
              
            
          
          def get_grade_level(score):
    """根据分数返回等级"""
    if score >= 90:
        return "优秀"
    elif score >= 80:
        return "良好"
    elif score >= 70:
        return "中等"
    elif score >= 60:
        return "及格"
    else:
        return "不及格"
# 使用
score = 85
level = get_grade_level(score)
print(f"分数{score}对应的等级是: {level}")五、实战演示------综合应用案例
5.1 实战项目一:个人日记管理系统
让我们创建一个完整的日记管理系统,展示函数在实际项目中的应用:
            
            
              python
              
              
            
          
          # 个人日记管理系统
def display_system_header():
    """
    显示系统标题和欢迎信息
    """
    print("📖" * 40)
    print("           个人日记管理系统")
    print("📖" * 40)
    print("记录生活点滴,珍藏美好回忆")
def show_main_menu():
    """
    显示主菜单选项
    """
    print("\n" + "=" * 50)
    print("请选择操作:")
    print("1. 写新日记")
    print("2. 查看日记列表")
    print("3. 阅读日记")
    print("4. 系统信息")
    print("5. 退出系统")
    print("=" * 50)
def create_new_diary():
    """
    创建新日记
    """
    print("\n🎨 开始写新日记...")
    
    # 获取日记信息
    title = input("请输入日记标题: ")
    weather = input("请输入天气: ")
    mood = input("请输入心情: ")
    
    print("\n请输入日记内容(输入'END'结束):")
    content_lines = []
    while True:
        line = input()
        if line.upper() == 'END':
            break
        content_lines.append(line)
    
    content = '\n'.join(content_lines)
    
    # 创建日记对象
    diary = {
        'title': title,
        'weather': weather,
        'mood': mood,
        'content': content,
        'create_time': '2024-01-01 10:00:00'  # 模拟时间
    }
    
    print(f"\n✅ 日记 '{title}' 保存成功!")
    return diary
def display_diary_list(diaries):
    """
    显示日记列表
    """
    if not diaries:
        print("\n📭 还没有日记,快去写一篇吧!")
        return
    
    print(f"\n📚 我的日记本(共{len(diaries)}篇)")
    print("-" * 60)
    
    for i, diary in enumerate(diaries, 1):
        print(f"{i}. {diary['title']} - {diary['create_time']}")
        print(f"   天气: {diary['weather']} | 心情: {diary['mood']}")
def read_diary_detail(diary):
    """
    阅读日记详情
    """
    print("\n" + "📄" * 30)
    print(f"标题: {diary['title']}")
    print(f"时间: {diary['create_time']}")
    print(f"天气: {diary['weather']}")
    print(f"心情: {diary['mood']}")
    print("-" * 40)
    print("内容:")
    print(diary['content'])
    print("📄" * 30)
def show_system_info():
    """
    显示系统信息
    """
    print("\n" + "ℹ️ " * 15)
    print("系统信息:")
    print("版本: v1.0")
    print("作者: Python学习者")
    print("功能: 日记的创建、查看、管理")
    print("特点: 简单易用,保护隐私")
    print("ℹ️ " * 15)
def run_diary_system():
    """
    日记管理系统主函数
    """
    diaries = []  # 存储所有日记
    
    # 显示欢迎信息
    display_system_header()
    
    # 主循环
    while True:
        show_main_menu()
        choice = input("\n请输入您的选择 (1-5): ").strip()
        
        if choice == '1':
            # 写新日记
            new_diary = create_new_diary()
            diaries.append(new_diary)
            
        elif choice == '2':
            # 查看日记列表
            display_diary_list(diaries)
            
        elif choice == '3':
            # 阅读日记
            if not diaries:
                print("\n📭 还没有日记,无法阅读!")
                continue
                
            display_diary_list(diaries)
            try:
                diary_index = int(input("\n请选择要阅读的日记编号: ")) - 1
                if 0 <= diary_index < len(diaries):
                    read_diary_detail(diaries[diary_index])
                else:
                    print("❌ 编号无效!")
            except ValueError:
                print("❌ 请输入有效的数字!")
                
        elif choice == '4':
            # 显示系统信息
            show_system_info()
            
        elif choice == '5':
            # 退出系统
            print("\n感谢使用个人日记管理系统!")
            print("再见!👋")
            break
            
        else:
            print("❌ 无效的选择,请重新输入!")
# 启动系统
if __name__ == "__main__":
    run_diary_system()5.2 实战项目二:简易银行账户系统
            
            
              python
              
              
            
          
          # 简易银行账户系统
def display_bank_header():
    """
    显示银行系统标题
    """
    print("🏦" * 35)
    print("           简易银行账户系统")
    print("🏦" * 35)
def show_bank_menu():
    """
    显示银行菜单
    """
    print("\n请选择操作:")
    print("1. 开户")
    print("2. 存款")
    print("3. 取款")
    print("4. 查询余额")
    print("5. 查看交易记录")
    print("6. 退出系统")
def create_account(accounts):
    """
    创建新账户
    """
    print("\n=== 开户流程 ===")
    
    account_name = input("请输入账户名称: ")
    initial_deposit = float(input("请输入初始存款金额: "))
    
    # 生成账户ID(简单模拟)
    account_id = f"ACC{len(accounts) + 1:04d}"
    
    # 创建账户信息
    account = {
        'id': account_id,
        'name': account_name,
        'balance': initial_deposit,
        'transactions': [
            f"开户存入: {initial_deposit:.2f}元"
        ]
    }
    
    accounts[account_id] = account
    print(f"\n✅ 开户成功!")
    print(f"账户ID: {account_id}")
    print(f"账户名: {account_name}")
    print(f"初始余额: {initial_deposit:.2f}元")
    
    return account_id
def deposit_money(accounts):
    """
    存款操作
    """
    print("\n=== 存款操作 ===")
    
    if not accounts:
        print("❌ 还没有任何账户,请先开户!")
        return
    
    account_id = input("请输入账户ID: ")
    
    if account_id not in accounts:
        print("❌ 账户不存在!")
        return
    
    amount = float(input("请输入存款金额: "))
    
    if amount <= 0:
        print("❌ 存款金额必须大于0!")
        return
    
    # 更新余额和交易记录
    accounts[account_id]['balance'] += amount
    accounts[account_id]['transactions'].append(f"存款: +{amount:.2f}元")
    
    print(f"\n✅ 存款成功!")
    print(f"存入金额: {amount:.2f}元")
    print(f"当前余额: {accounts[account_id]['balance']:.2f}元")
def withdraw_money(accounts):
    """
    取款操作
    """
    print("\n=== 取款操作 ===")
    
    if not accounts:
        print("❌ 还没有任何账户,请先开户!")
        return
    
    account_id = input("请输入账户ID: ")
    
    if account_id not in accounts:
        print("❌ 账户不存在!")
        return
    
    amount = float(input("请输入取款金额: "))
    
    if amount <= 0:
        print("❌ 取款金额必须大于0!")
        return
    
    if amount > accounts[account_id]['balance']:
        print("❌ 余额不足!")
        return
    
    # 更新余额和交易记录
    accounts[account_id]['balance'] -= amount
    accounts[account_id]['transactions'].append(f"取款: -{amount:.2f}元")
    
    print(f"\n✅ 取款成功!")
    print(f"取出金额: {amount:.2f}元")
    print(f"当前余额: {accounts[account_id]['balance']:.2f}元")
def check_balance(accounts):
    """
    查询余额
    """
    print("\n=== 余额查询 ===")
    
    if not accounts:
        print("❌ 还没有任何账户,请先开户!")
        return
    
    account_id = input("请输入账户ID: ")
    
    if account_id not in accounts:
        print("❌ 账户不存在!")
        return
    
    account = accounts[account_id]
    print(f"\n账户信息:")
    print(f"账户ID: {account['id']}")
    print(f"账户名: {account['name']}")
    print(f"当前余额: {account['balance']:.2f}元")
def show_transactions(accounts):
    """
    显示交易记录
    """
    print("\n=== 交易记录 ===")
    
    if not accounts:
        print("❌ 还没有任何账户,请先开户!")
        return
    
    account_id = input("请输入账户ID: ")
    
    if account_id not in accounts:
        print("❌ 账户不存在!")
        return
    
    account = accounts[account_id]
    print(f"\n账户: {account['name']} ({account['id']})")
    print("交易记录:")
    print("-" * 30)
    
    for i, transaction in enumerate(account['transactions'], 1):
        print(f"{i}. {transaction}")
def run_bank_system():
    """
    银行系统主函数
    """
    accounts = {}  # 存储所有账户
    
    display_bank_header()
    
    while True:
        show_bank_menu()
        choice = input("\n请输入您的选择 (1-6): ").strip()
        
        if choice == '1':
            create_account(accounts)
        elif choice == '2':
            deposit_money(accounts)
        elif choice == '3':
            withdraw_money(accounts)
        elif choice == '4':
            check_balance(accounts)
        elif choice == '5':
            show_transactions(accounts)
        elif choice == '6':
            print("\n感谢使用简易银行系统!")
            print("再见!💰")
            break
        else:
            print("❌ 无效的选择,请重新输入!")
# 启动银行系统
if __name__ == "__main__":
    run_bank_system()六、函数的最佳实践和编程习惯
6.1 编写高质量函数的指导原则
1. 单一职责原则
            
            
              python
              
              
            
          
          # 好的例子:每个函数只做一件事
def calculate_total_price(price, quantity):
    """计算总价格"""
    return price * quantity
def apply_discount(total, discount_rate):
    """应用折扣"""
    return total * (1 - discount_rate)
def format_currency(amount):
    """格式化货币显示"""
    return f"¥{amount:.2f}"
# 不好的例子:一个函数做太多事情
def process_order_bad(price, quantity, discount_rate):
    """不好的设计:一个函数做太多事情"""
    total = price * quantity
    discounted = total * (1 - discount_rate)
    formatted = f"¥{discounted:.2f}"
    print(formatted)
    return discounted2. 有意义的函数名
            
            
              python
              
              
            
          
          # 好的命名
def calculate_monthly_salary():
def validate_user_input():
def send_email_notification():
# 不好的命名
def calc():          # 太简略
def do_thing():      # 不明确
def function1():     # 无意义3. 适当的函数长度
            
            
              python
              
              
            
          
          # 好的设计:函数较短,职责明确
def process_user_registration():
    """处理用户注册流程"""
    user_data = collect_user_info()
    if validate_user_data(user_data):
        save_user_to_database(user_data)
        send_welcome_email(user_data)
        return True
    return False
# 每个子函数都有明确职责
def collect_user_info():
    """收集用户信息"""
    # 具体实现...
def validate_user_data(data):
    """验证用户数据"""
    # 具体实现...
def save_user_to_database(data):
    """保存用户到数据库"""
    # 具体实现...
def send_welcome_email(data):
    """发送欢迎邮件"""
    # 具体实现...6.2 文档字符串和注释的规范
完整的文档字符串示例:
            
            
              python
              
              
            
          
          def calculate_compound_interest(principal, rate, time, compound_frequency):
    """
    计算复利
    
    根据本金、年利率、投资时间和复利频率计算最终金额。
    
    参数:
        principal (float): 本金金额,必须大于0
        rate (float): 年利率,以小数表示(如0.05表示5%)
        time (float): 投资时间,以年为单位
        compound_frequency (int): 年复利次数(如12表示月复利)
    
    返回:
        float: 投资期满后的总金额
        
    抛出:
        ValueError: 如果参数不合法
        
    示例:
        >>> calculate_compound_interest(1000, 0.05, 2, 12)
        1104.89
    """
    # 参数验证
    if principal <= 0:
        raise ValueError("本金必须大于0")
    if rate <= 0:
        raise ValueError("利率必须大于0")
    if time <= 0:
        raise ValueError("投资时间必须大于0")
    if compound_frequency <= 0:
        raise ValueError("复利频率必须大于0")
    
    # 计算复利
    amount = principal * (1 + rate/compound_frequency) ** (compound_frequency * time)
    return round(amount, 2)6.3 错误处理和输入验证
            
            
              python
              
              
            
          
          def safe_divide(numerator, denominator):
    """
    安全的除法运算
    
    参数:
        numerator (float): 分子
        denominator (float): 分母
        
    返回:
        float: 除法结果,如果分母为0返回None
    """
    # 输入验证
    if not isinstance(numerator, (int, float)) or not isinstance(denominator, (int, float)):
        print("错误:参数必须是数字")
        return None
    
    # 业务逻辑验证
    if denominator == 0:
        print("错误:分母不能为0")
        return None
    
    # 执行计算
    result = numerator / denominator
    return result
# 测试各种情况
print(safe_divide(10, 2))      # 正常情况
print(safe_divide(10, 0))      # 除零情况
print(safe_divide(10, "2"))    # 类型错误情况七、每日一题:简单电影管理系统
题目要求
创建一个简单的电影管理系统,要求实现以下基本功能:
系统功能需求
1. 电影信息管理
- 
每部电影包含:电影名称、导演、主演、上映年份、评分、类型 
- 
能够添加新电影到系统 
- 
能够显示所有电影信息 
2. 电影查询功能
- 
按电影名称查询 
- 
按导演查询 
- 
按类型查询 
- 
显示高评分电影(评分≥8.0) 
3. 电影推荐功能
- 
随机推荐一部电影 
- 
根据类型推荐电影 
技术要求
必须使用函数实现以下功能:
- 
display_system_header()- 显示系统标题和欢迎信息
- 
show_main_menu()- 显示主菜单选项
- 
add_new_movie(movies)- 添加新电影到系统
- 
display_all_movies(movies)- 显示所有电影信息
- 
search_movies(movies)- 搜索电影(按名称、导演、类型)
- 
show_high_rated_movies(movies)- 显示高评分电影
- 
recommend_movie(movies)- 推荐电影功能
- 
main()- 主函数,组织整个系统流程
数据结构建议
            
            
              python
              
              
            
          
          # 每部电影用字典表示
movie = {
    'title': '肖申克的救赎',
    'director': '弗兰克·德拉邦特',
    'actors': ['蒂姆·罗宾斯', '摩根·弗里曼'],
    'year': 1994,
    'rating': 9.7,
    'genre': '剧情'
}
# 所有电影存储在列表中
movies = [movie1, movie2, movie3, ...]界面要求
- 
有清晰的菜单界面 
- 
用户友好的输入提示 
- 
美观的信息显示格式 
- 
适当的错误处理 
示例交互
            
            
              python
              
              
            
          
          🎬 ================================= 🎬
           简单电影管理系统
🎬 ================================= 🎬
请选择操作:
1. 添加新电影
2. 显示所有电影
3. 搜索电影
4. 显示高评分电影
5. 电影推荐
6. 退出系统
请输入您的选择 (1-6): 评分标准
基础要求(必须完成):
- 
所有功能都使用函数实现 
- 
能够添加和显示电影 
- 
实现基本的搜索功能 
- 
有清晰的用户界面 
进阶要求(加分项):
- 
实现电影推荐功能 
- 
添加数据验证(如评分范围0-10) 
- 
实现电影删除或修改功能 
- 
添加电影收藏功能 
- 
将数据保存到文件 
提示
- 
函数设计:每个函数应该只负责一个明确的任务 
- 
错误处理:考虑用户输入错误的情况 
- 
用户体验:提供清晰的操作指引和反馈 
- 
代码结构:使用有意义的变量名和函数名 
- 
数据验证:确保输入的数据格式正确 
示例电影数据(用于测试)
            
            
              python
              
              
            
          
          # 可以预先添加一些电影数据用于测试
sample_movies = [
    {
        'title': '肖申克的救赎',
        'director': '弗兰克·德拉邦特',
        'actors': ['蒂姆·罗宾斯', '摩根·弗里曼'],
        'year': 1994,
        'rating': 9.7,
        'genre': '剧情'
    },
    {
        'title': '阿甘正传',
        'director': '罗伯特·泽米吉斯', 
        'actors': ['汤姆·汉克斯', '罗宾·怀特'],
        'year': 1994,
        'rating': 9.5,
        'genre': '剧情'
    }
]请根据上述要求,使用今天学习的函数知识完成这个电影管理系统的开发。注意代码的结构和可读性,确保每个函数都有明确的职责!
八、结语
今天的函数之旅就到这里啦!希望这些内容能帮你把函数的迷雾拨开,看到编程的美妙之处。🎉
说实话,写教程是件挺费心思的事情------要想着怎么讲你们才容易懂,怎么写例子你们才容易练。但每次想到能帮到正在学习的你们,就觉得特别值得!
如果你觉得今天的内容对你有帮助,或者喜欢我这种"不端不装"的讲解风格:
- 
博客关注走一波~那里是我的技术自留地,有更多干货等着你 
- 
专栏订阅也别错过!这个Python全栈系列会持续更新,从入门到实战,我陪你一起成长 
学习编程就像打怪升级,有时候会卡关,有时候会迷茫,但坚持下去,你一定能看到自己的进步!有什么问题随时来博客找我,我看到都会回复的。
下篇博文见啦,继续加油!