ट्रैक
/
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 के साथ जोड़े जाने पर, एक वैकल्पिक else कोड ब्लॉक तब चलता है जब मूल if शर्त False निकलती है:

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. क्रिटिकैलिटी की जाँच कीजिए

कंट्रोल सिस्टम का पहला काम यह जाँचना है कि रिएक्टर क्रिटिकैलिटी में संतुलित है या नहीं। रिएक्टर को क्रिटिकैलिटी में संतुलित तब कहा जाता है जब वह इन शर्तों को पूरा करता है:

  • तापमान 800 K से कम हो।
  • हर सेकंड निकलने वाले न्यूट्रॉन की संख्या 500 से अधिक हो।
  • तापमान और हर सेकंड निकलने वाले न्यूट्रॉन का गुणनफल 500000 से कम हो।

is_criticality_balanced() फंक्शन बनाइए, जो पैरामीटर के रूप में केल्विन में मापा गया temperature और neutrons_emitted लेता है, और अगर क्रिटिकैलिटी की शर्तें पूरी होती हैं तो True लौटाता है, नहीं तो False.

>>> is_criticality_balanced(750, 600)
True

2. पावर आउटपुट की रेंज तय कीजिए

रिएक्टर के पावर पैदा करना शुरू करने के बाद उसकी दक्षता तय करनी होती है। दक्षता को 4 श्रेणियों में बाँटा जा सकता है:

  1. green -> 80% या उससे अधिक की दक्षता,
  2. orange -> 80% से कम लेकिन कम से कम 60% की दक्षता,
  3. red -> 60% से नीचे की दक्षता, लेकिन फिर भी 30% या उससे अधिक,
  4. black -> 30% से कम दक्षता।

प्रतिशत वैल्यू की गणना (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() नाम का फंक्शन बनाइए, जो 3 पैरामीटर लेता है: केल्विन में मापा गया temperature, neutrons_produced_per_second, और threshold, और रिएक्टर के लिए एक स्टेटस कोड देता है।

  • अगर temperature * neutrons_produced_per_second threshold के 90% से कम है, तो 'LOW' स्टेटस कोड दीजिए, जो बताता है कि पावर पैदा करने के लिए कंट्रोल रॉड निकालनी ज़रूरी हैं।

  • अगर temperature * neutrons_produced_per_second का मान threshold के 10% के भीतर है (यानी थ्रेशोल्ड से 0-10% कम, थ्रेशोल्ड पर, या थ्रेशोल्ड से 0-10% अधिक), तो रिएक्टर क्रिटिकैलिटी में है और '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 अभ्यास तथा असली इंसानों से मिलने वाली मेंटरिंग के साथ सीखिए और उसमें महारत हासिल कीजिए, वह भी बिल्कुल मुफ्त।