当前位置:首页>python>Python基础学习手册第14章:6大核心算法入门+案例实战演示(上篇)

Python基础学习手册第14章:6大核心算法入门+案例实战演示(上篇)

  • 2026-10-11 08:22:41
Python基础学习手册第14章:6大核心算法入门+案例实战演示(上篇)
前面我们已经学会了很多基础知识点
今天我们一起看看算法
很多同学一听说算法,就好像觉得很难
但是真的问它知不知道算法是什么
却一知半解的
这样的同学就是自己给自己设限哈
实际上,如果明白了算法是什么了
那么算法入门还是很简单的
好了
进入今天的学习环节⬇️:

📖 本文知识点速览

算法是什么?

接下来上篇+下篇的知识内容
直接用表格呈现哈,直观点🔎
算法名称
核心逻辑
通俗解释
经典场景
枚举算法
挨个试所有可能性,找到符合条件的答案
一个一个找,直到找到符合要求的
百元买百鸡、水仙花数、范围查找等
模拟算法
完全按照题目规则,一步步模拟执行
题目怎么说,我就怎么做
报数游戏、蜗牛爬井、小游戏逻辑等
贪心算法
每一步都选当前最优,最终得到最优的
每次都选最优的
找零钱、活动选择、最优分配等
递推算法
从初始条件出发,按规律一步步推出结果
从前往后,一步一步算
斐波那契数列、爬楼梯问题等
递归算法
把大问题拆成单个的小问题,逐步解决
自己调用自己,拆到最小问题
阶乘计算、斐波那契数列、树形结构等
搜索算法
在数据里按规则查找目标元素
挨个找、快速找目标
成绩查找、元素定位、数据匹配等
算法其实就是解决问题的固定步骤和方法
📚比如:
做西红柿炒鸡蛋
第1步:切西红柿🍅
第2步:锅里放油,加温
第3步:放鸡蛋开炒
第4步:放西红柿
第5步:放调料
第6步:出锅装盘
这一套能稳定做出西红柿🍅炒鸡蛋的固定步骤
就是西红柿炒鸡蛋的算法
有点像一些预制菜似的,只要严格按照这个步骤进行完成,就可以做出来几乎一样的味道的同一种菜了😂(比喻不要较真哈)
那么,在实战中,很多题目和细节是不同的,也就需要我们去不断调整和优化这个算法的过程。
可以理解为,就是每个厨师做菜的口味和理解不同,同一个菜做出来口感会不一样,但是整体的框架和过程都是差不多的。只是调料之类的放的不一样。
接下来,我们就开始通过案例实战一下
🔎枚举算法:
✍️核心优势:
逻辑简单、不会漏答案,是编程入门最容易上手的算法,也是考试的常用的算法之一
📚案例 :百元买百鸡

题目:

公鸡 5元 1 只,母鸡 3 元 1 只,小鸡 3 只 1 元。用 100 元买 100 只鸡,请问公鸡、母鸡、小鸡可以各买多少只?

💡解题思路:

  1. 枚举所有可能的公鸡数量(最多 20 只,因为 5×20=100)
  2. 枚举所有可能的母鸡数量(最多 33 只,因为 3×33=99)
  3. 小鸡数量 = 100 - 公鸡数量 - 母鸡数量
  4. 检查总钱数是否正好等于 100 元,符合条件输出结果
🖥️代码
# 枚举公鸡数量:0到20只for x in range(0, 21):    # 枚举母鸡数量:0到33只    for y in range(0, 34):        # 计算小鸡数量        z = 100 - x - y        # 检查总钱数是否为100文,小鸡数量必须是3的倍数        if 5*x + 3*y + z/3 == 100 and z % 3 == 0:            print(f"公鸡{x}只,母鸡{y}只,小鸡{z}只")
当然还有很多写法,都可以实现,这里仅仅是演示1种哈
📚案例 :水仙花数

题目:

找出 100-999 之间所有的 “水仙花数”。

水仙花数是指一个三位数,它的每个位上的数字的立方和,等于它本身。比如 153=1x1x1+5x5x5+3x3x3,就是水仙花数。

💡解题思路

  1. 枚举所有 100-999 的三位数
  2. 单独拆分出这个三位数的百位、十位、个位
  3. 判断三个数字的立方和是否等于原数,符合则输出
🖥️代码
# 枚举所有三位数for i in range(100, 1000):    # 拆分百位、十位、个位    b = i // 100  # 百位:整除100    s = i // 10 % 10  # 十位:先整除10,再取余10    g = i % 10       # 个位:取余10    # 判断是否为水仙花数 (立方用幂运算符)    if b**3 + s**3 + g**3 == num:        print(f"{i}是水仙花数")
🔎模拟算法:
✍️核心优势:
逻辑完全贴合题目,不需要复杂的数学推导,考验的是对题目的理解能力

