第23天python内容

Day 3:函数与参数传递核心知识(必背版)

📌 今日目标

掌握函数定义、参数类型、返回值,能做对模拟题4、8、13题


第一部分:函数定义【必考!】

1. 函数基本格式【必背】

python 复制代码
# 格式
def 函数名(参数列表):
    """函数说明文档"""
    函数体
    return 返回值

# 示例1:无参数无返回值
def say_hello():
    print("Hello!")

say_hello()  # 调用

# 示例2:有参数有返回值
def add(x, y):
    return x + y

result = add(3, 5)
print(result)  # 8

# 示例3:多个返回值(用元组)
def calc(a, b):
    return a+b, a-b, a*b, a/b

s, d, p, q = calc(10, 2)
print(s, d, p, q)  # 12 8 20 5.0

2. 函数头格式【高频考点!】

【模拟题4对应】

python 复制代码
# 参数顺序规则(从左到右):
# 1. 位置参数(必选参数)
# 2. 默认参数
# 3. *args(可变位置参数)
# 4. **kwargs(可变关键字参数)

# ✅ 正确的函数头
def func1(a, b=2, *args, **kwargs):
    pass

# ❌ 错误示例1:默认参数在位置参数前
def func3(b=2, a, *args, **kwargs):
    pass  # SyntaxError

# ❌ 错误示例2:*args在**kwargs后
def func4(*args, **kwargs, b=2, a):
    pass  # SyntaxError

# ❌ 错误示例3:位置参数在默认参数后
def func2(a, b=2, **kwargs, *args):
    pass  # SyntaxError

# 答案:C

【记忆口诀】

复制代码
位置默认可变位,最后才是可变字
位置必在默认前,星号双星分先后

【必做练习】

python 复制代码
# 判断下列函数头是否正确

# 1.
def f1(a, b, c=10):
    pass
# ✅ 正确

# 2.
def f2(a, b=5, c):
    pass
# ❌ 错误:位置参数c在默认参数后

# 3.
def f3(a, *args, b=10):
    pass
# ✅ 正确

# 4.
def f4(a, **kwargs, *args):
    pass
# ❌ 错误:*args必须在**kwargs前

# 5.
def f5(*args, **kwargs):
    pass
# ✅ 正确

第二部分:参数类型详解【核心!】

1. 位置参数(必选参数)

python 复制代码
def greet(name, age):  # name和age是位置参数
    print(f"{name}今年{age}岁")

# 调用时必须提供,且顺序对应
greet("张三", 18)     # 张三今年18岁
greet(18, "张三")     # 18今年张三岁(错误!)

# 缺少参数会报错
greet("张三")         # ❌ TypeError: missing 1 required positional argument

2. 默认参数

python 复制代码
def power(x, n=2):  # n有默认值2
    return x ** n

print(power(5))      # 25(n取默认值2)
print(power(5, 3))   # 125(n取指定值3)
print(power(x=5, n=4))  # 625(关键字传参)

【注意事项】

python 复制代码
# 默认参数必须在位置参数后面
def func1(a, b=2, c):  # ❌ 错误
    pass

def func2(a, b=2, c=3):  # ✅ 正确
    pass

# 默认参数不要用可变对象
def bad_func(L=[]):  # ❌ 不推荐
    L.append(1)
    return L

print(bad_func())  # [1]
print(bad_func())  # [1, 1]  奇怪!

# 正确做法
def good_func(L=None):
    if L is None:
        L = []
    L.append(1)
    return L

3. 可变位置参数 *args【重要】

python 复制代码
def my_sum(*args):  # *args接收多个位置参数,组成元组
    print(type(args))  # <class 'tuple'>
    print(args)
    return sum(args)

print(my_sum(1, 2, 3))        # 6
print(my_sum(1, 2, 3, 4, 5))  # 15

# 示例:计算平均值
def average(*nums):
    if len(nums) == 0:
        return 0
    return sum(nums) / len(nums)

print(average(80, 90, 85))     # 85.0
print(average(70, 80, 90, 100))  # 85.0

4. 可变关键字参数 **kwargs【重要】

