楼主: CDA网校
318 0

Python 取模运算符(%)完整使用指南(附大量示例) [推广有奖]

管理员

已卖:189份资源

泰斗

12%

还不是VIP/贵宾

-

威望
3 级
论坛币
155168 个
通用积分
18824.9557
学术水平
308 点
热心指数
320 点
信用等级
283 点
经验
243445 点
帖子
7869
精华
19
在线时间
4563 小时
注册时间
2019-9-13
最后登录
2026-9-29

初级热心勋章

楼主
CDA网校 学生认证  发表于 2026-6-2 15:00:44 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币

面对余数你会如何处理?舍弃、改造、还是直接丢弃?在 Python 中,取模运算符可以帮你获取地板除法运算后的余数,而如何使用这些余数,完全由你决定。

本文大纲

  • Python 取模运算符是什么、工作原理

  • 语法规则与基础用法

  • 取模运算、整数除法、地板除法的关联关系

  • 整数取模运算

  • 用取模判断奇偶数

  • 浮点数取模与浮点精度问题

  • Python 与其他语言的负数取模差异

  • 取模运算符、divmod()、math.fmod() 对比

  • 取模运算的运算符优先级

  • 实战场景与案例

  • 常见报错与解决方案

  • 总结

本文将全面讲解 Python 取模运算符的定义、底层逻辑,演示整数与浮点数的使用方式,解析负数取模的易错点,并对比 math.fmod()、divmod() 等同类方法。内容干货充足,接下来正式开始学习。

一、什么是 Python 取模运算符?工作原理详解

Python 的取模运算符用于计算地板除法运算后的余数,这个余数也被称为模值,和小学数学中的余数概念基本一致。在编程场景中,取模运算在处理循环规律、周期场景、数值约束等实际问题时有着极高的使用率。

我们可以用钟表表盘直观理解取模运算:

午夜时分,时针、分针均指向12点位置。随着时间流逝,分针顺时针转动,每满60分钟,时针前进1格,分针归零重置,重新从0分钟开始计时,循环往复。

在这个场景中:

  • 时针走动的格数 = 总分钟数 // 60(地板除法)

  • 分针当前位置 = 总分钟数 % 60(取模运算)

例如90分钟后,时间为1点30分:90//60=1(小时),90%60=30(分钟),完美对应取模与地板除法的逻辑。

二、Python 取模语法与基础用法

Python 中取模运算符为百分号 %,放置在两个数值之间,用于计算前者对后者地板除法的余数。

print(7 % 2)
# 输出结果:1

7除以2,商为3,余数为1,取模运算直接返回余数1。

更多基础示例:

print(8 % 2)   # 整除无余数,输出 0
print(100 % 3) # 余数为1,输出 1
print(90 % 60) # 余数为30,输出 30

三、取模、整数除法与地板除法的关联

取模运算的核心依托于地板除法(也常被称作整数除法)。Python 中 // 代表地板除法,% 代表取模运算,二者严格绑定,满足固定数学公式:

我们用 a=7, b=2 验证公式:

