ট্র্যাক
/
Python
Python
/
অনুশীলনী
/
মুদ্রা বিনিময়
মুদ্রা বিনিময়

মুদ্রা বিনিময়

লার্নিং অনুশীলনী

ভূমিকা

সংখ্যা

Python-এ বিল্ট-ইন সংখ্যা তিন ধরনের: ints, floats, এবং complex। তবে এই অনুশীলনীতে আপনি কেবল ints আর floats নিয়েই কাজ করবেন।

ints

ints হলো পূর্ণসংখ্যা। যেমন 1234, -10, 20201278।

Python-এর ইন্টিজারগুলোর আরবিট্রারি প্রিসিশন থাকে, অর্থাৎ অঙ্কের সংখ্যা কেবল হোস্ট সিস্টেমের উপলব্ধ মেমোরি দিয়েই সীমাবদ্ধ।

floats

floats হলো দশমিক বিন্দুযুক্ত সংখ্যা। যেমন 0.0, 3.14, -9.01।

ফ্লোটিং পয়েন্ট সংখ্যা সাধারণত Python-এ C-এর একটি double দিয়ে বাস্তবায়িত হয় (দশমিকের পর ১৫ ঘর নির্ভুলতা), তবে হোস্ট সিস্টেম ও অন্যান্য বাস্তবায়নের খুঁটিনাটি অনুযায়ী এর রূপ বদলে যেতে পারে। ফ্লোট নিয়ে কাজ করার সময় এতে কিছু চমক তৈরি হতে পারে, তবে বেশিরভাগ ক্ষেত্রেই এটি "যথেষ্ট ভালো"।

আরও বিস্তারিত ও আলোচনা দেখতে পারেন এই রিসোর্সগুলোতে:

পাটিগণিত

