☰
从架构到实战:7 张图带你快速掌握核心开发流程
2026/10/8 23:16:34 网站建设 项目流程

引言

本文精选三个经典的 Python 实战案例,通过逐行解析代码,帮助初学者快速掌握 Python 的核心语法与编程思想。

案例一:猜数字游戏——重点讲解循环结构(while与for)、条件判断、函数定义与返回值,以及random随机数模块的使用,让读者理解如何用代码实现一个完整的交互式小游戏。

案例二:顺序查找与二分查找对比——通过统计 1000 局模拟数据,直观对比两种查找算法的效率差异,帮助读者理解算法的时间复杂度概念,体会二分查找"每次缩小一半区间"的高效之处。

案例三:蒙特卡洛法估算圆周率——利用随机投点与几何概率的原理估算 Π 值,展示random.uniform()生成随机浮点数、循环累加统计以及函数封装等技巧,让读者感受"用随机模拟解决数学问题"的蒙特卡洛思想。

三个案例由浅入深,从基础语法到算法思维层层递进。建议读者先通读全文了解整体结构,再跟随逐行解释动手实践,相信会对 Python 编程有更扎实的理解。

下面我们来逐行分析这个猜数字游戏的 Python 代码。

代码逐行解释

1. 导入随机模块

importrandom
  • import是 Python 中导入模块的关键字。
  • random是 Python 标准库中的随机数模块,用于生成随机数。
  • 这一行的作用是引入random模块,以便后面使用random.randint()生成随机数。

2. 定义猜数函数

defguess_one():
  • def是 Python 中定义函数的关键字。
  • guess_one是函数名,表示"猜一次"(即猜一局)。
  • 括号()表示该函数不需要传入任何参数。
  • 冒号:表示函数体的开始。

3. 生成随机目标数

a=random.randint(1,100)
  • random.randint(1, 100)会生成一个 1 到 100 之间的随机整数(包含 1 和 100)。
  • 这个随机数被赋值给变量a,它就是本局游戏需要猜中的目标数字。

4. 初始化记录列表和计数器

b=[]c=0
  • b = []创建了一个空列表,用来记录玩家每次猜测的数字。
  • c = 0初始化计数器,用来统计玩家一共猜了多少次。

5. 进入无限循环

whileTrue:
  • while True会创建一个无限循环,循环体将一直执行,直到遇到break或return才会退出。
  • 这里用无限循环是因为玩家可能猜很多次,直到猜中为止。

6. 获取玩家输入

s=input("请输入1~100的整数猜测:")
  • input()函数会在屏幕上显示提示文字,并等待玩家从键盘输入。
  • 玩家输入的内容以字符串形式保存到变量s中。

7. 检查输入是否为整数

ifnots.isdigit():print("输入不是整数,请重新输入!")continue
  • s.isdigit()会检查字符串s是否全部由数字组成,是则返回True,否则返回False。
  • not是逻辑取反,所以not s.isdigit()表示"输入的不是纯数字"。
  • 如果输入不是整数(比如输入了字母或符号),就打印提示信息,然后continue跳过本次循环,重新让玩家输入。

8. 将字符串转换为整数

num=int(s)
  • int(s)把字符串s转换为整数类型,并赋值给变量num。
  • 因为前面已经确认s是纯数字,所以这里可以安全转换。

9. 检查数字范围

ifnot(1<=num<=100):print("输入的不是1~100的数,请重新输入!")continue
  • 1 <= num <= 100是 Python 特有的链式比较,判断num是否在 1 到 100 之间(含两端)。
  • 如果数字超出范围,就打印提示并continue,让玩家重新输入。

10. 更新计数器和记录列表

c=c+1b.append(num)
  • c = c + 1表示计数器自增 1,即本次猜测次数加一。
  • b.append(num)把本次猜测的数字num添加到列表b的末尾,用于记录猜测过程。

11. 比较大小并给出提示

