المسارات
/
Python
Python
/
التمارين
/
فاتورة الكهرباء
فاتورة الكهرباء

فاتورة الكهرباء

تمرين تعلّمي

مقدمة

يوفّر Python ثلاثة أنواع مختلفة من الأعداد المدمجة: الأعداد الصحيحة (int)، وأعداد الفاصلة العائمة (float)، والأعداد المركبة (complex). كما يمكن استيراد الكسور (fractions.Fraction) والأعداد العشرية (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 العمليات الحسابية بالكامل بين أنواع الأعداد المختلفة هذه، ويحوّل الأعداد الأضيق لتوافق نظيراتها الأوسع عند استخدامها مع عوامل الحساب الثنائية (+ و- و* و/ و// و%).

الجمع والطرح

يتصرّف عاملا الجمع والطرح كما في الرياضيات العادية. وإذا كان أحد طرفَي العملية، أو أكثر، من نوع float، فسيُحوَّل ما تبقّى من int إلى float أيضًا:

>>> 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 leftover
>>> 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

التقريب

يوفّر 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 * 64, then 2 + 192
>>> 2 + 3 * 4 ** 4
770

الدقة والتمثيل

تتمتّع الأعداد الصحيحة في Python بـدقة غير محدودة، فلا يحدّ عددَ منازلها سوى الذاكرة المتاحة في النظام المضيف.

عادةً ما تُنفَّذ أعداد الفاصلة العائمة باستخدام النوع double في لغة C (بدقة 15 منزلة عشرية)، لكن تمثيلها يختلف بحسب النظام المضيف. وللأعداد المركبة جزء real وجزء imaginary، وكلاهما يُمثَّل بأعداد الفاصلة العائمة.

لمناقشة أكثر تفصيلًا للمشكلات والقيود التي يعاني منها حساب الفاصلة العائمة في مختلف لغات البرمجة، ألقِ نظرة على 0.30000000000000004.com والدرس التعليمي لـ Python.

التعليمات

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

1. الحصول على الساعات الإضافية

لدى صاحب العمل برنامج يحسب الوقت اللازم لتشغيل أجهزة إلكترونية مختلفة. حاليًا، يُخزَّن الوقت بوحدة الساعات. عندما أضاف صاحب العمل الساعات، لاحظ أن المدة الزمنية لم تكن صحيحة. يريد منك إضافة 3 ساعات إضافية إلى بيانات الوقت. كما يريد معرفة عدد الساعات "الإضافية" بعد تحويل البيانات إلى أيام "كاملة" (اليوم 24 ساعة). قد لا يكون الوقت المراد تحويله بأيام كاملة.

نفّذ دالة get_extra_hours() تقبل عددًا صحيحًا يحمل عدد الساعات. يجب أن تُجري الدالة تعديل "الساعات الإضافية" المناسب، ثم return عددًا صحيحًا يمثل عدد الساعات التي يجب إزالتها من الإجمالي للحصول على الوقت بأيام "كاملة".

>>> get_extra_hours(25)
4

2. الحصول على قيمة kW

يريد صاحب العمل معرفة استهلاك الطاقة للأجهزة الإلكترونية المختلفة بوحدة kW. kW تعني كيلوواط، حيث الواط وحدة لقياس القدرة. وكلمة كيلو في اسم الوحدة سابقة في النظام المتري تعني 1000. كيلوواط واحد == 1000 واط.

نفّذ دالة get_kW_value() تقبل عددًا صحيحًا يحمل عدد الواط. ثم يجب أن تُرجع الدالة الواط ككيلوواط مقرَّبًا إلى منزلة عشرية واحدة.

>>> get_kW_value(1150)
1.2

3. الحصول على قيمة kWh

لتتمكن من حساب تكلفة تشغيل الأجهزة الإلكترونية، يحتاج صاحب العمل إلى معرفة استهلاك الطاقة بوحدة kWh. kWh تعني كيلوواط-ساعة، حيث الساعة وحدة زمنية. كيلوواط-ساعة واحد == 1000 واط مستخدمة لمدة ساعة واحدة. تتكوّن الساعة من 60 دقيقة، وتتكوّن الدقيقة من 60 ثانية. الساعة الواحدة تساوي 3600 ثانية. لحساب قيمة kWh، يجب تحويل الواط إلى kW، ثم قسمة النتيجة قسمةً صحيحة على 3600.

نفّذ دالة get_kWh_value() تقبل عددًا صحيحًا يحمل عدد الواط. ثم يجب أن تُرجع الدالة الكيلوواط-ساعات كعدد صحيح.

>>> get_kWh_value(5000000)
1

4. حساب الكفاءة

الأجهزة الإلكترونية ليست بكفاءة 100%. لذلك، يريد منك صاحب العمل حساب الكفاءة للأجهزة الإلكترونية. للحصول على الكفاءة، يجب قسمة معامل القدرة (عدد عشري بين 0 و100) على 100.

نفّذ دالة get_efficiency() تقبل عددًا عشريًا يحمل معامل القدرة. ثم يجب أن تُرجع الدالة الكفاءة المحسوبة كعدد عشري.

>>> get_efficiency(80)
0.8

5. حساب التكلفة

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

نفّذ دالة get_cost(<watts>,<power_factor>,<price>) تقبل عددًا صحيحًا يحمل عدد الواط، وعددًا عشريًا يحمل معامل القدرة، وعددًا عشريًا يحمل التكلفة لكل kWh. ثم يجب أن تُرجع الدالة تكلفة تشغيل الأجهزة الإلكترونية كعدد عشري.

>>> get_cost(5000000, 80, 0.25)
0.3125
تعديل عبر GitHub يفتح الرابط في نافذة أو علامة تبويب جديدة
Python Exercism

مستعد لبدء فاتورة الكهرباء؟

سجّل في Exercism لتتعلّم وتتقن Python عبر 17 مفهومًا146 تمرينًا، وإرشاد بشري حقيقي، وكل ذلك مجانًا.