Python全栈(基础篇)——Day06:后端内容(定义函数+调用函数+实战演示+每日一题)
目录
一、什么是函数?——深入理解函数的概念
1.1 函数的基本概念详解
1.2 为什么函数如此重要?
1.3 函数的四大优势
二、定义函数——从零开始创建函数
2.1 函数定义的完整语法结构
2.2 函数定义的实际示例
2.3 函数定义的注意事项
三、调用函数——让函数真正工作起来
3.1 函数调用的基本原理
3.2 不同类型的函数调用
3.3 函数调用的实际场景
四、函数的返回值——理解函数的输出机制
4.1 return语句的详细解析
4.2 各种return情况的示例
4.3 return语句的特殊用法
五、实战演示——综合应用案例
5.1 实战项目一:个人日记管理系统
5.2 实战项目二:简易银行账户系统
六、函数的最佳实践和编程习惯
6.1 编写高质量函数的指导原则
6.2 文档字符串和注释的规范
6.3 错误处理和输入验证
七、每日一题:简单电影管理系统
题目要求
系统功能需求
技术要求
数据结构建议
界面要求
示例交互
评分标准
提示
示例电影数据(用于测试)
八、结语
嘿,朋友们!👋
我是你们的学习伙伴,一个热爱编程、喜欢把复杂技术讲简单的普通开发者。在写这些教程的时候,我总是在想:怎么才能让你们学得更轻松、更有趣呢?
如果你觉得我的讲解方式对你有帮助,或者喜欢我这种"不装高深、只说人话"的风格,欢迎来我的小窝坐坐~
我的技术博客:python全栈蛇行者-CSDN博客那里有更多精心整理的学习笔记、实战项目,还有我在学习中踩过的坑和总结的经验。
专栏订阅也不容错过哦!我会持续更新这个Python全栈系列,从基础到实战,手把手带你走进编程的世界。订阅之后,新文章会第一时间推送到你面前,再也不用担心错过精彩内容啦!
好啦,唠叨完毕,让我们开始今天的学习吧!
一、什么是函数?——深入理解函数的概念
1.1 函数的基本概念详解
函数是编程中最重要的概念之一,它是组织代码的基本单元。让我们用一个更加生活化的方式来理解函数。
想象一下日常生活中的场景:
-
咖啡机:你只需要按下按钮,咖啡机就会自动完成磨豆、加热、冲泡等一系列复杂操作,最终给你一杯香浓的咖啡。你不需要知道内部如何工作,只需要知道按哪个按钮得到什么结果。
-
快递服务:你告诉快递员收件地址和寄件地址,快递员就会完成取件、运输、派送的整个过程。你不需要关心具体走哪条路线、用什么交通工具。
在编程中,函数就是这样的"黑盒子":
-
输入 → 处理 → 输出
-
你只需要知道给函数什么(输入),它会返回什么(输出)
-
不需要关心函数内部是如何实现的
1.2 为什么函数如此重要?
让我们通过对比来理解函数的价值:
没有函数的情况:
# 计算三个圆的面积,没有使用函数
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}")
使用函数的情况:
def calculate_circle_area(radius):"""计算圆的面积"""area = 3.14 * radius * radiusreturn 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 函数定义的完整语法结构
def 函数名(参数列表):"""文档字符串(描述函数功能)"""函数体代码块return 返回值
让我们详细分解每个部分:
def关键字
-
必须的关键字,告诉Python"我要定义一个函数"
-
类似于说"我要创建一个新的工具"
函数名
-
函数的名称,要遵循标识符命名规则
-
应该使用小写字母,单词间用下划线分隔
-
要有描述性,让人一看就知道函数做什么
-
好的例子:
calculate_area
,get_user_info
-
不好的例子:
func1
,abc
,do_something
括号和参数
-
括号是必须的,即使没有参数也要写空括号
-
参数是函数的输入,今天我们先学习无参数函数
冒号
-
非常重要的符号,表示函数定义的开始
-
忘记冒号是初学者常见错误
文档字符串
-
用三引号包围的字符串,描述函数功能
-
不是必须的,但强烈推荐使用
-
可以通过
函数名.__doc__
访问
函数体
-
缩进的代码块,实现函数的具体功能
-
Python使用缩进来标识代码块,通常用4个空格
return语句
-
用于返回函数的结果
-
不是必须的,没有return的函数返回None
-
遇到return语句,函数立即结束执行
2.2 函数定义的实际示例
让我们通过多个例子来深入理解函数定义:
示例1:最简单的函数
def say_hello():"""这个函数用于向世界打招呼"""print("Hello, World!")print("欢迎来到Python编程世界!")
示例2:执行特定任务的函数
def show_current_time():"""显示当前时间信息(模拟)"""print("当前时间:2024年1月1日 10:30:00")print("今天是星期一")print("天气:晴朗")
示例3:计算型函数
def calculate_rectangle_area():"""计算矩形的面积(使用固定值)"""length = 10width = 5area = length * widthprint(f"长为{length},宽为{width}的矩形面积是:{area}")return area
示例4:返回多个值的函数
def get_student_info():"""返回学生信息"""name = "张三"age = 18grade = "三年级"score = 95.5return name, age, grade, score
2.3 函数定义的注意事项
1. 命名规范
# 好的命名
def calculate_total_price():
def get_user_name():
def validate_email_format():
# 不好的命名
def func1():
def abc():
def do_it():
2. 文档字符串的重要性
def process_data():"""处理用户数据这个函数执行以下操作:1. 读取数据文件2. 清洗数据3. 计算统计信息4. 生成报告返回:dict: 包含处理结果的字典"""# 函数实现...pass
3. 代码缩进
# 正确的缩进
def correct_function():print("这一行有4个空格的缩进")print("这一行也有4个空格的缩进")
# 错误的缩进(会导致错误)
def wrong_function():
print("这一行没有缩进") # 这会报错!print("这一行有缩进")
三、调用函数——让函数真正工作起来
3.1 函数调用的基本原理
函数定义只是创建了函数,就像买了一台咖啡机放在厨房里。只有当你按下按钮(调用函数)时,咖啡机才会开始工作。
调用函数的语法:
函数名()
调用过程详解:
-
Python找到函数定义
-
跳转到函数体的第一行代码
-
按顺序执行函数体内的所有语句
-
遇到return语句或函数体结束,返回到调用位置
-
继续执行调用位置后面的代码
3.2 不同类型的函数调用
1. 调用无返回值的函数
def display_welcome_message():"""显示欢迎信息"""print("🌟" * 30)print(" 欢迎使用学生管理系统")print("🌟" * 30)print("请选择您要执行的操作:")print("1. 添加学生")print("2. 查询学生")print("3. 删除学生")
# 调用函数
display_welcome_message()
2. 调用有返回值的函数
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. 调用返回多个值的函数
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:组织程序流程
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:重复执行相同任务
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语句
def no_return_function():"""这个函数没有return语句"""print("这个函数会执行打印操作")# 函数执行完自动返回None
result = no_return_function()
print(f"没有return的函数的返回值: {result}") # 输出: None
print(f"返回值类型: {type(result)}") # 输出: <class 'NoneType'>
情况2:有return但没有值
def empty_return_function():"""这个函数有return但没有返回值"""print("执行一些操作...")return # 相当于 return None
result = empty_return_function()
print(f"空return的函数的返回值: {result}") # 输出: None
情况3:返回单个值
def get_current_temperature():"""返回当前温度(模拟)"""return 25.5
temperature = get_current_temperature()
print(f"当前温度: {temperature}°C")
情况4:返回多个值(实际上是返回元组)
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)
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)) # 输出: 符合资格,可以继续
条件返回
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 实战项目一:个人日记管理系统
让我们创建一个完整的日记管理系统,展示函数在实际项目中的应用:
# 个人日记管理系统
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':breakcontent_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📭 还没有日记,快去写一篇吧!")returnprint(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📭 还没有日记,无法阅读!")continuedisplay_diary_list(diaries)try:diary_index = int(input("\n请选择要阅读的日记编号: ")) - 1if 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("再见!👋")breakelse:print("❌ 无效的选择,请重新输入!")
# 启动系统
if __name__ == "__main__":run_diary_system()
5.2 实战项目二:简易银行账户系统
# 简易银行账户系统
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] = accountprint(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("❌ 还没有任何账户,请先开户!")returnaccount_id = input("请输入账户ID: ")if account_id not in accounts:print("❌ 账户不存在!")returnamount = float(input("请输入存款金额: "))if amount <= 0:print("❌ 存款金额必须大于0!")return# 更新余额和交易记录accounts[account_id]['balance'] += amountaccounts[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("❌ 还没有任何账户,请先开户!")returnaccount_id = input("请输入账户ID: ")if account_id not in accounts:print("❌ 账户不存在!")returnamount = float(input("请输入取款金额: "))if amount <= 0:print("❌ 取款金额必须大于0!")returnif amount > accounts[account_id]['balance']:print("❌ 余额不足!")return# 更新余额和交易记录accounts[account_id]['balance'] -= amountaccounts[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("❌ 还没有任何账户,请先开户!")returnaccount_id = input("请输入账户ID: ")if account_id not in accounts:print("❌ 账户不存在!")returnaccount = 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("❌ 还没有任何账户,请先开户!")returnaccount_id = input("请输入账户ID: ")if account_id not in accounts:print("❌ 账户不存在!")returnaccount = 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("再见!💰")breakelse:print("❌ 无效的选择,请重新输入!")
# 启动银行系统
if __name__ == "__main__":run_bank_system()
六、函数的最佳实践和编程习惯
6.1 编写高质量函数的指导原则
1. 单一职责原则
# 好的例子:每个函数只做一件事
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 * quantitydiscounted = total * (1 - discount_rate)formatted = f"¥{discounted:.2f}"print(formatted)return discounted
2. 有意义的函数名
# 好的命名
def calculate_monthly_salary():
def validate_user_input():
def send_email_notification():
# 不好的命名
def calc(): # 太简略
def do_thing(): # 不明确
def function1(): # 无意义
3. 适当的函数长度
# 好的设计:函数较短,职责明确
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 Truereturn False
# 每个子函数都有明确职责
def collect_user_info():"""收集用户信息"""# 具体实现...
def validate_user_data(data):"""验证用户数据"""# 具体实现...
def save_user_to_database(data):"""保存用户到数据库"""# 具体实现...
def send_welcome_email(data):"""发送欢迎邮件"""# 具体实现...
6.2 文档字符串和注释的规范
完整的文档字符串示例:
def calculate_compound_interest(principal, rate, time, compound_frequency):"""计算复利根据本金、年利率、投资时间和复利频率计算最终金额。参数:principal (float): 本金金额,必须大于0rate (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 错误处理和输入验证
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 / denominatorreturn 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()
- 主函数,组织整个系统流程
数据结构建议
# 每部电影用字典表示
movie = {'title': '肖申克的救赎','director': '弗兰克·德拉邦特','actors': ['蒂姆·罗宾斯', '摩根·弗里曼'],'year': 1994,'rating': 9.7,'genre': '剧情'
}
# 所有电影存储在列表中
movies = [movie1, movie2, movie3, ...]
界面要求
-
有清晰的菜单界面
-
用户友好的输入提示
-
美观的信息显示格式
-
适当的错误处理
示例交互
🎬 ================================= 🎬简单电影管理系统
🎬 ================================= 🎬请选择操作:
1. 添加新电影
2. 显示所有电影
3. 搜索电影
4. 显示高评分电影
5. 电影推荐
6. 退出系统请输入您的选择 (1-6):
评分标准
基础要求(必须完成):
-
所有功能都使用函数实现
-
能够添加和显示电影
-
实现基本的搜索功能
-
有清晰的用户界面
进阶要求(加分项):
-
实现电影推荐功能
-
添加数据验证(如评分范围0-10)
-
实现电影删除或修改功能
-
添加电影收藏功能
-
将数据保存到文件
提示
-
函数设计:每个函数应该只负责一个明确的任务
-
错误处理:考虑用户输入错误的情况
-
用户体验:提供清晰的操作指引和反馈
-
代码结构:使用有意义的变量名和函数名
-
数据验证:确保输入的数据格式正确
示例电影数据(用于测试)
# 可以预先添加一些电影数据用于测试
sample_movies = [{'title': '肖申克的救赎','director': '弗兰克·德拉邦特','actors': ['蒂姆·罗宾斯', '摩根·弗里曼'],'year': 1994,'rating': 9.7,'genre': '剧情'},{'title': '阿甘正传','director': '罗伯特·泽米吉斯', 'actors': ['汤姆·汉克斯', '罗宾·怀特'],'year': 1994,'rating': 9.5,'genre': '剧情'}
]
请根据上述要求,使用今天学习的函数知识完成这个电影管理系统的开发。注意代码的结构和可读性,确保每个函数都有明确的职责!
八、结语
今天的函数之旅就到这里啦!希望这些内容能帮你把函数的迷雾拨开,看到编程的美妙之处。🎉
说实话,写教程是件挺费心思的事情——要想着怎么讲你们才容易懂,怎么写例子你们才容易练。但每次想到能帮到正在学习的你们,就觉得特别值得!
如果你觉得今天的内容对你有帮助,或者喜欢我这种"不端不装"的讲解风格:
-
博客关注走一波~那里是我的技术自留地,有更多干货等着你
-
专栏订阅也别错过!这个Python全栈系列会持续更新,从入门到实战,我陪你一起成长
学习编程就像打怪升级,有时候会卡关,有时候会迷茫,但坚持下去,你一定能看到自己的进步!有什么问题随时来博客找我,我看到都会回复的。
下篇博文见啦,继续加油!