总结数字的练习|什么是n // = 10

时间:2012-12-03 04:50:27

标签: python

  

可能重复:
  What is the reason for having ‘//’ in Python?

在尝试对数字求和进行练习时,我偶然发现了这个解决方案:

def sum_digits(n):
   import math
   total = 0
   for i in range(int(math.log10(n)) + 1):
      total += n % 10
      n //= 10
   return total

我的问题是,倒数第二行的作用是什么?那个正确的语法怎么样?

4 个答案:

答案 0 :(得分:3)

实现所谓的floor division。楼层划分(此处由//表示)截断小数并返回整数结果,而“正常”除法返回您可能“期望”的答案(带小数)。在Python 3.x中,两者之间有了更大的区别,这意味着两个运算符返回不同的结果。以下是使用Python 3的示例:

>>> 10 / 3
3.3333333333333335
>>> 10 // 3
3

在Python 3.x之前,两者之间没有区别,除非你使用特殊的内置from __future__ import division,然后使得除法运算符在Python 3.x中执行(这是使用Python 2.6.5):

In [1]: 10 / 3
Out[1]: 3

In [2]: 10 // 3
Out[2]: 3

In [3]: from __future__ import division

In [4]: 10 / 3
Out[4]: 3.3333333333333335

In [5]: 10 // 3
Out[5]: 3

因此,当您看到n //= 10之类的内容时,它会使用您可能看到过的相同+= / -= / *= / etc语法,当前值n并在等号前执行操作,并将以下变量作为第二个参数,将结果返回到n。例如:

In [6]: n = 50

In [7]: n += 10

In [8]: n
Out[8]: 60

In [9]: n -= 20

In [10]: n
Out[10]: 40

In [11]: n //= 10

In [12]: n
Out[12]: 4

答案 1 :(得分:1)

//是场内分部运营商。它总是将返回值截断为小于或等于答案的最大整数。

答案 2 :(得分:1)

倒数第二行是运算符的组合,在某种程度上,包括一个不常见的运算符,这就是为什么它有点令人困惑。

让它分开。

首先,Python中的//floor division,它基本上是向下舍入到最接近的整数。因此,

>>> 16//5
3
>>> 2//1
2
>>> 4//3
1
>>> 2//5
0

最后,=是因为Python语法允许对变量执行操作,然后立即将结果重新分配给变量。你可能在+=中最常见到它,因为:

>>> a = 5
>>> a += 7
>>> a
12

在这种情况下,//=表示“执行楼层划分,将变量除以第二个参数,然后将结果分配给原始输入变量”。因此:

>>> a = 10
>>> a //= 6
>>> a
1

答案 3 :(得分:0)

用于Python中的赋值A + = B等于A = A + B,A * = B等于A = A * B 同样适用于“Floor Divide”,A // = B等于A = A // B

Floor Division表示返回截断的整数

>>> 5 // 3   # 1.6
   1    # 0.6 will be throw off