python 复制代码
def student_info(**kwargs):  # **kwargs接收多个关键字参数,组成字典
    print(type(kwargs))  # <class 'dict'>
    print(kwargs)
    for k, v in kwargs.items():
        print(f"{k}: {v}")

student_info(name="张三", age=18, score=95)
# {'name': '张三', 'age': 18, 'score': 95}
# name: 张三
# age: 18
# score: 95

# 示例:记录学生信息
def record(**info):
    return info

data = record(id=1001, name="李四", gender="男")
print(data)  # {'id': 1001, 'name': '李四', 'gender': '男'}

5. 混合使用【必背】

python 复制代码
def func(a, b=2, *args, **kwargs):
    print(f"a={a}")
    print(f"b={b}")
    print(f"args={args}")
    print(f"kwargs={kwargs}")

# 调用示例1
func(1)
# a=1
# b=2
# args=()
# kwargs={}

# 调用示例2
func(1, 3, 4, 5, x=10, y=20)
# a=1
# b=3
# args=(4, 5)
# kwargs={'x': 10, 'y': 20}

# 调用示例3
func(10, 20, 30, 40, name="Tom", age=18)
# a=10
# b=20
# args=(30, 40)
# kwargs={'name': 'Tom', 'age': 18}

【必做练习】

python 复制代码
# 练习1:定义一个函数,接收任意个数字,返回最大值
def my_max(*nums):
    if len(nums) == 0:
        return None
    return max(nums)

print(my_max(1, 5, 3, 9, 2))  # 9

# 练习2:定义一个函数,接收任意关键字参数,返回所有值的列表
def get_values(**kwargs):
    return list(kwargs.values())

print(get_values(a=1, b=2, c=3))  # [1, 2, 3]

# 练习3:综合练习
def test(a, b=10, *args, **kwargs):
    print(f"a={a}, b={b}")
    print(f"args={args}")
    print(f"kwargs={kwargs}")

test(1, 2, 3, 4, x=5, y=6)
# 写出输出结果

第三部分:函数调用方式【必背】

1. 位置传参

python 复制代码
def divide(a, b):
    return a / b

result = divide(10, 2)  # 按位置传递:a=10, b=2
print(result)  # 5.0

result = divide(2, 10)  # 按位置传递:a=2, b=10
print(result)  # 0.2

2. 关键字传参

python 复制代码
def divide(a, b):
    return a / b

result = divide(a=10, b=2)  # 关键字传参
print(result)  # 5.0

result = divide(b=2, a=10)  # 顺序无关
print(result)  # 5.0

3. 混合传参

python 复制代码
def func(a, b, c):
    print(a, b, c)

func(1, 2, 3)           # 全部位置传参:1 2 3
func(1, b=2, c=3)       # 混合传参:1 2 3
func(c=3, a=1, b=2)     # 全部关键字传参:1 2 3

# ❌ 错误示例
func(1, c=3, 2)         # SyntaxError: 位置参数不能在关键字参数后
func(a=1, 2, 3)         # SyntaxError: 位置参数不能在关键字参数后

【规则】

复制代码
位置传参必须在关键字传参之前
一旦使用关键字传参,后面的参数也必须用关键字

第四部分:全局变量与局部变量【必考!】

1. 变量作用域【必背】

python 复制代码
# 全局变量:函数外定义
x = 100

def func():
    # 局部变量:函数内定义
    y = 200
    print(x)  # ✅ 可以读取全局变量
    print(y)  # ✅ 可以读取局部变量

func()
print(x)  # ✅ 100
print(y)  # ❌ NameError: y是局部变量,外部不可访问

2. 局部变量与全局变量同名【重要】

python 复制代码
# 情况1:不使用global
x = 10
def func():
    x = 20  # 这是局部变量x,不是全局x
    print(f"函数内x={x}")

func()           # 函数内x=20
print(f"函数外x={x}")  # 函数外x=10(全局x没变)

# 情况2:使用global
x = 10
def func():
    global x  # 声明使用全局变量x
    x = 20    # 修改全局变量x
    print(f"函数内x={x}")

