ডিসিশন মেকিং স্টেটমেন্ট (Decision Making Statement)

লিখেছেন: কাজী মুশফিকুর রহমান || সফটওয়্যার প্রকৌশলী, টেকনিয়াস (সফটওয়্যার নির্মাণ প্রতিষ্ঠান) || তারিখঃ 29 এপ্রি., 2024


আমাদের রিয়েল লাইফে ডিসিশন মেকিং (সিদ্ধান্ত গ্রহণ) এর ক্ষেত্রে কন্ডিশনাল স্টেটমেন্ট: if, if-else, if-elif-else এবং নেস্টেড if-else ব্যবহৃত হয়, যেগুলো ডিসিশন মেকিং স্টেটমেন্ট (Decision making statement) হিসাবে পরিচিত। এখন আমি এগুলো নিয়ে বিস্তারিত আলোচনা করব।

 

if এর ব্যবহার

‘ if ’ ব্যবহার করে পাইথন প্রোগ্রামের ফ্লো (গতি) নিয়ন্ত্রণ করা যায়। ‘ if ’ অর্থ: যদি। এর পরে একটি কন্ডিশন (শর্ত) থাকে, যদি এটি সত্য হয়, তাহলে এর অধীনের স্টেটমেন্টটি এক্সিকিউট (রান) হয়। আর কন্ডিশনটি মিথ্যা হলে, স্টেটমেন্টটি এক্সিকিউট হয় না। এভাবে এর মাধ্যমে একাধিক কন্ডিশনও মেইনটেইন করা যেতে পারে। প্রোগ্রামার ইচ্ছা করলে ‘ if ’ এর পরে এক বা একাধিক ‘else’ ব্লক ব্যবহার করতে পারে, আবার এটি স্কিপ ও করতে পারে। নিচে এর  স্ট্রাকচার ব্যবহার উদাহরণসহ দেখানো হলো:

if এর স্ট্রাকচার:

if ( কন্ডিশন ):

            স্টেটমেন্ট ……

প্রথমে  ‘ if ’, তারপর ফার্স্ট ব্রাকেটের মধ্যে কন্ডিশন, তারপরে কোলন ‘ : ’ দিতে হবে। এরপর (নিচের লাইনে) এর অধীনে স্টেটমেন্ট  উল্লেখ করতে হবে।

‘ if ’যদি এই কন্ডিশনটি সত্য হয়, তাহলে কাজটি করুন (স্টেটমেন্ট বা কোডটি রান করুন)।

অন্যান্য প্রোগ্রামিং ল্যাঙ্গুয়েজে (যেমন: C, জাভা) সেকেন্ড ব্রাকেট ‘{ }’ যে কাজ করে পাইথনে কোলন ‘:’ সেই কাজ করে। কোলন এবং ইন্ডেন্টেশন ব্যবহার করে কোডের স্কোপ বা ব্লক তৈরি করা হয়।

কোড:

number1 = 25

number2 = 20

if number1 > number2:     

    print('number1 is greater than number2') 

 

উপরের কোডের প্রথম লাইনে number1 ভ্যারিয়েবলের মধ্যে ভ্যালু 25 এসাইন করেছি। দ্বিতীয় লাইনে number2 ভ্যারিয়েবলের মধ্যে ভ্যালু 20 এসাইন করেছি। তৃতীয় লাইনে ‘ if ’ এর পরে একটি কন্ডিশন (number1 > number2 অর্থ: যদি number1, number2 থেকে  বড় হয়) দিয়ে চেক করেছি যে, যদি 25, 20 থেকে বড় হয়, তাহলে চতুর্থ লাইনটি প্রিন্ট হবে। যেহেতু এক্ষেত্রে কন্ডিশনটি true, তাই চতুর্থ লাইনটি প্রিন্ট হয়েছে। এখন উপরের কোডটি রান করলে নিচের মত আউটপুট পাব।

আউটপুট:

number1 is greater than number2

 

‘ if ’  দিয়ে একাধিক কন্ডিশন চেক করা

