Python 入门高频题
很多孩子学完 for 循环后,能背语法,也能写出简单输出,但一遇到“判断质数”就开始乱试。
这道题真正考的不是数学有多难,而是孩子能不能把一句定义,拆成电脑可以一步步执行的判断过程。
今天这篇文章,重点解决 4 件事:
1. 看懂质数的数学定义2. 会用 % 判断是否整除3. 会用 for 循环寻找反例4. 会用 is_prime 标记最终结果
质数的定义是:一个大于 1 的整数,如果除了 1 和它本身以外,不能被其他正整数整除,那么它就是质数。
把这句话翻译成程序语言,就是:从 2 开始,一个一个尝试,看看有没有数字可以整除它。
只要找到一个能整除的数字,就说明它不是质数;如果所有可能的数字都试完了,仍然找不到,它就是质数。
题目要求
输入一个非负整数 n,判断它是否为质数。
如果是质数,输出 YES;否则输出 NO。
第一步:处理特殊情况0 和 1 都不是质数,所以当 n < 2 时,可以直接输出 NO。
第二步:先做一个假设设置 is_prime = True,先假设 n 是质数。
第三步:用循环寻找反例如果发现 n % i == 0,说明 n 能被 i 整除,它就不是质数。此时把 is_prime 改成 False,并用 break 结束循环。
第四步:根据标记输出答案如果循环结束后 is_prime 仍然是 True,说明没有找到能整除 n 的数,输出 YES;否则输出 NO。
n=int(input())
ifn<2:
print("NO")
else:
is_prime=True
foriinrange(2,int(n**0.5)+1):
ifn%i==0:
is_prime=False
break
ifis_prime:
print("YES")
else:
print("NO")
有些同学会写成 range(2, n),这样也能得到正确答案,但效率不够高。
如果一个数 n 可以写成 a × b,那么 a 和 b 中一定至少有一个不大于 sqrt(n)。
所以代码中写成:
这里的 +1 很重要,因为 Python 的 range 右边界取不到。
1. 把 1 当成质数质数必须是大于 1 的整数,1 不是质数。
2. 循环检查到 n 本身如果写成 range(2, n + 1),就会检查到 n % n == 0,导致判断出错。
3. 看到一次不能整除就马上输出 YES比如判断 9,9 % 2 != 0,但 9 % 3 == 0。不能因为 2 不能整除,就马上说 9 是质数。
4. 不会使用标记变量is_prime 的作用是帮助孩子建立“先假设,再验证”的程序思维。这比一边循环一边乱输出更清晰。
辅导这类题时,不要只问孩子“会不会写代码”。可以让孩子先口头回答:输入 1、2、9、29 时分别会输出什么?为什么?
如果孩子能说清楚每一步判断,代码通常就不会差太远。
少儿编程学习的关键,不是刷很多题,而是通过一道题真正理解:电脑为什么这样判断。
关注码粒星球
如果孩子正在学习 Scratch、Python 或 C++,想系统梳理学习路线、备赛规划或阶段测评,欢迎关注并咨询码粒星球。我们会持续分享少儿编程学习方法与题目解析。