مسیرها
/
Python
Python
/
تمرین‌ها
/
صورت‌حساب برق
صورت‌حساب برق

صورت‌حساب برق

تمرین یادگیری

مقدمه

پایتون سه نوع مختلف از اعداد توکار دارد: اعداد صحیح (int)، اعداد اعشاری (float) و اعداد مختلط (complex). کسرها (fractions.Fraction) و دسیمال‌ها (decimal.Decimal) نیز از طریق import از کتابخانه‌ی استاندارد در دسترس‌اند.

اعداد صحیح، از جمله اعداد هگزادسیمال (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'>

عملیات حسابی

پایتون به‌طور کامل از عملیات حسابی میان این نوع‌های مختلف عددی پشتیبانی می‌کند و وقتی از عملگرهای حسابی دودویی (+، -، *، /، // و %) استفاده شود، اعداد باریک‌تر را به نوع پهن‌تر متناظرشان تبدیل می‌کند.

جمع و تفریق

عملگرهای جمع و تفریق مانند ریاضیات معمولی عمل می‌کنند. اگر یک یا چند عملوند از نوع 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

روش دیگری برای نگاه کردن به ۵ % ۳:

>>> whole_part = int(5/3)
1

>>> decimal_part = 5/3 - whole_part
0.6666666666666667

>>> whole_remainder = decimal_part * 3
2.0

گرد کردن

پایتون یک تابع توکار round(number, <decimal_places>) فراهم می‌کند تا یک عدد اعشاری را به تعداد مشخصی رقم اعشار گرد کند. اگر تعداد ارقام اعشار مشخص نشود، عدد به نزدیک‌ترین عدد صحیح گرد می‌شود و یک int برمی‌گرداند:

>>> round(3.1415926535, 2)
3.14

>>> round(3.1415926535)
3

اولویت و پرانتز

پایتون به شما اجازه می‌دهد از پرانتز برای گروه‌بندی عبارت‌ها استفاده کنید. این زمانی مفید است که بخواهید ترتیب پیش‌فرض عملیات را نادیده بگیرید.

>>> 2 + 3 * 4
14

>>> (2 + 3) * 4
20

پایتون برای تقدم عملگرها از قاعده‌ی 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

دقت و نمایش

اعداد صحیح در پایتون دقت دلخواه دارند؛ تعداد ارقام تنها با حافظه‌ی در دسترس سیستم میزبان محدود می‌شود.

اعداد اعشاری معمولاً در C با double پیاده‌سازی می‌شوند (۱۵ رقم دقت)، اما نمایششان بسته به سیستم میزبان متفاوت است. اعداد مختلط یک بخش real و یک بخش imaginary دارند که هر دو با اعداد اعشاری نمایش داده می‌شوند.

برای بحث‌های مفصل‌تر درباره‌ی مشکلات و محدودیت‌های حساب اعشاری در زبان‌های برنامه‌نویسی مختلف، نگاهی به 0.30000000000000004.com و The Python Tutorial بیندازید.

دستورالعمل‌ها

شرکتی که برای آن کار می‌کنید می‌خواهد رد پای کربنی خود را کاهش دهد، پس از شما می‌خواهد برنامه‌ای بنویسید که مصرف برق و هزینه‌ی اجرای دستگاه‌های الکترونیکی این شرکت را محاسبه کند.

1. محاسبه‌ی ساعت‌های اضافه

کارفرمای شما برنامه‌ای دارد که زمان لازم برای اجرای دستگاه‌های الکترونیکی مختلف را محاسبه می‌کند. در حال حاضر، این زمان بر حسب ساعت ذخیره می‌شود. وقتی کارفرمای شما ساعت‌ها را جمع زد، متوجه شد که مدت زمان درست نیست. او از شما می‌خواهد ۳ ساعت به داده‌ی زمان اضافه کنید. همچنین می‌خواهد بداند پس از تبدیل داده به روزهای «کامل» (هر روز ۲۴ ساعت است)، چند ساعت «اضافه» باقی می‌ماند. ممکن است زمانی که باید تبدیل شود، معادل چند روز کامل نباشد.

تابعی به نام get_extra_hours() پیاده‌سازی کنید که یک عدد صحیح، یعنی تعداد ساعت‌ها، را می‌پذیرد. تابع باید تعدیل «ساعت‌های اضافه» را انجام دهد و سپس یک عدد صحیح return کند که نشان می‌دهد برای رسیدن به زمان بر حسب روزهای «کامل»، چند ساعت باید از مجموع کم شود.

>>> get_extra_hours(25)
4

2. محاسبه‌ی مقدار kW

کارفرمای شما می‌خواهد مصرف برق دستگاه‌های الکترونیکی مختلف را بر حسب kW بداند. kW مخفف کیلووات است؛ وات یکای توان است. پیشوند «کیلو» در نام این یکا، پیشوندی در دستگاه متریک است که به معنای ۱۰۰۰ است. یک کیلووات برابر است با ۱۰۰۰ وات.

تابعی به نام get_kW_value() پیاده‌سازی کنید که یک عدد صحیح، یعنی تعداد وات‌ها، را می‌پذیرد. تابع باید سپس وات‌ها را به‌صورت کیلووات، گردشده به ۱ رقم اعشار، return کند.

>>> get_kW_value(1150)
1.2

3. محاسبه‌ی مقدار kWh

کارفرمای شما برای محاسبه‌ی هزینه‌ی اجرای دستگاه‌های الکترونیکی، باید مصرف برق را بر حسب kWh بداند. kWh مخفف کیلووات‌ساعت است؛ در آن، ساعت یکای زمان است. یک کیلووات‌ساعت برابر است با ۱۰۰۰ وات که به مدت ۱ ساعت مصرف می‌شود. هر ساعت از ۶۰ دقیقه و هر دقیقه از ۶۰ ثانیه تشکیل می‌شود. یک ساعت برابر با ۳۶۰۰ ثانیه است. برای محاسبه‌ی مقدار kWh، باید وات‌ها را به kW تبدیل کنید و سپس نتیجه را بر ۳۶۰۰ تقسیم صحیح کنید.

تابعی به نام get_kWh_value() پیاده‌سازی کنید که یک عدد صحیح، یعنی تعداد وات‌ها، را می‌پذیرد. تابع باید سپس کیلووات‌ساعت‌ها را به‌صورت یک عدد صحیح return کند.

>>> get_kWh_value(5000000)
1

4. محاسبه‌ی بازدهی

دستگاه‌های الکترونیکی ۱۰۰٪ بازده ندارند. بنابراین، کارفرمای شما می‌خواهد بازدهی دستگاه‌های الکترونیکی را محاسبه کنید. برای به دست آوردن بازدهی، باید ضریب توان (یک عدد اعشاری بین ۰ و ۱۰۰) را بر ۱۰۰ تقسیم کنید.

تابعی به نام get_efficiency() پیاده‌سازی کنید که یک عدد اعشاری، یعنی ضریب توان، را می‌پذیرد. تابع باید سپس بازدهی محاسبه‌شده را به‌صورت یک عدد اعشاری return کند.

>>> get_efficiency(80)
0.8

5. محاسبه‌ی هزینه

کارفرمای شما می‌خواهد هزینه‌ی اجرای دستگاه‌های الکترونیکی را بداند. هزینه‌ی اجرای دستگاه‌های الکترونیکی برابر است با توان مصرفی ضربدر هزینه‌ی هر kWh. توان مصرفی هم برابر است با توان داده‌شده تقسیم بر بازدهی محاسبه‌شده.

تابعی به نام get_cost(<watts>,<power_factor>,<price>) پیاده‌سازی کنید که یک عدد صحیح، یعنی تعداد وات‌ها، یک عدد اعشاری، یعنی ضریب توان، و یک عدد اعشاری، یعنی هزینه‌ی هر kWh، را می‌پذیرد. تابع باید سپس هزینه‌ی اجرای دستگاه‌های الکترونیکی را به‌صورت یک عدد اعشاری return کند.

>>> get_cost(5000000, 80, 0.25)
0.3125
ویرایش از طریق GitHub این لینک در پنجره یا زبانه‌ی جدیدی باز می‌شود
Python Exercism

آماده‌اید صورت‌حساب برق را شروع کنید؟

در Exercism ثبت‌نام کنید تا Python را همراه با 17 مفهوم146 تمرین و مربی‌گری انسانی واقعی یاد بگیرید و در آن استاد شوید، همه‌ی این‌ها رایگان.