কন্ডিশনাল লজিক (Conditional logic)

কন্ডিশনাল লজিক কি?

আমরা ছোট বেলাতে ব্যাকরণে কন্ডিশনাল নিয়ে পড়েছি, যে, আজ যদি বৃষ্টি হয়, তাহলে আমি স্কুলে যাব না। এমন আরো অনেক উদাহরণ দিয়ে আমাদের শিক্ষকগণ আমাদের ব্যাকরণের কন্ডিশনালস শিখিয়েছিলেন। তখন শিক্ষকগণ বার বার একটি কথা বলতেন, তা হলো, কোন একটি কর্ম যদি অন্য একটি কর্ম সম্পাদন হওয়া বা না হওয়ার উপর নির্ভর করে তাকে কন্ডিশনাল বলে। আমরা যখন প্রোগ্রামিং করতে যাই, তখন আমাদের কে কোন একটি প্রসেস সম্পাদন করার জন্য অনেক শর্ত আরোপ করতে হয়। শর্ত মানলে একরকম না মানলে অন্য রকম, আবার শর্তের ভেতরে থাকে আরো শর্ত, এইভাবে আমরা অনেক জটিল প্রোগ্রামিং প্রসেস কে এগিয়ে নিয়ে যাই। আমাদের লজিক কে প্রোগ্রামিং প্রসেস এ রূপান্তরের জন্য আমরা শর্ত আরোপ করি। এইযে, শর্ত আরোপের মাধ্যমে আমরা আমাদের জটিল লজিক সাজিয়ে ফেলতে পারি, এই প্রক্রিয়া কেই কন্ডিশনাল লজিক বলা হয়।
সহজভাবে বলা যায়, কন্ডিশনাল লজিক হল এমন ধারণা যাতে আপনি নিয়ম বা শর্ত সেট করতে পারেন যা ইনপুটের উপর ভিত্তি করে আপনার প্রক্রিয়া পরিবর্তন করে। “if/then” অপারেটর ব্যবহার করেই মূলত কন্ডিশন লিখা হয়।
 
পাইথনের ছয়টি কন্ডিশনাল লজিক রয়েছে যা সিদ্ধান্ত গ্রহণে ব্যবহৃত হয়: –
 

* যদি হয় (if),

* যদি হয় নইলে (If else),

* If-Elif লেডার,

* নেস্টেড if (Nested if),

* Shorthand-if,

* ShortHand-if-else,

 

উপরে উল্লেখিত কন্ডিশনাল লজিক গুলো নিচে বিশদ আলোচনা করা যাক-

 

যদি হয় (if)

If স্টেটমেন্ট হল সবচেয়ে মৌলিক কন্ডিশনাল লজিক, যেখানে কোডটি নির্দিষ্ট কন্ডিশন পূরণ করে কিনা তার উপর ভিত্তি করে কার্যকর করা হয়। এটির একটি কোড বডি রয়েছে যেটি শুধুমাত্র যদি if স্টেটমেন্টের কন্ডিশনটি সত্য হয় তবেই কার্যকর করে। বিবৃতিটি একটি এক লাইন বা কোডের একটি ব্লক হতে পারে।

ধরো তুমি জাতীয় জাদুঘর এর সামনে দিয়ে হেঁটে বাসায় যাচ্ছিলা, তোমার ইচ্ছা হলো, একটু জ্ঞান অর্জন করে যাই জাদুঘর ঘুরে, কিন্তু তুমি যখনি জাদুঘরে প্রবেশ করতে চাইলে, জাদুঘরের রক্ষী মামা বললো, টিকিট কেটে ঢুকতে হবে নয়তো রাস্তা মাপতে হবে। জাদুঘরে ঢুকার ক্ষেত্রে টিকিট কাটা যেমন শর্ত, কোন প্রোগ্রামিং ব্লক এ ঢুকার ক্ষেত্রে আমরা এমন শর্ত আরোপ করতে পারি if স্টেটমেন্ট ব্যবহার করে। টিকিট না কাটলে যেমন জাদুঘরে ঢুকা যাবে না, তেমন করে if স্টেটমেন্ট এ আরোপিত শর্ত সত্য না হলে উক্ত if স্টেটমেন্ট এর ভেতরের কোড এক্সিকিউট হবে না।

অন্য অনেক প্রোগ্রামিং ল্যাঙ্গুয়েজে কোড বডি থাকে কার্লি ব্রেসেস এর ভেতরে। পাইথনে কার্লি ব্রেসেস এর বদলে আমরা ব্যবহার করি ইন্ডেন্টেশন। if ইনডেন্ট এর ভেতরের কোড হলো তার বডি। পাইথনে if স্টেটমেন্টের সিনট্যাক্সঃ
 