ifnum<a:print("小了")elifnum>a:print("大了")else:print("猜对了!本轮一共猜了",c,"次")print("猜测过程记录:",b)returnc
  • if num < a:如果猜的数字比目标数小,打印"小了"。
  • elif num > a:如果猜的数字比目标数大,打印"大了"。
  • else:如果既不小于也不大于,说明猜中了,打印本轮猜测次数和过程记录。
  • return c会把本轮猜测次数c作为函数的返回值返回,同时结束函数执行。

12. 主程序开始

print("猜数字游戏(共三局)")total_times=0
  • 打印游戏标题,提示玩家一共要玩三局。
  • total_times = 0初始化一个累加器,用来累计三局的总猜测次数。

13. 循环玩三局

foriinrange(3):print("第",i+1,"局")one_count=guess_one()total_times=total_times+one_count
  • for i in range(3)会让循环执行 3 次,i依次取 0、1、2。
  • print("第", i + 1, "局")打印当前是第几局(因为i从 0 开始,所以加 1)。
  • one_count = guess_one()调用猜数函数,并把返回的本局猜测次数保存到one_count。
  • total_times = total_times + one_count把本局次数累加到总次数中。

14. 计算并输出平均值

avg=total_times/3print("3局游戏平均猜测次数:",avg)
  • total_times / 3用总次数除以 3,得到三局的平均猜测次数。
  • print()把平均值输出到屏幕上。

完整代码回顾



顺序查找与二分查找对比统计——逐行解释

下面我们来逐行分析这段对比顺序查找与二分查找性能的 Python 代码。

1. 导入随机模块
importrandom
  • import是 Python 中导入模块的关键字。
  • random是 Python 标准库中的随机数模块,用于生成随机数。
  • 这一行的作用是引入random模块,以便后面使用random.randint()生成随机目标数。
2. 定义顺序查找函数
defshunxu(answer):count=0a=0whileTrue:a=a+1count=count+1ifa==answer:returncount
  • def shunxu(answer):定义了一个名为shunxu的函数,参数answer是要查找的目标数字。
  • count = 0初始化计数器,用来记录查找次数。
  • a = 0初始化变量a,它从 0 开始逐个递增,模拟顺序查找的过程。
  • while True:创建无限循环,直到找到目标数字才退出。
  • a = a + 1每次循环让a自增 1,即从 1、2、3……依次尝试。
  • count = count + 1计数器同步自增,记录当前是第几次查找。
  • if a == answer:判断当前尝试的数字是否等于目标数字。
  • return count如果找到了,就返回查找次数,同时结束函数。
3. 定义二分查找函数
deferfen(answer):low=1high=1000count=0whileTrue:mid=(low+high)//2count=count+1ifmid==answer:returncountelifmid<answer:low=mid+1else:high=mid-1
  • def erfen(answer):定义二分查找函数,参数answer是目标数字。
  • low = 1和high = 1000分别设置查找区间的下界和上界(因为目标范围是 1~1000)。
  • count = 0初始化计数器。
  • while True:无限循环,直到找到目标。
  • mid = (low + high) // 2计算中间值,//是整除运算符,保证结果是整数。
  • count = count + 1每次查找次数加一。
  • if mid == answer:如果中间值正好等于目标,返回查找次数。
  • elif mid < answer:如果中间值比目标小,说明目标在右半部分,把下界low更新为mid + 1。
  • else:否则说明目标在左半部分,把上界high更新为mid - 1。
  • 每次循环区间都会缩小一半,这就是二分查找高效的原因。
4. 定义统计函数
deftong_ji(total_round=1000):sum_shunxu=0max_shunxu=0sum_erfen=0max_erfen=0
  • def tong_ji(total_round=1000):定义统计函数,参数total_round默认值为 1000,表示要模拟的局数。
  • sum_shunxu = 0初始化顺序查找的总次数累加器。
  • max_shunxu = 0初始化顺序查找的最大次数记录。
  • sum_erfen = 0初始化二分查找的总次数累加器。
  • max_erfen = 0初始化二分查找的最大次数记录。