📚案例 :逢3说‘过’的小游戏

题目:

大家围成一圈,从 1 开始依次报数,报到 3 的倍数、或者数字里带 3 的,就喊 “过”,否则喊数字

请输出 1-50 的完整报数结果

💡解题思路:

  1. 模拟从 1 到 50 的报数过程,一个个处理每个数字
  2. 判断规则:
  3. 数字是 3 的倍数,或者数字里包含字符串类型的 “3”(数据类型转化),
  4. 就输出 “过”
  5. 不符合要求的,直接输出数字本身
🖥️代码
# 模拟1到50的报数for x in range(1, 51):    # 判断是否要喊“过”:是3的倍数 或者 数字里包含3    if x % 3 == 0 or "3" in str(x):        print("过")    else:        print(x)

📚案例 :蜗牛爬井问题(小学奥数经典)

题目:

一只蜗牛从 10 米深的井底往上爬,白天往上爬 4 米,晚上往下滑 2 米。请问蜗牛第几天能爬出井口?

💡解题思路:

  1. 模拟每一天的过程:
  2. 先白天爬,判断是否爬出井口,爬出就结束
  3. 没爬出的话,晚上再下滑,天数 + 1
  4. ❗️重点提醒:白天爬出井口后,就不会再下滑了
🖥️代码
zm = 10  # 井深10米day = 0     # 天数m = 0  # 蜗牛当前高度# 模拟爬井过程while True:    day += 1  # 新的一天开始    # 白天往上爬4米    m += 4    # 判断是否爬出井口    if m >= zm:        print(f"蜗牛第{day}天爬出了井口!")        break    # 没爬出,晚上下滑2米    m -= 2
🔎贪心算法:
✍️核心优势:
效率高、逻辑简单,适合有明确最优选择规则的问题

📚案例 :找零钱问题(入门经典)

题目:

超市找零钱,有 1 元、5 元、10 元、20 元的纸币,

现在要找给顾客 36 元,请问最少需要几张纸币?

💡解题思路:

贪心策略:

每次都选不超过剩余金额的最大面额纸币

直到找完所有金额,这样能保证纸币张数最少

🖥️代码

# 纸币面额,从大到小排序q = [20, 10, 5, 1]# 要找的总金额y = 36# 纸币张数count = 0# 贪心找零for i in q:    # 只要当前面额小于等于剩余金额,就用这个面额    while y >= i:        y -= i        count += 1print(f"最少需要{count}张纸币")
📚案例 :选择问题

题目:

学校有 4 个兴趣活动,时间分别是

1-2 点、2-3 点、1-3 点、3-4 点

你最多能参加几个不冲突的活动?

💡解题思路

贪心策略:

每次都选结束时间最早的活动,这样能留出最多的时间参加后面的活动

最终能参加的活动数量就是最多的了

🖥️代码

# 活动列表:(开始时间, 结束时间)hd = [(1, 2), (2, 3), (1, 3), (3, 4)]# 按结束时间从小到大排序hd.sort(key=lambda x: x[1])count = 0  # 参加的活动数量js = 0  # 上一个活动的结束时间# 贪心选择活动for x in hd:    start, end = x    # 当前活动开始时间 >= 上一个活动结束时间,不冲突    if start >= js:        count += 1        js = end        print(f"参加了{start}-{end}点的活动")print(f"最多能参加{count}个活动")
💡如果各位同学有其它有趣经典的题目,也可以评论交流~
✌️,那么今天关于算法的上篇内容的笔记,到这里就分享结束了✌️
你们学会了吗❓️
要好好练习,多写才能熟能生巧
📌下篇预计在(5.1后面才能发布啦)
文章底部有往期文章哦⬇️
如果觉得有用的话,点个赞👍,转发给身边的朋友👬,你们的认可是我的动力,只有更多的兴趣相同的人看见,才会碰撞出不同的思维火花🔥
有任何问题欢迎评论留言
🖥️练习1:
用枚举算法,找出1-100之间所有能被7整除的数
🖥️练习2:
用模拟算法,输出1-100之间所有的偶数
往期文章点这里⬇️:
2026信息素养Python小学组(4--6年级)考纲分析:注意新增考点
Python基础学习手册第13章:random随机库的运用,验证码,抽奖,抽签,随机密码等案例实战
Python基础学习手册数据模块总结:一张表格对比列表,元组,字典,集合以及集合6个使用场景(重点)
Python基础学习手册第12章:集合(set)通关,增删改查,交,差,并集,去重操作,案例实战
Python基础学习手册第11章:元组(tuple),不可变的数据类型教程学习

最新文章

随机文章