এখন আমরা ‘ if ’  দিয়ে দুটি কন্ডিশন চেক করব। যেখানে ‘ if ’ এর পরে দুটি কন্ডিশন থাকবে এবং এদের মাঝে একটি ‘and’ অপারেটর ব্যবহার করব। যদি উভয় কন্ডিশনটি true হয়, তাহলেই কেবল চুড়ান্তভাবে কন্ডিশনটি true বলে গণ্য হবে। এভাবে ‘and’ ব্যবহার করে অনেকগুলি কন্ডিশন চেক করা যায়। পরবর্তীতে আমি ‘পাইথনে লজিক্যাল অপারেটর’ শিরোনামে এ বিষয়ে বিস্তারিত আলোচনা করব।

কোড:

number1 = 25

number2 = 20

# if 25 > 20 and 25 < 30:

if number1 > number2 and number1 < 30: 

    # It will be executed if both conditions are true.

    print('number1 is greater than number2 but less than 30')        

 

উপরের কোডের প্রথম লাইনে number1 ভ্যারিয়েবলের মধ্যে ভ্যালু 25 এসাইন করেছি। দ্বিতীয় লাইনে number2 ভ্যারিয়েবলের মধ্যে ভ্যালু 20 এসাইন করেছি। তৃতীয় ও চতুর্থ লাইনের কোড কমেন্ট করা। পঞ্চম লাইনে ‘ if ’ এর পরে দুটি কন্ডিশন (number1 > number2 and number1 < 30 দিয়ে চেক করেছি যে, 25 যদি 20 থেকে বড় হয় এবং 30 থেকে ছোট হয়, তাহলে ষষ্ঠ লাইনটি প্রিন্ট হবে। যেহেতু এক্ষেত্রে কন্ডিশনটি true, তাই ষষ্ঠ লাইনটি প্রিন্ট হয়েছে। এখন উপরের কোডটি রান করলে নিচের মত আউটপুট পাব।

আউটপুট:

number1 is greater than number2 but less than 30

 

if-else এর ব্যবহার

if-else ব্যবহার করে পাইথন প্রোগ্রামের ফ্লো (গতি) নিয়ন্ত্রণ করা যায়। ‘ if ’ অর্থ: যদি। এর পরে একটি কন্ডিশন (শর্ত) থাকে, যদি এটি সত্য হয়, তাহলে এর অধীনের স্টেটমেন্টটি এক্সিকিউট (রান) হয়। আর কন্ডিশনটি মিথ্যা হলে, স্টেটমেন্টটি এক্সিকিউট হয় না। এভাবে এর মাধ্যমে একাধিক কন্ডিশন মেইনটেইন করা যেতে পারে। প্রোগ্রামার ইচ্ছা করলে ‘ if ’ এর পরে এক বা একাধিক else ব্লক ব্যবহার করতে পারে, আবার তা স্কিপ ও করতে পারে, কারণ এটি অপশনাল। else অর্থ: অন্যথায়। অর্থাৎ যদি  ‘ if ’ এর কন্ডিশন না সত্য হয়, তাহলে else এর অধীনের স্টেটমেন্টটি এক্সিকিউট হয়। ‘ if ’ এবং else এর যেকোন একটি ব্লক এক্সিকিউট হয়, উভয়টি একসাথে এক্সিকিউট হয় না। নিচে এর  স্ট্রাকচার ব্যবহার উদাহরণসহ দেখান হলো:

 

 

If ব্লক: প্রথমে  ‘ if ’, তারপর ফার্স্ট ব্রাকেটের মধ্যে কন্ডিশন, তারপরে কোলন ‘ : ’ দিতে হবে। এরপর (নিচের লাইনে) এর অধীনে স্টেটমেন্ট  উল্লেখ করতে হবে।

else ব্লক: প্রথমে  else’, তারপরে কোলন ‘ : ’ দিতে হবে। এরপর (নিচের লাইনে) এর অধীনে স্টেটমেন্ট  উল্লেখ করতে হবে।

‘ if ’যদি এই কন্ডিশনটি সত্য হয়, তাহলে কাজটি করুন (স্টেটমেন্ট বা কোডটি রান করুন)।

‘ else ’যদি ‘ if ’ এর কন্ডিশনটি সত্য না হয়, তাহলে ‘ else ’ এর কাজটি করুন (স্টেটমেন্টটি রান করুন।

 

উপরের স্ট্রাটারটি একটি বাস্তব উদাহরণের সাহায্যে ব্যাখ্যা করা হলো।

উদাহরণ: যদি বিদ্যুৎ (electricity) থাকে তাহলে ফ্যান চলবে, অন্যথায় বিদ্যুৎ এর জন্য অপেক্ষা করুন।

if(electricity):

            ‘Fan will be run.’

else:

            ‘Wait for electricity.’

           

নোট: অন্যান্য প্রোগ্রামিং ল্যাঙ্গুয়েজে (যেমন: C, জাভা) সেকেন্ড ব্রাকেট ‘{ }’ যে কাজ করে, পাইথনে কোলন ‘:’ সেই কাজ করে। কোলন এবং ইন্ডেন্টেশন ব্যবহার করে কোডের স্কোপ বা ব্লক তৈরি করা হয়।

 

কোড:

number1 = 25

number2 = 20

if number1 > number2:

    print('number1 is greater than number2')

else:

    print('number1 is less than number2')   

 

উপরের কোডের প্রথম লাইনে number1 ভ্যারিয়েবলের মধ্যে ভ্যালু 25 এসাইন করেছি। দ্বিতীয় লাইনে number2 ভ্যারিয়েবলের মধ্যে ভ্যালু 20 এসাইন করেছি। তৃতীয় লাইনে ‘ if ’ এর পরে একটি কন্ডিশন (number1 > number2 অর্থ: যদি number1, number2 থেকে  বড় হয়) দিয়ে চেক করেছি যে, যদি 25, 20 থেকে বড় হয়, তাহলে চতুর্থ লাইনটি প্রিন্ট হবে। যেহেতু এক্ষেত্রে কন্ডিশনটি true (25, 20 থেকে বড়), তাই চতুর্থ লাইনটি প্রিন্ট হয়েছে। ‘ if ’ এর কন্ডিশনটি true হওয়ায়  ‘ else ’ এর ব্লকটি এক্সিকিউট হয়নি। এখন উপরের কোডটি রান করলে নিচের মত আউটপুট পাব।

আউটপুট:

number1 is greater than number2

 

এখন আমরা আরেকটি কোড দেখব যেখানেelse’ ব্লক এক্সিকিউট হবে (কাজ করবে)

কোড:

number1 = 20

number2 = 25

# if 20 > 25:

if number1 > number2:

     print('number1 is greater than number2')

else:

     print('number1 is less than number2')

 

উপরের কোডের প্রথম লাইনে number1 ভ্যারিয়েবলের মধ্যে ভ্যালু 20 এসাইন করেছি। দ্বিতীয় লাইনে number2 ভ্যারিয়েবলের মধ্যে ভ্যালু 25 এসাইন করেছি। চতুর্থ লাইনে ‘ if ’ এর পরে একটি কন্ডিশন (number1 > number2 অর্থ: যদি number1, number2 থেকে  বড় হয়) দিয়ে চেক করেছি যে, যদি 20, 25 থেকে বড় হয়, তাহলে পঞ্চম লাইনটি প্রিন্ট হবে। যেহেতু এক্ষেত্রে কন্ডিশনটি মিথ্যা (20, 25 থেকে বড় নয়), তাই পঞ্চম লাইনটি প্রিন্ট হয়নি। বরং ‘ else ’ এর ব্লকটি এক্সিকিউট হয়েছে। এখন উপরের কোডটি রান করলে নিচের মত আউটপুট পাব।

আউটপুট:

number1 is less than number2

 

if … elif … else

if ব্লকের পরে এক বা একাধিক ‘elif’ ব্লক আসতে পারে, এবং এরপরে else ব্লক ঐচ্ছিকভাবে ব্যবহৃত হয়। ‘elif’ ব্লক (সি প্রোগ্রামিং এর)  ‘সুইচ কেস’ এর বিকল্প হিসাবে কাজ করে। নিচে এর  স্ট্রাকচার ব্যবহার উদাহরণসহ দেখানো হলো:

 

 

If ব্লক: প্রথমে  ‘ if ’, তারপর ফার্স্ট ব্রাকেটের মধ্যে কন্ডিশন, তারপরে কোলন ‘ : ’ দিতে হবে। এরপর (নিচের লাইনে) এর অধীনে স্টেটমেন্ট  উল্লেখ করতে হবে।

elif  ব্লক: প্রথমে  elif’, তারপর ফার্স্ট ব্রাকেটের মধ্যে কন্ডিশন, তারপরে কোলন ‘ : ’ দিতে হবে। এরপর (নিচের লাইনে) এর অধীনে স্টেটমেন্ট  উল্লেখ করতে হবে।

আপনি চাইলে if ব্লক এর পরে এক বা একাধিক elif ব্লক ব্যবহার করতে পারেন।

else ব্লক: প্রথমে  else’, তারপরে কোলন ‘ : ’ দিতে হবে। এরপর (নিচের লাইনে) এর অধীনে স্টেটমেন্ট  উল্লেখ করতে হবে।

‘ if ’যদি এই কন্ডিশনটি সত্য হয়, তাহলে কাজটি করুন (স্টেটমেন্টটি রান করুন)।

‘ elif ’যদি ‘ if ’ এর কন্ডিশনটি সত্য না হয়, তাহলে ‘ elif ’ এর কন্ডিশনটি চেক করুন, যদি তা সত্য হয়, তাহলে কাজটি করুন (এর অধীনে স্টেটমেন্টটি রান করুন)।

‘ else ’যদি উপরের সবগুলো কন্ডিশন মিথ্যা হয়, তাহলে ‘ else ’ এর কাজটি করুন (এর অধীনে স্টেটমেন্টটি রান করুন)।

 

উপরের স্ট্রাটারটি একটি বাস্তব উদাহরণের সাহায্যে ব্যাখ্যা করা হলো।

উদাহরণ: যদি আপনার ভোটার আইডি কার্ড থাকে তাহলে আপনি ভোট দিন, আর যদি ভোটার আইডি কার্ড  না থাকে তাহলে তৈরী করুন।  অন্যথায় ‘আপনি অপরাধী হিসাবে দণ্ডিত হবেন।

if( আপনার ভোটার আইডি কার্ড থাকে ):

            ‘তাহলে আপনি ভোট দিন.’

elif( আপনার ভোটার আইডি কার্ড  না থাকে ):

            ‘তাহলে ভোটার আইডি কার্ড তৈরী করুন.’

else:

            ‘আপনি অপরাধী হিসাবে দণ্ডিত হবেন.’

 

এখন আমরা if … elif … else ব্যবহার করে একটি কোড দেখব। এবং 5 জোড় না বিজোড় জোড় তা চেক করব।

কোড:

n = 5

# if n is equal to 0:

if n == 0:

    print('n is zero')

# After dividing 5 by 2, if its remainder is 0:

elif n % 2 == 0:

    print('n is even')

# If all the above conditions are false:

else:

    print('n is odd')   

 

উপরের কোডের প্রথম লাইনে n ভ্যারিয়েবলের মধ্যে ভ্যালু 5 এসাইন করেছি। তৃতীয় লাইনে চেক করেছি যে n (5), 0 এর সমান কি  না। যেহেতু 5, 0 এর সমান না (কন্ডিশনটি মিথ্যা) তাই চতুর্থ লাইনটি প্রিন্ট (এক্সিকিউট) হবে না। ষষ্ঠ লাইনে চেক করেছি যে 5 কে 2 দিয়ে ভাগ করলে ভাগশেষ 0 হয় কি না। যেহেতু ভাগশেষ 0 হয় না (কন্ডিশনটি মিথ্যা) তাই সপ্তম লাইনটি প্রিন্ট (এক্সিকিউট) হবে না। যেহেতু উপরের সবগুলো কন্ডিশন মিথ্যা (False), তাই ‘ else ’ ব্লকটি এক্সিকিউট হয়েছে, এবং দশম লাইনটি প্রিন্ট হয়েছে। এখন উপরের কোডটি রান করলে নিচের মত আউটপুট পাব।

আউটপুট:

n is odd

 

নেস্টেড  ( Nested ) ‘ if-else ’

পাইথনে একটি ‘ if-else ’ ব্লকের মধ্যে আরেকটি ‘ if-else ’  ব্লক ব্যবহৃত হতে পারে, যা নেস্টেড  ‘ if-else ’ নামে পরিচিত। এভাবে অসংখ্য  নেস্টেড if ব্লক তৈরী করা যায়, আর এ কাজটি করা হয় ইন্ডেন্টেশনের মাধ্যমে। যেসকল ক্ষেত্রে একটি কন্ডিশনের মধ্যে আরেকটি কন্ডিশন চেক করার প্রয়োজন হয়, সেক্ষেত্রে ‘নেস্টেড if স্ট্রাকচার’ খুবই সুবিধাজনক। আমাদের রিয়েল লাইফে এধরণের সিনারিও আসে, যেখানে আমরা ডিসিশন মেকিং স্টেটমেন্ট (Decision making statement) হিসাবে এর প্রয়োগ করে থাকি।

 

নেস্টেড ‘ if-else ’ এর স্ট্রাকচার:

এখানে দুটি ‘ if-else ’  ব্লক ব্যবহৃত হয়েছে, বাইরেরটি হচ্ছে আউটার (outer) ব্লক এবং ভেতরেরটি হচ্ছে ইনার (inner) ব্লক। আউটার ব্লক এক্সিকিউট হবার পরে ইনার ব্লক এক্সিকিউট হবে, এবং প্রোগ্রামের ‘কন্ট্রোল ফ্লো’ পুনরায় আউটার ব্লকের দিকে যাবে।

 

 

এখন আমরা নেস্টেড if ব্যবহার করে একটি কোড লিখব, যেখানে ইউজার থেকে একটি নাম্বার ইনপুট নিব, তারপরে চেক করব যে নাম্বারটি পজিটিভ, নেগিটিভ, নাকি জিরো।

কোড:

number = input('Enter a number: ')

number = int(number)

if number >= 0:

     if number == 0:

             print('The number is zero')

     else:

             print('The number positive.')

else:

     print('The number is negative.')

 

উপরের কোডের প্রথম লাইনে আমি ইউজার থেকে একটি নাম্বার ইনপুট নেয়ার জন্য input() মেথডটি ব্যবহার করেছি।  এটি পাইথনের একটি বিল্ট-ইন মেথড, যা নাম্বার কে স্ট্রিং এ কনভার্ট করে দেয়। এরপর দ্বিতীয় লাইনে স্ট্রিংটিকে int() মেথডর মধ্যে রেখে তাকে পূর্ণ সংখ্যায় কনভার্ট করেছি, এবং number নামক ভ্যারিয়েবলের মধ্যে এসাইন করেছি। তৃতীয় লাইনে চেক করেছি যে, নাম্বারটি যদি 0 অথবা 0 থেকে বড় হয় তাহলে পরবর্তী লাইন এক্সিকিউট হবে। এবং পরবর্তী if স্টেটমেন্ট চেক করবে। চতুর্থ লাইনে পুনরায় চেক করেছি যে, নাম্বারটি যদি 0 হয় তাহলে পঞ্চম লাইন এক্সিকিউট হবে। এরপরে else ব্লক ব্যবহার করেছি। এখন উপরের কোডটি রান করলে নিচের মত আউটপুট পাব।

পজিটিভ নাম্বার ইনপুট দিলে আউটপুট:

Enter a number: 2

The number positive.

 

নেগিটিভ নাম্বার ইনপুট দিলে আউটপুট:

Enter a number: -1

The number is negative.

 

জিরো ইনপুট দিলে আউটপুট:

Enter a number: 0

The number is zero.