ট্র্যাক
/
Python
Python
/
অনুশীলনী
/
মেল্টডাউন প্রশমন
মেল্টডাউন প্রশমন

মেল্টডাউন প্রশমন

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

ভূমিকা

Python-এ if, elif ('else and if'-এর সংক্ষিপ্ত রূপ) এবং else স্টেটমেন্ট দিয়ে প্রোগ্রামের এক্সিকিউশনের প্রবাহ নিয়ন্ত্রণ করা হয় এবং সিদ্ধান্ত নেওয়া হয়। অন্য অনেক প্রোগ্রামিং ভাষার বিপরীতে, Python 3.9 এবং তার নিচের সংস্করণগুলোতে আলাদা কোনো কেস-সুইচ স্টেটমেন্ট নেই; বদলে একই রকম কাজ করতে একাধিক elif স্টেটমেন্ট ব্যবহার করা হয়।

Python 3.10-এ structural pattern matching নামে কেস-সুইচ স্টেটমেন্টের একটি ভিন্ন রূপ এসেছে, যা অন্য একটি কনসেপ্টে আলাদাভাবে আলোচনা করা হবে।

শর্তাধীন স্টেটমেন্টে এমন এক্সপ্রেশন থাকে, যেগুলোর মান অবশ্যই True বা False হতে হয়: হয় সরাসরি bool টাইপ রিটার্ন করে, নয়তো "ট্রুথি" বা "ফলসি" হিসেবে মূল্যায়িত হয়ে।

x = 10
y = 5

# The comparison '>' returns the bool 'True',
# so the statement is printed.
if x > y:
    print("x is greater than y")
...
>>> x is greater than y

if-এর সাথে যুক্ত হলে, মূল if শর্তটি False হিসেবে মূল্যায়িত হলে একটি ঐচ্ছিক else কোড ব্লক কার্যকর হয়:

x = 5
y = 10

# The comparison '>' here returns the bool 'False',
# so the 'else' block is executed instead of the 'if' block.
if x > y:
    print("x is greater than y")
else:
    print("y is greater than x")
...
>>> y is greater than x

elif একাধিক মূল্যায়ন বা শাখার সুযোগ দেয়।

x = 5
y = 10
z = 20

# The 'elif' statement allows for the checking of more conditions.
if x > y:
    print("x is greater than y and z")
elif y > z:
    print("y is greater than x and z")
else:
    print("z is greater than x and y")
...
>>> z is greater than x and y

আরও জটিল পরীক্ষার জন্য শর্তের সাথে বুলিয়ান অপারেশন এবং তুলনা একসাথে ব্যবহার করা যায়:

>>> def classic_fizzbuzz(number):
        if number % 3 == 0 and number % 5 == 0:
            say = 'FizzBuzz!'
        elif number % 5 == 0:
            say = 'Buzz!'
        elif number % 3 == 0:
            say = 'Fizz!'
        else:
            say = str(number)
        
        return say

>>> classic_fizzbuzz(15)
'FizzBuzz!'

>>> classic_fizzbuzz(13)
'13'

নির্দেশনা

এই অনুশীলনীতে আমরা একটি পারমাণবিক চুল্লির জন্য একটি সহজ কন্ট্রোল সিস্টেম তৈরি করব।

একটি চুল্লির শক্তি উৎপাদন করতে হলে সেটিকে ক্রিটিক্যালিটি নামের একটি অবস্থায় থাকতে হয়। চুল্লি ক্রিটিক্যালিটির চেয়ে কম অবস্থায় থাকলে তার ক্ষতি হতে পারে। আর চুল্লির অবস্থা ক্রিটিক্যালিটির বাইরে চলে গেলে সেটি ওভারলোড হয়ে মেল্টডাউন ঘটাতে পারে। আমরা মেল্টডাউনের সম্ভাবনা কমাতে চাই এবং চুল্লির অবস্থা সঠিকভাবে সামলাতে চাই।

নিচের তিনটি কাজই আদর্শ চুল্লি-অবস্থা বজায় রাখার কোড লেখার সাথে সম্পর্কিত।

1. ক্রিটিক্যালিটি যাচাই করা

একটি কন্ট্রোল সিস্টেমকে সবার আগে যাচাই করতে হয় চুল্লিটি ক্রিটিক্যালিটিতে ভারসাম্যপূর্ণ কি না। চুল্লি নিচের শর্তগুলো পূরণ করলে তাকে ক্রিটিক্যালিটিতে ভারসাম্যপূর্ণ বলা হয়:

  • তাপমাত্রা ৮০০ K-এর কম।
  • প্রতি সেকেন্ডে নির্গত নিউট্রনের সংখ্যা ৫০০-এর বেশি।
  • তাপমাত্রা ও প্রতি সেকেন্ডে নির্গত নিউট্রনের গুণফল ৫০০০০০-এর কম।

