孩子会写循环,不代表真的理解循环。
很多孩子学 Python 时,while 会背,缩进也会写,可一遇到“把一个整数一位一位拆开”,马上卡住。
比如输入 2026,程序怎样拿到它的个位 6、十位 2、百位 0、千位 2?
这道题看起来是 Python 语法题,其实是在考孩子有没有建立“数位”的数学思维。今天码粒星球用一道经典“数位和”题,把取余、整除和循环一次讲透。
一、今天这题练什么?
题目:数位和
输入一个正整数 n,计算并输出它各位数字之和。
样例:2026 → 2 + 0 + 2 + 6 = 10
这类题特别适合作为 Python 入门分水岭:孩子如果能看懂,就说明他开始把“数学步骤”翻译成“程序步骤”;如果看不懂,通常不是不努力,而是还没理解数字怎么被程序拆开。
二、核心口诀:取个位,去个位
拆数字只需要抓住两个动作:
n % 10:取出当前个位
n // 10:去掉当前个位
把 2026 拆开,过程是这样的:
n =2026
2026%10=6取出个位
2026//10=202去掉个位
202%10=2
202//10=20
20%10=0
20//10=2
2%10=2
2//10=0拆完了
给孩子的一句话解释
每次都先看最后一位,再把最后一位擦掉。一直擦到数字变成 0,就拆完了。
三、为什么用 while 循环?
因为我们一开始不知道这个数有几位。三位数要拆 3 次,四位数要拆 4 次,九位数要拆 9 次。循环次数不是老师提前告诉程序的,而是数字自己决定的。
所以这里最自然的条件就是:只要 n > 0,就继续拆。
四、参考代码
n=int(input())
total=0
whilen>0:
digit=n%10
total+=digit
n=n//10
print(total)
五、代码逐行看
n = int(input()):读入一个正整数。
total = 0:准备一个变量,用来累计各位数字之和。
while n > 0::只要数字还没拆完,就继续循环。
digit = n % 10:取出当前个位。
total += digit:把这一位加到答案里。
n = n // 10:去掉已经处理过的个位。
print(total):输出最终结果。
六、最容易错的 3 个地方
易错点 1:把 / 和 // 混在一起
2026 / 10 得到的是小数 202.6,但我们要的是去掉个位后的整数 202,所以必须写 2026 // 10。
易错点 2:忘记更新 n
whilen>0:
digit=n%10
total+=digit
这段代码少了 n = n // 10。如果不更新 n,它永远大于 0,循环就停不下来。
易错点 3:想从最高位开始拆
人读数字习惯从左往右,但程序拆数字通常从个位开始最简单。n % 10 一下就能拿到个位,最高位反而要多判断几位数。
七、这题和奥数有什么关系?
奥数里的数位题,经常会问:各位数字之和是多少?能不能被 3 整除?某个范围内有多少个满足条件的数?
这些问题本质上都在训练孩子理解“一个数不是一整块,而是由一位一位组成的”。编程把这个过程变得更具体:每一步怎么取、怎么删、什么时候停,都必须写清楚。
八、家长可以怎么陪孩子练?
先别急着让孩子背代码。可以拿纸笔做一次手工拆数:
583
583%10=3
583//10=58
58%10=8
58//10=5
5%10=5
5//10=0
孩子能把这个过程手算出来,再回到 Python,理解会快很多。
进阶练习
- 输入一个整数,判断它是不是回文数,例如
12321。
写在最后
少儿编程不是越早学复杂语法越好,而是要在合适的题目里,把数学思维、逻辑表达和代码能力连起来。
如果你想知道孩子适合从 Scratch、Python 还是 C++ 开始,或者想系统提升竞赛题、真题解析和数学思维能力,欢迎关注并咨询「码粒星球」。我们会继续用孩子听得懂、家长看得明白的方式,把编程学习讲清楚。