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

The oldest, shortest words - 'yes' and 'no' - are those which require the most thought. - Pythagoras

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

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

পাইথনে আমরা তিনটা কন্ডিশনাল স্টেটমেন্ট পাব (লুপকে হিসাবের বাহিরে রাখছি আপাতত)। প্রতিটার ভিন্ন ভিন্ন মানে ও কাজ আছে। এক নজরে দেখে নেয়া যাক:

  • if: যদি এটা সত্য হয়, তবে ওটা কর।

  • elif: যদি if এর কন্ডিশন সত্য না হয়ে এটা সত্য হয়, তবে ওটা কর। elif সবসময় if এর পরে আসবে। আর কেবলমাত্র if এর কন্ডিশন সত্য না হলেই elif এর কন্ডিশন এক্সিকিউট হবার সুযোগ পাবে।

  • else: যদি কোনটিই সত্য না হয়, তবে ওটা কর। elseও সবসময় if আর elif এর পরে আসবে (আসলে সবার শেষে)।

এখন আমরা ডিটেইলসে এগুলো নিয়ে আলোচনা করব। তবে তার আগে একটা তথ্য দেয়া দরকার। প্রতিটা কন্ডিশনাল স্টেটমেন্টের শেষে কোলন (:) চিহ্ন দিতে হয়। কন্ডিশনাল স্টেটমেন্ট বলতে if, elifelse যুক্ত স্টেটমেন্ট বোঝাচ্ছি আমরা।

যদি হয় (if)

একটা সমস্যার কথা চিন্তা করা যাক। আমরা a ভ্যারিয়েবলে 5 অ্যাসাইন করব। এখন, যদি a ভ্যারিয়েবলের মান, 10 এর চেয়ে ছোট হয় তাহলে স্ক্রীনে a is less than 10. প্রিন্ট করব। কিভাবে করা যায় কাজটা? হুম, কন্ডিশনাল লজিক ব্যবহার করতে হবে আমাদের।

>>> a = 5
>>> a
5
>>> if a < 10:
... print('a is less than 10.')
  File "<stdin>", line 2
    print('a is less than 10.')
        ^
IndentationError: expected an indented block

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

>>> if a < 10:
...     print('a is less than 10.')
...
a is less than 10.

হুম আমরা আমাদের কাঙ্ক্ষিত আউটপুট পেয়েছি।

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

উপরের প্রোগ্রামটায় কিন্তু একটা ঘাপলা আছে। যদি a, 10 এর চেয়ে ছোট না হয়, তবে কিন্তু কোন আউটপুটই দেখাবে না। কি বিশ্বাস হচ্ছে না? কোড চালিয়ে দেখলেই তো হয়।

>>> a = 15
>>> if a < 10:
...     print('a is less than 10.')
...

সত্যি, তাই না? আমরা কোন আউটপুট পাইনি। এর কারণ হল আমরা শুধু কন্ডিশন সত্য হবার ক্ষত্রে অ্যাকশন বলে দিয়েছি। কিন্তু কোন কারণে কন্ডিশন মিথ্যা হলে কি অ্যাকশন হবে তা কিন্তু বলে দেইনি। যদি বলে দিতাম তাহলে অবশ্যই সেই অ্যাকশনটা কাজ করত।

এবার নতুন একটা সমস্যার কথা চিন্তা করা যাক। আমরা a ভ্যারিয়েবলে 5 অ্যাসাইন করব। এখন, যদি a ভ্যারিয়েবলের মান, 10 এর চেয়ে ছোট হয় তাহলে স্ক্রীনে a is less than 10. প্রিন্ট করব। আর a যদি 10 এর চেয়ে বড় হয় তাহলে a is greater than 10. প্রিন্ট করব। কিভাবে করা যায় কাজটা? সবাই মিলে চেষ্টা করতে হবে তো!

>>> a = 5
>>> if a < 10:
...     print('a is less than 10.')
... else:
...     print('a is greater than 10.')
...
a is less than 10.
>>> a = 15
>>> if a < 10:
...     print('a is less than 10.')
... else:
...     print('a is greater than 10.')
...
a is greater than 10.

এবার ঠিক আছে, তাই না?

যদি হয় ... না হলে যদি হয় ... না হলে (if ... elif ... else)

একটা জটিল সমস্যার কথা চিন্তা করা যাক। আমরা a ভ্যারিয়েবলের মান ইউজারের থেকে ইনপুট নেব। এখন, যদি a ভ্যারিয়েবলের মান 5 হয় তাহলে স্ক্রীনে a is equal to 5. প্রিন্ট করব। a এর মান যদি 5 এর চেয়ে ছোট হয় তাহলে a is less than 5. প্রিন্ট করব। আর a যদি 10 এর চেয়ে বড় হয় তাহলে a is greater than 10. প্রিন্ট করব। আগের সমস্যাগুলোর তুলনায় কিন্তু জটিল এটা। তবে আমরা পারবই।