if condition:
    Statement

 

যদি হয় নইলে (if else)

এই কন্ডিশনাল লজিকটি ব্যবহার করা হয় যখন প্রদত্ত শর্তের সত্য এবং মিথ্যা উভয় অংশই কার্যকর করার জন্য করতে হয়। কন্ডিশনাল সত্য হলে, if ব্লকের ভিতরে কোড বডি কার্যকর করা হয়; কন্ডিশনাল মিথ্যা হলে, if ব্লকের বাইরের কোড বডি কার্যকর করা হয়। যেমন, যারা ক্লাসে উপস্থিত থাকবে তারা চকোলেট পাবে, বাকিরা পাবে না, if-else স্টেটমেন্টের একটি উদাহরণ।

 

পাইথনে if-else স্টেটমেন্টের সিনট্যাক্সঃ

 

if condition :
    Will executes this block if the condition is true
else :
    Will execute this block if the condition is false

 

আমরা উপরের উদাহরণ এ শুধু দেখলাম নাম্বার টা পজিটিভ নাম্বার কিনা । কিন্তু আমাদের যদি বলে নাম্বার টা নাম্বার টি পজিটিভ না নেগেটিভ চেক করছে বলে তাহলে if-else দিয়ে সহজে বের করতে পারবো –

 

n = -10
if n >= 0:
    print("n is a positive number.")
else:
    print("n is a negative number.")

আউটপুট

# output
#n is a negative number
 
উপরের কোড থেকে দেখছি যে n এর ভ্যালু -১০ দেওয়া আছে এবং তা একটি নেগেটিভ নাম্বার । প্রথমে আমরা চেক করছি যে n এর মান ০ এর বড় বা সমান কিনা কিন্তু তা সত্য নয় তাই else এর ভিতরে ঢুকে **n is a negative number.** আউটপুট প্রিন্ট করছে ।
 
 

if-else লেডার
এই ক্ষেত্রে, if কন্ডিশনটি প্রথমে মূল্যায়ন করা হয়। if কন্ডিশনটি মিথ্যা হলে, elif এর কন্ডিশনটি কার্যকর করা হয়। যদি সকল elif কন্ডিশন এর কোনটিই শর্ত পূরণ না করে তবে else স্টেটমেন্ট কার্যকর হয়। উল্লেখ্য, আমরা একাধিক elif স্টেটমেন্ট ব্যবহার করতে পারি, একদম শেষে else স্টেটমেন্ট ব্যবহারের আগে। elif স্টেটমেন্ট গুলোর মধ্যে আমরা একাধিক কন্ডিশন সেক্স করতে পারি।

 

পাইথনে If-elif-else স্টেটমেন্টের সিনট্যাক্সঃ

 

if condition :
    Will execute this block if the condition is true
elif condition :
    Will executes this block elif the condition is true
else:
    Will executes this block previous all condition is false

 

আমাদের অনেকের হয়তো মনে হয় যে শূন্য তো আসলে পজিটিভ বা নেগেটিভ কোনোটাই না। শূন্যের চেয়ে বড় সব সংখ্যা হচ্ছে পজিটিভ আর ছোট সব সংখ্যা হচ্ছে নেগেটিভ। তাহলে সেক্ষেত্রে আমাদের নতুন আরেকটি কন্ডিশন চেক করতে হবে আর এই চেকিং এ নতুন কন্ডিশন যুক্ত করার জন্য আমরা If-elif-else ব্যবহার করে থাকি । আর এই elif এর মাধ্যমে আমরা যত ইচ্ছা তত নতুন কন্ডিশন চেক করতে পারবো ।

 

n = 0
if n > 0:
    print("n is a positive number.")
elif n < 0:
    print("n is a negative number.")
else:
    print("The number is zero.")

আউটপুট

## Output
## The number is zero.

 

উপরের কোড থেকে দেখছি যে n এর ভ্যালু ০ দেওয়া আছে। প্রথমে আমাদের কোড চেক করছে যে n এর মান ০ এর বড় কিনা কিন্তু তা সত্য নয় সেই জন্য পরের কন্ডিশন চেক করছে elif দিয়ে n এর মান ০ এর ছোট কিনা এবং এটাও সত্য না । যেহেতু উপরের সব কন্ডিশন মিথ্যা তাই else এর ভিতর যা আছে তা আমাদের আউটপুট দেখাবে এবং আমাদের টার্মিনাল এ সেই হিসাবে **The number is zero.** আউটপুট দেখাচ্ছে ।

 

