Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python中%的结果是什么?_Python_Python 2.7_Syntax_Operators_Modulo - Fatal编程技术网

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——余数
Python-gotcha:根据您使用的Python版本,
%
也是(不推荐使用的)字符串插值运算符,因此如果您来自具有自动类型转换的语言(如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
results
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在评论环节中问道:


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