1

重複の可能性:
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

私の質問は、最後から2番目の行は何をするのかということです。その適切な構文はどうですか?

4

4 に答える 4

3

それはいわゆるを実装しfloor divisionます。フロア除算(ここで示され//ます)は小数を切り捨てて整数の結果を返しますが、「通常の」除算は「期待できる」(小数を含む)答えを返します。Python 3.xでは、2つの演算子がより明確に区別されました。つまり、2つの演算子は異なる結果を返します。Python3を使用した例を次に示します。

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

Python 3.xより前では、特別な組み込みを使用しない限り、2つの間に違いはありません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し、2番目の引数として次の変数を使用して等号の前で演算を実行し、結果を返します。に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
于 2012-12-03T04:56:24.907 に答える
1

//フロア分割演算子です。常に、戻り値を回答以下の最大の整数に切り捨てます。

于 2012-12-03T04:53:53.367 に答える
1

最後から2番目の行は、ある意味で、珍しい演算子を含む演算子の組み合わせです。これが、少し混乱する理由です。

それをバラバラにしましょう。

まず、//Pythonにはフロア除算があります。これは基本的に最も近い整数に切り捨てられた除算です。したがって、

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

最後に、=Python構文により、変数に対して操作を実行し、その結果をすぐに変数に再割り当てできるためです。あなたはおそらくそれを次のように最も一般的に見たことがあるでしょう+=

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

この場合、//=は「フロア分割を実行し、変数を2番目の引数でフロア分割してから、結果を元の入力変数に割り当てる」ことを意味します。したがって:

>>> a = 10
>>> a //= 6
>>> a
1
于 2012-12-03T04:57:34.807 に答える
0

Pythonでの割り当ての場合、A +=BはA=A + Bに等しく、A *=BはA=A*Bに等しい同じことが「FloorDivide」にも当てはまります。A//=BはA=A/に等しい/ B

床分割とは、切り捨てられた整数を返すことを意味します

>>> 5 // 3   # 1.6
   1    # 0.6 will be throw off 
于 2012-12-03T05:00:41.390 に答える