নেস্টেড if (Nested if)
নেস্টেড if স্টেটমেন্ট হল এমন একটি স্টেটমেন্ট যেখানে একটি If স্টেটমেন্ট অন্য If স্টেটমেন্টের ভিতরে থাকে। এটি ব্যবহার করা হয় যখন একটি ভেরিয়েবলকে একাধিকবার প্রসেস করতে হয়। If, If-else এবং If…elif…else স্টেটমেন্ট প্রোগ্রামে ব্যবহার করা যেতে পারে। নেস্টেড if স্টেটমেন্টে, প্রতিটি স্টেটমেন্টের নেস্টেডভাবে কার্যকর করার জন্য ইন্ডেন্টেশন (শুরুতে whitespace) দিতে হয়।

 

পাইথনে nested-if স্টেটমেন্টের সিনট্যাক্সঃ

 

if (condition1):
    Will executes if condition 1 is true
    if (condition 2):
        Will executes if condition 2 is true
    Condition 2 ends here
Condition 1 ends here

 

এতক্ষণ আমরা দেখলাম যে একটি নাম্বার পজিটিভ, নেগেটিভ বা শূন্য কিনা কিন্তু আমাদের যদি বলা পজিটিভ নাম্বার গুলো জোড় না বিজোড়? আমরা এই কাজ নেস্টেড if দিয়ে করে ফেলতে পারি।

 

n = 13
if n > 0:
    if (num % 2) == 0:
       print("n is Even.")
    else:
       print("n is Odd.")
elif n < 0:
    print("n is a negative number.")
else:
    print("The number is zero.")

আউটপুট

## output
## n is Odd.

 

উপরের কোড থেকে দেখছি যে n এর ভ্যালু 13 দেওয়া আছে যা একটি বিজোড় নাম্বার । উপরে আমাদের কোডে আমরা প্রথমে চেক করছি যে n এর মান শূন্য এর চেয়ে বড় কিনা এবং কন্ডিশন সত্য হওয়ায় মানে নাম্বার টি পজিটিভ নাম্বার, এখন আমাদের চেক করা নাম্বার টি জোড় না বিজোড় তার জন্য আমরা বাহিরের if স্টেটমেন্ট এর ভিতর নতুন ভাবে আবার if-else লিখেছি যাকে আমরা নেস্টেড if বলতে পারি। ভেতরের if-else দিয়ে আমরা চেক করছি যে নাম্বার টা জোড় না বিজোড়।

 

Shorthand-if

পাইথনের অন্যতম একটি ফিচার হলো তা দিয়ে অনেক কম্পেক্ট কোড লিখা যায়। আর এমন কম্পেক্ট কোড লিখার জন্য পাইথন অনেক ধরণের সর্টহ্যান্ড স্টেটমেন্ট সাপোর্ট করে। নিশ্চই মনে প্রশ্ন উঁকি মারছে, সর্টহ্যান্ড স্টেটমেন্ট আবার কী? কোন এক্সিকিউটেবল স্টেটমেন্ট যদি এমন ভাবে লিখা হয়, যাতে সম্পূর্ণ স্টেটমেন্ট একটি লাইনে ই লিখে ফেলা যায়, তাহলে তাকে সর্টহ্যান্ড স্টেটমেন্ট বলে। if স্টেটমেন্ট এর বডি আমরা ইন্ডেন্টেশন এর মাধ্যমে একাধিক লাইনে না লিখে, if স্টেটমেন্ট এর লাইনেই লিখে ফেলতে পারি সর্টহ্যান্ড স্টেটমেন্ট এর ধারণা থেকে।
যখন if ব্লকের ভিতরে শুধুমাত্র একটি স্টেটমেন্ট এক্সিকিউট করতে হয়, তখন চাইলে Shorthand if স্টেটমেন্ট ব্যবহার করা যায়। 
পাইথনে Shorthand-if স্টেটমেন্টের সিনট্যাক্সঃ

if condition: statement

a = 10
b = 9
if a > b: print("a is greater than b")

আউটপুট

## output
## a is greater than b

 

ShortHand-if-else
shorthand if এ যেমন করে if স্টেটমেন্ট এর কন্ডিশন এবং বডি একই লাইনে লিখে ফেলা যায়, ঠিক তেমন করে If-else স্টেটমেন্ট কেউ প্রকাশ করা যায়। if এবং else উভয় ব্লক এক্সিকিউট করার জন্য একটি মাত্র লাইন ব্যবহার করা হয়।