func()           # 函数内x=20
print(f"函数外x={x}")  # 函数外x=20(全局x被修改)

【模拟题8详解】

python 复制代码
a = 5
b = 6
def test():
    global a
    a = 10
    b = 20
test()
print(a, b)

# 执行过程分析:
# 1. 全局:a=5, b=6
# 2. 调用test()
#    - global a:声明使用全局a
#    - a=10:修改全局a为10
#    - b=20:创建局部变量b(不影响全局b)
# 3. 函数结束,局部b消失
# 4. print(a, b):打印全局a和全局b
# 5. 输出:10 6

# 答案:A(10 6)

3. 何时需要global【必背】

python 复制代码
# 规则1:只读取全局变量,不需要global
count = 0
def show():
    print(count)  # ✅ 只读取,不需要global

show()  # 0

# 规则2:要修改全局变量,必须global
count = 0
def add():
    global count
    count += 1

add()
print(count)  # 1

# 规则3:不用global会报错
count = 0
def add():
    count += 1  # ❌ UnboundLocalError

add()  # 报错!

【为什么会报错?】

python 复制代码
count = 0
def add():
    count += 1  # 相当于 count = count + 1
    # Python看到 count = ...就认为count是局部变量
    # 但右边的count还没定义,所以报错

# 正确做法1:使用global
def add():
    global count
    count += 1

# 正确做法2:不修改全局变量
def add():
    return count + 1

count = add()

【必做练习】

python 复制代码
# 练习1:判断输出
x = 10
def f1():
    x = 20
    print(x)
f1()
print(x)
# 输出:20  10

# 练习2:判断输出
x = 10
def f2():
    global x
    x = 20
    print(x)
f2()
print(x)
# 输出:20  20

# 练习3:判断输出
x = 10
def f3():
    print(x)
f3()
print(x)
# 输出:10  10

# 练习4:判断是否报错
x = 10
def f4():
    x = x + 1  # ❌ 报错!
    print(x)
f4()

# 练习5:统计函数调用次数
count = 0
def func():
    global count
    count += 1
    print(f"函数被调用{count}次")

func()  # 函数被调用1次
func()  # 函数被调用2次
func()  # 函数被调用3次

第五部分:返回值【重要】

1. 单个返回值

python 复制代码
def square(x):
    return x ** 2

result = square(5)
print(result)  # 25

2. 多个返回值(用元组)

python 复制代码
def calc(a, b):
    return a+b, a-b, a*b, a/b

# 方法1:接收元组
result = calc(10, 2)
print(result)  # (12, 8, 20, 5.0)
print(type(result))  # <class 'tuple'>

# 方法2:序列解包
s, d, p, q = calc(10, 2)
print(s, d, p, q)  # 12 8 20 5.0

3. 返回列表

python 复制代码
def get_primes(n):
    """返回n以内的所有素数"""
    primes = []
    for num in range(2, n+1):
        is_prime = True
        for i in range(2, int(num**0.5)+1):
            if num % i == 0:
                is_prime = False
                break
        if is_prime:
            primes.append(num)
    return primes

result = get_primes(20)
print(result)  # [2, 3, 5, 7, 11, 13, 17, 19]

4. 无返回值(返回None)

python 复制代码
def say_hello():
    print("Hello!")
    # 没有return语句

result = say_hello()  # Hello!
print(result)  # None

# 或者显式返回None
def func():
    return None

# 或者只写return
def func():
    return

第六部分:递归函数【考点!】

1. 递归基本概念【必背】

python 复制代码
# 递归:函数调用自己
# 必须有:
# 1. 递归终止条件(基线条件)
# 2. 递归公式(向终止条件靠近)

# 示例:阶乘
def factorial(n):
    if n == 1:  # 终止条件
        return 1
    else:
        return n * factorial(n-1)  # 递归调用

print(factorial(5))  # 120
# 计算过程:
# factorial(5) = 5 * factorial(4)
#              = 5 * 4 * factorial(3)
#              = 5 * 4 * 3 * factorial(2)
#              = 5 * 4 * 3 * 2 * factorial(1)
#              = 5 * 4 * 3 * 2 * 1
#              = 120

