القائمة الرئيسية

الصفحات

دورة البرمجة بلغة بايثون - الدرس الثالث والعشرون (الارقام وتحويل النوع والرياضيات)

دورة البرمجة بلغة بايثون - الدرس الثالث والعشرون (الارقام وتحويل النوع والرياضيات)
 

دورة البرمجة بلغة بايثون - الدرس الثالث والعشرون (الارقام وتحويل النوع والرياضيات)

في هذه المقالة ، ستتعرف على الأرقام المختلفة المستخدمة في بايثون ، وكيفية التحويل من نوع بيانات إلى آخر ، والعمليات الحسابية المدعومة في بايثون.


نوع بيانات الارقام في بايثون

تدعم بايثون الأعداد الصحيحة وأرقام الفاصلة العائمة والأرقام المركبة. يتم تعريفها على أنها فئات int و float و complex في بايثون.


يتم فصل الأعداد الصحيحة والنقاط العائمة بوجود أو عدم وجود فاصلة عشرية. على سبيل المثال ، 5 عدد صحيح بينما 5.0 هو رقم فاصلة عائمة.


الأعداد المركبة مكتوبة بالصورة x + yj ، حيث x هو الجزء الحقيقي و y الجزء التخيلي.


يمكننا استخدام دالة ()type لمعرفة الفئة التي ينتمي إليها متغير أو قيمة و ()isinstance هي دالة للتحقق مما إذا كانت تنتمي إلى فئة معينة.


لنلقي نظرة على مثال:

a = 5

print(type(a))

print(type(5.0))

c = 5 + 3j
print(c + 3)

print(isinstance(c, complex))


عند تشغيل البرنامج أعلاه ، نحصل على المخرجات التالية:

<class 'int'>
<class 'float'>
(8+3j)
True


بينما يمكن أن تكون الأعداد الصحيحة بأي طول ، فإن رقم الفاصلة العائمة يكون دقيقًا فقط حتى 15 منزلاً عشريًا (المكان السادس عشر غير دقيق).


الأرقام التي نتعامل معها كل يوم هي من نظام الأرقام العشري (الأساس 10). لكن يحتاج مبرمجو الكمبيوتر (المبرمجون المضمنون عمومًا) إلى العمل مع أنظمة الأرقام الثنائية (الأساس 2) والسداسي العشري (الأساس 16) والثماني (الأساس 8).


في بايثون ، يمكننا تمثيل هذه الأرقام من خلال وضع بادئة قبل هذا الرقم. يسرد الجدول التالي هذه البادئات.


بادئة نظام الأرقام

Number SystemPrefix
Binary'0b' or '0B'
Octal'0o' or '0O'
Hexadecimal'0x' or '0X'


وهنا بعض الأمثلة

# Output: 107
print(0b1101011)

# Output: 253 (251 + 2)
print(0xFB + 0b10)

# Output: 13
print(0o15)

عند تشغيل البرنامج ، سيكون الإخراج:

107
253
13

تحويل النوع

يمكننا تحويل نوع من الأعداد إلى نوع آخر. يُعرف هذا أيضًا بالاجبار.


عمليات مثل الجمع والطرح يجبر عددًا صحيحًا على التعويم ضمنيًا (تلقائيًا) ، إذا كان أحد المعاملات عائمًا.

>>> 1 + 2.0
3.0


يمكننا أن نرى أعلاه أن 1 (عدد صحيح) يتم إجباره على 1.0 (عائم) من أجل الجمع والنتيجة هي أيضًا رقم فاصلة عائمة.


يمكننا أيضًا استخدام الدوال المضمنة مثل ()int و ()float و ()complex للتحويل بين الأنواع بشكل صريح. يمكن حتى تحويل هذه الوظائف من السلاسل النصية.

>>> int(2.3)
2
>>> int(-2.8)
-2
>>> float(5)
5.0
>>> complex('3+5j')
(3+5j)


عند التحويل من عدد عشري إلى عدد صحيح ، يتم اقتطاع الرقم (تتم إزالة الأجزاء العشرية).


الارقام العشرية في بايثون

ينفذ تعويم الطبقة المدمج في بايثون بعض الحسابات التي قد تدهشنا. نعلم جميعًا أن مجموع 1.1 و 2.2 يساوي 3.3 ، لكن يبدو أن بايثون غير موافق.

>>> (1.1 + 2.2) == 3.3
False


ما الذي يجري؟

اتضح أن أرقام الفاصلة العائمة يتم تنفيذها في أجهزة الكمبيوتر ككسور ثنائية لأن الكمبيوتر لا يفهم سوى النظام الثنائي (0 و 1). لهذا السبب ، لا يمكن تخزين معظم الكسور العشرية التي نعرفها بدقة في جهاز الكمبيوتر الخاص بنا.


لنأخذ مثالا. لا يمكننا تمثيل الكسر 1/3 كرقم عشري. سيعطي هذا 0.33333333 ... وهو طويل بلا حدود ، ويمكننا فقط تقريبه.


اتضح أن الكسر العشري 0.1 سينتج عنه كسر ثنائي طويل بلا حدود من 0.000110011001100110011 ... ويخزن جهاز الكمبيوتر لدينا عددًا محدودًا منه فقط.


