Python 关于整除以及负数取余遇到的问题

本文详细解析了Python中除法与取余运算符的行为,包括正数和负数情况下的不同表现,以及如何正确处理负数取余的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

 

最近在编码的过程中,在整除以及取余的时候遇到了一些比较迷的问题,这里码一下这些问题,以备日后查看。

在Python3中,除法有 “/” 以及 “//” 两种,这两个有着明显的区别,具体区别看代码:

print(12//10)
print(12/10)

这两行代码的输出如下:

1
1.2

这结果的差别显而易见。当被除数是负数的时候又是令一种情况:

print(-12/10)
print(int(-12/10))
print(-13//10)

这三条语句的输出为:

-1.2
-1
-2

这里面就可以发现-13用 “//” 除以10的时候,结果是-2,从结果中我们可以看出,“//”是向下取整,“-1.3”会被取成-2,如果想要得到-1,就需要用“/”,然后将结果强制转换为int型。

再讲到取余操作,比除法操作更为复杂。

正数的取余比较直接:

print(123%10)

这里结果为3。

但是换为负数取余,情况就有所不同: 

print(-123%10)
print(-123%-10)
7
-3

这里面第二条是我们一般意义上的取余操作。这里也特别标注一下,如果涉及到负数取余要用上述解决办法。

那么我们看第一条,结果等于7。这个结果有点让人摸不到头脑,不过这个结果与Python的底层机制有关。

在Python中,取余的计算公式与别的语言并没有什么区别:r=a-n*[a//n]

这里r是余数,a是被除数,n是除数。

不过在“a//n”这一步,当a是负数的时候,我们上面说了,会向下取整,也就是说向负无穷方向取整。这也就得到:

-123%10 = -123 - 10 * (-123 // 10) = -123 - 10 * (-13) = 7

这里还不得不提的是

print(123%-10)

这个情况,结果为:

-7

这个通过公式我们也能清楚地计算出来。

下面列一下各种情况的一个总结:

print(18//10)
print(12/10)
print(-12/10)
print(12/-10)
print(12//-10)
print(int(-12/10))
print(-13//10)
print(int(-123 % -10))
print(-123%10)
print(-123%-10)
print(123%10)
print(-123 // 10)
print(123%-10)
1
1.2
-1.2
-1.2
-2
-1
-2
-3
7
-3
3
-13
-7

 

 

### Python运算的使用方法 Python中的运算符 `%` 是一种常用的数学运算符,用于计算两个数相后的数。无论是整数还是浮点数,都可以使用该运算符进行操作[^1]。需要注意的是,Python中的 `%` 实际上是一个模运算符,而非单纯的运算符。两者的区别在于处理负数时的行为不同:模运算是向负无穷方向整,而运算是向零方向整[^2]。 以下是一些关于Python运算的具体用法和示例: #### 1. 判断奇偶性 通过运算可以判断一个整数是奇数还是偶数。如果一个数对2结果为0,则该数为偶数;否则为奇数[^3]。 ```python def is_odd(num): return num % 2 == 1 print(is_odd(3)) # True print(is_odd(4)) # False ``` #### 2. 处理负数 当涉及负数时,Python运算会遵循模运算规则,即结果的符号与数一致。例如: ```python print(-5 % 3) # 结果为1 print(5 % -3) # 结果为-1 print(-5 % -3) # 结果为-2 ``` #### 3. 进制转换 运算可以用来实现进制转换,例如将十进制数转换为二进制数或其他进制数[^3]。 ```python def decimal_to_binary(n): if n == 0: return "0" binary = "" while n > 0: remainder = n % 2 binary = str(remainder) + binary n = n // 2 return binary print(decimal_to_binary(10)) # 输出 '1010' ``` #### 4. 循环计数 在循环中,可以通过运算实现周期性操作。例如,每5次循环执行一次特定任务: ```python for i in range(1, 11): if i % 5 == 0: print(f"第{i}次循环,执行特定任务") ``` #### 5. 数字分组 运算还可以用于将数据分组。例如,将一组数字分为偶数组和奇数组: ```python numbers = [1, 2, 3, 4, 5, 6] even_numbers = [num for num in numbers if num % 2 == 0] odd_numbers = [num for num in numbers if num % 2 != 0] print(even_numbers) # [2, 4, 6] print(odd_numbers) # [1, 3, 5] ``` ### 注意事项 -Python中,`%` 运算符的结果始终与数的符号一致,这是由于其模运算的本质决定的[^2]。 - 如果需要处理其他语言中的行为(如C或Java),需要手动调整结果以符合具体需求。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值