计算中%
是什么?我似乎无法弄清楚它的作用。
例如,它是否计算出百分比的计算结果:4 % 2
显然等于0.如何?
答案 0 :(得分:255)
%(modulo)运算符从第一个参数除以第二个参数得到余数。数字参数首先转换为通用类型。零右参数会引发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次),则没有余数。
示例2 :7%2
评估为1
,因为当7除以2(3次)时,余数为1
。
总而言之,它返回除法运算的余数,如果没有余数则返回0
。所以6%2
意味着找到6的余数除以2.
答案 1 :(得分:125)
有点偏离主题,%
也用于字符串格式化操作,如%=
,将值替换为字符串:
>>> x = 'abc_%(key)s_'
>>> x %= {'key':'value'}
>>> x
'abc_value_'
再一次,偏离主题,但它似乎是一个有点记录的功能,花了我一段时间追踪,和我认为它与Pythons模数计算有关,这个SO页面排名很高。
答案 2 :(得分:45)
模数是一种数学运算,有时被称为“时钟运算”。我发现将其描述为简单的余数是误导和混淆,因为它掩盖了它在计算机科学中如此广泛使用的真正原因。它确实用于包裹周期。
想想一个时钟:假设你在“军事”时间看一个时钟,其时间范围从0:00到23.59。现在,如果您希望每天午夜都能发生某些事情,那么您希望当前时间模式24为零:
if(小时%24 == 0):
你可以把历史上的所有时间都想象一遍又一遍地围绕着24小时的圈子,当天的当前时刻是无限长的数字模型24.这是一个比其余部分更为深刻的概念,它是处理周期的数学方法,它在计算机科学中非常重要。它还用于环绕数组,允许您在到达数组末尾后增加索引并使用模数回绕到开头。
答案 3 :(得分:44)
像x % y
这样的表达式会计算x ÷ y
的余数。优先级与运算符/
(除法)和*
(乘法)相同。
>>> 9 / 2
4
>>> 9 % 2
1
Python gotcha :根据您使用的Python版本,%
也是(已弃用的)字符串插值运算符,因此请注意您是否来自具有自动类型的语言像'12' % 2 + 3
那样的表达式是合法的:在Python中,它会导致TypeError: not all arguments converted during string formatting
,这可能会让你感到困惑。
[Python 3更新]
用户n00p评论:
9/2在python中是4.5。你必须像这样进行整数除法:9 // 2如果你想让python告诉你在除法(4)之后剩下多少整个对象。
准确地说,整数除法曾经是Python 2中的默认值(请注意,这个答案比我已经在学校的男孩要早):
$ 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 3中,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
答案 4 :(得分:9)
Python - 基本运算符
http://www.tutorialspoint.com/python/python_basic_operators.htm
模数 - 用右手操作数除左手操作数并返回余数
a = 10且b = 20
b%a = 0
答案 5 :(得分:8)
在大多数语言中,%用于modulus。 Python也不例外。
答案 6 :(得分:5)
%Modulo运算符也可用于打印在Google 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')
这似乎有点偏离主题但它肯定会帮助某人。
答案 7 :(得分:4)
x % y
计算除法的余数x
除以y
,其中商是整数。其余部分的标志为y
。
在Python 3上,计算结果为6.75
;这是因为/
在Python 2上执行了真正的除法,而不是整数除法(默认情况下)。在Python 2 1 / 4
给出0,结果向下舍入。
整数除法也可以在Python 3上完成,使用//
运算符,因此为了得到7,你可以执行:
3 + 2 + 1 - 5 + 4 % 2 - 1 // 4 + 6
此外,您只需添加行
即可在Python 2上获得Python样式分区from __future__ import division
作为每个源文件中的第一个源代码行。
答案 8 :(得分:4)
此外,还有一个名为divmod
的有用内置函数:
divmod(a,b)
将两个(非复数)数字作为参数并返回一对数字 由他们的商和 使用长除法时的余数。
答案 9 :(得分:3)
模数运算符,它通常用于整数的余数除法,但在Python中可用于浮点数。
http://docs.python.org/reference/expressions.html
%(modulo)运算符从第一个参数除以第二个参数得到余数。数字参数首先转换为通用类型。零右参数会引发ZeroDivisionError异常。参数可以是浮点数,例如,3.14%0.7等于0.34(因为3.14等于4 * 0.7 + 0.34。)模运算符总是产生与第二个操作数(或零)具有相同符号的结果;结果的绝对值严格小于第二个操作数的绝对值[2]。
答案 10 :(得分:3)
这是一个模运算,除非它是一个老式的C风格字符串格式化运算符,而不是模运算。有关详细信息,请参阅here。你会在现有的代码中看到很多这样的东西。
答案 11 :(得分:2)
请注意
(3+2+1-5) + (4%2) - (1/4) + 6
如果在Python 3.4中计算,即使括号结果为6.75而不是7。
'/'运算符也不是那么容易理解(python2.7):试试......
- 1/4
1 - 1/4
这里有点偏离主题,但在评估上述表达时应该考虑:)
答案 12 :(得分:1)
模数 - 用右手操作数除左手操作数并返回余数。
如果有帮助:
1:0> 2%6
=> 2
2:0> 8%6
=> 2
3:0> 2%6 == 8%6
=> true
......等等。
答案 13 :(得分:1)
与许多类C语言一样,它是余数或模运算。请参阅documentation for numeric types — int, float, long, complex。
答案 14 :(得分:0)
这是一个模运算 http://en.wikipedia.org/wiki/Modulo_operation
http://docs.python.org/reference/expressions.html
因此,对于操作顺序,这可以解决
(3 + 2 + 1-5)+(4%2) - (1/4)+6
(1)+(0) - (0)+ 6
7
1/4 = 0因为我们在这里做整数数学。
答案 15 :(得分:0)
%
是modulo。 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
答案 16 :(得分:0)
%(modulo)运算符从第一个参数除以第二个参数得到余数。数字参数首先转换为通用类型。
3 + 2 + 1 - 5 + 4%2 - 1/4 + 6 = 7
这基于运营商优先级。
答案 17 :(得分:0)
我很难找到使用%online的特定用例,例如。为什么做分数模数除法或负模数除法会得到答案。希望这有助于澄清这样的问题:
模数除法一般:
模数除法返回数学除法运算的余数。它是这样做的:
假设我们的股息为5且除数为2,则以下除法运算将(等于x):
dividend = 5
divisor = 2
x = 5/2
模数计算的第一步是进行整数除法:
x_int = 5 // 2(python中的整数除法使用双斜杠)
x_int = 2
接下来,x_int的输出乘以除数:
x_mult = x_int *除数 x_mult = 4
最后,从x_mult
中减去红利dividend - 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
步骤2:将整数除法的结果乘以除数
x_mult = x_int * 2 = -6
步骤3:从倍增变量中减去被除数,注意双重否定。
dividend - x_mult = -5 -(-6) = 1
因此:
-5 % 2 = 1
答案 18 :(得分:-1)
我发现掌握模数算子(%)的最简单方法是进行长除法。它是余数,可以用于确定数字是偶数还是奇数:
4%2 = 0
2
2|4
-4
0
11%3 = 2
3
3|11
-9
2