হোয়াইল লুপ (While Loop)

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


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

সিন্টেক্স:

while কন্ডিশন:

     হোয়াইল লুপের বডি

 

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

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

পাইথন ইন্টারপ্রেটার যেকোন নন-জিরো ভালু (যেমন: 1, 2, 3, -1, -2, -3 ইত্যাদি) কে True এবং 0 বা None কে False হিসাবে বিবেচনা করে। সুতরাং ‘while’ এর পরে True (বা এমন কোন ভ্যালু যা True নির্দেশ করে) থাকলে হোয়াইল লুপটি একটি ইনফাইনাইট (অসীম) লুপে পরিণত হয়। অর্থাৎ তখন এটি অসীম সংখক বার চলতে পারে, কখনোই বন্ধ হয় না।

সুতরাং হোয়াইল লুপ দুই প্রকারের হতে পারে। যথা:

১. ইনফাইনাইট হোয়াইল লুপ  (অসীম) – Infinite while loop

২. ফাইনাইট হোয়াইল লুপ  (সসীম) – Finite while loop

এখন আমি এগুলো নিয়ে বিস্তারিত আলোচনা করব।

নিচে টি ইনফাইনাইট হোয়াইল লুপ  (অসীম) দেখানো হলো: এগুলো  অসীম  সংখ্যক বার চলবে , কারণ সবগুলোর ক্ষেত্রে কন্ডিশন True।

 

ইনফাইনাইট লুপ ১

while 1:

     print('Infinite loop')

 

ইনফাইনাইট লুপ ২

while -1:

     print('Infinite loop')

 

ইনফাইনাইট লুপ ৩

while True:

     print('Infinite loop')

 

নিচে টি ফাইনাইট (সসীম) লুপ দেখানো হলো: এগুলো একবার চলবে না, কারণ সবগুলোর ক্ষেত্রে কন্ডিশন False।

ফাইনাইট (সসীম) লুপ ১

while 0:

     print('The loop will not work once')

 

ফাইনাইট (সসীম) লুপ ২

while None:

     print('The loop will not work once')

 

ফাইনাইট (সসীম) লুপ ৩

while False:

     print('The loop will not work once')

 

 

কাউন্টার ভ্যারিয়েবলের মান হ্রাস করা (Decrement in while loop)

 

উপরের কোডের প্রথম লাইনে আমি number ভ্যারিয়েবলের মধ্যে ভ্যালু  10 এসাইন করেছি। এটিই হছে হোয়াইল লুপের ইনিশিয়ালাইজেশন (initialization), অর্থাৎ শুরুতে একটি ভ্যারিয়েবলের মধ্যে ভ্যালু এসাইন করা। দ্বিতীয় লাইনে ‘while’ এর পরে একটি কন্ডিশন (number > 5) দিয়েছি। এর অর্থ হলো: নাম্বারটি যতক্ষন  5 এর বড় থাকে ততক্ষন লুপটি চলবে, এবং তৃতীয় লাইনটি প্রিন্ট হবে। এখানে number  হচ্ছে কাউন্টার ভ্যারিয়েবল। চতুর্থ লাইনে number এর ভ্যালু ১ কমবে, এর পরে আবার দ্বিতীয় লাইনে গিয়ে কন্ডিশন চেক করবে। এই প্রক্রিয়া চলতে থাকবে যতক্ষণ না কন্ডিশন (টেস্ট এক্সপ্রেশন) False হয় (অর্থাৎ যতক্ষন  না নাম্বারটি 5 বা 5 থেকে ছোট হয়)। এখন কোডটি রান করলে নিচের মত আউটপুট দিবে।

আউটপুট:

10

9

8

7

6

 

কোডের ব্যাখ্যা

ইন্টারপ্রেটার এখান (ইনিশিয়ালাইজেশন) থেকে কোড পড়া শুরু করবে।

ইনিশিয়ালাইজেশন: number = 10,

ফার্স্ট ইটারেশন

কন্ডিশন চেক: যেহেতু নাম্বারটি (10), 5 থেকে বড়, (কন্ডিশনটি সত্য), তাই 10 প্রিন্ট হবে।

ডিক্রিমেন্ট: number = number – 1  বা number = 10 -1 বা number = 9।

সেকেন্ড ইটারেশন

কন্ডিশন চেক: যেহেতু নাম্বারটি (9), 5 থেকে বড়, (কন্ডিশনটি সত্য), তাই 9 প্রিন্ট হবে।

ডিক্রিমেন্ট: number = number – 1  বা number = 9 -1 বা number = 8।

থার্ড ইটারেশন

কন্ডিশন চেক: যেহেতু নাম্বারটি (8), 5 থেকে বড়, (কন্ডিশনটি সত্য), তাই 8 প্রিন্ট হবে।

