ট্র্যাক
/
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-এ ইন্টিজারের যেকোনো নির্ভুলতা থাকে, অর্থাৎ অঙ্কের সংখ্যা কেবল হোস্ট সিস্টেমের উপলব্ধ মেমোরি দিয়েই সীমিত।

ফ্লোটিং-পয়েন্ট সংখ্যা সাধারণত 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টি অনুশীলনী আর সত্যিকারের মানুষের মেন্টরিং দিয়ে শিখুন ও দক্ষ হয়ে উঠুন, সম্পূর্ণ বিনামূল্যে।