2. 递归经典题目

【模拟题13对应:小球弹跳高度】

python 复制代码
# 题目:小球从100米高度落下,每次弹起高度是前一次的2/3
# 求第10次落地弹起的高度

def bounce(n):
    """
    n: 第n次落地
    返回:第n次弹起的高度
    """
    if n == 0:  # 终止条件:第0次是初始高度
        return 100
    else:  # 递归公式:h(n) = h(n-1) * 2/3
        return bounce(n-1) * 2/3

# 主函数调用
height = bounce(10)
print(f"第10次落地弹起的高度是:{height:.2f}米")

# 输出:第10次落地弹起的高度是:1.73米

【斐波那契数列】

python 复制代码
def fib(n):
    """返回斐波那契数列第n项"""
    if n <= 2:  # 终止条件
        return 1
    else:
        return fib(n-1) + fib(n-2)

print(fib(7))  # 13
# f(7) = f(6) + f(5)
#      = [f(5)+f(4)] + [f(4)+f(3)]
#      = ...

【求幂】

python 复制代码
def power(x, n):
    """计算x的n次方"""
    if n == 0:
        return 1
    else:
        return x * power(x, n-1)

print(power(2, 5))  # 32

【必做练习】

python 复制代码
# 练习1:求和 1+2+3+...+n
def sum_n(n):
    if n == 1:
        return 1
    else:
        return n + sum_n(n-1)

print(sum_n(100))  # 5050

# 练习2:数字逆序
def reverse_num(n):
    """将整数n逆序"""
    if n < 10:
        return n
    else:
        # 获取最后一位和剩余部分
        last = n % 10
        rest = n // 10
        # 计算剩余部分的位数
        digits = len(str(rest))
        return last * (10 ** digits) + reverse_num(rest)

print(reverse_num(12345))  # 54321

# 练习3:最大公约数(辗转相除法)
def gcd(m, n):
    if m % n == 0:
        return n
    else:
        return gcd(n, m % n)

print(gcd(12, 18))  # 6

📝 Day 3 课后作业

作业1:函数定义(必做)

python 复制代码
# 1. 定义函数判断三角形类型
def triangle_type(a, b, c):
    """
    判断三角形类型
    返回:'等边'、'等腰'、'其他'或'不能构成三角形'
    """
    # 请完成代码

# 测试
print(triangle_type(3, 3, 3))  # 等边
print(triangle_type(3, 3, 4))  # 等腰
print(triangle_type(3, 4, 5))  # 其他

# 2. 定义函数求列表的最大值、最小值、平均值
def list_stats(nums):
    """返回(最大值, 最小值, 平均值)"""
    # 请完成代码

# 测试
print(list_stats([1, 2, 3, 4, 5]))  # (5, 1, 3.0)

# 3. 定义函数判断素数
def is_prime(n):
    """判断n是否为素数"""
    # 请完成代码

# 测试
print(is_prime(17))  # True
print(is_prime(18))  # False

作业2:参数类型(必做)

python 复制代码
# 1. 定义函数,接收任意个数字,返回它们的乘积
def multiply(*nums):
    # 请完成代码
    pass

print(multiply(2, 3, 4))  # 24

# 2. 定义函数,接收学生信息(关键字参数),打印格式化信息
def student_info(**info):
    # 请完成代码
    pass

student_info(name="张三", age=18, score=95)
# 输出:
# 姓名:张三
# 年龄:18
# 成绩:95

# 3. 定义函数,接收列表和操作类型(默认求和)
def calc_list(nums, operation='sum'):
    """
    operation可以是:'sum', 'avg', 'max', 'min'
    """
    # 请完成代码
    pass

print(calc_list([1,2,3,4,5]))           # 15
print(calc_list([1,2,3,4,5], 'avg'))    # 3.0
print(calc_list([1,2,3,4,5], 'max'))    # 5

作业3:递归函数(必做)

python 复制代码
# 1. 斐波那契数列第n项
def fib(n):
    # 请完成代码
    pass

