大家好!今天我们要聊Python中的三个重要概念:字典函数异常处理

如果你觉得这些名词听起来像天书,别慌!看完这篇文章,你会发现它们其实就像:

  • 字典 = 你手机的通讯录(找张三直接打电话,不用翻遍所有联系人)

  • 函数 = 冰箱里的速冻水饺(饿的时候煮一包,不用每次都从和面开始)

  • 异常处理 = 给代码穿上“防弹衣”(就算出错了也不会当场爆炸)

是不是瞬间亲切多了?那咱们开始吧!


第一部分:字典——Python里的“万能通讯录”

1.1 什么是字典?

先来看一个生活场景:

你妈让你去买菜:“土豆3斤,西红柿2斤,鸡蛋1盒”

如果用Python列表来记录:

python

shopping_list = ["土豆", 3, "西红柿", 2, "鸡蛋", 1]
# 问题来了:哪个是商品?哪个是数量?完全分不清!

如果用字典来记录:

python

shopping_dict = {"土豆": 3, "西红柿": 2, "鸡蛋": 1}
# 一目了然:商品 ➔ 数量,清清楚楚!

字典的格式就是:{键: 值, 键: 值, ...}
键(key)就像是标签,值(value)就是内容。通过标签就能快速找到内容。

1.2 字典的增删改查

咱们创建一个游戏角色字典:

python

# 创建一个角色
hero = {
    "name": "剑圣",
    "level": 10,
    "hp": 100,
    "skills": ["旋风斩", "致命一击"]
}

print(hero["name"])  # 输出:剑圣

:通过键来获取值

python

print(hero["level"])  # 输出:10
print(hero.get("mp", 0))  # 更安全的方式,如果没有"mp"键,返回0

:添加新的键值对

python

hero["mp"] = 50  # 增加魔法值
print(hero)  # 现在多了 "mp": 50

:修改已有的值

python

hero["level"] = 11  # 升级啦!
print(hero["level"])  # 输出:11

:删除某个键值对

python

del hero["mp"]  # 删除魔法值
# 或者
hero.pop("hp", None)  # 删除生命值,如果不存在就返回None

1.3 字典的常用操作

python

# 遍历字典的所有键值对
for key, value in hero.items():
    print(f"{key}: {value}")

# 只获取所有键
for key in hero.keys():
    print(key)

# 只获取所有值
for value in hero.values():
    print(value)

# 检查键是否存在
if "name" in hero:
    print("这个英雄有名字!")

小幽默时间
字典就像你女朋友的购物车——想找什么直接搜关键词,别一个一个翻,会被骂的!🙈


第二部分:函数——你的代码“懒人包”

2.1 为什么要用函数?

想象一下这个场景:

你要计算三次圆的面积,每次都写 3.14 * r * r,写了三遍。
更惨的是,突然发现π应该用3.14159,你得把三处都改一遍!

这就是没有函数的痛苦。

有了函数,你只需要:

python

def circle_area(r):
    """计算圆的面积"""
    pi = 3.14159
    return pi * r * r

# 使用三次
area1 = circle_area(5)
area2 = circle_area(10)
area3 = circle_area(2.5)

如果要改π值,只需要改函数内部一行代码!

2.2 函数的定义和调用

python

def greet(name):
    """打招呼函数"""
    return f"你好,{name}!今天也要写代码吗?"

# 调用函数
message = greet("小明")
print(message)  # 输出:你好,小明!今天也要写代码吗?

语法拆解

  • def:告诉Python,我要定义一个函数啦!

  • greet:函数名,自己起(见名知意就行)

  • (name):参数,就像函数的“输入”

  • return:返回值,就像函数的“输出”

  • 函数体:缩进的代码块,就是函数要干的事情

2.3 参数的各种玩法

1. 默认参数(给参数提前设好值)

python

def make_coffee(coffee_type="美式"):
    return f"给您一杯{coffee_type}咖啡"

print(make_coffee())  # 输出:给您一杯美式咖啡
print(make_coffee("拿铁"))  # 输出:给您一杯拿铁咖啡

2. 关键字参数(调用时指定参数名)

python

def introduce(name, age, city):
    return f"{name}今年{age}岁,来自{city}"

# 可以不按顺序传参
print(introduce(city="北京", name="小红", age=18))

3. 可变参数(不知道会传几个参数)

python

def sum_all(*numbers):
    """计算任意多个数的和"""
    return sum(numbers)

print(sum_all(1, 2, 3))  # 输出:6
print(sum_all(10, 20, 30, 40))  # 输出:100

2.4 作用域——变量也有“地盘”

python

x = 10  # 全局变量

def test():
    y = 20  # 局部变量,只能在函数内部用
    global x  # 声明要用全局的x
    x = 30  # 修改全局变量
    
test()
print(x)  # 输出:30
# print(y)  # 报错!y在函数外面访问不到

小幽默时间
函数就像你妈——你需要什么跟她说(传参数),她给你结果(返回值),但她的私房钱(局部变量)你是找不到的!🤣


第三部分:异常处理——给代码穿上“防弹衣”

3.1 没有异常处理的惨状

先看一个“脆弱的代码”:

python

num = int(input("请输入一个数字:"))
result = 10 / num
print(f"10除以{num}等于{result}")

如果用户输入:

  • 2:完美运行

  • 0ZeroDivisionError — 除以0了,程序崩溃!

  • abcValueError — 无法转换成数字,程序崩溃!

用户一个不小心,你的程序就挂了。这就像盖房子没装避雷针——打雷就塌!

