Python中%的结果是什么?

时间:2010-12-13 18:31:16

标签: python python-2.7 syntax operators modulo

计算中%是什么?我似乎无法弄清楚它的作用。

例如,它是否计算出百分比的计算结果:4 % 2显然等于0.如何?

19 个答案:

答案 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
  • 9除以2等于4.
  • 4次2是8
  • 9减8是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)

%modulo3 % 2 = 14 % 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 
  1. 模数计算的第一步是进行整数除法:

    x_int = 5 // 2(python中的整数除法使用双斜杠)

    x_int = 2

  2. 接下来,x_int的输出乘以除数:

    x_mult = x_int *除数 x_mult = 4

  3. 最后,从x_mult

    中减去红利

    dividend - x_mult = 1

  4. 因此,模数运算返回1:

    5%2 = 1

  5. 将模数应用于分数的应用

    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