print(fib(10))  # 55

# 2. 猴子吃桃子
# 第一天吃一半多一个,第二天吃剩下一半多一个
# 第7天只剩1个,问原来有多少个?
def peach(n):
    """n是第几天"""
    # 请完成代码
    pass

print(peach(1))  # 第1天的桃子数

# 3. 汉诺塔问题
def hanoi(n, A, B, C):
    """
    n: 盘子数量
    A, B, C: 三个柱子
    """
    # 请完成代码
    pass

hanoi(3, 'A', 'B', 'C')

Day 4:列表与字典核心知识(必背版)

📌 今日目标

掌握列表、元组、字典操作,能做对模拟题2、5、11、12、16、17题


第一部分:列表操作【核心!】

1. 列表创建【必背】

python 复制代码
# 方法1:直接创建
lst = [1, 2, 3, 4, 5]
lst = ['a', 'b', 'c']
lst = [1, 'hello', 3.14, True]  # 混合类型

# 方法2:list()函数
lst = list(range(10))      # [0,1,2,...,9]
lst = list("hello")        # ['h','e','l','l','o']
lst = list((1, 2, 3))      # [1, 2, 3](元组转列表)

# 方法3:列表推导式
lst = [x**2 for x in range(10)]  # [0,1,4,9,16,...]

# 空列表
lst = []
lst = list()

2. 列表索引和切片【必背】

python 复制代码
lst = [10, 20, 30, 40, 50]

# 索引
lst[0]    # 10
lst[-1]   # 50
lst[2]    # 30

# 切片
lst[1:4]   # [20, 30, 40]
lst[:3]    # [10, 20, 30]
lst[2:]    # [30, 40, 50]
lst[:]     # [10, 20, 30, 40, 50](复制)
lst[::-1]  # [50, 40, 30, 20, 10](倒序)
lst[::2]   # [10, 30, 50](步长2)

3. 列表方法【高频考点!】

python 复制代码
lst = [1, 2, 3]

# append():末尾添加一个元素
lst.append(4)
print(lst)  # [1, 2, 3, 4]

# extend():末尾添加多个元素
lst.extend([5, 6])
print(lst)  # [1, 2, 3, 4, 5, 6]

# insert():指定位置插入
lst.insert(0, 0)  # 在索引0处插入0
print(lst)  # [0, 1, 2, 3, 4, 5, 6]

# remove():删除指定值(第一个)
lst.remove(3)
print(lst)  # [0, 1, 2, 4, 5, 6]

# pop():删除指定索引(默认最后一个)
x = lst.pop()    # 删除最后一个,返回6
y = lst.pop(0)   # 删除索引0,返回0
print(lst)  # [1, 2, 4, 5]

# clear():清空列表
lst.clear()
print(lst)  # []

【append vs extend vs +】

python 复制代码
lst = [1, 2, 3]

# append:添加一个元素(可以是列表)
lst.append([4, 5])
print(lst)  # [1, 2, 3, [4, 5]]

lst = [1, 2, 3]
# extend:添加多个元素
lst.extend([4, 5])
print(lst)  # [1, 2, 3, 4, 5]

lst = [1, 2, 3]
# +:生成新列表
new_lst = lst + [4, 5]
print(new_lst)  # [1, 2, 3, 4, 5]
print(lst)      # [1, 2, 3](原列表不变)

4. 列表排序【重要】

python 复制代码
lst = [3, 1, 4, 1, 5, 9, 2, 6]

# sort():原地排序(改变原列表)
lst.sort()
print(lst)  # [1, 1, 2, 3, 4, 5, 6, 9]

# sort(reverse=True):降序
lst.sort(reverse=True)
print(lst)  # [9, 6, 5, 4, 3, 2, 1, 1]

# sorted():返回新列表(不改变原列表)
lst = [3, 1, 4, 1, 5]
new_lst = sorted(lst)
print(new_lst)  # [1, 1, 3, 4, 5]
print(lst)      # [3, 1, 4, 1, 5](不变)

# reverse():倒序(改变原列表)
lst = [1, 2, 3, 4, 5]
lst.reverse()
print(lst)  # [5, 4, 3, 2, 1]