5. 循环模拟多局
foriinrange(total_round):answer=random.randint(1,1000)num1=shunxu(answer)num2=erfen(answer)
  • for i in range(total_round):循环执行total_round次(默认 1000 次)。
  • answer = random.randint(1, 1000)每次随机生成一个 1 到 1000 之间的目标数字。
  • num1 = shunxu(answer)调用顺序查找函数,得到查找次数并保存到num1。
  • num2 = erfen(answer)调用二分查找函数,得到查找次数并保存到num2。
6. 累加顺序查找的统计结果
sum_shunxu=sum_shunxu+num1ifnum1>max_shunxu:max_shunxu=num1
  • sum_shunxu = sum_shunxu + num1把本次顺序查找的次数累加到总和中。
  • if num1 > max_shunxu:判断本次次数是否大于历史最大值。
  • max_shunxu = num1如果是,更新最大次数记录。
7. 累加二分查找的统计结果
sum_erfen=sum_erfen+num2ifnum2>max_erfen:max_erfen=num2
  • sum_erfen = sum_erfen + num2把本次二分查找的次数累加到总和中。
  • if num2 > max_erfen:判断本次次数是否大于历史最大值。
  • max_erfen = num2如果是,更新最大次数记录。
8. 计算平均值
avg_shunxu=sum_shunxu/total_round avg_erfen=sum_erfen/total_round
  • avg_shunxu = sum_shunxu / total_round用顺序查找总次数除以局数,得到平均查找次数。
  • avg_erfen = sum_erfen / total_round用二分查找总次数除以局数,得到平均查找次数。
9. 输出统计结果
print("1000局统计对比表")print("策略|t平均次数|t最多次数")print("顺序查找|t",avg_shunxu,"|t",max_shunxu)print("二分查找|t",avg_erfen,"t",max_erfen)
  • print("1000局统计对比表")打印统计表的标题。
  • print("策略|t平均次数|t最多次数")打印表头,|t是制表符,用于对齐列。
  • print("顺序查找|t", avg_shunxu, "|t", max_shunxu)打印顺序查找的平均次数和最大次数。
  • print("二分查找|t", avg_erfen, "t", max_erfen)打印二分查找的平均次数和最大次数。
10. 调用统计函数
tong_ji(1000)
  • tong_ji(1000)调用统计函数,传入参数 1000,表示模拟 1000 局游戏进行对比统计。
完整代码回顾
importrandomdefshunxu(answer):count=0a=0whileTrue:a=a+1count=count+1ifa==answer:returncountdeferfen(answer):low=1high=1000count=0whileTrue:mid=(low+high)//2count=count+1ifmid==answer:returncountelifmid<answer:low=mid+1else:high=mid-1deftong_ji(total_round=1000):sum_shunxu=0max_shunxu=0sum_erfen=0max_erfen=0foriinrange(total_round):answer=random.randint(1,1000)num1=shunxu(answer)num2=erfen(answer)sum_shunxu=sum_shunxu+num1ifnum1>max_shunxu:max_shunxu=num1 sum_erfen=sum_erfen+num2ifnum2>max_erfen:max_erfen=num2 avg_shunxu=sum_shunxu/total_round avg_erfen=sum_erfen/total_roundprint("1000局统计对比表")print("策略|t平均次数|t最多次数")print("顺序查找|t",avg_shunxu,"|t",max_shunxu)print("二分查找|t",avg_erfen,"t",max_erfen)tong_ji(1000)

蒙特卡洛法估算圆周率——逐行解释

下面我们来逐行分析这段用蒙特卡洛方法估算圆周率(Π)的 Python 代码。

1. 定义估算函数
defqiu_pai(dian_shu):yuan_nei=0
  • def qiu_pai(dian_shu):定义了一个名为qiu_pai的函数,参数dian_shu表示要投掷的随机点数。
  • yuan_nei = 0初始化计数器,用来统计落在单位圆内的点数。
