توجد في Python ثلاثة أنواع مختلفة من الأعداد المدمجة: ints وfloats وcomplex. لكنك في هذا التمرين ستتعامل مع ints وfloats فقط.
ints هي أعداد صحيحة، مثل 1234 و-10 و20201278.
تتمتع الأعداد الصحيحة في Python بـدقة تعسفية، فلا يحد عدد أرقامها إلا الذاكرة المتاحة في النظام المضيف.
floats هي أعداد تحتوي على فاصلة عشرية، مثل 0.0 و3.14 و-9.01.
عادةً ما تُنفَّذ أعداد الفاصلة العائمة في Python باستخدام double في C (بدقة 15 خانة عشرية)، لكن تمثيلها يختلف حسب النظام المضيف وتفاصيل التنفيذ الأخرى. وقد يُسبب هذا بعض المفاجآت عند التعامل مع floats، لكنه "جيد بما يكفي" في معظم الحالات.
يمكنك الاطلاع على مزيد من التفاصيل والنقاشات في المصادر التالية:
int() المدمجةfloat() المدمجةتدعم Python العمليات الحسابية بين ints وfloats بشكل كامل. وهي تُحوّل الأعداد الأضيق لتطابق نظيراتها الأوسع عند استخدامها مع العوامل الحسابية الثنائية (+ و- و* و/ و// و%).
تعتبر Python أن ints أضيق من floats. لذا فإن استخدام float في تعبير يضمن أن تكون النتيجة float أيضًا. لكن عند إجراء القسمة، تكون النتيجة دائمًا float حتى لو استُخدمت أعداد صحيحة فقط.
# The int is widened to a float here, and a float type is returned.
>>> 3 + 4.0
7.0
>>> 3 * 4.0
12.0
>>> 3 - 2.0
1.0
# Division always returns a float.
>>> 6 / 2
3.0
>>> 7 / 4
1.75
# Calculating remainders.
>>> 7 % 4
3
>>> 2 % 4
2
>>> 12.75 % 3
0.75
إذا احتجت إلى نتيجة من نوع int، فيمكنك استخدام // لقطع النتيجة.
>>> 6 // 2
3
>>> 7 // 4
1
لتحويل float إلى int، يمكنك استخدام int(). ولتحويل int إلى float، يمكنك استخدام float().
>>> int(6 / 2)
3
>>> float(1 + 2)
3.0
صديقك Chandler يخطط لزيارة بلدان غريبة في جميع أنحاء العالم. للأسف، مهارات Chandler في الرياضيات ليست جيدة. وهو قلق جدًا من أن يتعرض للنصب من مكاتب صرف العملات أثناء رحلته، ويريد منك أن تصنع له حاسبة للعملات. وهذه هي مواصفاته للتطبيق:
أنشئ الدالة exchange_money() التي تأخذ 2 من المعاملات:
budget : مبلغ المال الذي تخطط لصرفه.exchange_rate : مقدار العملة المحلية الذي يساوي وحدة واحدة من العملة الأجنبية.يجب أن تُرجع هذه الدالة قيمة العملة بعد الصرف.
ملاحظة: إذا كانت عملتك هي USD وأردت صرف USD مقابل EUR بسعر صرف 1.20، فإن 1.20 USD == 1 EUR.
>>> exchange_money(127.5, 1.2)
106.25
أنشئ الدالة get_change() التي تأخذ 2 من المعاملات:
budget : مبلغ المال قبل الصرف.exchanging_value : مبلغ المال الذي يُؤخذ من الميزانية ليُصرف.يجب أن تُرجع هذه الدالة مبلغ المال المتبقي من الميزانية.
>>> get_change(127.5, 120)
7.5
أنشئ الدالة get_value_of_bills() التي تأخذ 2 من المعاملات:
denomination : قيمة الورقة النقدية الواحدة.number_of_bills : العدد الإجمالي للأوراق النقدية.لا يتعامل كشك الصرف هذا إلا بالنقد بفئات معينة. يجب أن يكون المجموع الذي تحصل عليه قابلًا للقسمة على قيمة "الورقة" أو الوحدة الواحدة، وقد يتبقى كسر أو باقٍ. يجب أن تُرجع دالتك قيمة الأوراق النقدية الإجمالية فقط (باستثناء المبالغ الكسرية) التي سيعيدها الكشك. للأسف، يحتفظ الكشك بالباقي كمكافأة إضافية.
>>> get_value_of_bills(5, 128)
640
أنشئ الدالة get_number_of_bills() التي تأخذ amount وdenomination.
يجب أن تُرجع هذه الدالة عدد الأوراق النقدية التي يمكنك الحصول عليها ضمن المبلغ المعطى. بعبارة أخرى: كم عدد الأوراق النقدية الكاملة التي تسعها الميزانية الابتدائية؟ تذكّر أنك لا يمكنك الحصول إلا على أوراق نقدية كاملة، لا أجزاء من الأوراق، لذا تذكّر أن تقسم وفقًا لذلك. وبذلك فأنت تقرّب للأسفل إلى أقرب ورقة نقدية أو فئة كاملة.
>>> get_number_of_bills(127.5, 5)
25
أنشئ الدالة get_leftover_of_bills() التي تأخذ amount وdenomination.
يجب أن تُرجع هذه الدالة المبلغ المتبقي الذي لا يمكن إعادته من مبلغك المبدئي بالنظر إلى فئة الأوراق النقدية. من المهم جدًا معرفة المبلغ الذي يحتفظ به الكشك بدقة.
>>> get_leftover_of_bills(127.5, 20)
7.5
أنشئ الدالة exchangeable_value() التي تأخذ budget وexchange_rate وspread وdenomination.
المعامل spread هو النسبة المئوية المقتطعة كرسم صرف، مكتوبة كعدد صحيح.
يجب تحويلها إلى عدد عشري بقسمتها على 100.
إذا كان 1.00 EUR == 1.20 USD وكانت النسبة المقتطعة تساوي 10، فسيصبح سعر الصرف الفعلي: 1.00 EUR == 1.32 USD لأن 10% من 1.20 هي 0.12، وتُضاف هذه الرسوم الإضافية إلى عملية الصرف.
يجب أن تُرجع هذه الدالة القيمة القصوى للعملة الجديدة بعد حساب سعر الصرف مضافًا إليه النسبة المقتطعة. تذكّر أن فئة العملة عدد صحيح، ولا يمكن تقسيمها.
ملاحظة: يجب أن تكون القيمة المُرجعة من النوع int.
>>> exchangeable_value(127.25, 1.20, 10, 20)
80
>>> exchangeable_value(127.25, 1.20, 10, 5)
95
سجّل في Exercism لتتعلّم وتتقن Python عبر 17 مفهومًا146 تمرينًا، وإرشاد بشري حقيقي، وكل ذلك مجانًا.