Python中%的结果是什么?
计算中的Python中%的结果是什么?,python,python-2.7,syntax,operators,modulo,Python,Python 2.7,Syntax,Operators,Modulo,计算中的%是什么?我似乎不知道它是干什么的 它计算出计算的百分比吗?例如:4%2显然等于0。如何?像x%y这样的表达式计算的是x÷y的余数-从技术上讲,它是“模数”而不是“提醒”,因此如果与其他语言比较,%是余数运算符,结果可能会有所不同。(如果您对实际结果感兴趣,请参见下面的“为什么Python的整数分割层”) 优先级与运算符/(除法)和*(乘法)相同 9除以2等于4 4乘2等于8 9减8等于1——余数 Python-gotcha:根据您使用的Python版本,%也是(不推荐使用的)字符串
%
是什么?我似乎不知道它是干什么的
它计算出计算的百分比吗?例如:
4%2
显然等于0。如何?像x%y
这样的表达式计算的是x÷y
的余数-从技术上讲,它是“模数”而不是“提醒”,因此如果与其他语言比较,%
是余数运算符,结果可能会有所不同。(如果您对实际结果感兴趣,请参见下面的“为什么Python的整数分割层”)
优先级与运算符/
(除法)和*
(乘法)相同
- 9除以2等于4
- 4乘2等于8
- 9减8等于1——余数
%
也是(不推荐使用的)字符串插值运算符,因此如果您来自具有自动类型转换的语言(如PHP或JS),请注意如果像'12'%2+3
这样的表达式是合法的:在Python中,它将导致TypeError:在字符串格式化过程中,并非所有参数都被转换,这可能会让您非常困惑
[Python更新3]
用户n00p评论:
python中的9/2是4.5。如果您想让python告诉您除法(4)后剩下多少个整对象,那么必须像这样进行整数除法:9//2
确切地说,整数除法曾经是Python 2中的默认值(请注意,这个答案比我的孩子大,他已经上学了,当时2.x是主流):
在现代Python中9/2
results4.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在评论环节中问道:
Q.你能解释一下为什么-11%5=4
-dahiya\u男孩
这很奇怪,对吧?如果您在JavaScript中尝试此操作:
> -11 % 5
-1
这是因为在JavaScript中,
是“余数”操作符,而在Python中是“模数”(时钟数学)操作符
你可以得到:
编辑-dahiya_男孩 在Java和iOS中
-11%5=-1
而在python和ruby中-11%5=4
保罗·斯卡丁(Paulo Scardine)解释了一半的原因,其余的解释如下
在Java和iOS中,%
给出余数,这意味着如果除以11%5则给出商=2和余数=1
,-11%5则给出商=-2和余数=-1
swift iOS中的示例代码。
但当我们在python中讨论时,它给出了时钟模。其工作原理如下:
mod(a,n)=a-{n*楼层(a/n)}
也就是说
mod(11,5)=11-{5*Floor(11/5)}=>11-{5*2}
所以,mod(11,5)=1
及
mod(-11,5)=-11-5*楼层(-11/5)=>-11-{5*(-3)}
所以,mod(-11,5)=4
python 3.0中的示例代码。
为什么Python采用整数除法 今天我再次被要求解释为什么Python中的整数除法返回结果的下限,而不是像C一样向零截断 对于正数,这并不奇怪: 但如果其中一个操作数为负数,则结果为零,即从零开始四舍五入(向负无穷大方向): 这让一些人感到不安,但有一个很好的数学原因。整数除法运算(//)和它的同级运算,模运算(%),一起满足一个很好的数学关系(所有变量都是整数): 以致 那么为什么C不这样做呢?可能硬件在设计C时没有做到这一点。硬件可能没有这样做,因为在最古老的硬件中,负数表示为“符号+幅度”,而不是现在使用的两个补码表示(至少对于整数)。我的第一台计算机是一台控制数据主机,它使用整数和浮点的补码。60个1的模式意味着负零 蒂姆·彼得斯(Tim Peters)知道Python的所有浮点骨架埋在哪里,他对我希望将这些规则扩展到浮点模表示了一些担忧。他可能是对的;当x为非常小的负数时,向负无穷大截断规则可能会导致x%1.0的精度损失。但这还不足以让我打破整数模,而//与之紧密耦合 请注意,我使用的是//而不是/——这是Python 3语法,Python 2中也允许这样做,以强调您知道您正在调用整数除法。Python 2中的/运算符是不明确的,因为它对两个整数操作数返回的结果与对int和float或两个float返回的结果不同。但这是一个完全不同的故事;见政治公众人物第238页 Guido van Rossum于上午9:49发布
模运算符,通常用于整数的余数除法,但在Python中可用于浮点数 (%模)运算符从第一个参数除以第二个参数得到余数。数值参数首先转换为通用类型。零对参数引发ZeroDivisionError异常。参数可以是浮点数,例如,3.14%0.7等于0.34(因为3.14等于4*0.7+0.34)。模运算符总是产生与第二个操作数具有相同符号的结果(或零);结果的绝对值严格小于第二个操作数的绝对值[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
> -11 % 5
-1
>>> 5//2
2
>>> -5//2
-3
>>> 5//-2
-3
a/b = q with remainder r
b*q + r = a and 0 <= r < b
0 >= r > b.
3 + 2 + 1 - 5 + 4 % 2 - 1 / 4 + 6
1 + 4%2 - 1/4 + 6
1 + 0 - 0 + 6
7
>>> x = 'abc_%(key)s_'
>>> x %= {'key':'value'}
>>> x
'abc_value_'
(3 +2 + 1 - 5) + (4 % 2) - (1/4) + 6
- 1/4
1 - 1/4
3 + 2 + 1 - 5 + 4 % 2 - 1 // 4 + 6
from __future__ import division
1:0> 2%6
=> 2
2:0> 8%6
=> 2
3:0> 2%6 == 8%6
=> true
# % operator
text = "%d little pigs come out or I'll %s and %s and %s" % (3, 'huff', 'puff', 'blow down')
dividend = 5
divisor = 2
x = 5/2
Example: 2 % 5
dividend = 2
divisor = 5
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
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