كيفية أداء تقسيم الطوابق في بايثون
نشرت: 2022-11-02في هذا البرنامج التعليمي ، ستتعلم كيفية إجراء تقسيم الأرضية في بايثون. ستستخدم // عامل تشغيل Python ووظيفة floor من وحدة الرياضيات في Python والمزيد - مع أمثلة التعليمات البرمجية.
سنبدأ بنظرة عامة على العوامل الحسابية في بايثون ونتعلم كيف يعمل // عامل تقسيم الأرضية. بعد ذلك ، سوف نتعلم كيفية استخدام طرق أخرى معادلة بما في ذلك وظائف من وحدات الرياضيات والمعامل لأداء تقسيم الأرضية.
هيا بنا نبدأ…
العوامل الحسابية في بايثون
في Python ، يمكنك استخدام عوامل حسابية لإجراء عمليات حسابية بسيطة على أرقام أنواع البيانات int و float . يعمل هؤلاء العاملون على المعاملات (الأرقام) ويعيدون نتيجة العملية.

يلخص الجدول التالي العوامل الحسابية في بايثون وكيفية عملها:
| المشغل أو العامل | بناء الجملة | نتيجة |
| إضافة (+) | num1+num2 | ترجع مجموع num1 و num2 |
| الطرح (-) | num1-num2 | تُرجع الفرق بين num1 و num2 |
| عمليه الضرب (*) | num1*num2 | تُرجع num2 num1 ورقم 2 |
| الأُس (**) | num1**num2 | تُرجع نتيجة num1 المرفوعة إلى num2 ؛ num1 num2 |
| قسم (/) | num1/num2 | إرجاع النتيجة عندما يتم قسمة num1 على num2 - بما في ذلك الجزء الكسري |
| تقسيم الطابق (/) | num1//num2 | لعرض حاصل num1 عند num2 عدد 1 على عدد 2 |
| مودولو (٪) | num1 % num2 | تُرجع num2 عند num1 عدد 1 على عدد 2 |
لنأخذ بعض الأمثلة التي تستخدم هذه العمليات الحسابية. يمكنك تجربة هذه الأمثلة في Python REPL أو في محرر Python عبر الإنترنت في Geekflare.
>>> num1 = 18 >>> num2 = 5 >>> num1 + num2 23 >>> num1 - num2 13 >>> num1 * num2 90 >>> num1 ** num2 1889568 في هذا المثال ، num1 هو 18 و num2 هو 5. تقوم عملية القسمة num1/num2 بإرجاع النتيجة بما في ذلك الجزء الكسري.
العدد 5 يذهب إلى 18 ثلاث مرات ويتبقى الباقي من ثلاثة. لذلك ، تعطي عملية قسمة الأرضية ، num1//num2 ، حاصل القسمة 3 ، بينما يعطي عامل التشغيل modulo الباقي - أيضًا 3 في هذه الحالة.
>>> num1/num2 3.6 >>> num1//num2 3 >>> num1 % num2 3يجب أن يمنحك هذا فكرة عن كيفية عمل التقسيم وتقسيم الأرضية ومشغلي الوحدات. بعد ذلك ، سنتعرف على مشغل تقسيم الأرضية بالتفصيل.
️ في Python 2 ، تقوم عملية القسمة (/) باقتطاع النتيجة إلى أقرب عدد صحيح - على غرار عملية تقسيم الأرضية في Python 3. يناقش هذا البرنامج التعليمي كيفية عمل عملية تقسيم الأرضية في Python 3.x.
تقسيم الطابق باستخدام // المشغل

