ক্যাপ্টেন জোনাথন আঠেরো বছর বয়সে
দূর প্রাচ্যের এক দ্বীপে ধরলেন এক পেলিক্যান

জোনাথনের সেই পেলিক্যান একদিন সকালে
ডিম পড়লো একটা ধপধপে সাদা, এবং কি আশ্চর্য
তার থেকে বেরিয়ে এলো ঠিক আগেরটার মত এক পেলিক্যান

এই দ্বিতীয় পেলিক্যানটাও যথাসময়ে
একটা সাদা ডিম পাড়লো, এবং তার থেকে
অবধারিত ভাবেই এলো আর একটি, এবং এইরকম চলতেই থাকলো ...

এই ব্যাপারটা চলতে পারে বহুকাল ধরেই
যদি না কেউ মাঝপথে একটা ওমলেট বানিয়ে নেয়!
হ্রোবেয়ার দেনো

৬ লুপায়িত হুকুশ পাকুশ

প্রোগ্রামিং এর সবচে' অসাধারণ ব্যাপার হচ্ছে কি, যদি তোমার একই কাজ বার বার করতে হয়, সেটা তুমি লুপে ফেলে করে ফেলতে পারো। ধরো, হুকুশ পাকুশ একদিন ভুলে গেলো ক্লাসে হোমওয়ার্ক করে নিতে। তখন মিস ওকে বললো, তোমাকে এক হাজার বার লিখে আনতে হবে যে তুমি প্রতিদিন হোমওয়ার্ক করবে। হুকুশ পাকুশ ভাবলো সে যদি একটা লাইন লিখে সেটাকে বারবার করে কপি করে, তাহলেও গুনে গুনে এক হাজার বার কপি করতে হবে। কত্ত ঝামেলা, তাই না?

এবার চিন্তা করো, এটা আমরা হাতে হাতে কিভাবে করতাম? ধরো আমি ছুটি কাটাতে যাবো সেন্ট মার্টিনসে - আমাকে দশটা জামা নিতে হবে কারণ আমি পুরো মাসটা সেখানে থাকবো। আমি করবো কি একটা একটা করে জামা নিবো, আর হাতে গুনবো আমি কয়টা জামা নিয়েছি। যখন দেখবো আমার হাতের আঙ্গুল গোনায় দশটা হয়ে গেছে তখন আমি থেমে যাবো। তাই না? লুপের আইডিয়াটা ঠিক তাই।

৬.১ while loop

আমরা যখন এটা কোড করবো তখন আমাদের চিন্তাটা থাকবে একই রকম।

খেয়াল করো, শুরুতে আমরা i নামের ভ্যারিয়েবলটাকে শূণ্য বানিয়ে নিচ্ছি। তারপর হচ্ছে কি জানো, যতক্ষণ পর্যন্ত i ১০০০ এর ছোট থাকছে ততক্ষণ সে লুপ এর ভিতরে ঢুকছে। আর প্রিন্ট করছে ওই লাইনটা। প্রিন্ট করার পর, সে i কে এক করে বাড়াচ্ছে। মানে যদি i শূণ্য থাকতো তাহলে এক বাড়ানোর পর i এক হয়ে যাবে। তারপর আবার while লুপ চেক করে দেখছে i কি এখনো 1000 এর চে ছোট? হু ছোট। তারপর আবার সে লুপের ভেতর ঢুকছে।

এটা অনেকটা এরকম -

i = ০

i(০) কি ১০০০ এর চে' ছোট?
হু ছোট
লুপ এর ভিতর ঢুকছি
লিখছি যে আমি প্রতিদিন হোমওয়ার্ক করবো
i কে এক বাড়াচ্ছি i এখন ১

i(১) কি ১০০০ এর চে' ছোট?
হু ছোট
লুপ এর ভিতর ঢুকছি
লিখছি যে আমি প্রতিদিন হোমওয়ার্ক করবো
i কে এক বাড়াচ্ছি i এখন ২

i(২) কি ১০০০ এর চে' ছোট?
হু ছোট
লুপ এর ভিতর ঢুকছি
লিখছি যে আমি প্রতিদিন হোমওয়ার্ক করবো
i কে এক বাড়াচ্ছি i এখন ৩

(তারপর এই কাজ বারবার হয়ে i একটা সময় ১০০০ হবে)