5. 列表统计【必背】

python 复制代码
lst = [1, 2, 3, 2, 4, 2, 5]

# count():统计元素出现次数
print(lst.count(2))  # 3

# index():返回元素第一次出现的索引
print(lst.index(2))  # 1

# 如果元素不存在会报错
# print(lst.index(10))  # ValueError

# 安全的查找方法
if 10 in lst:
    print(lst.index(10))
else:
    print("不存在")

【必做练习】

python 复制代码
# 练习1:列表操作
lst = [1, 2, 3]
lst.append(4)
lst.extend([5, 6])
lst.insert(0, 0)
lst.remove(3)
x = lst.pop()
# 写出lst的最终结果

# 练习2:列表去重
lst = [1, 2, 2, 3, 3, 3, 4, 4, 4, 4]
# 方法1:用set
new_lst = list(set(lst))

# 方法2:用循环
new_lst = []
for x in lst:
    if x not in new_lst:
        new_lst.append(x)

# 练习3:找出列表中的最大值和最小值
lst = [3, 7, 2, 9, 1, 5]
max_val = max(lst)
min_val = min(lst)

第二部分:元组【必考!】

1. 元组特点【必背】

python 复制代码
# 元组:不可变的列表
# 用()创建,元素不能修改

tup = (1, 2, 3, 4, 5)
tup = 1, 2, 3  # 括号可省略

# 单元素元组(必须加逗号)
tup = (1,)     # ✅ 元组
tup = (1)      # ❌ 整数1,不是元组

# 空元组
tup = ()
tup = tuple()

【模拟题2对应】

python 复制代码
# 题目:下列关于元组的说法中,正确的是

A. 元组不能进行切片操作           # ❌ 错误,可以切片
B. 元组中的元素都是可修改的       # ❌ 错误,不可修改
C. 元组是无序的数据序列           # ❌ 错误,是有序的
D. 不能用sort()方法对元组进行排序  # ✅ 正确

# 验证
tup = (3, 1, 4, 1, 5)

# 可以切片
print(tup[1:4])  # (1, 4, 1)

# 不能修改
# tup[0] = 10  # TypeError

# 是有序的
print(tup[0])  # 3

# 不能用sort()
# tup.sort()  # AttributeError: 'tuple' object has no attribute 'sort'

# 但可以用sorted()(返回列表)
print(sorted(tup))  # [1, 1, 3, 4, 5]

# 答案:D

2. 元组操作【必背】

python 复制代码
tup = (1, 2, 3, 4, 5)

# 索引
tup[0]    # 1
tup[-1]   # 5

# 切片
tup[1:4]  # (2, 3, 4)
tup[:3]   # (1, 2, 3)
tup[::-1] # (5, 4, 3, 2, 1)

# 不能修改
# tup[0] = 10  # TypeError

# 可以拼接(生成新元组)
new_tup = tup + (6, 7)
print(new_tup)  # (1, 2, 3, 4, 5, 6, 7)

# 重复
print(tup * 2)  # (1, 2, 3, 4, 5, 1, 2, 3, 4, 5)

# 统计
print(tup.count(3))  # 1
print(tup.index(3))  # 2

3. 元组的应用【重要】

python 复制代码
# 1. 多变量赋值
x, y, z = (1, 2, 3)
print(x, y, z)  # 1 2 3

# 2. 变量交换
x, y = 10, 20
x, y = y, x
print(x, y)  # 20 10

# 3. 函数返回多个值
def calc(a, b):
    return a+b, a-b, a*b, a/b

result = calc(10, 2)
print(result)  # (12, 8, 20, 5.0)

s, d, p, q = calc(10, 2)
print(s, d, p, q)  # 12 8 20 5.0

# 4. 格式化输出
name = "张三"
age = 18
print("%s今年%d岁" % (name, age))

第三部分:字典【高频考点!】

1. 字典创建【必背】

python 复制代码
# 方法1:直接创建
d = {'name': 'Alice', 'age': 25, 'city': 'Beijing'}