ضع في اعتبارك عملية قسمة بأرباح ومقسوم عليه. في num1/num2 ، يمثل num1 المقسوم و num2 هو المقسوم عليه. لإجراء قسمة أرضية للعددين 1 و 2 ، استخدم num1 num1//num2 num2
يُرجع عامل القسمة على الأرض (//) حاصل قسمة عملية القسمة - كعدد صحيح أو رقم فاصلة عائمة - اعتمادًا على أنواع بيانات المعاملات.
لا يضمن عامل قسمة الأرضية أن تكون الإجابة دائمًا عددًا صحيحًا. إذا كان المقسوم ( num1 ) أو المقسوم عليه ( num2 ) عائمًا ، فإن نتيجة num1//num2 هي عدد عائم. وفيما يلي بعض الأمثلة على ذلك.
>>> 18.0//5 3.0 >>> 10.0//4 2.0 >>> 15//4.0 3.0 إذا كنت تريد أن تكون النتيجة عددًا صحيحًا ، فأنت بحاجة إلى تحويلها صراحة إلى عدد صحيح باستخدام دالة int() :
>>> int(18.0//5) 3 >>> int(10.0//4) 2 >>> int(15//4.0) 3ماذا يحدث تحت الغطاء؟
عند استخدام عامل تقسيم الأرضية // ، يتم استدعاء الطريقة الخاصة (وتسمى أيضًا طريقة dunder) __floordiv__() . لذلك ، يمكنك أيضًا استخدام طريقة __floordiv__() على أي عدد صحيح أو رقم فاصلة عائمة ، كما هو موضح أدناه:
num1 = 18 num2 = 5 num1.__floordiv__(num2) # Output: 3تقسيم الطابق باستخدام عامل التشغيل .floordiv ()

لأداء تقسيم الأرضية في بايثون ، يمكنك أيضًا استخدام الدالة floordiv() في وحدة operator .
تحتوي وحدة مشغل Python على تعريفات الوظائف الفعالة التي يمكنها إجراء جميع العمليات الحسابية. لذلك ، لإجراء تقسيم الأرضية ، يمكنك أيضًا استخدام الدالة floordiv() من وحدة المشغل - بدلاً من // عامل التشغيل.
استخدام الدالة floordiv() من وحدة المشغل يعادل استخدام عامل تقسيم الأرضية.
>>> import operator >>> operator.floordiv(18,5) # Output: 3 >>> operator.floordiv(12,5.0) # Output: 2.0القسمة الأرضية باستخدام math.floor ()
كيف تعمل وظيفة الأرضية؟
في الرياضيات ، تأخذ وظيفة
floor()أي رقم حقيقيxكمدخل وتعيد عددًا صحيحًا (نتيجة). هذه النتيجة هي أكبر عدد صحيح أصغر من أو يساوي العدد الحقيقي x.
لفهم هذا بشكل أفضل ، دعونا نأخذ بعض الأمثلة ونتخيل هذه الأرقام على خط الأعداد.
مثال 1 : ضع في اعتبارك الرقم 2.3. أكبر عدد صحيح أصغر من أو يساوي 2.3 هو 2 ؛ لذا ستعود الكلمة (2.3) 2.

مثال 2: يمكنك تطبيق نفس التعريف عند التعامل مع الأرقام السالبة أيضًا. ضع في اعتبارك الرقم -1.7. أكبر عدد صحيح أصغر من أو يساوي -1.7 هو -2 ؛ لذا الكلمة (-1.7) ستعود -2.


دعنا نتحقق من النتائج المذكورة أعلاه باستخدام وظيفة floor() من وحدة الرياضيات.
>>> from math import floor >>> floor(2.3) 2 >>> floor(-1.7) -2 لأداء تقسيم الأرضية ، يمكنك استدعاء وظيفة floor() مع num1/num2 كوسيطة. نظرًا لأنه يقوم باقتطاع النتيجة أو تقريبها لأسفل إلى أقرب عدد صحيح ، فإنها تكافئ عملية قسمة الأرضية.
يمكنك استيراد وظيفة floor() بشكل صريح من وحدة math ، كما هو موضح:
from math import floor num1 = 18 num2 = 5 floor(num1/num2) # Output: 3 بدلاً من ذلك ، يمكنك أيضًا استيراد وحدة math فقط ثم الوصول إلى وظيفة floor() باستخدام math.floor() .
import math num1 = 18 num2 = 5 math.floor(num1/num2) # Output: 3 على عكس الدالة floordiv() من وحدة المشغل وعامل تقسيم الأرضية // ، فإن استخدام math.floor(num1/num2) يضمن أن النتيجة هي عدد صحيح. تجعل هذه الطريقة الكود قابلاً للقراءة وتلغي خطوة صب الكتابة.
import math num1 = 18.0 num2 = 5 math.floor(num1/num2) # Output: 3أمثلة على تقسيم الطوابق في بايثون

دعنا نختتم مناقشتنا بمثال عملي: البحث الثنائي.
البحث الثنائي عبارة عن خوارزمية بحث فعالة تتيح لك البحث عن عنصر مستهدف من خلال المصفوفات المصنفة في وقت O (log n) ، حيث يمثل n حجم المصفوفة.
تعمل هذه الخوارزمية عن طريق تقسيم فترة البحث إلى نصفين في كل خطوة. يتم ذلك اعتمادًا على ما إذا كانت نقطة منتصف الفاصل الزمني تطابق الهدف (ينتهي البحث عند العثور على تطابق!) أو أقل من الهدف أو أكبر منه. نظرًا لأنه يتم تقليل حجم المصفوفة بمقدار النصف في كل خطوة ، لا يتم تقييم نقطة الوسط دائمًا إلى عدد صحيح.
itemlist = [5,7,18,21,34,45] item = 7 ضع في اعتبارك التنفيذ التالي لخوارزمية البحث الثنائي. تأخذ الوظيفة binary_search() رقمًا ( item ) وقائمة (قائمة itemlist ) وتبحث عن تواجد item في قائمة itemlist .
- إذا تم العثور على
item، تقوم الوظيفة بإرجاع الفهرس الذي يوجد بهitem. - عدا ذلك ، فإنها ترجع
None.
def binary_search(item, itemlist): # get the list size listsize = len(itemlist) - 1 # start at the two ends of the list lowerIdx = 0 upperIdx = listsize while lowerIdx <= upperIdx: # calculate the middle point # use normal division instead of floor division midPt = (lowerIdx + upperIdx)/ 2 # if item is found, return the index if itemlist[midPt] == item: return midPt # otherwise get the next midpoint if item > itemlist[midPt]: lowerIdx = midPt + 1 else: upperIdx = midPt - 1 if lowerIdx > upperIdx: return None هذا التنفيذ صحيح وظيفيًا إلا أننا لم نأخذ في الحسبان عدم تقييم midPt إلى عدد صحيح أثناء استمرار البحث.
binary_search(item,itemlist) إذا استدعينا الوظيفة ، فإننا نواجه خطأ TypeError الذي ينص على أن فهارس القائمة يجب أن تكون أعدادًا صحيحة أو شرائح ، وليست عائمة.
--------------------------------------------------------------------------- TypeError Traceback (most recent call last) <ipython-input-3-a5f12ebc3145> in <module> ----> 1 binary_search(item,itemlist) <ipython-input-2-524ef6900b1f> in binary_search(item, itemlist) 12 13 # if item is found, return the index ---> 14 if itemlist[midPt] == item: 15 return midPt 16 # otherwise get the next midpoint TypeError: list indices must be integers or slices, not floatنقوم بتعديل تعريف الوظيفة لاستخدام عامل تقسيم الأرضية:
def binary_search(item, itemlist): # get the list size listsize = len(itemlist) - 1 # start at the two ends of the list lowerIdx = 0 upperIdx = listsize while lowerIdx <= upperIdx: # calculate the middle point # use floor division midPt = (lowerIdx + upperIdx)// 2 # if item is found, return the index if itemlist[midPt] == item: return midPt # otherwise get the next midpoint if item > itemlist[midPt]: lowerIdx = midPt + 1 else: upperIdx = midPt - 1 if lowerIdx > upperIdx: return Noneتقوم الوظيفة بإرجاع الفهرس الذي يوجد به العنصر 7 ، وهو الفهرس الأول.
binary_search(item,itemlist) # Output: 1استنتاج
آمل أن يساعدك هذا البرنامج التعليمي في فهم كيفية إجراء تقسيم الأرضية في بايثون. فيما يلي ملخص للطرق المختلفة التي تعلمتها:
- في Python ، ينفذ عامل التشغيل b العملية التي حددها المشغل مع المعاملين a و b ويعيد نتيجة العملية.
- يمكنك استخدام عامل تقسيم الطوابق في بايثون // ؛ تُرجع a // b حاصل قسمة عملية القسمة a / b.
- بدلاً من ذلك ، يمكنك استخدام دالة floordiv () المكافئة المحددة في وحدة المشغل Python مع بناء الجملة: worker.floordiv (a ، b) للحصول على نتيجة a // b.
- تُرجع جميع الطرق المذكورة أعلاه حاصل القسمة ولكن يمكن أن يكون نوع البيانات عددًا عشريًا أو عدد صحيح اعتمادًا على قيم a و b. لذلك سيتعين عليك تحويل القيمة المعادة إلى عدد صحيح.
- يمكن أيضًا استخدام وظيفة floor () من وحدة الرياضيات في Python لأداء تقسيم الأرضية: math.floor (a ، b) يكافئ a // b ويعيد عددًا صحيحًا. عندما تريد أن تكون النتيجة عددًا صحيحًا ، ضع في اعتبارك استخدام وظيفة floor من وحدة الرياضيات.
بعد ذلك ، تعرف على كيفية العمل مع defaultdict في Python.