هذا سيقارب 0.1 فقط ولكنه لن يكون متساويًا أبدًا. ومن ثم ، فإن هذا هو الحد من أجهزة الكمبيوتر لدينا وليس خطأ في بايثون.

>>> 1.1 + 2.2
3.3000000000000003

للتغلب على هذه المشكلة ، يمكننا استخدام الوحدة العشرية التي تأتي مع Python. بينما تحتوي أرقام الفاصلة العائمة على دقة تصل إلى 15 منزلاً عشريًا ، فإن الوحدة العشرية تتمتع بدقة يمكن للمستخدم ضبطها.


دعونا نرى الفرق:

import decimal

print(0.1)

print(decimal.Decimal(0.1))

الناتج

0.1
0.1000000000000000055511151231257827021181583404541015625


تُستخدم هذه الوحدة عندما نريد إجراء حسابات عشرية كما تعلمنا في المدرسة.


كما أنه يحافظ على الأهمية. نعلم أن 25.50 كجم هي أكثر دقة من 25.5 كجم لأنها تحتوي على منزلتين عشريتين مهمتين مقارنة بواحد.


from decimal import Decimal as D

print(D('1.1') + D('2.2'))

print(D('1.2') * D('2.50'))

الناتج

3.3
3.000

لاحظ الأصفار اللاحقة في المثال أعلاه.


قد نتساءل لماذا لا نطبق العلامة العشرية في كل مرة بدلاً من الطفو؟ السبب الرئيسي هو الكفاءة. يجب أن يتم تنفيذ عمليات الفاصلة العائمة بشكل أسرع من العمليات العشرية.


متى يتم استخدام عشري بدلاً من طافيء؟

نستخدم بشكل عام العلامة العشرية في الحالات التالية.

  • عندما نجري تطبيقات مالية تحتاج إلى تمثيل عشري دقيق.
  • عندما نريد التحكم في مستوى الدقة المطلوبة.
  • عندما نريد تطبيق مفهوم المنازل العشرية المهمة.


كسور بايثون

توفر Python عمليات تتضمن أعدادًا كسرية من خلال وحدة الكسور الخاصة بها.


يحتوي الكسر على بسط ومقام ، وكلاهما عدد صحيح. تحتوي هذه الوحدة على دعم لحساب العدد المنطقي.


يمكننا إنشاء كائنات كسرية بطرق مختلفة. دعونا نلقي نظرة عليهم.

import fractions

print(fractions.Fraction(1.5))

print(fractions.Fraction(5))

print(fractions.Fraction(1,3))

الناتج

3/2
5
1/3

أثناء إنشاء الكسر من الطفو ، قد نحصل على بعض النتائج غير العادية. ويرجع ذلك إلى التمثيل غير الكامل لرقم النقطة العائمة الثنائي كما تمت مناقشته في القسم السابق.


لحسن الحظ ، يسمح لنا الكسر بإنشاء مثيل بسلسلة أيضًا. هذا هو الخيار المفضل عند استخدام الأرقام العشرية.

import fractions

# As float
# Output: 2476979795053773/2251799813685248
print(fractions.Fraction(1.1))

# As string
# Output: 11/10
print(fractions.Fraction('1.1'))

الناتج

2476979795053773/2251799813685248
11/10

يدعم نوع البيانات هذا جميع العمليات الأساسية. وفيما يلي بعض الأمثلة على ذلك.

from fractions import Fraction as F

print(F(1, 3) + F(1, 3))

print(1 / F(5, 6))

print(F(-3, 10) > 0)

print(F(-3, 10) < 0)

الناتج

2/3
6/5
False
True

رياضيات بايثون

تقدم Python وحدات مثل الرياضيات والعشوائية لتنفيذ رياضيات مختلفة مثل علم المثلثات واللوغاريتمات والاحتمالات والإحصاء ، إلخ.


استيراد الرياضيات

import math

print(math.pi)

print(math.cos(math.pi))

print(math.exp(10))

print(math.log10(1000))

print(math.sinh(1))

print(math.factorial(6))

الناتج

3.141592653589793
-1.0
22026.465794806718
3.0
1.1752011936438014
720


فيما يلي القائمة الكاملة للوظائف والسمات المتوفرة في وحدة الرياضيات في بايثون.

import random

print(random.randrange(10, 20))

x = ['a', 'b', 'c', 'd', 'e']

# Get random choice
print(random.choice(x))

# Shuffle x
random.shuffle(x)

# Print the shuffled x
print(x)

# Print random element
print(random.random())

عندما نقوم بتشغيل البرنامج أعلاه نحصل على الإخراج على النحو التالي (قد تختلف القيم بسبب السلوك العشوائي)

18
e
['c', 'e', 'd', 'b', 'a']
0.5682821194654443


reaction:
Ahmed Taher
Ahmed Taher
مدون من العراق . احب البرمجة وكل ما يتعلق بالشبكات والسيرفرات وامن المعلومات . واسعى الى توفير جميع المصادر والمواد للامتحانات الدولية.

تعليقات