# 方法2:dict()函数
d = dict(name='Bob', age=30)  # 键必须是标识符
print(d)  # {'name': 'Bob', 'age': 30}

# 方法3:从键值对列表创建
pairs = [('name', 'Charlie'), ('age', 35)]
d = dict(pairs)
print(d)  # {'name': 'Charlie', 'age': 35}

# 空字典
d = {}
d = dict()

【模拟题5对应】

python 复制代码
# 题目:以下不能正确创建一个字典

A. my_dict = dict(name='Bob', age=30)
# ✅ 正确:{'name': 'Bob', 'age': 30}

B. my_dict = {'name': 'Alice', 'age': 25}
# ✅ 正确

C. my_dict = dict([['job', 'Engineer'], ('salary', 80000)])
# ✅ 正确:{'job': 'Engineer', 'salary': 80000}

D. my_dict = {'city', 'New York', ('country', 'USA')}
# ❌ 错误:这是集合,不是字典
# 字典必须是 {key: value} 形式

# 答案:D

2. 字典操作【必背】

python 复制代码
d = {'name': 'Alice', 'age': 25, 'city': 'Beijing'}

# 访问
print(d['name'])  # 'Alice'

# 如果键不存在会报错
# print(d['job'])  # KeyError

# 安全访问:get()
print(d.get('job'))         # None
print(d.get('job', 'None'))  # 'None'(默认值)

# 添加/修改
d['job'] = 'Engineer'  # 添加
d['age'] = 26          # 修改
print(d)  # {'name': 'Alice', 'age': 26, 'city': 'Beijing', 'job': 'Engineer'}

# 删除
del d['city']
print(d)  # {'name': 'Alice', 'age': 26, 'job': 'Engineer'}

# pop():删除并返回值
age = d.pop('age')
print(age)  # 26
print(d)    # {'name': 'Alice', 'job': 'Engineer'}

# clear():清空
d.clear()
print(d)  # {}

3. 字典遍历【必背】

python 复制代码
d = {'name': 'Alice', 'age': 25, 'city': 'Beijing'}

# 遍历键
for key in d:
    print(key)
# name
# age
# city

# 遍历值
for value in d.values():
    print(value)
# Alice
# 25
# Beijing

# 遍历键值对
for key, value in d.items():
    print(f"{key}: {value}")
# name: Alice
# age: 25
# city: Beijing

4. 字典方法【重要】

python 复制代码
d = {'name': 'Alice', 'age': 25}

# keys():所有键
print(d.keys())    # dict_keys(['name', 'age'])
print(list(d.keys()))  # ['name', 'age']

# values():所有值
print(d.values())  # dict_values(['Alice', 25])
print(list(d.values()))  # ['Alice', 25]

# items():所有键值对
print(d.items())   # dict_items([('name', 'Alice'), ('age', 25)])
print(list(d.items()))  # [('name', 'Alice'), ('age', 25)]

# update():更新字典
d.update({'city': 'Beijing', 'age': 26})
print(d)  # {'name': 'Alice', 'age': 26, 'city': 'Beijing'}

# in:判断键是否存在
print('name' in d)  # True
print('job' in d)   # False

【必做练习】

python 复制代码
# 练习1:统计字符出现次数
s = "hello world"
d = {}
for c in s:
    if c in d:
        d[c] += 1
    else:
        d[c] = 1
print(d)

# 练习2:反转字典(键值互换)
d = {'a': 1, 'b': 2, 'c': 3}
new_d = {v: k for k, v in d.items()}
print(new_d)  # {1: 'a', 2: 'b', 3: 'c'}

# 练习3:合并两个字典
d1 = {'a': 1, 'b': 2}
d2 = {'c': 3, 'd': 4}
d1.update(d2)
print(d1)  # {'a': 1, 'b': 2, 'c': 3, 'd': 4}

第四部分:程序填空题【核心!】

【模拟题11详解】

python 复制代码
# 题目:输入单词,逆序后元音字母转大写,其他转小写

words = input("请输入一组单词,空格分隔:").split()
vowels = 'aeiou'  # 元音字母
result = []