2. 循环投掷随机点
foriinrange(dian_shu):x=random.uniform(-1,1)y=random.uniform(-1,1)
  • for i in range(dian_shu):循环执行dian_shu次,每次投掷一个随机点。
  • x = random.uniform(-1, 1)生成一个 -1 到 1 之间的随机浮点数,作为点的横坐标。
  • y = random.uniform(-1, 1)生成一个 -1 到 1 之间的随机浮点数,作为点的纵坐标。
3. 判断点是否在圆内
ifx*x+y*y<=1:yuan_nei=yuan_nei+1
  • x * x + y * y <= 1判断该点到原点的距离平方是否小于等于 1,即是否落在单位圆内。
  • yuan_nei = yuan_nei + 1如果点在圆内,计数器加一。
4. 计算估算值并返回
gu_suan_pai=4*yuan_nei/dian_shureturngu_suan_pai
  • gu_suan_pai = 4 * yuan_nei / dian_shu用圆内点数除以总点数再乘以 4,得到圆周率的估算值(蒙特卡洛原理:圆面积与正方形面积之比为 Π/4)。
  • return gu_suan_pai返回估算出的 Π 值,同时结束函数。
5. 定义测试函数
defce_shi():tou_dian_shu_zu=[10000,100000,1000000]real_pai=3.14159
  • def ce_shi():定义测试函数,用来对比不同投点数量下的估算精度。
  • tou_dian_shu_zu = [10000, 100000, 1000000]定义了一个列表,包含三组投点数量:1 万、10 万、100 万。
  • real_pai = 3.14159设置圆周率的真实参考值,用于计算误差。
6. 遍历投点数量
fordian_shu_liangintou_dian_shu_zu:ji_suan_de_pai=qiu_pai(dian_shu_liang)wu_cha=abs(ji_suan_de_pai-real_pai)
  • for dian_shu_liang in tou_dian_shu_zu:依次遍历列表中的每组投点数量。
  • ji_suan_de_pai = qiu_pai(dian_shu_liang)调用估算函数,得到该投点数量下的 Π 估算值。
  • wu_cha = abs(ji_suan_de_pai - real_pai)用abs()计算估算值与真实值之差的绝对值,即误差。
7. 输出测试结果
print("投点数量:",dian_shu_liang)print("估算Π值:",ji_suan_de_pai)print("和3.14159的误差:",wu_cha)print("------------------------------")
  • print("投点数量:", dian_shu_liang)打印当前投点数量。
  • print("估算Π值:", ji_suan_de_pai)打印估算出的 Π 值。
  • print("和3.14159的误差:", wu_cha)打印与真实值的误差。
  • print("------------------------------")打印分隔线,便于区分不同组的结果。
8. 调用测试函数
ce_shi()
  • ce_shi()调用测试函数,依次用 1 万、10 万、100 万三个投点数量进行估算并输出结果。
完整代码回顾
importrandomdefqiu_pai(dian_shu):yuan_nei=0foriinrange(dian_shu):x=random.uniform(-1,1)y=random.uniform(-1,1)ifx*x+y*y<=1:yuan_nei=yuan_nei+1gu_suan_pai=4*yuan_nei/dian_shureturngu_suan_paidefce_shi():tou_dian_shu_zu=[10000,100000,1000000]real_pai=3.14159fordian_shu_liangintou_dian_shu_zu:ji_suan_de_pai=qiu_pai(dian_shu_liang)wu_cha=abs(ji_suan_de_pai-real_pai)print("投点数量:",dian_shu_liang)print("估算Π值:",ji_suan_de_pai)print("和3.14159的误差:",wu_cha)print("------------------------------")ce_shi()

SEO 摘要:本文通过 7 张关键示意图,从整体架构、核心流程到配置与运行结果,系统讲解开发中的核心要点与进阶用法,帮助开发者快速上手并掌握实战技巧。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询