%在计算中是什么?我不知道它是做什么的。
%
它是否计算出计算的百分比例如:4 % 2显然等于0。如何?
4 % 2
像x % y这样的表达式求值为x ÷ y的余数——嗯,从技术上讲,它是“模”;而不是“提醒”;因此,如果与其他%为余数操作符的语言进行比较,结果可能会有所不同。有一些细微的区别(如果你对实际结果感兴趣,请参见&;Why Python's Integer Division Floors"波纹管)。
x % y
x ÷ y
优先级与运算符/(除法)和*(乘法)相同。
/
*
>>> 9 / 2 4 >>> 9 % 2 1
Python问题:取决于你使用的Python版本,%也是(已弃用的)字符串插值运算符,所以如果你来自具有自动类型强制转换的语言(如PHP或JS),其中'12' % 2 + 3这样的表达式是合法的:在Python中,它将导致TypeError: not all arguments converted during string formatting,这可能会让你非常困惑。
'12' % 2 + 3
TypeError: not all arguments converted during string formatting
[Python 3更新]
用户n00p评论:
9/2在python中是4.5。你必须像这样做整数除法:9//2如果你想让python告诉你除法(4)后剩下多少个整对象。
准确地说,整数除法曾经是Python 2中的默认值(请注意,这个答案比我的儿子还大,他在2岁时已经在上学了。X是主流):
$ python2.7 Python 2.7.10 (default, Oct 6 2017, 22:29:07) [GCC 4.2.1 Compatible Apple LLVM 9.0.0 (clang-900.0.31)] on darwin Type "help", "copyright", "credits" or "license" for more information. >>> 9 / 2 4 >>> 9 // 2 4 >>> 9 % 2 1
在现代Python中9 / 2的结果确实是4.5:
9 / 2
4.5
$ python3.6 Python 3.6.1 (default, Apr 27 2017, 00:15:59) [GCC 4.2.1 Compatible Apple LLVM 8.1.0 (clang-802.0.42)] on darwin Type "help", "copyright", "credits" or "license" for more information. >>> 9 / 2 4.5 >>> 9 // 2 4 >>> 9 % 2 1
(更新)
用户dahiya_boy在评论区问道:
你能解释一下为什么-11 % 5 = 4 - dahiya_boy
-11 % 5 = 4
这很奇怪,对吧?如果你在JavaScript中尝试这个:
> -11 % 5 -1
这是因为在JavaScript中%是“余数”;而在Python中,它是“模块”;(时钟数学)运算符。
你可以得到直接来自GvR的解释:
Edit - dahiya_boy
在Java和iOS中-11 % 5 = -1而在python和ruby中-11 % 5 = 4。
-11 % 5 = -1
一半的原因是由保罗Scardine解释的,其余的解释在下面这里
在Java和iOS中,%给出余数,这意味着如果你除以11% 5得到Quotient = 2 and remainder = 1,而- 11% 5得到Quotient = -2 and remainder = -1。
Quotient = 2 and remainder = 1
Quotient = -2 and remainder = -1
swift iOS中的示例代码。
但在python中,它给出了时钟模量。用下面的公式计算
mod(a,n) = a - {n * Floor(a/n)}
这意味着,
mod(11,5) = 11 - {5 * Floor(11/5)} => 11 - {5 * 2}
所以,mod(11,5) = 1
mod(11,5) = 1
和
mod(-11,5) = -11 - 5 * Floor(-11/5) => -11 - {5 * (-3)}
所以,mod(-11,5) = 4
mod(-11,5) = 4
python 3.0中的示例代码。
为什么Python使用整数除法层 今天有人(又)问我为什么在Python中整数除法返回结果的下限,而不是像C语言那样截断到零。 对于正数,这并不奇怪:
今天有人(又)问我为什么在Python中整数除法返回结果的下限,而不是像C语言那样截断到零。
对于正数,这并不奇怪:
>>> 5//2 2
但如果其中一个操作数是负的,结果会被取整,即从零四舍五入(直到负无穷):
>>> -5//2 -3 >>> 5//-2 -3
这让一些人感到困惑,但有一个很好的数学理由。整数除法运算(//)和它的兄弟,模数运算(%)一起使用,并满足一个很好的数学关系(所有变量都是整数):
a/b = q with remainder r
这样
b*q + r = a and 0 <= r < b
(假设a和b是>= 0)。 如果你想要将关系扩展到负a(保持b为正),你有两个选择:如果你将q截断为零,r将变为负,因此不变量变为0 <= abs(r) <否则,你可以将q取底至负无穷,不变量仍然是0 <= r <B.[更新:修正此段] 在数学数论中,数学家总是倾向于后者的选择(参见例:维基百科)。对于Python,我做了同样的选择,因为模运算有一些有趣的应用,其中a的符号是无趣的。考虑使用POSIX时间戳(从1970年开始算起的秒数)并将其转换为一天中的时间。因为一天有24*3600 = 86400秒,所以这个计算就是t % 86400。但是如果我们用负数来表示1970年以前的时间,“截断趋于零”;规则会产生毫无意义的结果!使用地板规则,这一切都很好。 我想到的其他应用是计算机图形中像素位置的计算。我相信还有更多。 顺便提一下,对于- b,所有东西都翻转了,不变量变成:
(假设a和b是>= 0)。
如果你想要将关系扩展到负a(保持b为正),你有两个选择:如果你将q截断为零,r将变为负,因此不变量变为0 <= abs(r) <否则,你可以将q取底至负无穷,不变量仍然是0 <= r <B.[更新:修正此段]
在数学数论中,数学家总是倾向于后者的选择(参见例:维基百科)。对于Python,我做了同样的选择,因为模运算有一些有趣的应用,其中a的符号是无趣的。考虑使用POSIX时间戳(从1970年开始算起的秒数)并将其转换为一天中的时间。因为一天有24*3600 = 86400秒,所以这个计算就是t % 86400。但是如果我们用负数来表示1970年以前的时间,“截断趋于零”;规则会产生毫无意义的结果!使用地板规则,这一切都很好。
我想到的其他应用是计算机图形中像素位置的计算。我相信还有更多。
顺便提一下,对于- b,所有东西都翻转了,不变量变成:
0 >= r > b.
为什么C不这样做呢?可能在设计C语言时,硬件并没有这样做。硬件可能不会这样做,因为在最古老的硬件中,负数是用“符号+幅度”表示的。而不是现在使用的二的补表示(至少对于整数)。我的第一台计算机是控制数据大型机,它对整数和浮点数都使用补数。60个1意味着负0 ! Tim Peters知道Python所有的浮点框架都隐藏在哪里,他对我想将这些规则扩展到浮点模的想法表示了一些担忧。他可能是对的;当x是一个非常小的负数时,截短至负无穷规则会导致x%1.0的精度损失。但这还不足以破坏整数模,而//与它紧密耦合。 PS.注意我使用//而不是/——这是Python 3的语法,在Python 2中也允许强调你知道你正在调用整数除法。Python 2中的/操作符是有歧义的,因为它对两个整数操作数返回的结果与整数+浮点数或两个浮点数返回的结果不同。但这是完全不同的故事;参见PEP 238。 由Guido van Rossum在上午9:49发布
为什么C不这样做呢?可能在设计C语言时,硬件并没有这样做。硬件可能不会这样做,因为在最古老的硬件中,负数是用“符号+幅度”表示的。而不是现在使用的二的补表示(至少对于整数)。我的第一台计算机是控制数据大型机,它对整数和浮点数都使用补数。60个1意味着负0 !
Tim Peters知道Python所有的浮点框架都隐藏在哪里,他对我想将这些规则扩展到浮点模的想法表示了一些担忧。他可能是对的;当x是一个非常小的负数时,截短至负无穷规则会导致x%1.0的精度损失。但这还不足以破坏整数模,而//与它紧密耦合。
PS.注意我使用//而不是/——这是Python 3的语法,在Python 2中也允许强调你知道你正在调用整数除法。Python 2中的/操作符是有歧义的,因为它对两个整数操作数返回的结果与整数+浮点数或两个浮点数返回的结果不同。但这是完全不同的故事;参见PEP 238。
由Guido van Rossum在上午9:49发布
模运算符,通常用于整数的余数除法,但在Python中可用于浮点数。
http://docs.python.org/reference/expressions.html
%(取模)操作符产生第一个参数除以第二个参数的余数。数值参数首先转换为公共类型。零右参数将引发ZeroDivisionError异常。参数可以是浮点数,例如,3.14%0.7 = 0.34(因为3.14 = 4*0.7 + 0.34)。模运算符的结果总是与第二个操作数的符号相同(或为零);结果的绝对值严格小于第二个操作数[2]的绝对值。
取自http://docs.python.org/reference/expressions.html
< >强示例1: 6%2的计算结果为0,因为如果6除2(3次),则没有余数
6%2
0
示例2: 7%2计算为1,因为当7除以2(3次)时,1还有余数。
7%2
1
所以总结一下,它返回除法运算的余数,如果没有余数,则返回0。所以6%2表示求6的余数除以2。
在大多数语言中%用于模量。Python也不例外。
与许多类c语言一样,它是余数运算或模运算。参见数字类型的文档- int, float, long, complex。
%(取模)操作符产生第一个参数除以第二个参数的余数。数值参数首先转换为公共类型。
3 + 2 + 1 - 5 + 4% 2 - 1 / 4 + 6 = 7
这基于运算符优先级。
%是模。3 % 2 = 1, 4 % 2 = 0
3 % 2 = 1
4 % 2 = 0
/是除法(在本例中为整数),因此:
3 + 2 + 1 - 5 + 4 % 2 - 1 / 4 + 6 1 + 4%2 - 1/4 + 6 1 + 0 - 0 + 6 7
根据运算的顺序,结果是
(3+2+1-5) + (4%2) - (1/4) + 6
(1) + (0) - (0) + 6
7
1/4=0,因为我们在做整数运算。
Python -基本操作符 http://www.tutorialspoint.com/python/python_basic_operators.htm < / p >
模数-左手操作数除以右手操作数并返回余数
A = 10, b = 20
B % a = 0
它是一个模运算,除了它是一个老式的c风格字符串格式化操作符,而不是一个模运算符。详见在这里。您将在现有代码中看到很多这样的代码。
此外,还有一个有用的内置函数divmod:
divmod
divmod (a, b) 取两个(非复数)数字作为参数,返回一对数字 由它们的商和组成
divmod (a, b)
取两个(非复数)数字作为参数,返回一对数字 由它们的商和组成
有点离题,%也用于字符串格式化操作,如%=,将值替换为字符串:
%=
>>> x = 'abc_%(key)s_' >>> x %= {'key':'value'} >>> x 'abc_value_'
再次跑题,但它似乎是一个小文档特性,我花了一段时间来追踪,而且我认为它与python模运算有关,这个SO页面排名很高。
模量是一种数学运算,有时被描述为“时钟算术”。我发现把它简单地描述为一个余数是会误导和令人困惑的,因为它掩盖了它在计算机科学中被如此广泛使用的真正原因。它实际上是用来环绕循环的。
想象一个时钟:假设你看一个“军事”时间的时钟,时间范围从0点到23点59分。现在,如果你想在每天的午夜发生一些事情,你会希望当前时间mod 24为零:
如果(小时% 24 == 0):
你可以想象历史上所有的小时都围绕着24小时循环而今天的小时就是这个无限长的数字对24取余。它是一个比余数更深刻的概念,它是一种处理循环的数学方法,在计算机科学中非常重要。它还用于环绕数组,允许您增加索引,并在到达数组的末尾后使用模量返回到开头。
请注意
(3 +2 + 1 - 5) + (4 % 2) - (1/4) + 6
即使使用括号,在Python 3.4中计算的结果也是6.75,而不是7。
'/'操作符也不是那么容易理解(python2.7): try…
- 1/4 1 - 1/4
这有点离题,但在计算上面的表达式时应该考虑:)
x % y计算除法x除以y的余数,其中商是整数。余数的符号为y。
x
y
在Python 3中,计算结果为6.75;这是因为/做的是真除法,而不是像Python 2中那样(默认情况下)的整数除法。在Python 2上1 / 4给出0,因为结果是四舍五入。
6.75
1 / 4
整数除法也可以在python3上完成,使用//操作符,因此要得到7的结果,可以执行:
//
3 + 2 + 1 - 5 + 4 % 2 - 1 // 4 + 6
此外,在python2中,只需添加该行,就可以获得Python样式划分
from __future__ import division
作为每个源文件中的第一行源代码。
模数-左手操作数除以右手操作数并返回余数。
如果有帮助的话:
1:0> 2%6 => 2 2:0> 8%6 => 2 3:0> 2%6 == 8%6 => true
... 等等。
模运算符也可以用于打印在谷歌https://developers.google.com/edu/python/strings上定义的字符串(就像在C中一样)。
# % operator text = "%d little pigs come out or I'll %s and %s and %s" % (3, 'huff', 'puff', 'blow down')
这似乎有点离题,但它肯定会帮助到某人。
我很难轻易地找到% online使用的具体用例,例如。为什么分数模除法或负模除法会得到这样的结果。希望这有助于澄清以下问题:
一般情况下:
模除法返回数学除法运算的余数。它是这样做的:
假设我们有5的被除数和2的除数,下面的除法运算将是(等于x):
dividend = 5 divisor = 2 x = 5/2
X_int = 5 // 2 (python中的整数除法使用双斜杠)
X_int = 2
x_mult = x_int *除数 X_mult = 4
红利- x_mult = 1
因此,模运算返回1:
5% 2 = 1
应用程序将模数应用于分数
Example: 2 % 5
应用于分数时的模量计算与上述相同;但是,需要注意的是,当除数大于被除数时,整型除法的结果为零:
dividend = 2 divisor = 5
整数除法结果为0,而;因此,当执行上述步骤3时,红利的值将结转(从零减去):
dividend - 0 = 2 —> 2 % 5 = 2
应用程序将模量应用到负值
整除法发生时,整除法的值舍入到最小整数值:
import math x = -1.1 math.floor(-1.1) = -2 y = 1.1 math.floor = 1
因此,当你做整数除法时,你可能会得到一个不同于你预期的结果!
将上述步骤应用于下面的除数和被除数,说明了模数的概念:
dividend: -5 divisor: 2
步骤1:应用整数除法
x_int = -5 // 2 = -3
第二步:用整数除数的结果乘以除数
x_mult = x_int * 2 = -6
第三步:从相乘的变量中减去红利,注意双重否定。
dividend - x_mult = -5 -(-6) = 1
因此:
-5 % 2 = 1
我发现掌握模运算符(%)最简单的方法是通过长除法。它是余数,在确定一个数是偶数还是奇数时很有用:
4%2 = 0 2 2|4 -4 0 11%3 = 2 3 3|11 -9 2