পাইথন প্রোগ্রামিং ল্য়াংগুয়েজ-৪ - SMH Amiri

সর্বশেষ লিখাসমূহ

পাইথন প্রোগ্রামিং ল্য়াংগুয়েজ-৪

কন্ট্রোল স্ট্রাকচারস





কন্ডিশনাল স্টেটমেন্ট

ইফ – এলস (if – else)
পাইথনে কন্ডিশনাল স্টেটমেন্ট হিসেবে if/ elif /else ব্যবহার করা হয়েছে। অন্যান্য ল্যাঙ্গুয়েজ switch/case স্টেটমেন্ট ও ব্যবহার করা হয়। কিন্তু পাইথনে সেসব নেই। পাইথনের if স্টেটমেন্টের ব্যবহার খুবই সিম্পল এবং সহজ। কয়েকটা উদাহরণ দেখলেই সহজে বোঝা যাবে।
>>> if 8 > 7:
print("True")
যদি একাধিক কন্ডিশন থাকে তখন আমরা elif এবং else ব্যবহার করি।
a = 10
b = 9
if (a>b):
print("a is bigger than b")
elif(b>a):
print("b is greater than a")
else:
print( "Both are equal")
বুলিয়ান অপারেশন্স
পাইথন কন্ডিশনাল স্টেটমেন্ট ব্যবহারের সময় আমরা প্রায়ই ( and, or, not) এই তিনটি শব্দ ব্যবহার করি। এগুলোই হচ্ছে বুলিয়ান অপারেশন্স। পাইথন ডকুমে-ন্টেশন অনুযায়ী এদের প্রায়োরিটি অর্ডার হচ্ছে, or, and তারপর not.
  • or - যখন কন্ডিশনে দেয়া স্টেটমেন্ট গুলোর মাঝে কমপক্ষে একটি সত্য হয় তখন আউটপুট পাওয়া যায়।
  • and- কন্ডিশনের সব স্টেটমেন্টস সত্য হলেই কেবল মাত্র আউটপুট পাওয়া যায়।
  • not- যখন কন্ডিশনাল টা মিথ্যা হয় তখন আউটপুট পাওয়া যায়, কন্ডিশনাল সত্য হলে আউটপুট পাওয়া যায় না।
a = 5
b = 8
c = 7
if(a>b or b>c):
print(b)
if(a>b and b>c):
print(b)
else:
print("condition false")
my_list = [1,6,8,9,7,5]
n = 4
if n not in my_list:
print(" n is absent in a_list")
if name = "main":
খুবই কমন কন্ডিশনাল স্টেটমেন্ট। এটি সবসময় একটা ফাইলের সবার শেষে বা নিচে লিখা হয়৷ আমরা জানি প্রত্যেকটি ফাংশনের name একটি অ্যাট্রিবিউট থাকে। আমরা যখন কোন একটি প্রোগ্রাম রান করি তখন সেটি আমাদের main ফাংশন হিসেবে এক্সিকিউট হয়। এই কন্ডিশনের মানে হচ্ছে আমরা যখন ঠিক এই প্রোগ্রাম টা ই রান করব শুধু মাত্র তখন এই প্রোগ্রামের সকল ফাংশন্স ক্লাস গুলো এই কন্ডিশন অনুযায়ী কাজ করবে। তাছাড়া আমরা যদি এই প্রোগ্রামের ক্লাস বা ফাংশন্স গুলো অন্য কোন প্রোগ্রামে ইম্পোর্ট করে ব্যবহার করি তখন এই কন্ডিশনের কোন স্টেটমেন্ট বা কোন ডেটা ওই ক্লাস বা ফাংশন্স গুলোতে কোন প্রভাব ফেলবে না।
ব্যাপার টা কিছুটা কনফিউজিং হতে পারে। আমরা ইম্পোর্টিং নিয়ে পরে বিস্তারিত আলোচনা করব।

লুপ