is_criticality_balanced() ফাংশনটি ইমপ্লিমেন্ট করুন, যেটি প্যারামিটার হিসেবে কেলভিনে মাপা temperature এবং neutrons_emitted নেয়, এবং ক্রিটিক্যালিটির শর্তগুলো পূরণ হলে True, না হলে False রিটার্ন করে।

>>> is_criticality_balanced(750, 600)
True

2. পাওয়ার আউটপুটের পরিসর নির্ধারণ করা

চুল্লি একবার শক্তি উৎপাদন শুরু করলে তার দক্ষতা নির্ধারণ করা দরকার। দক্ষতাকে ৪টি ব্যান্ডে ভাগ করা যায়:

  1. green -> ৮০% বা তার বেশি দক্ষতা,
  2. orange -> ৮০%-এর কম কিন্তু অন্তত ৬০% দক্ষতা,
  3. red -> ৬০%-এর কম, তবে এখনও ৩০% বা তার বেশি,
  4. black -> ৩০%-এর কম দক্ষতা।

শতকরা মানটি (generated_power/theoretical_max_power)*100 হিসেবে হিসাব করা যায়, যেখানে generated_power = voltage * current। মনে রাখবেন, শতকরা মান সাধারণত পূর্ণসংখ্যা হয় না, তাই < আর <= তুলনাগুলোর সঠিক ব্যবহারের বিষয়টি খেয়াল রাখবেন।

reactor_efficiency(<voltage>, <current>, <theoretical_max_power>) ফাংশনটি ইমপ্লিমেন্ট করুন, যার তিনটি প্যারামিটার: voltage, current এবং theoretical_max_power। এই ফাংশনটি চুল্লির দক্ষতার ব্যান্ড রিটার্ন করবে: 'green', 'orange', 'red' বা 'black'।

>>> reactor_efficiency(200,50,15000)
'orange'

3. ফেল-সেফ মেকানিজম

আপনার শেষ কাজটি হলো ওভারলোড আর মেল্টডাউন এড়াতে একটি ফেল-সেফ মেকানিজম তৈরি করা। এই মেকানিজম ঠিক করবে চুল্লিটি আদর্শ ক্রিটিক্যালিটি থ্রেশহোল্ডের নিচে, ঠিক তার সমান, নাকি তার উপরে আছে। এরপর চুল্লিতে কন্ট্রোল রড ঢুকিয়ে (বা বের করে) ক্রিটিক্যালিটি বাড়ানো, কমানো বা থামানো যায়।

fail_safe() নামের ফাংশনটি ইমপ্লিমেন্ট করুন, যেটি ৩টি প্যারামিটার নেয়: কেলভিনে মাপা temperature, neutrons_produced_per_second এবং threshold, আর চুল্লির জন্য একটি স্টেটাস কোড আউটপুট দেয়।

  • যদি temperature * neutrons_produced_per_second-এর মান threshold-এর ৯০%-এর কম হয়, তবে 'LOW' স্টেটাস কোড আউটপুট দিন, যা বোঝায় শক্তি উৎপাদন করতে কন্ট্রোল রড বের করে ফেলতে হবে।

  • যদি temperature * neutrons_produced_per_second-এর মান threshold-এর ১০% সীমার ভিতরে থাকে (অর্থাৎ থ্রেশহোল্ডের চেয়ে ০-১০% কম, ঠিক থ্রেশহোল্ডে, বা থ্রেশহোল্ডের চেয়ে ০-১০% বেশি), তবে চুল্লিটি ক্রিটিক্যালিটি অবস্থায় আছে এবং 'NORMAL' স্টেটাস কোড আউটপুট দেওয়া উচিত, যা বোঝায় চুল্লি অনুকূল অবস্থায় আছে আর কন্ট্রোল রড আদর্শ অবস্থানে আছে।

  • যদি temperature * neutrons_produced_per_second-এর মান উপরে বলা সীমাগুলোর মধ্যে না পড়ে, তবে চুল্লিটি মেল্টডাউনের দিকে এগোচ্ছে এবং চুল্লি সাথে সাথেই বন্ধ করতে 'DANGER' স্টেটাস কোড পাঠাতে হবে।

>>> fail_safe(temperature=1000, neutrons_produced_per_second=30, threshold=5000)
'DANGER'
GitHub-এর মাধ্যমে সম্পাদনা করুন লিংকটি একটি নতুন উইন্ডো বা ট্যাবে খোলে
Python Exercism

মেল্টডাউন প্রশমন শুরু করতে প্রস্তুত?

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