পাইথনে ShortHand-if-else স্টেটমেন্টের সিনট্যাক্সঃ

statement1 if condition else statement2

a = 10
b = 9
x = "a is greater than b" if a > b else "b is greater than or equal a"
print(x)

আউটপুট

## output
## a is greater than b
উদাহরন

Example-1

check if a number divided by 3 or 5
n = int(input("Enter a number : ")) 
if n % 3 == 0 : 
    print(f"{n} is devided by 3") 
elif n % 5 == 0 : 
    print(f"{n} is devided by 5") 
else: 
    print("Not divided by 3 or 5")

 

Example-2

Tell the GPA
mark = float(input("Enter the mark : ")) 
if mark>=80 and mark<=100: 
    print("You got A+") 
elif mark >=70 and mark < 80: 
    print("You got A") 
elif mark >=60 and mark < 70: 
    print("You got A-") 
elif mark >=50 and mark < 60: 
    print("You got B") 
elif mark >=40 and mark < 50: 
    print("You got C") 
elif mark >=33 and mark < 44: 
    print("You got D") 
elif mark >=0 and mark < 33: 
    print("You got F") 
else: 
    print("Wrong Marks given")

Example-3

vivasoft তাদের কর্মচারীকে 15% বোনাস দেওয়ার সিদ্ধান্ত নিয়েছে যদি তার চাকরির বছর 3 বছরের বেশি হয়। ব্যবহারকারীকে তাদের বেতন এবং চাকুরীর টোটাল বছর জিজ্ঞাসা করুন এবং নেট বোনাসের পরিমাণ প্রিন্ট করুন।

salary = int(input("Enter salary : "))
year = int(input("Enter year of service : "))

if year>3:
  print(f"Bonus is {.15*salary}")
else:
  print("No bonus")

Example-4

Get Largest Number between three number

num1 = float(input("Enter Number-1: "))
num2 = float(input("Enter Number-2: "))
num3 = float(input("Enter Number-3: "))

if (num1 >= num2) and (num1 >= num3):
   the_target = num1
elif (num2 >= num1) and (num2 >= num3):
   the_target = num2
else:
   the_target = num3

print(f"The largest number is - {the_target}")

Example-5

Print the number is even or odd

my_number = 50 

if( my_number%2 == 0 ):
    print(f"{my_number} is Even !")
else:
    print(f"{my_number} is Odd !")

 

এসো নিজে করি
গুরুত্বপূর্ন প্রশ্নসমুহ
১) তিনটি সংখ্যার জন্য বড় সংখ্যা বের করুন।
২) একটি বছর ইনপুট নিয়ে , সেটি অধিবর্ষ কিনা চেক করুন।
৩) switch case ব্যবহার করে একটি ব্যাসিক ক্যালকুলেটর তৈরী করুন।
৪) if-else ব্যবহার করে ১ থেকে ১০০ এর মধ্যে কোন সংখ্যা প্রাইম কিনা তা জানার একটি কোড লিখেন।
৫) একটি রিকার্সন ফাংশন লিখুন, যা ১০০ থেকে বড় কোন সংখ্যা ইনপুট নিবে, এর পর সংখ্যাটিকে ৩ দিয়ে ভাগ করে তার পূর্নসংখ্যা যদি জোড় হয় তবে তার সাথে ২ যোজন করুন আর বেজোড় হলে তা থেকে ২ বাদ দিন এবং রিকার্সন ফাংশন এ আবার পাঠান, এইভাবে সংখ্যা টি ১০ এর কম কোন সংখ্যাতে পরিণত হওয়ার সাথে সাথে তা রিটার্ন করুন-
ইন্টারভিউ প্রশ্নোত্তর
গুরুত্বপূর্ন প্রশ্নসমুহ

 

** if এর পরে কোনটি দিতে হয় ? else if / elif
** নিচের কোডটি দেখুন
if i<j: 
    if j<k: 
        i = j 
    else: j = k 
else: 
    if j>k: 
        j=i 
    else: i=k 
    
print(f"{i}\t{j}\t{k}")
** i, j , k এর নিচের মান গুলোর জন্য উপরের কোডের আউটপুট লিখুন
* i = 3, j = 5, k = 7

* i = -2, j = -5, k = 9

* i = 8, j = 15, k = 12

* i = 13, j = 15, k = 13

* i = 3, j = 5, k = 17

* i = 25, j = 15, k = 17
** একটি বছর অধিবর্ষ কিনা বের করুন
** ল্যাম্বডা ফাংশনে conditional logic কিভাবে ব্যবহার করতে হয়?