কম্পিউটার প্রোগ্রামিং এ লুপ হচ্ছে কোন স্টেট্মেন্ট বার বার করা যতক্ষণ পর্যন্ত না এটা একটা নির্দিষ্ট শর্ত (কন্ডিশন) পূরণ করে। অন্যান্য সব প্রোগ্রামিং প্রোগ্রামিং ল্যাংগুয়েজের মত পাইথনেও লুপ ব্যবহার করা হয়। পাইথন দু’রকমের লুপ আছেঃ
  • for loop
  • while loop

  • ফর লুপ

    ফর লুপ হচ্ছে একটা ইটারেটর মেথড।যার কাজ হচ্ছে শর্ত সাপেক্ষে একটা কাজ বারবার করা। পাইথনে ‘সি’ এর মত for (i=0; i<n; i++) লুপ স্টাইল ব্যবহার না করে ‘for in’ স্টাইল ব্যবহার করা হয়েছে যা অন্যান্য ল্যাঙ্গুয়েজে ‘for each’ এর ন্যায় কাজ করে। ফর লুপ দিয়ে আমরা প্রতিবারে এক এক করে ভ্যালু বাড়াতে পারি অর্থাৎ আমরা চাইলেই i += 2 করে মান বাড়াতে পারব না। ফর লুপ সিন্ট্যাক্সঃ
    for iterator_variable in sequence:
    statements(s)
    উদাহরণঃ
    >>> for i in range(5):
    ... print(i)
    ...
    0
    1
    2
    3
    4
    >>> num = 2
    >>> for a in range (1,6):
    ... print(num * a)
    ...
    2
    4
    6
    8
    10
    নেস্টেড লুপ
    একটি লুপের ভেতরে যদি অন্য একটি লুপ থাকে তাহলে তাকে নেস্টেড লুপ বলে।
    >>> for i in range(1,6): #loop 1
    ... for j in range (1,i+1): #loop 2
    ... print (i, sep=(' '),end=(' '))
    ... print()
    ...
    1
    2 2
    3 3 3
    4 4 4 4
    5 5 5 5 5
    এই উদাহরণে প্রোগ্রামটি যখন প্রথম লুপে প্রবেশ করে তখন i এর মান 1 এবং তা 6 এর আগে পর্যন্ত মানে 5 পর্যন্ত চলবে।
    i এর মান 1 এর জন্য যখন দ্বিতীয় লুপে প্রবেশ করবে তখন j এর মান শুরু হবে 1 থেকে এবং চলবে i+1 =1+1 =2 এর ঠিক আগে পর্যন্ত অর্থাৎ 1 বার , এভাবে i এর মান যখন 1 তখন দ্বিতীয় লুপটি ও 1 বার এক্সিকিউট হবে, i এর মান যখন 2 তখন দ্বিতীয় লুপ টি ও 2 বার এক্সিকিউট হবে। কারন ফর লুপের ম্যাক্সিমাম লিমিটের মান যদি n হয় তাহলে লুপ টি (n-1) সংখক বার এক্সিকিউট হয়। এভাবে প্রত্যেক i এর মানের জন্যে দ্বিতীয় লুপ টি i এর মানের সমান বার এক্সিকিউট হবে এবং ঠিক তত বার i এর মান প্রিন্ট করবে।

  • হোয়াইল লুপ

    while লুপ হচ্ছে একটি কন্ডিশন্ড লুপ। আপাতত দৃষ্টিতে একে ফর লুপের মত মনে হলে ও এটির কাজ ভিন্ন। ফর লুপে আমরা কোন ইটারেবল অবজক্টের উপর ইটারেশন চালাই। কিন্তু while লুপ এক্সিকিউ করার জন্য আমরা কন্ডিশন চেক করি। while লুপ ততক্ষন পর্যন্ত একটি কোড ব্লক কে এক্সিকিউট করবে যতক্ষন condition == True.
    while লুপ এক্সপ্রেশনঃ
    while [a condition is True]:
    [do something]
    উদাহরণঃ
    >>> a=10
    >>> while a>0:
    ... print ("Value of a is",a)
    ... a=a-2
    ... print ("Loop is Completed")
    ...
    Value of a is 10
    Loop is Completed
    Value of a is 8
    Loop is Completed
    Value of a is 6
    Loop is Completed
    Value of a is 4
    Loop is Completed
    Value of a is 2
    Loop is Completed
    উদাহরণ ২ঃ
    >>> n = 153
    >>> total = 0
    >>> while n>0:
    ... r = n % 10
    ... total += r
    ... n = n / 10
    ...
    >>> print(total)
    9.999999999999998

  • রেঞ্জ range()

    range() ফাংশন হচ্ছে জেনারেটর। যা একটি জেনারেটর অবজেক্ট রিটার্ন করে। সিনট্যাক্স:
    range( start_value, end_value, increament_value)
    ফাংশন তিনটি প্যারামিটার নিতে পারে। start_value ফাংশন কত থেকে কাউন্টিং শুরু করবে তা ডিফাইন করে, end_value ডিফাইন করে ফাংশনের শেষ সীমা এবং increment_value ডিফাইন করে প্রতি ধাপে কত করে মান বৃদ্ধি হবে। start_value এবং end_value হচ্ছে অপশনাল। মানে ফাংশনে এই দুটি প্যারামিটার পাস না করলে ও ফাংশন এক্সিকিউট হবে। সেক্ষেত্রে বাই-ডিফল্ট start_value এর মান হবে 0 এবং incremental_value এর মান হবে 1।
    >>>range(5)
    range(0, 5)
    >>> a = range(5)
    >>>print(type(a))
    < class 'range'>
    for লুপের সাথে ব্যবহারের ক্ষেত্রে আমরা range() ফাংশনের অবজেক্ট গুলো কে ট্রাভার্স করার জন্য একটি ভ্যারিয়েবল ব্যবহার করতে হয়।
    >>> for i in range(5):
    print(i)
    0
    1
    2
    3
    4
    যেহেতু আমরা কোন start_value এবং incremental_value দেই নি তাই বাই-ডিফল্ট range() ফাংশন এদের মান যথাক্রমে 0 এবং 1 ধরে নিয়েছে। যদিও end_value এর মান 5 দেয়া হয়েছে কিন্তু range() এখানে 4 পর্যন্ত আউটপুট দিয়েছে কারণ end_value এর মানের চেয়ে ছোট প্রিন্ট করতে পারবে, সমান নয়।
    for i in range(1,10,2)
    print(i)
    1
    3
    5
    7
    9
    range. ফাংশন এর মাধ্যমে স্বয়ংক্রিয় ভাবে একটি লিস্ট তৈরি করা যায়, যার এলিমেন্ট গুলো হয় একটি নির্দিষ্ট ক্রম অনুযায়ী।
    my_numbers = list(range(10)) print(my_numbers)
    আউটপুট:
    [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    উপরের উদাহরণে, ০ থেকে ৯ পর্যন্ত ১০টি ক্রমিক সংখ্যা সম্বলিত একটি লিস্ট তৈরি করা হয়েছে। range এর সাথে list ফাংশনের ব্যবহার করা হয়েছে কারন, range বস্তুত একটি অবজেক্ট রিটার্ন করে আর তাই একে list ফাংশনের আর্গুমেন্ট হিসেবে পাঠিয়ে একটি ব্যবহার উপযোগী লিস্ট হিসেবে রূপান্তর করা হয়েছে।

  • enumerate()

    enumerate() হচ্ছে পাইথনের একটি বিল্ট ইন ফাংশন, এটি এক ধরনের জেনারেটর যা কোন ইটারেবল অবজেক্ট কাউন্ট করে এবং সে কাউন্টারের ভ্যালু রিটার্ন করে যাকে enumerate অবজেক্ট ও বলা হয়। enumerate() ফাংশনে দুটি প্যারামিটার পাস করা যায়। প্রথমটি হল যে কোন Iterable অবজেক্ট (যেমন, নাম্বার, স্ট্রিং, লিস্ট, টুপল ইত্যাদি) এবং দ্বিতীয়টি হল Start ভ্যালু,যেখান থেকে কাউন্টিং শুরু করা হবে।
    enumerate(iterable_object,start_value)
    >>> items = [ 'apple','orange','mango']
    >>> enu_Items = enumerate(items)
    >>> print(type(enu_Items))
    <class 'enumerate'>
    >>> print (enu_Items)
    <enumerate object at 0x7f3a4321e380>
    >>> print (list(enu_Items)) # converting to list
    [(0, 'apple'), (1, 'orange'), (2, 'mango')]
    >>> enu_Items = enumerate(items, 10) # changing the default counter by passing START parameter
    >>> print (list(enu_Items))
    [(10, 'apple'), (11, 'orange'), (12, 'mango')]
    >>> Months = ["Jan","Feb","Mar","April","May","June"] # use a for loop over a collection
    >>> for i, m in enumerate (Months):
    ... print(i,m)
    ...
    0 Jan
    1 Feb
    2 Mar
    3 April
    4 May
    5 June
  • zip()

    একাধিক ইটারেবল অবজেক্টে একই সাথে ফর লুপ চালাতে zip() ফাংশন ব্যবহার করা হয়। zip() আর্গুমেন্ট হিসেবে দুই বা ততোধিক ইটারেবল অবজেক্ট নেয় এবং প্রতিটি ইটারেবল অবজেক্টের একই ইন্ডেক্স এর ভ্যালু গুলোকে একটি টুপল রিটার্ন করে।
    >>> Men = ['Romeo','Forhad','Majnu','Shajahan']
    >>> Women = ['Juliet','Siri','Laily','Momtaj']
    >>> for couple in zip(Men,Women):
    ... print(couple)
    ...
    ('Romeo', 'Juliet')
    ('Forhad', 'Siri')
    ('Majnu', 'Laily')
    ('Shajahan', 'Momtaj')
    >>> type(couple)
    <class 'tuple'>
    এখানে আমরা একটি মাত্র ইটারেটর ব্যবহার করেছি কিন্তু প্রতিটি ইটারেবল এর জন্য আলাদা ইটারেটর ব্যবহার করা যায়। মনে করি, একটি কম্পানির তিনটি ডেটাসেট আছে যার একটিতে কর্মচারীর নাম,একটি তে পদবী ও অন্যটিতে বেতন ক্রমানুযায়ী রাখা আছে। আমাদের সে তিনটি ডেটা সেট থেকে ডেটা গুলোকে ফরম্যাট করে সহজে বোঝার মত একটি আউটপুট দেখাতে হবে।
    >>> names = ('Richard','Danesh','Gylfoyl','Jarad','Erlick')
    >>> positions = ('CEO','Software Eng','Tester','Legal Adviser','Sales Executive')
    >>> salaries = (10000,8000,8000,5000,6000)
    >>> for name,position,salary in zip(names,positions,salaries):
    ... print(f"{name} is the '{position}' and he is paid {salary}$ per week")
    ...
    Richard is the 'CEO' and he is paid 10000$ per week
    Danesh is the 'Software Eng' and he is paid 8000$ per week
    Gylfoyl is the 'Tester' and he is paid 8000$ per week
    Jarad is the 'Legal Adviser' and he is paid 5000$ per week
    Erlick is the 'Sales Executive' and he is paid 6000$ per week