logo

Python でのフロア分割

次のチュートリアルでは、Python プログラミング言語を使用したフロア分割操作について学習します。

始める前に、フロア分割とは何かを簡単に理解しましょう。

フロア区分を理解する

フロア除算は、可能な最大の整数を返す点を除けば、通常の除算演算です。この整数は、通常の除算出力より小さいことも、それと等しいこともできます。

フロア関数は、数学用語では ⌊ ⌋ 記号で表されます。

ここで、フロア分割操作の仕組みを理解しましょう。例えば、

⌊36/5⌋

ステップ1: 最初に除算を実行します。分けていきます 36 による 5

36 ÷ 5 = 7.2

ステップ2: ここで、除算後に得た値に対してフロア関数を実行します。 7.2

⌊7.2⌋=7

その結果、次のようになります。 7 これは下限値です 7.2 。したがって、床の除算とは、最も近い整数に分割して切り捨てることを意味します。

さまざまなプログラミング言語では、フロア分割を計算するための特定の組み込み関数または演算子が提供されています。いくつかの例は次のとおりです。

  1. 使用できます 床() C++ プログラミング言語のメソッド。
  2. 使用できます 床() Java プログラミング言語のメソッド。
  3. 使用できます // Python プログラミング言語の演算子。

ただし、ここでは、 二重バックスラッシュ (//) 演算子

Pythonを使用したフロア分割を理解する

Python プログラミング言語では、フロア除算を使用して 2 つの数値を除算し、結果を最も近い整数に切り捨てます。

フロア分割の概念を深く掘り下げる前に、分割の意味とフロアの仕組みを簡単に思い出してみましょう。 math.floor() Pythonの関数。

ミッションインポッシブルの映画は何本ありますか

Pythonで正則除算を実行する

バックスラッシュ ( / ) Python の除算演算子。同じことを示す次の例を考えてみましょう。

例 1:

 # declaring variables a = 13 b = 4 # performing regular division c = a / b # printing the result print(a, '/', b, '=', c) 

出力:

 13 / 4 = 3.25 

説明:

上記のコード スニペットでは、2 つの変数を次のように定義しました。 a = 13 そして b = 4 。次に、バックスラッシュ ( / ) 除算演算子を使用し、結果の値を新しい変数に格納します。 c 。最後に、次の値を出力しました。 c

ご覧のとおり、Python での割り算は数学での割り算と同じように機能します。

Python の math.floor() 関数を理解する

Python には、計算に役立つさまざまな数学ユーティリティで構成される組み込み数学モジュールがあります。

そのような組み込み関数の 1 つが、 数学 モジュールは math.floor() 関数。この関数は数値入力を受け入れ、最も近い整数に切り捨てて下限値を返します。

同じことを示す次の例を考えてみましょう。

例 2:

 # importing the floor() function from the math module from math import floor # declaring the variables a = 5.34 b = -5.34 # using the floor() function c = floor(a) d = floor(b) # printing the values print('Floor value of', a, '=', c) print('Floor value of', b, '=', d) 

出力:

 Floor value of 5.34 = 5 Floor value of -5.34 = 6 

説明:

上記のコード スニペットでは、 床() からの関数 数学 モジュール。次に、2 つの変数を次のように宣言しました。 a = 5.34 そして b = -5.34 。次に使用したのは、 床() 両方の変数の下限値を計算し、新しい変数に格納する関数、 c そして d 。最後に、ユーザー向けに結果を印刷しました。

これで、Python における数値の除算と切り捨ての概念が理解できました。 Python のフロア分割に関連する詳細に進みましょう。

Python でフロア分割を実行する

フロア除算は、2 つの数値を除算し、結果の値を最も近い整数に切り捨てることを可能にする Python の演算です。フロア分割は、 二重バックスラッシュ (//) 演算子 。同じ構文を以下に示します。

構文:

 res = var_1 // var_2 

どこ:

    レスフロア分割の結果の値ですだった_1配当金ですだった_2は約数です

フロア分割は、通常の分割と、 math.floor() 関数呼び出し。

注: フロア分割では、任意の数値を最も近い整数に切り捨てることができます。たとえば、3.99 は 3 に切り捨てられます。

ここで、フロア分割の仕組みを示す例を考えてみましょう。

例 3:

 # declaring the variables a = 13 b = 5 # using the // operator c = a // b # comparing the floor value with regular division d = a / b # printing the values print('Floor Division:', a, '//', b, '=', c) print('Regular Division:', a, '/', b, '=', d) 

出力:

 Floor Division: 13 // 5 = 2 Regular Division: 13 / 5 = 2.6 

説明:

上記のコード スニペットでは、2 つの変数を次のように宣言しました。 a = 13 そして b = 5 。次に使用したのは、 // 演算子でフロア分割値を計算し、そのフロア値を新しい変数に格納します。 c 。次に、次を使用して正規の除算を実行しました。 / 演算子を使用し、値を別の変数に格納します。 d 。最後に、両方の結果を印刷して比較しました。

ここで、を使用した別の例を考えてみましょう。 math.floor() 関数。

例 4:

 # importing the floor() function from the math module from math import floor # declaring the variables a = 17 b = 5 # using the floor() function c = floor(a / b) # comparing the floor() function with // operator d = a // b # printing the values print('Floor Division using floor() function:', c) print('Floor Division using // operator:', d) 

出力:

 Floor Division using floor() function: 3 Floor Division using // operator: 3 

説明:

pyspark SQL

私たちが輸入したのは、 床() からの関数 数学 上記のコード スニペットのモジュール。次に、2 つの変数を次のように宣言しました。 a = 17 そして b = 5 。次に使用したのは、 床() 関数、分割 ある による b を取得し、変数 c に格納しました。次に、以下を使用して下限値を計算しました。 // 演算子を使用して値を新しい変数に保存し、 d 。最後に、両方の値を出力して比較しました。

負の数でフロア除算を実行する

負の数を使用してフロア分割を実行することもできます。

負の数値の場合でも、結果の値は最も近い整数に切り捨てられます。負の数の切り捨てはゼロから遠ざかることを意味するため、混乱する人もいるかもしれません。例えば、 -23 まで引き下げられています -3

負の数を使用したフロア分割を示す例を考えてみましょう。

例 5:

 # declaring the variables a = -10 b = 4 # calculating floor value using // operator c = a // b # printing the value print('Floor Division:', a, '//', b, '=', c) 

出力:

 Floor Division: -10 // 4 = -3 

説明:

上記のコード スニペットでは、2 つの変数を次のように宣言しました。 a = -10 そして b = 4 。次に使用したのは、 // 演算子を使用して下限値を計算し、それを新しい変数に格納します。 c 。最後に、ユーザーに値を出力しました。

通常の分割では、 -10/4 戻るだろう -2.5 ;ただし、フロア分割の場合、この数値は最も近い負の整数に切り捨てられます。 -3

フロートによる床分割の実行

Python では float を使用して Floor 分割を実行することもできます。フロア分割が浮動小数点数の場合、結果は最も近い整数を表す浮動小数点数になります。

フロートを使用したフロア分割を示す次の例を考えてみましょう。

例 6:

 # initializing the lists a = [17.5, 10, 13.4] b = [3.3, 2.5, 3] # using for-loop to iterate through the list for i in range(0, 3): # calculating the floor division value c = a[i] // b[i] # printing the result print(a[i], '//', b[i], '=', c) 

出力:

 17.5 // 3.3 = 5.0 10 // 2.5 = 4.0 13.4 // 3 = 4.0 

説明:

上記のコード スニペットでは、2 つのリストを初期化しました。次に使用したのは、 のために -loop を使用してこれらのリストの要素を反復処理し、各フロア分割操作の値を計算し、結果をユーザーに出力します。

その結果、フロア除算演算が float を使用して実行され、float with integer は、float として表される最も近い整数に切り捨てられた値を返すことがわかります。

Python のフロア除算とモジュロ

数学では、モジュロは主に床の分割に関連する概念です。モジュロは 2 つの数値を除算した余りを意味するとも言えます。つまり、食べ残しの数を数えることができるのです。

Python ではパーセントを使用してモジュロを計算できます ( % ) 演算子。

Python におけるフロア除算とモジュロの関係を示す例を考えてみましょう。

例7.1:

13 個のキャンディーと 4 人の食べる人がいるとすると、フロア分割を利用して各食べる人が受け取るキャンディーの数を計算できます。

コード:

 # declaring variables numberOfCandies = 13 numberOfEaters = 4 # using floor division to calculate the number of candies each eater gets candiesPerEater = numberOfCandies // numberOfEaters # printing values print('Number of Candies:', numberOfCandies) print('Number of Eaters:', numberOfEaters) print('The number of candies each eater gets:', candiesPerEater) 

出力:

 Number of Candies: 13 Number of Eaters: 4 The number of candies each eater gets: 3 

説明:

上記のコード スニペットでは、キャンディーと食べる人の数を示すいくつかの変数を宣言しました。次に使用したのは、 // オペレーターはフロア分割を実行して、各食べる人が取得するキャンディーの数を計算します。次に、これらの値をユーザーに出力しました。

次に、グループ間で共有されるキャンディーの総数を計算してみましょう。これはあまり重要ではありません。

例 7.2:

一人当たりのキャンディーの数に食べる人の数を掛けます。

コード:

 # calculating the total number of candies being shared among the group totalCandiesShared = candiesPerEater * numberOfEaters # printing values print('The total number of candies being shared among the group:', totalCandiesShared) 

出力:

 The total number of candies being shared among the group: 12 

説明:

上記のコードの断片では、1 人あたりのキャンディーの数と食べる人の数を掛けて、グループ内で共有されるキャンディーの総数を計算し、その結果の値をユーザーに出力します。

完全に共有されたキャンディーの合計数は、 12 。ただし、キャンディーの総数は、 13 。この文は、キャンディーが 1 つ残ってしまい、食べられないことを暗示しています。

上の例は、残り物の数を計算する 1 つの方法を説明しています。ただし、残りの数のみに興味がある場合は、モジュロを使用して直接計算できます。

例 7.3:

キャンディーが 13 個、食べる人が 4 人の場合、残ったキャンディーの数はいくつになりますか?

コード:

Pythonは小数点以下2桁まで出力します
 # declaring variables numberOfCandies = 13 numberOfEaters = 4 # using modulo to calculate the leftover candies leftoverCandies = numberOfCandies % numberOfEaters # printing values print('Number of Candies:', numberOfCandies) print('Number of Eaters:', numberOfEaters) print('Total number of Leftover Candies:', leftoverCandies) 

出力:

 Number of Candies: 13 Number of Eaters: 4 Total number of Leftover Candies: 1 

説明:

上記のコード スニペットでは、キャンディーとイーターの値を格納する変数を宣言しました。次に、次の式を使用して残りのキャンディーの数を計算しました。 % モジュロ演算を表す演算子。最後に、いくつかのステートメントと結果の値をユーザー向けに出力しました。その結果、残ったキャンディーは 1

a = b * (a // b) + (a % b)

Python では、フロア除算とモジュロは次の方程式によって関係付けられます。

どこ:

    ある配当金です。bは除数です。

たとえば、13 個のキャンディーと 4 人の食べる人について上記の方程式が成り立つことを確認してみましょう。

13 = 4 * (13 // 4) + (13% 4)
13 = 4 * 3 + 1
13 = 13

これで、Python のフロア除算とモジュロの概念が理解できました。ここで、両方を計算する組み込み関数を見てみましょう。

Python の divmod() 関数を理解する

Python には、と呼ばれる組み込み関数が用意されています。 divmod() これにより、フロア除算と 2 つの数値の間のモジュロの両方を計算できます。

の構文は、 divmod() 関数を以下に示します。

構文:

 res = divmod(var_1, var_2) 

どこ:

    レスタプルとしての結果です。このタプルには、フロア除算の結果とモジュロで与えられた剰余が含まれます。だった_1配当金です。だった_2は除数です。

次に、次のことを示す例を考えてみましょう。 divmod() 関数。

例 8:

キャンディーが 13 個で、食べる人が 4 人の場合、各食べる人は満杯のキャンディーを何個手に入れ、残りのキャンディーは何個になるでしょうか?

コード:

 # declaring variables numberOfCandies = 13 numberOfEaters = 4 # using the divmod() function nCandies, nLeftovers = divmod(numberOfCandies, numberOfEaters) # printing values print('Number of Candies:', numberOfCandies) print('Number of Eaters:', numberOfEaters) print('Number of Candies per eater:', nCandies) print('Total number of Leftover Candies:', nLeftovers) 

出力:

 Number of Candies: 13 Number of Eaters: 4 Number of Candies per eater: 3 Total number of Leftover Candies: 1 

説明:

上記のコード スニペットでは、いくつかの変数を宣言しました。私たちが使用したのは、 divmod() 指定された変数の下限除算値とモジュロを計算する関数。次に、これらの値をユーザー向けに出力しました。

フロア分割の優先順位を理解する

Python のフロア除算演算子 // 乗算と同様の優先順位があります ( * )、 分割 ( / )、およびモジュロ ( % )。

このステートメントは、乗算してからフロア除算を行う場合、最初に乗算が実行され、次にフロア除算が実行され、その逆も同様であることを意味します。

ただし、たとえば 2 つの数値を減算してから床の除算を実行すると、床の除算演算によって道が開かれます。

同じことを示す例を考えてみましょう。

例9.1:

 # declaring some variables a = 3 b = 5 c = 6 d = 7 # performing an operation e = a * b // c - d # printing the result print(a, '*', b, '//', c, '-', d, '=', e) 

出力:

 3 * 5 // 6 - 7 = -5 

説明:

上記のコード スニペットでは、いくつかの変数を次のように宣言しました。 a = 3、b = 5、c = 6 、 そして d = 7 。次に、操作を実行し、結果の値を新しい変数に保存しました。 それは 。最後に、この値をユーザー向けに出力しました。

この結果がどのように計算されるかを理解するために、用語を正しい優先順位で括弧で囲むことができます。

以下に示す例は、同じことを示しています。

例9.2:

 # declaring some variables a = 3 b = 5 c = 6 d = 7 # performing an operation e = ((a * b) // c) - d # printing the result print('((', a, '*', b, ') //', c, ') -', d, '=', e) 

出力:

 (( 3 * 5 ) // 6 ) - 7 = -5 

説明:

上記のコード スニペットでは、いくつかの変数を次のように宣言しました。 a = 3、b = 5、c = 6 、 そして d = 7 。次に、括弧を使用して同じ操作を実行し、結果の値を新しい変数に保存します。 それは 。最後に、この値をユーザー向けに出力しました。

Javaのstr.substring

前の例と同様の結果が得られることがわかります。これは、計算の順序が次のとおりであることを意味します。

乗算 → 階割り → 減算

上記を段階的に計算すると次のようになります。

3 * 5 // 6 - 7
((3 * 5) // 6) - 7
(15 // 6) - 7
2~7
-5

私たちはフロア分割と Python プログラミング言語でのその使用法を正しく理解しました。

最後に、フロア分割の高度な使用例を見ていきます。次の場合、「高度」は「難しい」という意味ではありません。しかし、それはかなり珍しいことです。

フロア分割の事前利用について理解する

Python でフロア分割操作をサポートするカスタム オブジェクトを作成できることをご存知の方もいるかもしれません。これは、として知られる特別な方法によって可能になります。 __floordiv__()

Python の __floordiv__() メソッド

Python のフロア除算演算は、2 つの数値を除算し、結果を最も近い整数に切り捨てるために使用されます。

数値型は と呼ばれる特別なメソッドを実装しているため、内部で動作します。 __floordiv__() 。その後、私たちが電話をかけるたびに、 // 2 つのオブジェクト間の演算子、 __floordiv__() メソッドが呼び出されます。

Python では、を直接呼び出すこともできます。 __floordiv__() 方法。同じことを示す次の例を考えてみましょう。

例 10:

 # declaring some variables a = 31 b = 7 # performing floor division using the // operator c = a // b # performing floor division using the __floordiv__() method d = (a).__floordiv__(b) # printing the results of both operations print('Using the // operator:
', a, '//', b, '=', c) print('Using the __floordiv__() method:
 (', a, ').__floordiv__(', b, ') =', c) 

出力:

 Using the // operator: 31 // 7 = 4 Using the __floordiv__() method: ( 31 ).__floordiv__( 7 ) = 4 

説明:

上記のコード スニペットでは、2 つの変数を次のように宣言しました。 a = 31 そして b = 7 。次に、 を使用してフロア分割を実行しました。 // オペレーターと __floordiv__() メソッドを使用し、その結果の値を 2 つの変数に格納します。 c そして d 。最後に、ユーザー向けに結果を印刷しました。

上記の出力から、両方の式が同じ結果をもたらしていることがわかります。これは、最初の式が 2 番目の式に変換されるためです。言い換えれば、これらの呼び出しは互いに同等です。

さて、物事は面白くなります。次の例を考えてみましょう。

例11.1:

次の例では、整数値を文字列として表すカスタム クラスを作成します。次に、このカスタム クラスの 2 つのオブジェクトを作成し、それらに対してフロア分割操作を実行します。

コード:

 # creating a class representing integer values as string class IntStr: def __init__(self, val): self.val = val # instantiating the class with two objects intOne = IntStr('17') intTwo = IntStr('4') # printing the result of the floor division operation print(intOne // intTwo) 

出力:

 Traceback (most recent call last): File 'D:Python_programspycase.py', line 11, in print(intOne // intTwo) TypeError: unsupported operand type(s) for //: 'IntStr' and 'IntStr' 

説明:

上記のコード スニペットでは、クラスを次のように定義しました。 IntStr これは整数値を文字列として表します。次に、次の 2 つのオブジェクトを作成しました。 IntStr クラス。ついにフロア分割が完了しました。 intOne によって反対する intTwo オブジェクトを作成し、結果を印刷してみました。

ただし、上記の出力は、 タイプエラー 。このエラー メッセージからわかることは、 IntStr オブジェクトはフロア分割をサポートしていません。このエラーには意味があります。カスタム タイプは文字列オブジェクトを分割する床についてどのように手がかりを得るでしょうか?

ただし、結局のところ、次のようにすることができます。 IntStr オブジェクトサポートフロア分割。

以前は、を呼び出すたびに学習していました。 // 演算子を私たちは呼びます __floordiv__() 方法。このメソッドは、オブジェクトのクラス内のどこかで実行されます。たとえば、int クラスがフロア分割をサポートしているため、int オブジェクトはフロア分割をサポートします。 __floordiv__() 方法。

これらの特別なメソッドは、 __floordiv__() には、これらのメソッドをカスタム クラスに実装できるという驚くべき共通点があります。つまり、Python プログラミング言語でフロア分割をサポートするカスタム オブジェクトを作成できます。

同じことを示す次の例を考えてみましょう。

例11.2:

Linux どれ

次の例では、 __floordiv__() メソッドを IntStr クラス。次に、このカスタム クラスの 2 つのオブジェクトを作成し、それらに対してフロア分割操作を実行します。

コード:

 # creating a class representing integer values as string class IntStr: def __init__(self, val): self.val = val def __floordiv__(self, other): intOne = int(self.val) intTwo = int(other.val) res = intOne // intTwo return IntStr(str(res)) # instantiating the class with two objects intOne = IntStr('17') intTwo = IntStr('4') # performing floor division operation res = intOne // intTwo # printing the result of the floor division operation print(intOne.val, '//', intTwo.val, '=', res.val) 

出力:

 17 // 4 = 4 

説明:

上記のコード スニペットでは、クラスを次のように定義しました。 IntStr これは整数値を文字列として表します。また、 __floordiv__() このクラス内のメソッド。このメソッドは、それ自体および別のオブジェクトから数値文字列値を受け取ります。これらの文字列値を整数に変換し、それらの間でフロア除算を実行しました。次に、結果を文字列に変換して戻し、新しい IntStr 物体。インスタンス化しました IntStr 2 つのオブジェクトを持つクラスを作成し、それらの間でフロア分割操作を実行しました。最後に、結果の値をユーザーに出力しました。

これで、フロア分割をサポートするカスタム クラスの作成方法が理解できました。

電話しなければならないという事実が気に入らない場合は、 オブジェクト.val 結果を確認するには、次のように実装します。 __str__() 印刷時に値を直接返すメソッド。

同じことを示す次の例を考えてみましょう。

例11.3:

 # creating a class representing integer values as string class IntStr: def __init__(self, val): self.val = val def __floordiv__(self, other): intOne = int(self.val) intTwo = int(other.val) res = intOne // intTwo return IntStr(str(res)) def __str__(self): return self.val # instantiating the class with two objects intOne = IntStr('17') intTwo = IntStr('4') # performing floor division operation res = intOne // intTwo # printing the result of the floor division operation print(intOne, '//', intTwo, '=', res) 

出力:

 17 // 4 = 4 

説明:

上記のコード スニペットでは、クラスを次のように定義しました。 IntStr これは整数値を文字列として表します。また、 __floordiv__() このクラス内のメソッド。次に、 __str__() 印刷時に文字列値を直接返すメソッド。インスタンス化しました IntStr 2 つのオブジェクトを持つクラスを作成し、それらの間でフロア分割操作を実行しました。最後に、結果の値をユーザーに出力しました。