تعلم البرمجة مع Python


الدرس: استخدام وحدات الرياضيات


الصفحة السابقة
في هذا الفصل ، سوف نستكشف ثلاث وحدات. لقد جعلتك بالفعل تستخدم بعض هذه الوحدات ، وستكون هذه فرصة للعودة إليها بمزيد من التفاصيل.

  • الوحدة math التي تقدم عددًا جيدًا من الوظائف الرياضية.
  • الوحدة fractions، التي سنرى منها بشكل أساسي الفئة Fraction، تسمح ... هل خمنت ؟ لنمذجة الكسور.
  • وأخيرًا الوحدة  random التي تعرفها من تطبيقاتنا العملية والتي سنكتشفها بمزيد من التفصيل هنا.

لتبدأ ، وحدة الرياضيات



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

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

الوظائف المعتادة


تذكر المشغلين +، -، *، /و %أعتقد أنني ربما لن اعود اليها.

ثلاث وظائف لبدء عرضنا الصغير:


>>> math.pow(5, 2) # 5 تربيع
25.0
>>> 5 ** 2 # pow(5, 2) تقريبًا مطابق
25
>>> math.sqrt(25) # الجذر التربيعي للعدد 25 (square root)
5.0
>>> math.exp(5) # متسارع
148.4131591025766
>>> math.fabs(-3) # قيمة مطلقة
3.0
>>>
 
هناك بالفعل فرق بين المشغل ** والوظيفة  math.pow . تقوم الدالة دائمًا بإرجاع عدد عشري بينما يُرجع عامل التشغيل عددًا صحيحًا عندما يكون ذلك ممكنًا.

القليل من علم المثلثات (trigonometry)


قبل إلقاء نظرة على الوظائف المعتادة في علم المثلثات ، أود أن ألفت انتباهك إلى حقيقة أن الزوايا ، في بايثون ، تُعطى وتُعاد بالراديان (راديان).

للتذكير :

1 راد = 57.29 درجة

ومع ذلك ، توجد بالفعل وظائف في الوحدة math تسمح لنا ببساطة بتحويل الزوايا.


math.degrees(angle_en_radians) # يحول إلى درجات
math.radians(angle_en_degrés) # حوّل إلى راديان
 
الآن دعونا نرى بعض الوظائف. يطلق عليهم ،:
  • Cos
  • Sin
  • Tan
  • Acos
  • Asin
  • atan

تقريب رقم


Math توفر لنا الوحدة عدة وظائف لتقريب رقم وفقًا لمعايير مختلفة:


>>> math.ceil(2.3) # إرجاع أصغر عدد صحيح> = 2.3
3
>>> math.floor(5.8) # إرجاع أكبر عدد صحيح <= 5.8
5
>>> math.trunc(9.5) # اقتطاع 9.5
9
>>>
 
أما ثوابت الوحدة فهي ليست كثيرة:  math.pi طبيعياً وكذلك math.e .

ها أنت ذا ، كانت سريعة ولكنها كافية ، إلا إذا كنت تبحث عن شيء محدد. في هذه الحالة ، يلزم إجراء جولة سريعة للتوثيق الرسمي للوحدةmath  .

الكسور مع وحدة الكسور



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


from fractions import Fraction
 

اصنع كسرًا


Fraction يقبل مُنشئ الفئة عدة أنواع من المعلمات:

  • عددان صحيحان ، البسط والمقام (افتراضياً ، البسط يساوي 0والمقام 1 ). إذا كان المقام 0، فسيتم  طرح استثناء ZeroDivisionError .
  • جزء آخر.
  • سلسلة من النموذج 'numerateur/denominateur' .

>>> un_demi = Fraction(1, 2)
>>> un_demi
Fraction(1, 2)
>>> un_quart = Fraction('1/4')
>>> un_quart
Fraction(1, 4)
>>> autre_fraction = Fraction(-5, 30)
>>> autre_fraction
Fraction(-1, 6)
>>>
 
ألا يمكننا إنشاء كسور من float؟

نعم ، ولكن ليس في المنشئ. لإنشاء كسر من عدد عشري ، نستخدم طريقة الفئة from_float :


>>> Fraction.from_float(0.5)
Fraction(1, 2)
>>>
 
وللحصول على float ، لا شيء يمكن أن يكون أبسط:

>>> float(un_quart)
0.25
>>>
 

معالجة الكسور


الآن ، ما الهدف من وجود الأعداد في هذه الصورة؟ خاصة لدقة الحسابات. الكسور التي رأيناها للتو تقبل بشكل طبيعي العوامل المعتادة:


>>> un_dixieme = Fraction(1, 10)
>>> un_dixieme + un_dixieme + un_dixieme
Fraction(3, 10)
>>>
 
في حين أن :

>>> 0.1 + 0.1 + 0.1
0.30000000000000004
>>>
 
بالطبع ، الفرق ليس كبيرا ، لكنه موجود. كل هذا يتوقف على احتياجاتك الدقيقة.

حسابات أخرى؟


>>> un_dixieme * un_quart
Fraction(1, 40)
>>> un_dixieme + 5
Fraction(51, 10)
>>> un_demi / un_quart
Fraction(2, 1)
>>> un_quart / un_demi
Fraction(1, 2)
>>>
 
هنا. سيكون هذا العرض التوضيحي الصغير كافيًا إذا كنت مهتمًا بهذه الوحدة. وإذا لم يكن ذلك كافيًا ، فانتقل إلى التوثيق الرسمي لوحدة الكسور .

شبه عشوائي مع عشوائي



لقد استخدمت أيضًا الوحدة Random خلال مختبراتنا. سنرى بعض وظائف هذه الوحدة ، وستكون النظرة العامة سريعة!

العشوائية الزائفة


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

ما عليك أن تفهمه هو أنه وراء استدعائنا لـ  random.randrange على سبيل المثال ، ستقوم Python بإجراء عملية حسابية حقيقية للعثور على رقم عشوائي. نتيجة لذلك ، فإن الرقم الذي تم إنشاؤه ليس عشوائيًا حقًا لأن عملية حسابية متطابقة ، يتم إجراؤها في نفس الظروف ، ستعطي نفس الرقم. ومع ذلك ، فإن الخوارزميات الموضوعة لتوليد العشوائية أصبحت الآن معقدة بدرجة كافية حتى تبدو الأرقام المتولدة كسلسلة عشوائية. تذكر ، مع ذلك ، أنه لا يوجد شيء اسمه فرصة حقيقية لجهاز الكمبيوتر.

الوظيفة random


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

يُنشئ رقمًا شبه عشوائي بين 0 و 1. ومن الطبيعي أن يكون عددًا عائمًا float :


>>> import random
>>> random.random()
0.9565461152605507
>>>
 

randrange وrandint


Randrange تأخذ الوظيفة ثلاث معاملات:

  • الهامش السفلي للفاصل ؛
  • الهامش العلوي للفاصل ؛
  • الفرق بين كل قيمة من قيم الفاصل الزمني ( 1افتراضي) .
ماذا تمثل المعلمة الأخيرة؟

لنأخذ مثالاً ، سيكون أبسط:


random.randrange(5, 10, 2)
 
ستسعى هذه التعليمات إلى إنشاء رقم عشوائي بين 5 مضمن و10 غير  مدرج ، مع اختلاف 2 بين كل قيمة. لذلك سيبحث في قائمة القيم [5, 7, 9] .

إذا لم تحدد معاملاً ثالثًا ، فسيكون هو 1 الافتراضي (هذا هو السلوك المتوقع في أغلب الأحيان).

Randint تأخذ الوظيفة معلمتين:

  • مرة أخرى ، الهامش السفلي للفاصل ؛
  • الهامش العلوي للفاصل ، هذه المرة.
لرسم رقم عشوائي بين 1و 6، فمن البديهي القيام بما يلي:

random.randint(1, 6)
 

عمليات التسلسل


سنرى وظيفتين: الأولى choice، تعيد عشوائيًا عنصرًا من تسلسل تم تمريره كمعامل:


>>> random.choice(['a', 'b', 'k', 'p', 'i', 'w', 'z'])
'k'
>>>
 
الثاني يسمى shuffle . يأخذ تسلسل كمعامل ويمزجها ؛ لذلك يعدل التسلسل الذي تم تمريره إليه ولا يُرجع شيئًا:

>>> liste = ['a', 'b', 'k', 'p', 'i', 'w', 'z']
>>> random.shuffle(liste)
>>> liste
['p', 'k', 'w', 'z', 'i', 'b', 'a']
>>>
 
هنا. مرة أخرى كان هذا سريعًا ولكن إذا كنت تريد التعمق أكثر فأنت تعرف إلى أين تذهب ... مباشرة إلى وثائق Python الرسمية بشكل عشوائي .

باختصار


  • تحتوي الوحدة math على العديد من الدوال والثوابت الرياضية الشائعة.
  • الوحدة fractions لديها ما يلزم لمعالجة الكسور ، وأحيانًا مفيدة لدقة الحسابات.
  • Random تسمح الوحدة بتوليد أرقام شبه عشوائية.