Python中%的结果是什么?

ora*_*nge 229 python syntax operators modulo python-2.7

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

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

med*_*iev 289

%(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因为1当7除以2(3次)时有余数.

总而言之,它返回除法运算的剩余部分,或者0如果没有余数.所以6%2意味着找到6的余数除以2.

  • 为什么所有示例都在右边有更大的数字?有人可以解释产生2的2%6的结果吗? (6认同)
  • 第一个数字是分子,第二个是分母.在你的例子中,2除以6是0余数2,因此结果是2. (6认同)
  • 请更新您的答案,下面有更准确的答案.在[C/C++](http://stackoverflow.com/a/20638659/3370168)中,%表示'rem',而Python%表示'mod'.例如` - 21%4`在Python中是3. (4认同)
  • 好吧,递归减法基本上是除法的定义:x / y意味着您可以将y放入x中多少时间?或者换句话说,您可以将y减去x多少时间而不会下降低于0` ... (2认同)
  • @Mentalist这是部门的其余部分;尝试在长除法中执行7/2,您将减去6,然后剩下1(即余数和7%2的答案)。 (2认同)

mrm*_*oey 137

有点偏离主题,%它也用于字符串格式化操作,比如%=将值替换为字符串:

>>> x = 'abc_%(key)s_'
>>> x %= {'key':'value'}
>>> x 
'abc_value_'
Run Code Online (Sandbox Code Playgroud)

同样,偏离主题,但它似乎是一个小记录功能,它花了一段时间来跟踪,并且我认为这是有关Python的模数计算的此SO页面高度行列.

  • 谢谢.这是一个记录不完整和广泛使用的功能,是导致我发表这篇文章的原因. (33认同)
  • 我们喜欢这个偏离主题的答案. (7认同)
  • 记录不完整?我不这么认为:[字符串格式化操作](https://docs.python.org/2/library/stdtypes.html#string-formatting) (5认同)

Pau*_*ine 53

像表达式一样x % y计算其余部分x ÷ y.优先级与运算符%(除法)和/(乘法)相同.

>>> 9 / 2
4
>>> 9 % 2
1
Run Code Online (Sandbox Code Playgroud)
  • 9除以2等于4.
  • 4次2是8
  • 9减8是1 - 余数.

Python问题:取决于您使用的Python版本,*也是(已弃用的)字符串插值运算符,因此请注意您是否来自具有自动类型转换(如PHP或JS)的语言,其中表达式%是合法的:in Python会导致'12' % 2 + 3你可能会非常困惑.

[Python 3更新]

用户n00p评论:

python中的9/2是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
Run Code Online (Sandbox Code Playgroud)

在Python 3中现在的TypeError: not all arguments converted during string formatting结果9 / 2确实如此,但请记住,原始答案是非常古老的.

$ 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
Run Code Online (Sandbox Code Playgroud)


小智 48

模数是一种数学运算,有时被称为"时钟运算".我发现将其描述为简单的余数是误导和混淆,因为它掩盖了它在计算机科学中如此广泛使用的真正原因.它确实用于包裹周期.

想想时钟:假设你在"军事"时间看一个时钟,其时间范围从0:00到23.59.现在,如果您希望每天午夜都能发生某些事情,那么您希望当前时间模式24为零:

if(小时%24 == 0):

你可以把历史上的所有时间都想象一遍又一遍地围绕着24小时的圈子,当天的当前时刻是无限长的数字模型24.它是一个更加深刻的概念,而不仅仅是一个余数,它是一种数学方式处理周期,这在计算机科学中非常重要.它还用于环绕数组,允许您在到达数组末尾后增加索引并使用模数回绕到开头.


Hal*_*lil 9

Python - 基本运算符
http://www.tutorialspoint.com/python/python_basic_operators.htm

模数 - 用左手操作数除左手操作数并返回余数

a = 10,b = 20

b%a = 0


Sor*_*gal 8

在大多数语言中,%用于模数.Python也不例外.

  • 据我所知,Python的不寻常之处在于它使用%表示模数; Fortran,C/C++和Java使用%表示余数.(参见http://stackoverflow.com/questions/13683563/whats-the-difference-between-mod-and-remainder,差异在于如何处理负值和小数值.)区分的语言(例如Ada) ,Haskell和Scheme)使用"rem"和"mod"(或"remainder"和"modulo")而不是%. (10认同)
  • 更新:我通过语言http://en.wikipedia.org/wiki/Modulo_operation找到了这个模数/余数运算表.Python很不寻常但不是唯一的(例如,TCL和Lua共享Python的约定.) (4认同)

小智 5

%modulo运算符也可用于打印字符串(就像在C中一样),如Google https://developers.google.com/edu/python/strings上所定义.

      # % operator
  text = "%d little pigs come out or I'll %s and %s and %s" % (3, 'huff', 'puff', 'blow down')
Run Code Online (Sandbox Code Playgroud)

这似乎有点偏离主题但它肯定会帮助某人.