当前位置:首页>python>Python 获取数字每一位的实战教程

Python 获取数字每一位的实战教程

  • 2026-10-05 19:49:39
Python 获取数字每一位的实战教程
【写在前面】可以参看我的视频学,如果喜欢,关注,点赞,转发

在数据处理、算法练习或日常开发中,获取数字的每一位是非常常见的需求。本文将通过 4 种实用方法,带你彻底掌握这个技巧。


方法一:数学运算法(取模+整除)

这是最经典的算法思路,通过 取模运算 % 获取末位,整除 // 去掉末位。

步骤演示:获取数字 1234 的每一位

num=1234

whilenum>0:
digit=num%10# 步骤1:取模获取最后一位
print(f"当前位: {digit}")
num=num//10# 步骤2:整除去掉最后一位

# 输出结果:
# 当前位: 4
# 当前位: 3
# 当前位: 2
# 当前位: 1

进阶:保存到列表(从低位到高位)

defget_digits_math(n):
"""通过数学运算获取每一位,返回列表(个位在前)"""
digits= []
whilen>0:
digits.append(n%10)
n//=10
returndigits

# 测试
number=5678
result=get_digits_math(number)
print(f"数字 {number} 的每一位:{result}")  
# 输出:[8, 7, 6, 5]

⚠️ 注意:此方法获取的顺序是从低位到高位(个位→十位→百位...)


方法二:字符串转换法(最简洁)

将数字转为字符串,直接遍历每个字符,再转回整数。

步骤演示

defget_digits_string(n):
"""字符串法获取每一位,返回列表(高位在前)"""
# 步骤1:转为字符串 → 步骤2:遍历每个字符 → 步骤3:转回整数
return [int(char) forcharinstr(n)]

# 测试
number=5678
result=get_digits_string(number)
print(f"数字 {number} 的每一位:{result}")
# 输出:[5, 6, 7, 8]

特点对比

特性数学运算法字符串法
代码长度稍长极简
执行效率更快(纯数学运算)稍慢(类型转换开销)
返回顺序低位→高位高位→低位
适用场景算法竞赛、大数据量日常开发、快速原型

方法三:指定位置获取(如获取百位数)

有时我们只需要特定位置的数字,比如获取千位或百位。

defget_digit_at_position(n, position):
"""
    获取数字 n 的第 position 位(从右数,个位是1)
    例如:get_digit_at_position(1234, 3) 返回 2(百位)
    """
for_inrange(position-1):
n//=10
returnn%10

# 实战示例:分别获取个、十、百、千位
number=1234
print(f"个位:{get_digit_at_position(number, 1)}")   # 4
print(f"十位:{get_digit_at_position(number, 2)}")   # 3
print(f"百位:{get_digit_at_position(number, 3)}")   # 2
print(f"千位:{get_digit_at_position(number, 4)}")   # 1

方法四:递归法(算法思维训练)

适合理解递归思想,面试常考。

defget_digits_recursive(n):
"""递归获取每一位,返回列表(高位在前)"""
ifn<10:
return [n]
# 先获取前面所有位,最后加上当前末位
returnget_digits_recursive(n//10) + [n%10]

# 测试
number=5678
result=get_digits_recursive(number)
print(f"数字 {number} 的每一位:{result}")
# 输出:[5, 6, 7, 8]

综合实战:水仙花数判断

水仙花数:一个 n 位数,其各位数字的 n 次幂之和等于它本身。例如:153 = 1³ + 5³ + 3³

defis_narcissistic(num):
"""判断是否为水仙花数"""
digits=get_digits_string(num)      # 获取每一位
n=len(digits)                      # 位数
total=sum(d**nfordindigits)  # 每位数的n次幂之和

returntotal==num

# 测试
test_numbers= [153, 370, 371, 407, 123]
fornumintest_numbers:
result="是水仙花数 ✅"ifis_narcissistic(num) else"不是水仙花数 ❌"
print(f"{num}{result}")

# 输出:
# 153 是水仙花数 ✅
# 370 是水仙花数 ✅
# 371 是水仙花数 ✅
# 407 是水仙花数 ✅
# 123 不是水仙花数 ❌

总结速查表

需求场景推荐方法核心代码
快速获取所有位字符串法[int(c) for c in str(n)]
高性能/大数据量数学运算法while n>0: n%10; n//=10
获取指定位数位置定位法循环 //=10 后 %10
算法面试/递归思维递归法递归 n//10 + [n%10]

练习题

  1. 基础:编写函数,计算一个数字的各位之和。

  2. 进阶:找出 1-1000 中的所有水仙花数。

  3. 挑战:反转一个整数(如 123 → 321),注意处理负数。


最新文章

随机文章