for word in words:
    word = word.lower()  # (1) 全部转小写
    temp = ""
  
    for ch in word:
        if ch in vowels:  # (2) 判断是否为元音
            temp += ch.upper()  # (3) 元音转大写
        else:
            temp += ch  # 其他字母保持小写
  
    reverse_word = temp[::-1]  # 逆序
    result.append(reverse_word)  # (4) 添加到结果列表

print(" ".join(result))

# 答案:
# (1) vowels 或 'aeiou'
# (2) ch.upper
# (3) ch
# (4) reverse_word

【模拟题12详解】

python 复制代码
# 题目:体育比赛,每名选手3次机会,求平均分,输出冠军

N = int(input("请输入选手的数量:"))
M = 3
champion_score = 0
champion_index = 0

for i in range(N):
    scores = input(f"请输入第{i+1}名选手的{M}次成绩,空格分隔:")
    scores = scores.split()  # (1) 分割字符串
  
    # 计算平均分
    total = 0
    for score in scores:
        total += float(score)  # (2) 转为浮点数
    avg = total / M  # (3) 求平均
  
    print(f"第{i+1}名选手的成绩是:{avg:.2f}")
  
    # 更新冠军
    if avg > champion_score:  # (4) 比较
        champion_score = avg
        champion_index = i + 1

print(f"冠军是第{champion_index}名选手,成绩是:{champion_score:.2f}")

# 答案:
# (1) scores.split() 或 scores.split(' ')
# (2) float(score) 或 float
# (3) total / M 或 avg = total / M
# (4) avg > champion_score 或 champion_score < avg

📝 Day 3-4 课后作业

作业1:列表操作(必做)

python 复制代码
# 1. 输入一组数字,统计正数、负数、零的个数
nums = eval(input("输入一组数字:"))
# 请完成代码

# 2. 列表元素位置交换
lst = [1, 2, 3, 4, 5]
# 将索引1和索引3的元素交换

# 3. 找出两个列表的公共元素
lst1 = [1, 2, 3, 4, 5]
lst2 = [3, 4, 5, 6, 7]
# 结果:[3, 4, 5]

作业2:字典操作(必做)

python 复制代码
# 1. 统计字符串中每个单词出现的次数
s = "hello world hello python world"
# 结果:{'hello': 2, 'world': 2, 'python': 1}

# 2. 学生成绩管理
students = {
    '张三': [80, 90, 85],
    '李四': [75, 85, 80],
    '王五': [90, 95, 92]
}
# 计算每个学生的平均分
# 找出平均分最高的学生

# 3. 字典排序
d = {'b': 2, 'a': 1, 'c': 3}
# 按键排序
# 按值排序

作业3:综合题(必做)

python 复制代码
# 1. 成绩统计
scores = [85, 92, 78, 90, 88, 76, 95, 89]
# 计算:平均分、最高分、最低分、及格率

# 2. 数据分类
nums = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
# 将奇数和偶数分别放入两个列表

# 3. 模拟题11、12
# 完整实现两道程序填空题

Day 3-4 完成!明天继续Day 5内容!💪

相关推荐
数学难2 小时前
Java面试题2:Java线程池原理
java·开发语言
咸鱼求放生2 小时前
Java 8 Stream API
java·开发语言
盒马盒马2 小时前
Rust:Trait 抽象接口 & 特征约束
开发语言·rust
天使街23号2 小时前
go-dongle v1.2.0 发布,新增 SM2 非对称椭圆曲线加密算法支持
开发语言·后端·golang
酷柚易汛智推官2 小时前
基于librespot的定制化Spotify客户端开发:开源替代方案的技术实践与优化
python·开源·酷柚易汛
雪碧聊技术2 小时前
requests入门
python·requests·请求头的user-agent
ThreeYear_s3 小时前
【FPGA+DSP系列】——MATLAB simulink仿真三相桥式全控整流电路
开发语言·matlab·fpga开发
yugi9878383 小时前
MATLAB实现白噪声与色噪声仿真
开发语言·matlab
面向星辰3 小时前
机器学习过拟合和正则化
python