print(2 * (7 // 2) + (7 % 2))
# 输出结果:7

公式成立,这也是 Python 取模运算的底层数学逻辑。

四、整数取模运算

取模运算符最常用的场景就是整数运算。当两个操作数均为整数时,返回结果也为整数,支持极大或极小数值,运算逻辑不变。

# 超大整数取模
print(10000000000000000 % 2)  # 偶数取模2余0
print(2 % 10000000000000000)  # 2除以大数,余数为2
# 输出:
# 0
# 2

经典场景:用取模判断奇偶数

整数对2取模只有两种结果:0为偶数,1为奇数,这是编程中最常用的判断逻辑,适配任意大小整数。

示例:网页表格奇偶行交替配色

if row_number % 2 == 0:
    row_color = "light_gray"  # 偶数行浅灰
else:
    row_color = "white"        # 奇数行白色

五、浮点数取模与浮点精度问题

取模运算符同样支持浮点数运算,底层公式不变:

浮点数取模返回结果为浮点数:

print(6.5 % 2)
# 输出结果:0.5

2可以完整包含在6.5中3次(3×2=6),剩余余数0.5。

浮点精度坑点(重点)

计算机存储浮点数存在精度误差,会导致看似整除的运算出现异常余数:

print(0.3 // 0.1)
print(0.3 % 0.1)
# 预期输出:3.0、0.0
# 实际输出:
# 2.0
# 0.09999999999999998

原因:0.1 无法被二进制精准存储,0.3/0.1 的实际计算结果为 2.9999999999999996,地板除法向下取整为2,最终产生异常余数。

解决方案:避免浮点数严格相等判断,使用极小误差值容错:

将 x % 0.1 == 0 改为 x % 0.1 < 1e-9。

六、Python 负数取模(与其他语言的核心差异)

负数取模是 Python 与 C、Java、JS 等语言差异最大的知识点,也是高频易错点。

Python 负数取模规则

取模结果的符号永远与除数(b)一致,底层遵循向下取整(向负无穷取整)的数学逻辑。

print(-5 % 3)   # 除数为正,结果为正
print(5 % -3)   # 除数为负,结果为负
# 输出:
# 1
# -1

推导 -5 % 3:

  • -5 // 3 = -2(向下取整)

  • 代入公式:-5 - 3 × (-2) = 1

其他语言(C/Java/JS)规则

这类语言取模结果符号与被除数(a)一致,除法向0取整。

例如 -5 % 3 在 C/Java/JS 中结果为 -2。

Python 规则的优势

Python 取模结果永远落在 [0, b] 区间内,天然适配循环、索引、时间计算等场景,正负偏移量都不会越界:

# 时间偏移容错(支持负数偏移)
minute = (current_minute + offset) % 60
# 循环索引永不越界
index = i % n

七、%、divmod()、math.fmod() 三者对比

Python 提供三种取模相关方式,适用场景各不相同:

1. 内置函数 divmod()

无需导入库,直接返回 (商, 余数) 元组,商为地板除法结果,余数规则与 % 完全一致。

print(divmod(7, 2))    # (3, 1)
print(divmod(1, -3))   # (-1, -2)

2. math.fmod()

需要导入 math 库,仅返回浮点型余数,兼容 C 语言取模规则:结果符号与被除数一致。

import math
print(math.fmod(-5, 3))  # 输出 -2

三者完整对比表

运算方式 返回值 余数符号规则 示例(-5, 3)结果 适用场景
% 仅余数 与除数一致 1 循环索引、周期计算
divmod() (商, 余数) 与除数一致 (-2, 1) 同时需要商和余数
math.fmod() 浮点余数 与被除数一致 -2 适配C语言负数取模逻辑

八、取模运算符优先级

Python 遵循 PEMDAS 运算优先级规则,取模 % 与乘、除优先级相同,高于加减运算,同级运算从左至右执行。

示例运算拆解:

print(5 + 4 * 2 % 3 - 1)
# 运算步骤:
# 1. 4*2 = 8(乘法优先)
# 2. 8%3 = 2(取模与乘法同级)
# 3. 5+2-1 = 6
# 最终输出:6

九、实战场景与案例

1. 列表循环遍历(不越界)

无需判断索引边界,自动循环复用列表元素

coffee_shops = ["Coffee Clubhouse", "Kate's Cafe", "Jammin' Java"]
for i in range(0, 30): 
    print(f"April {i+1}: {coffee_shops[i % len(coffee_shops)]}")

2. 轮询调度(负载均衡)

将请求均匀分发至多台服务器

servers = ["Server1", "Server2", "Server3"]
for request_id in range(10): 
    server = servers[request_id % len(servers)]    
    print(f"Request {request_id} -> {server}")

3. 时间单位换算

秒数批量转换为小时、分钟、秒

total_seconds = 10000
minutes, seconds = divmod(total_seconds, 60)
hours, minutes = divmod(minutes, 60)
print(f"{total_seconds} 秒 = {hours} 小时 {minutes} 分钟 {seconds} 秒")
# 输出:10000 秒 = 2 小时 46 分钟 40 秒

4. 闰年判断

def is_leap_year(year): 
    # 能被4整除且不被100整除,或能被400整除
    return (year % 4 == 0 and year % 100 != 0) or (year % 400 == 0) 

print(is_leap_year(1924))  # True

十、常见报错与解决方案

1. ZeroDivision error(除零错误)

取模运算本质包含除法逻辑,除数不能为0,否则直接报错:

4 % 0
# ZeroDivision error: integer modulo by zero

解决方案:代码中提前判断除数不为0,再执行取模运算。

2. 负数取模结果不符合预期

熟悉 C/Java 语法的开发者极易踩坑,核心原因是 Python 结果符号跟随除数。

解决方案:牢记 Python 规则——正数除数必返回正余数,天然适配循环场景,无需额外修正。

十一、总结

1. Python 取模运算符 % 用于计算地板除法的余数,核心公式:a = b * (a // b) + (a % b);

2. 整数、浮点数均支持取模,浮点数运算需注意精度误差,避免严格相等判断;

3. Python 负数取模结果符号跟随除数,与 C/Java/JS 不同,更适配周期、索引场景;

4. divmod() 可同时获取商和余数,math.fmod() 兼容传统语言负数取模逻辑;

5. 取模与乘除优先级一致,广泛用于奇偶判断、轮询调度、单位换算、循环索引等场景。

推荐学习书籍 《CDA一级教材》适合CDA一级考生备考,也适合业务及数据分析岗位的从业者提升自我。完整电子版已上线CDA网校,累计已有10万+在读~ !

免费加入阅读:https://edu.cda.cn/goods/show/3151?targetId=5147&preview=0

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:python 使用指南 运算符 Division seconds

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
扫码
拉您进交流群
GMT+8, 2026-9-29 14:48