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内容!💪