এখন থেকে আমরা পাইথন IDLE এ কোড লেখা শুরু করব।

a = int(input())
if a == 5:
    print('a is equal to 5.')
elif a < 5:
    print('a is less than 5.')
elif a > 5 and a < 10:
    print('a is inbetween 5 and 10.')
else:
    print('a is greater than 10.')

আউটপুট

5
a is equal to 5.
2
a is less than 5.
17
a is greater than 10.

লজিক যখন পাখির বাসা (nested if)

পাখির বাসা তো আমরা কমবেশি সবাই দেখেছি। পাখি খরকুটো দিয়ে পেঁচিয়ে বাসা বানায়। খড়ের পর খড়, তারপর খড় - এভাবে পাখি তার বাসা তৈরি করে। ঠিক এইভাবে আমরা যদি লজিকের ভেতর লজিক, তার ভেতর লজিক দিয়ে কোডব্লক লিখি তখন সেটা হবে nested if।

আমরা একটা সমস্যার কথা চিন্তা করি। ইউজার a এর একটা ভ্যালু ইনপুট দেবে। যদি ভ্যালুটা 10 এর চেয়ে ছোট হয় তখন আমরা চেক করে দেখব যে ভ্যালুটা 2 দিয়ে নিঃশেষে বিভাজ্য কিনা। বিভাজ্য হলে প্রিন্ট কর less, yes আর না হলে less, no। আবার ভ্যালুটা যদি 10 এর চেয়ে বড় হয় তখন আমরা চেক করে দেখব যে ভ্যালুটা 3 দিয়ে নিঃশেষে বিভাজ্য কিনা। বিভাজ্য হলে প্রিন্ট কর greater, yes আর না হলে greater, no

a = int(input())
if a < 10:
    if (a % 2) == 0:
        print('less, yes')
    else:
        print('less, no')
else:
    if (a % 3) == 0:
        print('greater, yes')
    else:
        print('greater, no')

আউটপুট

6
less, yes
12
greater, yes
5
less, no
17
greater, no

এই ছিল পাইথনের কন্ডিশনার লজিকের বেসিক ধারণা। ওহ! একটা কথা বলতে ভুলে গেছি। পাইথনে সকল নন-জিরো (non-zero) আর নন-নাল (non-null) ভ্যালু হচ্ছে সত্য (TRUE)। অন্যদিকে জিরো (zero) আর নাল (null) ভ্যালু হচ্ছে মিথ্যা (FALSE)। একটা উদাহরণ দিলে ব্যাপারটা আমাদের সবার কাছে পরিষ্কার হয়ে যাবে।

>>> a = 5
>>> if a:
...     print(True)
... else:
...     print(False)
...
True
>>> a = 0
>>> if a:
...     print(True)
... else:
...     print(False)
...
False
>>> a = not None
>>> if a:
...     print(True)
... else:
...     print(False)
...
True
>>> a = None
>>> if a:
...     print(True)
... else:
...     print(False)
...
False

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

>>> a = 1
>>> b = 1
>>> b is a
True
>>> a = 6000
>>> b = 6000
>>> b is a
False

একটা বিদঘুটে ঘটনা। কিন্তু কি ব্যাখ্যা কি এর? এর রহস্য তদন্ত করার ভার আপনাদের উপর। আমি আলিস্যার ভান্ডার, রেস্ট নিই একটু।

if __name__ == "__main__"

if __name__ == "__main__":
    #do something

পাইথনের অনেক উদাহরণে, অনেক প্রোগ্রামে আমরা এই বিশেষ কন্ডিশনটা দেখেছি বা দেখব। এর সুন্দর একটা কারণ আছে। এখন জানলে কারণ আমাদের মাথার স্পর্শক বরাবর যাবে। তাই মডিউল ও প্যাকেজ চাপ্টারে গিয়ে আমরা এই কারণটা সম্পর্কে জানব।

সহজ ভাষায় পাইথন ৩

বইটি পড়ার সময় প্রতিটি টপিক ধারাবাহিকভাবে বুঝে বুঝে পড়তে হবে এবং হাতে-কলমে অনুশীলন করতে হবে। কোন অংশ বুঝতে সমস্যা হলে ফেসবুক গ্রুপ পাইথন বাংলাদেশে সমস্যাটি পোস্ট করতে পারেন। এখান থেকে অতি দ্রুত সাহায্য-সহযোগীতা পাবেন আপনি।

results matching ""

    No results matching ""