🐍 Python 程序设计串讲教学课件
适用场景 :Python 期末/期中串讲复习课知识来源 :Python 知识库(西北农林科技大学《大学程序设计 Python》课程体系)
第1章 Python 语言基础 1.1 核心知识点
⚠️ 易错提醒 :input() 始终返回字符串类型,数值计算前必须用 int()、float() 或 eval() 转换!
⚠️ 安全警示 :eval() 可执行任意 Python 代码(如 eval(input()) 时输入 __import__('os').system('ls') 会执行系统命令),生产环境禁用 。教学示例中使用 eval() 仅为简化多值输入(如 r, h = eval(input(...))),课堂上务必强调其安全风险 。推荐安全替代方案:
1 2 3 4 5 6 7 8 9 10 r = float (input ("请输入半径 r: " )) h = float (input ("请输入高 h: " )) r, h = map (float , input ("请输入半径 r, h (逗号分隔): " ).split(',' )) import astr, h = ast.literal_eval(input ("..." ))
1.2 典型例题 例题 1:圆柱体表面积和体积
输入半径 r 和高 h,计算圆柱体的表面积和体积(保留两位小数)。
1 2 3 4 5 6 7 8 9 10 11 import mathr = float (input ("请输入半径 r: " )) h = float (input ("请输入高 h: " )) S = 2 * math.pi * r ** 2 + 2 * math.pi * r * h V = math.pi * r ** 2 * h print ("表面积={:.2f}, 体积={:.2f}" .format (S, V))
样例输入 :2, 1样例输出 :表面积=37.70, 体积=12.57
例题 2:三个数的最大公约数 1 2 3 4 5 import matha, b, c = map (int , input ("请输入三个整数(用空格分隔): " ).split()) result = math.gcd(a, b, c) print ("最大公约数为" , result)
样例输入 :12, 24, 36样例输出 :最大公约数为 12
例题 3:判断闰年
闰年规则:能被 4 整除但不能被 100 整除,或 能被 400 整除。
1 2 3 4 5 year = int (input ("请输入年份: " )) if (year % 4 == 0 and year % 100 != 0 ) or (year % 400 == 0 ): print ("Yes" ) else : print ("No" )
第2章 Python 代码基础 2.1 核心知识点
2.2 典型例题 例题 4:统计字符类型
输入一行字符,分别统计英文字母、空格、数字和其他字符的个数。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 s = input ("请输入一行字符: " ) letters = spaces = digits = others = 0 for c in s: if c.isalpha(): letters += 1 elif c.isspace(): spaces += 1 elif c.isdigit(): digits += 1 else : others += 1 print ("字母: {}, 空格: {}, 数字: {}, 其他: {}" .format (letters, spaces, digits, others))
例题 5:统计字母 t 的个数(不区分大小写) 1 2 3 4 s = input ("请输入一段英文: " ) s_lower = s.lower() count = s_lower.count('t' ) print ("字母 t 出现了" , count, "次" )
第3章 基本控制结构 ⭐ 3.1 知识框架 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 控制结构 ├── 顺序结构:按书写顺序从上到下执行 ├── 选择结构(分支) │ ├── 单分支:if │ ├── 双分支:if...else │ ├── 多分支:if...elif...else │ ├── 三元表达式:x if 条件 else y │ └── 嵌套:if 中再嵌套 if └── 循环结构 ├── for 循环:次数已知(遍历字符串、range()、列表) ├── while 循环:条件驱动 ├── 循环嵌套 ├── break:结束整个循环 ├── continue:跳过本次迭代 ├── pass:占位符(什么都不做) └── for/while...else:正常退出时执行 else
3.2 选择结构 知识点
条件表达式常用模板 :
例题 6:BMI 指数判断(多分支经典) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 height = float (input ("请输入您的身高(米): " )) weight = float (input ("请输入您的体重(千克): " )) BMI = weight / height / height print ("您的BMI指数是: {:.1f}" .format (BMI))if BMI < 18.5 : print ("您的体型偏瘦,要多吃多运动哦!" ) elif BMI < 24 : print ("您的体型正常,继续保持哟!" ) elif BMI < 28 : print ("您的体型偏胖,有发福迹象!" ) elif BMI < 32 : print ("不要悲伤,您是个迷人的胖子!" ) else : print ("什么也不说了,您照照镜子就知道了......" )
💡 技巧 :利用 elif 从上到下匹配的互斥特性 ,后面分支只需写上限,不必重复写下限!
例题 7:成绩等级判断(百分制 → 五分制) 1 2 3 4 5 6 7 8 9 mark = float (input ("请输入学生的考试成绩(0-100):" )) if mark >= 90 : print (mark, "分,优秀" ) elif mark >= 80 : print (mark, "分,良好" ) elif mark >= 60 : print (mark, "分,及格" ) else : print (mark, "分,不及格" )
例题 8:地铁票价计算(多分支 vs 嵌套对比)
规则:1-4 站 3 元/人,5-9 站 4 元/人,9 站以上 5 元/人。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 person = int (input ("请输入乘车人数:" )) n = int (input ("请输入乘坐站数:" )) if n > 9 : pay = person * 5 elif 5 <= n <= 9 : pay = person * 4 else : pay = person * 3 print ("应付款为:" , pay)
例题 9:商场促销折扣计算
会员:消费 ≥200 打 8 折,≥100 打 9 折,<100 不打折 非会员:消费 ≥200 打 9.5 折,<200 不打折
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 is_member = input ("是否会员?(y/n): " ) amount = float (input ("消费金额: " )) if is_member == 'y' : if amount >= 200 : pay = amount * 0.8 elif amount >= 100 : pay = amount * 0.9 else : pay = amount else : if amount >= 200 : pay = amount * 0.95 else : pay = amount print ("应付款为:" , pay)
3.3 循环结构 知识点
range() 函数 :
循环三要素 :① 循环变量初始化 → ② 循环体 → ③ 循环终止条件变化(必须放在循环体内)
⚠️ 核心区分 :
break:结束整个循环 ,彻底退出
continue:跳过本次 循环剩余语句,进入下一次迭代
pass:什么都不做 ,仅占位
for/while...else:循环正常退出 (非 break)时执行 else 块
例题 10:统计英文句子中各类字符数(for 遍历字符串) 1 2 3 4 5 6 7 8 9 10 11 12 s = input ("请输入一句英文: " ) count_upper = count_lower = count_digit = 0 for ch in s: if ch.isupper(): count_upper += 1 if ch.islower(): count_lower += 1 if ch.isdigit(): count_digit += 1 print ("大写: {}, 小写: {}, 数字: {}" .format (count_upper, count_lower, count_digit))
例题 11:求序列最值(while + 哨兵值)
输入非负整数序列(-1 终止),求最小值、最大值和平均值。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 count = total = 0 print ("请输入非负整数,以 -1 作为输入结束!" )num = int (input ("输入数据: " )) min_num = max_num = num while num != -1 : count += 1 total += num if num < min_num: min_num = num if num > max_num: max_num = num num = int (input ("输入数据: " )) if count > 0 : print ("最小: {}, 最大: {}, 均值: {:.2f}" .format (min_num, max_num, total/count)) else : print ("输入为空" )
例题 12:素数判定(for…else 经典用法) 1 2 3 4 5 6 7 8 n = int (input ("输入一个正整数: " )) for i in range (2 , n): if n % i == 0 : print (n, "不是素数" ) break else : print (n, "是素数" )
💡 关键 :for...else 中,若循环被 break 中断,不执行 else 块。
例题 13:水仙花数(三位数各位立方和 = 自身) 1 2 3 4 5 6 7 8 for i in range (100 , 1000 ): a = i // 100 b = i // 10 % 10 c = i % 10 if a**3 + b**3 + c**3 == i: print (i, end=" " )
例题 14:四位数玫瑰花数
每位数字的 4 次幂之和等于本身。
1 2 3 4 5 6 7 8 9 for i in range (1000 , 10000 ): a = i // 1000 b = i // 100 % 10 c = i // 10 % 10 d = i % 10 if a**4 + b**4 + c**4 + d**4 == i: print (i, end=" " )
例题 15:求 1! + 2! + 3! + 4! + 5!(循环嵌套) 1 2 3 4 5 6 7 s = 0 for n in range (1 , 6 ): T = 1 for i in range (1 , n + 1 ): T = T * i s = s + T print (s)
⚠️ 经典易错 :外层循环中累乘变量 T 必须重置为 1,否则会累积前面的结果!
例题 16:斐波那契数列前 20 项 1 2 3 4 5 6 7 8 9 10 11 12 13 x1, x2 = 1 , 1 count = 2 print ("{:>8}{:>8}" .format (x1, x2), end='' )for i in range (3 , 21 ): x3 = x1 + x2 print ("{:>8}" .format (x3), end='' ) count += 1 if count % 4 == 0 : print () x1, x2 = x2, x3
例题 17:π 的级数逼近
π/4 = 1 - 1/3 + 1/5 - 1/7 + …(直到某项绝对值 < 10⁻⁴)
1 2 3 4 5 6 7 8 9 10 11 12 13 import mathPI = 0 i = 1 sign = 1 while abs (1 / (2 *i - 1 )) >= 1e-4 : PI += sign * (1 / (2 *i - 1 )) sign = -sign i += 1 print ("π ≈" , PI * 4 )print ("误差:" , abs (math.pi - PI * 4 ))
例题 18:输出星号图形(循环嵌套) 1 2 3 4 5 6 7 8 9 10 11 * ** *** **** ***** ****** ***** **** *** ** *
1 2 3 4 5 6 7 for i in range (1 , 7 ): print ('*' * i) for i in range (5 , 0 , -1 ): print ('*' * i)
3.4 random 库速查
第4章 复合数据类型 ⭐ 4.1 四种类型总览
4.2 列表(List) 知识点 创建方式 :
1 2 3 4 5 ls1 = [1 , 2 , 3 , 4 , 5 ] ls2 = list (range (1 , 6 )) ls3 = list (map (int , input ().split())) ls4 = [i**2 for i in range (1 , 11 )] ls5 = [[0 ]*4 for _ in range (3 )]
索引与切片 :
1 2 3 4 5 scores = [98 , 96 , 95 , 94 , 92 ] scores[2 ] scores[-3 ] scores[1 :4 ] scores[::-1 ]
常用方法速查 :
⚠️ 深浅拷贝 :
ls2 = ls1 → 引用赋值(共享空间,改一个影响另一个)
ls2 = ls1.copy() → 浅拷贝 (仅顶层独立;若列表中还有可变对象,嵌套层仍共享引用)
ls3 = copy.deepcopy(ls1) → 深拷贝 (完全独立,需 import copy)
💡 验证 :ls1 = [[1,2],[3,4]]; ls2 = ls1.copy(); ls2[0][0]=99 → ls1[0][0] 也会变为 99!
例题 19:学生信息管理(列表综合操作) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 student = [['001' , '李梅' , 19 ], ['002' , '韩磊磊' , 21 ], ['003' , '张亮' , 18 ]] student.append(['004' , '王大锤' , 20 ]) student.append(['006' , '刘大刀' , 23 ]) student.insert(3 , ['005' , '赵小刀' , 22 ]) target = '002' for s in student: if s[0 ] == target: print ("找到:" , s) names = [s[1 ] for s in student] print (names)older = [s for s in student if s[2 ] > 19 ] print (older)avg_age = sum (s[2 ] for s in student) / len (student) print ("平均年龄: {:.1f}" .format (avg_age))
例题 20:选手得分计算(去最高最低求均值) 1 2 3 4 5 6 7 8 9 10 11 12 13 n = int (input ("评委人数: " )) if n < 3 : print ("评委人数不足3人,无法计算!" ) else : scores = [] for i in range (n): scores.append(float (input ("第{}位评委打分: " .format (i+1 )))) scores.sort() final_score = sum (scores[1 :-1 ]) / (len (scores) - 2 ) print ("选手最终得分: {:.1f}" .format (final_score))
例题 21:列表生成式应用(百钱买百鸡)
鸡翁一值钱五,鸡母一值钱三,鸡雏三值钱一。百钱买百鸡。
1 2 3 4 5 6 7 8 9 result = [(x, y, z) for x in range (0 , 21 ) for y in range (0 , 34 ) for z in range (0 , 101 ) if x + y + z == 100 and z % 3 == 0 and 5 *x + 3 *y + z//3 == 100 ] for r in result: print ("鸡翁: {}, 鸡母: {}, 鸡雏: {}" .format (*r))
例题 22:列表元素变换(偶数 → 0) 1 2 3 lst = list (map (int , input ("请输入列表元素: " ).split())) new_lst = [0 if x % 2 == 0 else x for x in lst] print (*new_lst)
样例输入 :1 2 3 4 5 6样例输出 :1 0 3 0 5 0
例题 23:杨辉三角(二维列表) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 n = 6 triangle = [] for i in range (n): row = [1 ] * (i + 1 ) for j in range (1 , i): row[j] = triangle[i-1 ][j-1 ] + triangle[i-1 ][j] triangle.append(row) for row in triangle: print (row)
4.3 元组(Tuple) 知识点
不可变序列 :创建后不能修改(不能增删改元素)
创建 :t = (1, 2, 3) 或 t = 1, 2, 3(逗号是关键)
单元素元组 :必须加逗号 t = (1,)
支持的操作 :索引访问、切片、len()、in、count()、index()
不支持的操作 :append()、insert()、remove()、pop()、sort()(原地)
sorted(t) 返回的是列表 ,不是元组
典型用途 :函数多返回值、作为字典的键、存储固定配置
例题 24:元组与列表转换 1 2 3 4 5 6 7 8 9 10 11 12 13 ls = [98 , 96 , 95 , 94 , 92 ] t = tuple (ls) print (t, type (t)) t2 = (1 , 2 , 3 , 4 , 5 ) ls2 = list (t2) print (ls2, type (ls2)) s = "张三丰, 萧峰, 杨过" ls3 = s.split(', ' )
4.4 字典(Dictionary) 知识点
键值对 存储,键必须唯一 且不可变 (字符串、数字、元组)
访问 :dict[key](键不存在报错)或 dict.get(key, default)(安全)
增/改 :dict[key] = value(键不存在则添加,存在则修改)
遍历字典 :
1 2 for k, v in d.items(): print (k, v)
例题 25:统计字符出现次数 1 2 3 4 5 6 7 8 9 sentence = "Life is short, we need Python." sentence = sentence.lower() counts = {} for c in sentence: counts[c] = counts.get(c, 0 ) + 1 for c, n in sorted (counts.items()): print ("'{}': {}" .format (c, n))
例题 26:字典按值排序 1 2 3 4 5 6 dic = {'俄罗斯' : 1707.5 , '加拿大' : 997.1 , '中国' : 960.1 , '美国' : 936.4 } sorted_items = sorted (dic.items(), key=lambda x: x[1 ], reverse=True ) for country, area in sorted_items: print ("{}的面积是{}万平方公里" .format (country, area))
4.5 集合(Set) 知识点
三大特性 :无序、互异(自动去重)、元素不可变
创建 :s = {1, 2, 3} 或 s = set([1, 2, 3])
⚠️ 空集合 :必须用 set(),{} 创建的是空字典!
例题 27:列表去重 1 2 3 nums = [int (i) for i in input ("请输入整数: " ).split()] unique_count = len (set (nums)) print ("不同元素的个数:" , unique_count)
样例输入 :1 2 3 2 1 4 5 4样例输出 :不同元素的个数: 5
例题 28:集合运算(编程语言排行榜) 1 2 3 4 5 6 7 setA = {'Python' , 'C++' , 'C' , 'Java' , 'C#' } setB = {'Java' , 'C' , 'Python' , 'C++' , 'VB.NET' } print ("所有上榜语言:" , setA | setB) print ("同时进前五的语言:" , setA & setB) print ("只在A榜的语言:" , setA - setB) print ("只在一个榜的语言:" , setA ^ setB)
第5章 程序设计方法与算法 ⭐ 5.1 核心概念
核心公式 :数据结构 + 算法 = 程序
程序设计五步法 :分析问题 → 建立数学模型 → 设计算法 → 编写程序 → 调试运行
本节五大算法 :
5.2 递推法 例题 29:斐波那契数列(顺推法) 1 2 3 4 5 6 fib = [1 , 1 ] for i in range (2 , 20 ): fib.append(fib[i-1 ] + fib[i-2 ]) for i in range (0 , 20 ): print (fib[i], end=' ' )
例题 30:猴子吃桃(逆推法)
第 10 天早上只剩 1 个。每天吃前一天剩下的一半多一个。问第一天摘了多少?
1 2 3 4 5 6 7 peach = [0 ] * 11 peach[10 ] = 1 for i in range (9 , 0 , -1 ): peach[i] = 2 * (peach[i+1 ] + 1 ) print ("第一天共摘了" , peach[1 ], "个桃子" )
5.3 迭代法 例题 31:斐波那契数列(迭代法) 1 2 3 4 5 6 a = b = 1 print (a, b, end=" " )for i in range (3 , 21 ): c = a + b a, b = b, c print (c, end=" " )
💡 迭代 vs 递推:迭代法用同一个变量不断更新 ,不需要列表存储全部结果。
例题 32:牛顿迭代法求方程根
求 f(x) = x³ - 2x² + 4x + 1 = 0 在 x=0 附近的根。 迭代公式:xₙ = xₙ₋₁ − f(xₙ₋₁) / f’(xₙ₋₁)
1 2 3 4 5 6 7 8 9 10 11 12 13 x0 = x1 = 0 e = 0.000001 n = 0 while n == 0 or abs (x0 - x1) > e: x0 = x1 f = x0**3 - 2 *x0**2 + 4 *x0 + 1 f1 = 3 *x0**2 - 4 *x0 + 4 x1 = x0 - f / f1 n += 1 print ("第{}次迭代: x = {}" .format (n, x1)) print ("近似根:" , x1)
5.4 穷举法 例题 33:百钱买百鸡(穷举 + 优化) 1 2 3 4 5 6 for x in range (0 , 21 ): for y in range (0 , 34 ): z = 100 - x - y if z % 3 == 0 and 5 *x + 3 *y + z//3 == 100 : print ("鸡翁: {}, 鸡母: {}, 鸡雏: {}" .format (x, y, z))
优化技巧 :① 缩小搜索范围 → ② 减少循环变量 → ③ 利用等式约束消元
5.5 查找算法 例题 34:顺序查找 1 2 3 4 5 6 7 8 9 lst = [15 , 8 , 4 , 13 , 6 , 10 , 17 , 1 ] x = int (input ('请输入要查找的数: ' )) for i in range (len (lst)): if lst[i] == x: print ("找到 {}, 位置为 {}" .format (x, i)) break else : print ("未找到" , x)
例题 35:二分查找(要求有序) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 lst = [10 , 30 , 50 , 70 , 90 , 110 , 130 , 150 , 170 ] x = int (input ('请输入要查找的数: ' )) low, high = 0 , len (lst) - 1 while low <= high: mid = (low + high) // 2 if lst[mid] == x: print ("找到 {}, 位置为 {}" .format (x, mid)) break elif lst[mid] > x: high = mid - 1 else : low = mid + 1 else : print ("未找到" , x)
5.6 排序算法 知识点对比
例题 36:冒泡排序 1 2 3 4 5 6 7 8 9 10 def bubble_sort (arr ): n = len (arr) for i in range (n - 1 ): for j in range (0 , n - i - 1 ): if arr[j] > arr[j + 1 ]: arr[j], arr[j + 1 ] = arr[j + 1 ], arr[j] return arr lst = [9 , 8 , 5 , 4 , 2 , 0 ] print (bubble_sort(lst))
例题 37:选择排序 1 2 3 4 5 6 7 8 9 10 11 12 def selection_sort (arr ): n = len (arr) for i in range (n - 1 ): min_idx = i for j in range (i + 1 , n): if arr[j] < arr[min_idx]: min_idx = j arr[i], arr[min_idx] = arr[min_idx], arr[i] return arr lst = [88 , 84 , 83 , 87 , 61 ] print (selection_sort(lst))
例题 38:插入排序 1 2 3 4 5 6 7 8 9 10 11 12 def insertion_sort (arr ): for i in range (1 , len (arr)): key = arr[i] j = i - 1 while j >= 0 and arr[j] > key: arr[j + 1 ] = arr[j] j -= 1 arr[j + 1 ] = key return arr lst = [11.4 , 11.19 , 10.81 , 11.3 , 10.88 , 10.94 ] print (insertion_sort(lst))
例题 39:数值积分——矩形法求定积分
用矩形法求 ∫₀¹ 1/(1+x²) dx(n 等分)
1 2 3 4 5 6 7 8 9 10 11 12 def f (x ): return 1 / (1 + x**2 ) a, b = 0 , 1 n = 1000 h = (b - a) / n area = 0 for i in range (n): area += f(a + i * h) * h print ("定积分近似值:" , area)
第6章 函数与模块化程序设计 ⭐ 6.1 知识框架 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 函数 ├── 定义:def func_name(params): ├── 四要素:函数名、形参(输入)、函数体(处理)、返回值(输出) ├── 参数传递 │ ├── 位置参数:按顺序一一对应 │ ├── 关键字参数:func(a=1, b=2)(不按顺序) │ ├── 默认参数:def func(n, m=1)(有默认值的必须放最后) │ └── 可变参数:*args(元组)、**kwargs(字典) ├── 返回值:return(多值返回为元组) ├── 递归函数:函数调用自身(基例 + 递归链条) ├── 变量作用域 │ ├── 局部变量:函数内部定义 │ ├── 全局变量:函数外部定义 │ └── global 关键字:函数内声明使用全局变量 └── lambda 表达式:匿名函数,单行表达式
6.2 函数定义与参数 例题 40:三角形面积函数(海伦公式) 1 2 3 4 5 6 7 8 9 10 import mathdef area (a, b, c ): """计算三角形面积(海伦公式)""" p = (a + b + c) / 2 s = math.sqrt(p * (p - a) * (p - b) * (p - c)) return s print ("面积:" , area(9.8 , 9.3 , 6.4 ))
例题 41:参数传递方式对比 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 def power (x, n ): return x ** n print (power(2 , 3 )) print (power(n=3 , x=2 )) def power (x, n=2 ): return x ** n print (power(5 )) print (power(5 , 3 ))
例题 42:可变参数 *args 1 2 3 4 5 6 7 8 9 def multiply (n, *args ): """计算 n 与所有可变参数的乘积""" result = n for item in args: result *= item return result print (multiply(10 , 3 )) print (multiply(10 , 3 , 5 , 8 ))
6.3 递归函数 例题 43:阶乘(递归实现) 1 2 3 4 5 6 7 def factorial (n ): if n == 0 or n == 1 : return 1 else : return n * factorial(n - 1 ) print (factorial(5 ))
递归执行过程 :
1 2 3 4 5 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
例题 44:斐波那契数列(递归实现) 1 2 3 4 5 6 7 8 def fib (n ): if n == 1 or n == 2 : return 1 else : return fib(n - 1 ) + fib(n - 2 ) for i in range (1 , 21 ): print (fib(i), end=' ' )
⚠️ 递归 vs 迭代效率:递归 O(1.6ⁿ) vs 迭代 O(n),递归代码简洁但效率低。
例题 45:汉诺塔问题 1 2 3 4 5 6 7 8 9 10 11 12 13 def hanoi (n, a, b, c ): """ n: 盘子数 a: 源柱子 b: 辅助柱子 c: 目标柱子 """ if n == 1 : print (a, '-->' , c) else : hanoi(n - 1 , a, c, b) print (a, '-->' , c) hanoi(n - 1 , b, a, c) hanoi(3 , 'A' , 'B' , 'C' )
输出 :
1 2 3 4 5 6 7 A --> C A --> B C --> B A --> C B --> A B --> C A --> C
6.4 变量作用域 例题 46:局部变量与全局变量 1 2 3 4 5 6 7 8 9 x = 10 def f (): x = 5 print ("函数内部: x =" , x) return x print ("f() =" , f()) print ("函数外部: x =" , x)
例题 47:用 global 修改全局变量 1 2 3 4 5 6 7 8 9 10 x = 10 def f (): global x x = 5 print ("函数内部: x =" , x) return x * x print ("f() =" , f()) print ("函数外部: x =" , x)
例题 48:组合数据类型的特殊规则 1 2 3 4 5 6 7 8 ls = ["F" , "f" ] def func (a ): ls.append(a) return func("C" ) print (ls)
6.5 lambda 表达式 例题 49:lambda 基础用法 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 add = lambda x, y: x + y print (add(10 , 20 )) students = [ {"name" : "张三" , "age" : 18 }, {"name" : "李四" , "age" : 19 }, {"name" : "王五" , "age" : 17 } ] students.sort(key=lambda s: s['age' ]) print (students)students.sort(key=lambda s: s['name' ]) print (students)
6.6 综合编程题 例题 50:判断素数 + 求区间素数和(函数嵌套调用) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 def is_prime (n ): """判断 n 是否为素数""" if n < 2 : return False for i in range (2 , int (n**0.5 ) + 1 ): if n % i == 0 : return False return True def prime_sum (m, n ): """求 [m, n] 区间内所有素数的和""" total = 0 for i in range (m, n + 1 ): if is_prime(i): total += i return total print (prime_sum(1 , 100 ))
例题 51:求 a 到 b 之间的回文素数 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 def is_prime (n ): if n < 2 : return False for i in range (2 , int (n**0.5 ) + 1 ): if n % i == 0 : return False return True def is_palindrome (n ): """判断是否为回文数""" return str (n) == str (n)[::-1 ] def palindrome_primes (a, b ): result = [] for i in range (a, b + 1 ): if is_prime(i) and is_palindrome(i): result.append(i) return result print (palindrome_primes(2 , 200 ))
第7章 文件操作 7.1 知识框架 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 文件操作 ├── 文件三步骤:打开 → 读写 → 关闭 ├── open(file, mode) │ ├── 'r':只读(文件必须存在) │ ├── 'w':只写(覆盖/新建) │ ├── 'a':追加写(不覆盖) │ ├── 'r+'/'w+'/'a+':读写模式 │ └── 'b':二进制模式 ├── 读操作 │ ├── f.read():读取全部 │ ├── f.read(n):读取 n 个字符 │ ├── f.readline():读取一行 │ └── f.readlines():读取全部行(返回列表) ├── 写操作 │ ├── f.write(str):写入字符串 │ └── f.writelines(seq):写入字符串序列 ├── with 语句:自动关闭文件(推荐) └── 文件路径:绝对路径 vs 相对路径
7.2 读写模式速查
7.3 典型例题 例题 52:基本文件读写 1 2 3 4 5 6 7 8 9 10 11 f = open ('test.txt' , 'w' , encoding='utf-8' ) f.write("Hello, Python!\n" ) f.write("这是第二行。\n" ) f.close() f = open ('test.txt' , 'r' , encoding='utf-8' ) content = f.read() print (content)f.close()
例题 53:使用 with 语句(推荐写法) 1 2 3 4 5 6 7 8 9 10 11 with open ('scores.txt' , 'w' , encoding='utf-8' ) as f: f.write("张三 90\n" ) f.write("李四 85\n" ) f.write("王五 92\n" ) with open ('scores.txt' , 'r' , encoding='utf-8' ) as f: for line in f.readlines(): name, score = line.strip().split() print ("{}的成绩是{}分" .format (name, score))
例题 54:追加写入 1 2 3 4 5 6 7 8 9 10 11 12 with open ('log.txt' , 'w' , encoding='utf-8' ) as f: f.write("第1条日志\n" ) with open ('log.txt' , 'a' , encoding='utf-8' ) as f: f.write("第2条日志\n" ) f.write("第3条日志\n" ) with open ('log.txt' , 'r' , encoding='utf-8' ) as f: print (f.read())
输出 :
例题 55:统计文件中的字符数、单词数、行数 1 2 3 4 5 6 7 8 9 10 11 12 13 14 def file_stats (filename ): with open (filename, 'r' , encoding='utf-8' ) as f: content = f.read() chars = len (content) words = len (content.split()) lines = content.count('\n' ) + (0 if content.endswith('\n' ) else 1 ) if not content: lines = 0 print ("字符数: {}, 单词数: {}, 行数: {}" .format (chars, words, lines)) file_stats('test.txt' )
第9章 软件开发基础 9.1 核心知识点
9.2 典型例题 例题 56:异常处理 1 2 3 4 5 6 7 8 9 10 11 12 13 14 try : num = int (input ("请输入一个整数: " )) result = 100 / num print ("100 / {} = {}" .format (num, result)) except ValueError: print ("输入错误:请输入整数!" ) except ZeroDivisionError: print ("错误:除数不能为零!" ) except Exception as e: print ("未知错误:" , e) else : print ("计算成功!" ) finally : print ("程序结束。" )
例题 57:模块化设计示例
设计一个学生成绩管理系统,体现”高内聚、低耦合”的设计思想。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 students = [ {'id' : '001' , 'name' : '张三' , 'score' : 90 }, {'id' : '002' , 'name' : '李四' , 'score' : 85 }, {'id' : '003' , 'name' : '王五' , 'score' : 92 }, ] def find_student (sid ): """按学号查找学生""" for s in students: if s['id' ] == sid: return s return None def add_student (sid, name, score ): """添加学生""" students.append({'id' : sid, 'name' : name, 'score' : score}) def average_score (): """计算平均分""" return sum (s['score' ] for s in students) / len (students) def grade_level (score ): """根据分数返回等级""" if score >= 90 : return "优秀" elif score >= 80 : return "良好" elif score >= 60 : return "及格" else : return "不及格" print ("平均分: {:.1f}" .format (average_score()))for s in students: print ("{}的成绩等级: {}" .format (s['name' ], grade_level(s['score' ])))
📋 附录:常见易错点汇总 一、语法易错
二、逻辑易错
三、数据类型易错