i(১০০০) কি ১০০০ এর চে' ছোট?
নাহ ছোট না।
বেশ তো আমার কাজ শেষ এখন আমি এখন ঘুমাতে যাবো। :)

তো while এর স্ট্রাকচার হচ্ছে এরকম

while condition:
    do something
যতক্ষণ কন্ডিশনটা সত্যি থাকবে, ততক্ষণ লুপটা ভিতরের কাজগুলো করতে থাকবে।

৬.২ for loop

আমরা উপরে যেই কাজটা করলাম সেটা আরেকভাবে করা যায়। আমি লিখতে পারি

এটাও একই কাজ করবে।

ধরো আমাকে ৬ থেকে ১১ এর আগ পর্যন্ত সংখ্যাগুলোর বর্গকে বের করতে হবে তাহলে সেটা হবে এরকম

তারপর ধরো আমাকে ১০০ এর চে' ছোট সবগুলো বেজোড় সংখ্যা বের করতে হবে। তার মানে হচ্ছে ১ লিখে আমি ২ কে বাদ দিবো, তারপর ৩ কি লিখে ৪ কে বাদ দিবো, তাই না?

এটা while loop দিয়ে লিখলে এরকম হবে

আর range দিয়ে লিখলে হবে কি

এর মানে হচ্ছে আমি ১ থেকে শুরু করবো, চলতে থাকবো যতক্ষণ ১০০ এর চেয়ে বড় না হয়ে যায়, আর প্রতিবার ১ প্রিন্ট করার পর i কে ২ করে বাড়াবো। মানে i যদি প্রথম ধাপে ১ থাকে দ্বিতীয় ধাপে সে ৩ হয়ে যাবে।

৬.৩ লিস্টের উপর লুপ চালানো

মনে আছে আমাদের একটা লিস্ট ছিলো ফলের?

এখন যদি কেউ লিস্টটা দিয়ে বলে সবগুলো ফলের নাম প্রিন্ট করো - তাহলে সেটা তিন ভাবে করা যায়

৬.৩.১ গায়ের জোরে

৬.৩.২ লুপ চালিয়ে

কিংবা

৬.৩.৩ পাইথন স্টাইলে

এই স্টাইলটা কিউট না? এই স্টাইলটা অনেকটা এরকম - ফলের লিস্টির প্রতিটা ফলের জন্য প্রিন্ট করো ফলের নাম।

৬.৪ break

ধরো আমার একটা ফলের দোকান আছে। একজন হঠাৎ করে এসে আমাকে জিজ্ঞেস করলো, 'তোমার কাছে কি জাম্বুরা আছে?'। তো আমার করতে হবে কি, সব তাক ঘুরে এসে খুঁজে দেখতে হবে আসলেই জাম্বুরা আছে কিনা, তাই না? যদি জাম্বুরা পেয়ে যাই আমার আর খোঁজার দরকার নেই। তো আমরা একটা লুপ থেকে বের হয়ে আসতে পারি ব্রেক করে।

যেমন এই কোডটা হবে এরকম

অবশ্য এই কাজটা আরেকভাবে করা যায় পাইথনে। আমি ওভাবে দেখিয়েছি শুধু তোমাকে ব্রেক করতে শেখানোর জন্য।

আবার এভাবেও লেখা যায়, কারণ আমরা ছোটদের ভালোবাসি!

৬.৫ continue

মনে আছে হুকুশ পাকুশ, আমাদের আগে একটা প্রবলেম ছিলো যেখানে এক থেকে একশ পর্যন্ত পর্যন্ত সবগুলো বেজোড় সংখ্যাকে প্রিন্ট করতে হবে? ধরো আমরা একটু পাল্টাই প্রবলেমটা - সবগুলো এক থেকে একশ পর্যন্ত বেজোড় সংখ্যার যোগফল প্রিন্ট করতে হবে। তখন আমরা যখনই একটা জোড় সংখ্যা পাবো - আমরা সেটাকে পাত্তাই দিবো না - আমরা continue করবো পরের সংখ্যাটার জন্য।

তো সেটা হবে এরকম

এখানে i % 2 মানে হচ্ছে i কে যদি 2 দিয়ে ভাগ করি ভাগশেষ কত থাকবে সেটা। যেমন 3%2==1, 4%2==0 এবং 5%3==2