Python ints আর floats-এর মধ্যে পাটিগণিত সম্পূর্ণভাবে সমর্থন করে। বাইনারি পাটিগণিত অপারেটরগুলো (+, -, *, /, //, এবং %) ব্যবহার করলে এটি সংকীর্ণ সংখ্যাগুলোকে তাদের কম-সংকীর্ণ প্রতিরূপের সাথে মিলিয়ে রূপান্তর করে।

Python ints-কে floats-এর চেয়ে সংকীর্ণ মনে করে। তাই এক্সপ্রেশনে একটি ফ্লোট ব্যবহার করলে ফলাফলও যে ফ্লোট হবে, তা নিশ্চিত। তবে ভাগ করার সময়, শুধু ইন্টিজার ব্যবহার করলেও ফলাফল সবসময় ফ্লোট হবে।

# 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

ইন্টিজার ফলাফল দরকার হলে, ফলাফল ছেঁটে ফেলতে // ব্যবহার করতে পারেন।

>>> 6 // 2
3
>>> 7 // 4
1

একটি ফ্লোটকে ইন্টিজারে রূপান্তর করতে int() ব্যবহার করতে পারেন। আর একটি ইন্টিজারকে ফ্লোটে রূপান্তর করতে float()।

>>> int(6 / 2)
3
>>> float(1 + 2)
3.0

নির্দেশনা

আপনার বন্ধু চ্যান্ডলার সারা বিশ্বের নানা বিচিত্র দেশ ঘুরে দেখার পরিকল্পনা করছে। দুঃখের বিষয়, চ্যান্ডলারের গণিতের দক্ষতা ভালো নয়। ভ্রমণের সময় মুদ্রা বিনিময়কারীদের কাছে প্রতারিত হওয়ার ব্যাপারে সে বেশ চিন্তিত, আর সে চায় আপনি তার জন্য একটি মুদ্রা ক্যালকুলেটর বানিয়ে দিন। অ্যাপটির জন্য তার চাহিদাগুলো এখানে দেওয়া হলো:

1. বিনিময়ের পর মান অনুমান করা

exchange_money() নামে একটি ফাংশন তৈরি করুন, যেটি ২টি প্যারামিটার নেয়:

  1. budget : যে পরিমাণ টাকা আপনি বিনিময় করার পরিকল্পনা করছেন।
  2. exchange_rate : এক একক বিদেশি মুদ্রার সমান পরিমাণ দেশি মুদ্রা।

এই ফাংশনটি বিনিময়কৃত মুদ্রার মান রিটার্ন করবে।

নোট: যদি আপনার মুদ্রা USD হয় এবং আপনি 1.20 বিনিময় হার-এ USD থেকে EUR-এ বিনিময় করতে চান, তাহলে 1.20 USD == 1 EUR.

>>> exchange_money(127.5, 1.2)
106.25

2. বিনিময়ের পর অবশিষ্ট মুদ্রা হিসাব করা

get_change() নামে একটি ফাংশন তৈরি করুন, যেটি ২টি প্যারামিটার নেয়:

  1. budget : বিনিময়ের আগে টাকার পরিমাণ।
  2. exchanging_value : বিনিময়ের জন্য বাজেট থেকে যে পরিমাণ টাকা নেওয়া হয়।

এই ফাংশনটি বাজেট থেকে যে টাকা পড়ে থাকে তার পরিমাণ রিটার্ন করবে।

>>> get_change(127.5, 120)
7.5

3. নোটের মান হিসাব করা

get_value_of_bills() নামে একটি ফাংশন তৈরি করুন, যেটি ২টি প্যারামিটার নেয়:

  1. denomination : একটি একক নোটের মান।
  2. number_of_bills : মোট নোটের সংখ্যা।

এই বিনিময় বুথ শুধু নির্দিষ্ট কিছু এককে নগদ লেনদেন করে। আপনি যে মোট টাকা পাবেন, তা অবশ্যই একটি "নোট" বা এককের মান দিয়ে বিভাজ্য হতে হবে, যার ফলে একটি ভগ্নাংশ বা ভাগশেষ পড়ে থাকতে পারে। আপনার ফাংশনটি শুধু সেই নোটগুলোর মোট মান রিটার্ন করবে (ভগ্নাংশ বাদ দিয়ে) যা বুথ ফেরত দেবে। দুর্ভাগ্যবশত, বাকি টাকাটা বুথ বাড়তি বোনাস হিসেবে রেখে দিতে পারে।

>>> get_value_of_bills(5, 128)
640

4. নোটের সংখ্যা হিসাব করা

get_number_of_bills() নামে একটি ফাংশন তৈরি করুন, যেটি amount ও denomination নেয়।

এই ফাংশনটি প্রদত্ত amount-এর মধ্যে আপনি কতটি মুদ্রা নোট পেতে পারেন, তার সংখ্যা রিটার্ন করবে। অর্থাৎ: শুরুর টাকার মধ্যে কতগুলো পুরো নোট ধরে? মনে রাখবেন, আপনি শুধু পুরো নোট পেতে পারেন, নোটের ভগ্নাংশ নয়, তাই সেই অনুযায়ী ভাগ করতে ভুলবেন না। কার্যত আপনি নিকটতম পুরো নোট/এককের দিকে নিচের দিকে রাউন্ড করছেন।

>>> get_number_of_bills(127.5, 5)
25

5. নোটে বিনিময় করার পর অবশিষ্ট হিসাব করা

get_leftover_of_bills() নামে একটি ফাংশন তৈরি করুন, যেটি amount ও denomination নেয়।

এই ফাংশনটি আপনার শুরুর amount থেকে যে অবশিষ্ট পরিমাণ নোটের একক হিসাবে ফেরত দেওয়া যায় না, তা রিটার্ন করবে। বুথ ঠিক কতটা নিজের কাছে রাখে, তা জানা খুব জরুরি।

>>> get_leftover_of_bills(127.5, 20)
7.5

6. বিনিময়ের পর মান হিসাব করা

exchangeable_value() নামে একটি ফাংশন তৈরি করুন, যেটি budget, exchange_rate, spread ও denomination নেয়।

প্যারামিটার spread হলো বিনিময় ফি হিসেবে নেওয়া শতাংশ, যা ইন্টিজার হিসেবে লেখা হয়। এটিকে ১০০ দিয়ে ভাগ করে দশমিক সংখ্যায় রূপান্তর করতে হবে। যদি 1.00 EUR == 1.20 USD হয় আর spread 10 হয়, তাহলে আসল বিনিময় হার হবে: 1.00 EUR == 1.32 USD, কারণ 1.20-এর ১০% হলো 0.12, আর এই বাড়তি ফিটা বিনিময়ের সাথে যোগ হয়।

এই ফাংশনটি বিনিময় হার-এর সাথে spread যোগ করে হিসাব করার পর নতুন মুদ্রার সর্বোচ্চ মান রিটার্ন করবে। মনে রাখবেন, মুদ্রার denomination একটি পূর্ণসংখ্যা এবং তা আর ভাগ করা যায় না।

নোট: রিটার্ন করা মানটি int টাইপের হওয়া উচিত।

>>> exchangeable_value(127.25, 1.20, 10, 20)
80
>>> exchangeable_value(127.25, 1.20, 10, 5)
95
GitHub-এর মাধ্যমে সম্পাদনা করুন লিংকটি একটি নতুন উইন্ডো বা ট্যাবে খোলে
Python Exercism

মুদ্রা বিনিময় শুরু করতে প্রস্তুত?

Exercism-এ সাইন আপ করুন, Python ট্র্যাকের 17টি কনসেপ্ট146টি অনুশীলনী আর সত্যিকারের মানুষের মেন্টরিং দিয়ে শিখুন ও দক্ষ হয়ে উঠুন, সম্পূর্ণ বিনামূল্যে।