3.2 try-except——拯救代码的神器

python

try:
    num = int(input("请输入一个数字:"))
    result = 10 / num
    print(f"10除以{num}等于{result}")
except ValueError:
    print("错误:请输入一个数字,不是文字!")
except ZeroDivisionError:
    print("错误:不能除以0!数学老师会生气的!")
except Exception as e:
    print(f"未知错误:{e}")

现在无论用户怎么作死,程序都不会崩溃,会友好地提示错误!

3.3 异常处理的完整结构

python

try:
    # 可能会出错的代码
    file = open("data.txt", "r")
    content = file.read()
    number = int(content)
    result = 100 / number
    
except FileNotFoundError:
    print("文件没找到,请检查文件名")
except ValueError:
    print("文件内容不是数字")
except ZeroDivisionError:
    print("数字不能是0")
else:
    # 没有异常时执行
    print(f"计算结果是:{result}")
finally:
    # 无论有没有异常都会执行
    print("程序执行完毕")
    if 'file' in locals():
        file.close()  # 确保文件被关闭

各个部分的作用

  • try:放有风险的代码

  • except:捕获并处理特定异常

  • else:没有异常时执行

  • finally:无论怎样都会执行(适合做清理工作)

3.4 主动抛出异常——raise

有时候我们需要主动制造“意外”:

python

def withdraw(balance, amount):
    if amount > balance:
        raise ValueError(f"余额不足!当前余额:{balance},想取{amount}?")
    return balance - amount

try:
    new_balance = withdraw(100, 200)
except ValueError as e:
    print(f"取款失败:{e}")

小幽默时间
异常处理就像给代码买了保险——平时用不上,用上的时候你就知道多香了!
用户是上帝,但上帝也经常输错密码啊!👼


第四部分:三个概念结合起来——做个简单的“学生成绩管理系统”

让我们把字典、函数、异常处理结合起来,做个好玩的小程序:

python

def show_menu():
    """显示菜单"""
    print("\n=== 学生成绩管理系统 ===")
    print("1. 添加学生")
    print("2. 查看学生")
    print("3. 修改成绩")
    print("4. 删除学生")
    print("5. 退出")
    print("=======================")

def add_student(students):
    """添加学生"""
    try:
        name = input("请输入学生姓名:").strip()
        if not name:
            raise ValueError("姓名不能为空!")
        
        score = float(input("请输入成绩:"))
        if score < 0 or score > 100:
            raise ValueError("成绩应该在0-100之间!")
        
        students[name] = score
        print(f"✅ 成功添加学生:{name},成绩:{score}")
        
    except ValueError as e:
        print(f"❌ 添加失败:{e}")

def show_students(students):
    """查看所有学生"""
    if not students:
        print("📭 暂无学生数据")
        return
    
    print("\n学生名单:")
    print("-" * 30)
    for name, score in students.items():
        # 根据成绩给出评价
        if score >= 90:
            grade = "优秀"
        elif score >= 60:
            grade = "及格"
        else:
            grade = "不及格"
        print(f"{name}:{score}分 ({grade})")
    print("-" * 30)
    print(f"共 {len(students)} 名学生")

def update_score(students):
    """修改成绩"""
    name = input("请输入要修改的学生姓名:")
    if name not in students:
        print(f"❌ 学生 {name} 不存在!")
        return
    
    try:
        new_score = float(input("请输入新成绩:"))
        if new_score < 0 or new_score > 100:
            raise ValueError("成绩应该在0-100之间!")
        
        students[name] = new_score
        print(f"✅ 已将 {name} 的成绩修改为 {new_score}")
        
    except ValueError as e:
        print(f"❌ 修改失败:{e}")

def delete_student(students):
    """删除学生"""
    name = input("请输入要删除的学生姓名:")
    if name not in students:
        print(f"❌ 学生 {name} 不存在!")
        return
    
    confirm = input(f"确定要删除 {name} 吗?(y/n):")
    if confirm.lower() == 'y':
        del students[name]
        print(f"✅ 已删除学生:{name}")
    else:
        print("已取消删除")

def main():
    """主程序"""
    students = {}  # 用字典存储学生信息
    print("🎉 欢迎使用学生成绩管理系统!")
    
    while True:
        show_menu()
        choice = input("请选择操作:")
        
        if choice == '1':
            add_student(students)
        elif choice == '2':
            show_students(students)
        elif choice == '3':
            update_score(students)
        elif choice == '4':
            delete_student(students)
        elif choice == '5':
            print("👋 谢谢使用,再见!")
            break
        else:
            print("❌ 无效选择,请输入1-5!")
        
        input("\n按回车键继续...")  # 暂停一下

# 启动程序
if __name__ == "__main__":
    main()

这个例子涵盖了

  • ✅ 字典:存储学生姓名和成绩

  • ✅ 函数:每个功能独立封装

  • ✅ 异常处理:处理输入错误、成绩范围等


总结

今天我们学习了Python三个重要的概念:

概念 核心作用 记忆口诀
字典 键值对存储,快速查找 查字典,找标签,键找值,真方便
函数 代码封装,重复使用 定义用def,调用写名字,参数往里传,return返回值
异常处理 错误捕获,程序不崩 try里试水,except兜底,finally善后
Logo

这里是“一人公司”的成长家园。我们提供从产品曝光、技术变现到法律财税的全栈内容,并连接云服务、办公空间等稀缺资源,助你专注创造,无忧运营。

更多推荐