你好,我是西湖码客,一个技术爱好者!在前面的课程中,我们学会了阶乘求和、数列计算等数学问题。今天,我们要让Python成为"幸运数猎人",探索一个经典的编程问题——找出能被3或5整除的数并求和!
想象一下:你有一篮子从0到n-1的自然数,要挑出所有能被3整除或能被5整除的"幸运数",然后计算它们的和。今天,我们就来编写一个智能筛选程序,让Python帮我们快速完成这个任务。
01
任务描述
02
编程实现
先看成果:你的"幸运数猎手"
# 计算0到n-1中能被3或5整除的数之和# 1. 获取用户输入的nn = int(input())# 2. 初始化总和为0total = 0# 3. 遍历0到n-1的每个自然数for i in range(n): # range(n)生成0,1,2,...,n-1 # 检查是否能被3或5整除 if i % 3 == 0 or i % 5 == 0: total = total + i # 如果是"幸运数",就加到总和中# 4. 输出结果print(total)
运行这个程序,输入10,你会看到:
太棒了!Python就像一个高效的筛子,瞬间就找出了0到9中能被3或5整除的数,并计算了它们的和。让我们一步步探索这个程序的筛选逻辑。
生活中的筛选:从水果到数字
水果筛选
有一筐混合水果:苹果、香蕉、橙子、葡萄...
要挑出所有苹果或香蕉
统计挑出的水果总重量
数字筛选
有一组自然数:0,1,2,3,4,5,6,7,8,9
要挑出所有能被3整除或能被5整除的数
计算这些数的和
学生筛选
有一个班级的学生
要挑出数学成绩90分以上或英语成绩90分以上的学生
计算这些学生的平均分
第一步:确定"搜索范围"——获取n的值
这行代码确定我们要检查的范围:
接收输入:input()
等待用户输入一个数字
就像问:"你要检查多少个数?"
类型转换:int(...)
保存n:n = ...
将数字保存到变量n中
表示要检查0到n-1的n个自然数
第二步:准备"收集篮"——初始化总和
这行代码准备一个空的"收集篮":
初始状态:总和从0开始
变量命名:total意为"总和",直观易懂
为什么是0:就像空的篮子,从0开始装"幸运数"
第三步:启动"筛选机器"——for循环
for i in range(n): # range(n)生成0,1,2,...,n-1 # 检查是否能被3或5整除 if i % 3 == 0 or i % 5 == 0: total = total + i # 如果是"幸运数",就加到总和中
这是程序的核心,就像一台高效的筛选机器:
for循环:逐一检查每个数
range(n):生成从0到n-1的整数序列
示例:n=10,range(10)生成[0,1,2,3,4,5,6,7,8,9]
每次循环,i取序列中的一个值
条件判断:检查是否为"幸运数"
i % 3 == 0:检查是否能被3整除
i % 5 == 0:检查是否能被5整除
or:逻辑或运算符,两个条件满足一个即可
累加操作:收集"幸运数"
total = total + i:把当前的i加到total中
可以简写为total += i
筛选过程演示(n=10)
i=0: 0%3=0 → 是幸运数 → total=0+0=0
i=1: 1%3=1, 1%5=1 → 不是幸运数
i=2: 2%3=2, 2%5=2 → 不是幸运数
i=3: 3%3=0 → 是幸运数 → total=0+3=3
i=4: 4%3=1, 4%5=4 → 不是幸运数
i=5: 5%5=0 → 是幸运数 → total=3+5=8
i=6: 6%3=0 → 是幸运数 → total=8+6=14
i=7: 7%3=1, 7%5=2 → 不是幸运数
i=8: 8%3=2, 8%5=3 → 不是幸运数
i=9: 9%3=0 → 是幸运数 → total=14+9=23
结束循环,total=23
筛选流程图
开始 ↓total = 0 ↓i从0到n-1循环: ↓i能被3整除? → 是 → 加到total ↓否i能被5整除? → 是 → 加到total ↓否继续下一个i ↓是否i=n-1? → 是 → 结束循环 ↓否继续循环 ↓输出total
第四步:报告"收获总量"——输出结果
这行代码宣布最终结果:
常见问题与调试技巧
问题1:理解范围错误
# 错误示例:错误理解范围n = 10total = 0# 错误:使用了range(1, n),漏掉了0,多算了10for i in range(1, n): # 生成1到9,漏了0,而且题目要求0到n-1 if i % 3 == 0 or i % 5 == 0: total += iprint(total) # 输出:23(巧合,但逻辑错误)# 正确示例total = 0for i in range(n): # 生成0到9 if i % 3 == 0 or i % 5 == 0: total += iprint(total) # 输出:23
记住:range(n)生成0到n-1的序列
问题2:逻辑运算符错误
# 错误示例:使用了and而不是orn = 10total = 0for i in range(n): if i % 3 == 0 and i % 5 == 0: # 错误:要同时被3和5整除 total += iprint(total) # 输出:0(只有0和15,15不在范围内)# 正确示例total = 0for i in range(n): if i % 3 == 0 or i % 5 == 0: # 正确:被3整除或被5整除 total += iprint(total) # 输出:23
学习总结
通过这个筛选求和程序,我们学到了:
循环遍历:用for循环遍历序列中的每个元素
条件判断:用if语句和逻辑运算符进行筛选
取余运算:%运算符检查整除性
逻辑运算符:or表示"或",满足一个条件即可
边界处理:正确处理0到n-1的范围
记住,编程不仅是写代码,更是培养逻辑思维和数学建模能力。今天,你用Python解决了经典的筛选求和问题。继续探索,你会发现编程能解决各种数学和实际问题!
从简单筛选到复杂条件,今天你不仅学会了筛选求和,更掌握了用编程解决数学问题的思维方法!