يوفّر Python ثلاثة أنواع مختلفة من الأعداد المدمجة: الأعداد الصحيحة (int)، والأعداد العشرية (float)، والأعداد المركبة (complex).
كما تتوفر الكسور (fractions.Fraction) والأعداد من نوع Decimal (decimal.Decimal) بالاستيراد من المكتبة القياسية.
كما تُصنَّف الأعداد الصحيحة بدون منازل عشرية، بما فيها الأعداد الست عشرية (hex()) والثمانية (oct()) والثنائية (bin())، على أنها ints:
# Ints are whole numbers.
>>> 1234
1234
>>> type(1234)
<class 'int'>
>>> -12
-12
أما الأعداد التي تحتوي على نقطة عشرية (سواء كان لها جزء كسري أو لم يكن) فتُصنَّف على أنها floats:
>>> 3.45
3.45
>>> type(3.45)
<class 'float'>
يدعم Python العمليات الحسابية بين هذه الأنواع المختلفة من الأعداد دعمًا كاملًا، وسيحوّل الأعداد الأضيق لتوافق نظيرها الأوسع عند استخدامها مع عوامل الحساب الثنائية (+ و- و* و/ و// و%).
تدعم جميع الأعداد (فيما عدا الأعداد المركبة) كل العمليات الحسابية، وتُحسب وفقًا لـأسبقية العوامل.
أما دعم الدوال الرياضية (غير + و-) للأعداد المركبة فيمكنك العثور عليه في وحدة cmath.
يتصرف عاملا الجمع والطرح كما يتصرفان في الرياضيات العادية.
وإذا كان أحد طرفي العملية أو أكثر من نوع float، فسيُحوَّل الباقي من ints إلى floats أيضًا:
>>> 5 - 3
2
# The int is widened to a float here, and a float is returned.
>>> 3 + 4.0
7.0
وكما في الجمع والطرح، سيحوّل الضرب الأعداد الأضيق لتوافق نظيرها الأوسع:
>>> 3 * 2
6
>>> 3 * 2.0
6.0
تُرجع القسمة دائمًا قيمة من نوع float، حتى إذا كان الناتج عددًا صحيحًا:
>>> 6/5
1.2
>>> 6/2
3.0
إذا كنت بحاجة إلى ناتج من نوع int، فيمكنك استخدام القسمة الصحيحة لاقتطاع الناتج.
وتُجرى القسمة الصحيحة باستخدام العامل //:
>>> 6//5
1
>>> 6//2
3
يُرجع عامل باقي القسمة (%) باقي قسمة طرفي العملية:
# The result of % is zero here, because dividing 8 by 2 leaves no remainder
>>> 8 % 2
0
# The result of % is 2 here, because 3 only goes into 5 once, with 2 left over
>>> 5 % 3
2
وإليك أسلوب آخر لفهم 5 % 3:
>>> whole_part = int(5/3)
1
>>> decimal_part = 5/3 - whole_part
0.6666666666666667
>>> whole_remainder = decimal_part * 3
2.0
وتُجرى عملية الرفع إلى قوة باستخدام العامل **:
>>> 2 ** 3
8
>>> 4 ** 0.5
2
يمكنك تحويل الأعداد من int إلى floats ومن floats إلى int باستخدام الدالتين المدمجتين int() وfloat():
>>> int(3.45)
3
>>> float(3)
3.0
يوفّر Python دالة مدمجة round(<number>, <decimal_places>) لتقريب عدد عشري إلى عدد معيّن من المنازل العشرية.
وإذا لم تحدّد عدد المنازل العشرية، يُقرَّب العدد إلى أقرب عدد صحيح، وتُرجع الدالة قيمة من نوع int:
>>> round(3.1415926535, 2)
3.14
>>> round(3.1415926535)
3
يتيح لك Python استخدام الأقواس الهلالية لتجميع التعبيرات. ويفيدك ذلك عندما تريد تجاوز ترتيب العمليات الافتراضي.
>>> 2 + 3 * 4
14
>>> (2 + 3) * 4
20
يتبع Python قاعدة PEMDAS في أسبقية العوامل.
وهذا يعني أن العمليات الحسابية داخل () لها الأولوية الأعلى، ثم **، ثم * و/ و// و% و+ و-:
>>> 2 + 3 - 4 * 4
-11
>>> (2 + 3 - 4) * 4
4
# In the following example, the `**` operator has the highest priority, then `*`, then `+`
# Meaning we first do 4 ** 4, then 3 * 256, then 2 + 768
>>> 2 + 3 * 4 ** 4
770
الأعداد الصحيحة في Python ذات دقة غير محدودة، فعدد الأرقام لا يحدّه إلا الذاكرة المتاحة في النظام المُضيف.
أما الأعداد العشرية فعادةً ما تُنفَّذ باستخدام double في لغة C (بدقة 15 منزلة عشرية)، لكن تمثيلها يختلف حسب النظام المُضيف.
وتتكوّن الأعداد المركبة من جزء real وجزء imaginary، وكلاهما يمثَّل بعدد عشري.
لمناقشة أكثر تفصيلًا للمشكلات والقيود المتعلقة بحساب الأعداد العشرية في مختلف لغات البرمجة، ألقِ نظرة على 0.30000000000000004.com ودليل Python التعليمي.