ডিক্রিমেন্ট: number = number – 1  বা number = 8 -1 বা number = 7।

ফোর্থ ইটারেশন

কন্ডিশন চেক: যেহেতু নাম্বারটি (7), 5 থেকে বড়, (কন্ডিশনটি সত্য), তাই 7 প্রিন্ট হবে।

ডিক্রিমেন্ট: number = number – 1  বা number = 7 -1 বা number = 6।

ফিফ্থ ইটারেশন

কন্ডিশন চেক: যেহেতু নাম্বারটি (6), 5 থেকে বড়, (কন্ডিশনটি সত্য), তাই 6 প্রিন্ট হবে।

ডিক্রিমেন্ট: number = number – 1  বা number = 6 -1 বা number = 5।

সিক্সথ ইটারেশন

কন্ডিশন চেক: যেহেতু নাম্বারটি (5), 5 থেকে বড় নয়, (কন্ডিশনটি মিথ্যা), তাই 5 প্রিন্ট হবে না। বরং লুপটি শেষ হয়ে যাবে।

 

কাউন্টার ভ্যারিয়েবলের মান বৃদ্ধি করা (Increment in while loop)

কোড:

number = 10

while number < 15:

    print(number)

    number = number + 1

 

উপরের কোডের প্রথম লাইনে আমি number ভ্যারিয়েবলের মধ্যে ভ্যালু  10 এসাইন করেছি। এটিই হছে হোয়াইল লুপের ইনিশিয়ালাইজেশন (initialization), অর্থাৎ শুরুতে একটি ভ্যারিয়েবলের মধ্যে ভ্যালু এসাইন করা। দ্বিতীয় লাইনে ‘while’ এর পরে একটি কন্ডিশন (number < 15) দিয়েছি। এর অর্থ হলো: নাম্বারটি যতক্ষন  15 এর ছোট হয় ততক্ষন লুপটি চলবে, এবং তৃতীয় লাইনটি প্রিন্ট হবে। এখানে number  হচ্ছে কাউন্টার ভ্যারিয়েবল। চতুর্থ লাইনে number এর ভ্যালু ১ বাড়বে, এর পরে আবার দ্বিতীয় লাইনে গিয়ে কন্ডিশন চেক করবে। এই প্রক্রিয়া চলতে থাকবে যতক্ষণ না কন্ডিশন (টেস্ট এক্সপ্রেশন) False হয় (অর্থাৎ যতক্ষন  না নাম্বারটি 15 বা 15 থেকে বড় হয়)। এখন কোডটি রান করলে নিচের মত আউটপুট দিবে।

 

আউটপুট:

10

11

12

13

14

 

কোডের ব্যাখ্যা

ইন্টারপ্রেটার এখান (ইনিশিয়ালাইজেশন) থেকে কোড পড়া শুরু করবে।

ইনিশিয়ালাইজেশন: number = 10,

ফার্স্ট ইটারেশন

কন্ডিশন চেক: যেহেতু নাম্বারটি (10), 15 থেকে ছোট, (কন্ডিশনটি সত্য), তাই 10 প্রিন্ট হবে।

ইনক্রিমেন্ট (বৃদ্ধি): number = number + 1  বা number = 10 +1 বা number = 11।

সেকেন্ড ইটারেশন

কন্ডিশন চেক: যেহেতু নাম্বারটি (11), 15 থেকে ছোট, (কন্ডিশনটি সত্য), তাই 11 প্রিন্ট হবে।

ইনক্রিমেন্ট: number = number + 1  বা number = 11 + 1 বা number = 12।

থার্ড ইটারেশন

কন্ডিশন চেক: যেহেতু নাম্বারটি (12), 15 থেকে ছোট, (কন্ডিশনটি সত্য), তাই 12 প্রিন্ট হবে।

ইনক্রিমেন্ট: number = number + 1  বা number = 12 +1 বা number = 13।

ফোর্থ ইটারেশন

কন্ডিশন চেক: যেহেতু নাম্বারটি (13), 15 থেকে ছোট, (কন্ডিশনটি সত্য), তাই 13 প্রিন্ট হবে।

ইনক্রিমেন্ট: number = number + 1  বা number = 13 +1 বা number = 14।

ফিফ্থ ইটারেশন

কন্ডিশন চেক: যেহেতু নাম্বারটি (14), 15 থেকে ছোট, (কন্ডিশনটি সত্য), তাই 14 প্রিন্ট হবে।

ইনক্রিমেন্ট: number = number + 1  বা number = 14 + 1 বা number = 15।

সিক্সথ ইটারেশন

কন্ডিশন চেক: যেহেতু নাম্বারটি (15), 15 থেকে ছোট নয়, (কন্ডিশনটি মিথ্যা), তাই 15 প্রিন্ট হবে না। বরং লুপটি শেষ হয়ে যাবে।