while লুপ — শর্ত সত্য থাকা পর্যন্ত চলা
একই কাজ বারবার চালানো, অসীম লুপ কীভাবে হয় ও থামানো যায়, break আর continue, আর সঠিক ইনপুট না পাওয়া পর্যন্ত জিজ্ঞেস করতে থাকা।
কীভাবে শিখতে চান?
যে সমস্যাটা আমরা সমাধান করছি
আগের অধ্যায়ে আমরা ইউজারর ভুল ইনপুট ধরতে শিখেছি — কেউ twenty লিখলে প্রোগ্রাম বলতে পারে "এটা সংখ্যা নয়"।
কিন্তু বলার পর সে কী করে? থেমে যায়। ইউজারকে আবার পুরো প্রোগ্রাম চালাতে হয়। কোনো সত্যিকারের সফটওয়্যার এভাবে চলে না — সে আবার জিজ্ঞেস করে, আর সঠিক উত্তর পাওয়া পর্যন্ত জিজ্ঞেস করতেই থাকে।
এটাই লুপের কাজ: একই কাজ বারবার করা, যতক্ষণ দরকার। আজ আমরা while শিখব — যেটা চলে যতক্ষণ একটা শর্ত সত্য থাকে।
সাথে একটা নতুন অভিজ্ঞতাও আজ হবে: প্রোগ্রাম আর থামছে না, টার্মিনালে লেখা ছুটতেই থাকছে। ভয় পাওয়ার কিছু নেই, থামানোর উপায়টাও আজই শিখে নেবেন।
এই অধ্যায় শেষে আপনি পারবেন
whileলুপ লিখতে, আর বলতে সেটা কখন থামবে- অসীম লুপ কেন হয় তা চিনতে, আর
Ctrl + Cদিয়ে থামাতে - একটা লুপে যোগফল বা গণনা জমাতে
breakআরcontinueঠিক জায়গায় ব্যবহার করতে- সঠিক ইনপুট না পাওয়া পর্যন্ত জিজ্ঞেস করে যেতে
আগে যা জানা লাগবে: সিদ্ধান্ত নেওয়া — if, elif, else।
সবচেয়ে সহজ লুপ
count = 3
while count > 0:
print(count)
count = count - 1
print("Go")3
2
1
Goগঠনটা if-এর মতোই দেখতে — শর্ত, কোলন, ইনডেন্ট করা ব্লক। পার্থক্য একটাই, আর সেটাই সব: if শর্তটা একবার দেখে, while প্রতিবার ব্লক শেষ হওয়ার পর আবার দেখে।
উপরের প্রোগ্রামটা যা করেছে:
countহলো3। শর্ত3 > 0সত্য → ব্লক চলল,3প্রিন্ট করল,countহলো2- আবার শর্ত:
2 > 0সত্য →2প্রিন্ট করল,countহলো1 - আবার শর্ত:
1 > 0সত্য →1প্রিন্ট করল,countহলো0 - আবার শর্ত:
0 > 0মিথ্যা → লুপ শেষ, নিচের লাইনে গেল
প্রতিটা কাজের while লুপে তিনটা জিনিস থাকে, আর তিনটাই দরকার:
- শুরুর মান — লুপের আগে (
count = 3) - শর্ত — কখন চলবে (
count > 0) - পরিবর্তন — ভেতরে এমন কিছু, যা শর্তটাকে একদিন মিথ্যা করবে (
count = count - 1)
অসীম লুপ
তিন নম্বরটা বাদ পড়লে কী হয়, একবার দেখে নেওয়া দরকার:
count = 3
while count > 0:
print(count)এটি 3 প্রিন্ট করতেই থাকবে, চিরকাল। count কখনো বদলায় না, তাই count > 0 কখনো মিথ্যা হয় না।
থামানোর উপায়: টার্মিনালে Ctrl + C চাপুন। সাথে সাথে থেমে যাবে আর এরকম একটা বার্তা দেখাবে:
Traceback (most recent call last):
File "D:\python-lab\lesson-10\loop.py", line 4, in <module>
print(count)
KeyboardInterruptFile লাইনে আপনার ফাইলের পুরো ঠিকানা থাকবে, আর লাইন নম্বরটা নির্ভর করে ঠিক কোন মুহূর্তে থামালেন তার উপর। KeyboardInterrupt মানে আপনি নিজে থামিয়েছেন। এটা আপনার কোডের বাগ নয়, এটা আপনার সিদ্ধান্ত।
অসীম লুপ শেখার একটা অংশ। প্রতিটা প্রোগ্রামারই এটা করেছে, আজও করে। ভয় পাওয়ার কিছু নেই — Ctrl + C জানা থাকলে এটা শুধু একটা ছোট বিরক্তি। লুপ লেখার সময় শুধু নিজেকে একবার জিজ্ঞেস করুন: "শর্তটা মিথ্যা হবে কীভাবে?" উত্তর দিতে না পারলে লুপটা থামবে না।জমা করা
লুপের সবচেয়ে সাধারণ কাজ হলো কিছু জমানো — যোগফল, গণনা, সবচেয়ে বড় মান:
total = 0
number = 1
while number <= 5:
total = total + number
number = number + 1
print("Sum of 1 to 5:", total)Sum of 1 to 5: 15total-কে বলা হয় অ্যাকিউমুলেটর — জমানোর পাত্র। খেয়াল করুন, সেটা লুপের বাইরে শুরু করা হয়েছে, 0 দিয়ে। ভেতরে শুরু করলে প্রতিবার শূন্য হয়ে যেত আর শেষে শুধু শেষ সংখ্যাটাই থাকত।
break — এখনই বেরিয়ে যাও
break লুপটা সাথে সাথে ভেঙে দেয়, শর্ত যাই বলুক:
number = 1
while number <= 100:
if number % 7 == 0:
print("First multiple of 7:", number)
break
number = number + 1First multiple of 7: 7শর্ত বলছিল ১০০ পর্যন্ত চলতে, কিন্তু ৭ পাওয়ার সাথে সাথেই কাজ শেষ — তাই আর ৯৩ বার ঘোরার কোনো মানে নেই।
break থাকায় একটা নকশা সম্ভব হয়, যেটা খুব কাজে লাগে — শর্তের জায়গায় সোজা True লিখে দেওয়া, আর ভেতরে ঠিক জায়গায় বেরিয়ে আসা:
while True:
answer = input("Type 'quit' to exit: ").strip().lower()
if answer == "quit":
print("Goodbye")
break
print(f"You typed: {answer}")Type 'quit' to exit: hello
You typed: hello
Type 'quit' to exit: QUIT
Goodbyewhile True মানে "সব সময় চলবে", তাই ভেতরে একটা break অবশ্যই থাকতে হবে — নাহলে ওটা অসীম লুপ।
continue — এই চক্করটা বাদ দাও
continue লুপ ভাঙে না, শুধু ভেতরের বাকি লাইনগুলো এড়িয়ে সোজা পরের চক্করে চলে যায়:
number = 0
while number < 10:
number = number + 1
if number % 2 == 0:
continue
print(number)1
3
5
7
9জোড় সংখ্যাগুলোতে continue চলেছে, তাই print এড়িয়ে গেছে।
continueলেখার সময় একটা ফাঁদ আছে। যে লাইনটা শর্তকে এগিয়ে দেয় (number = number + 1), সেটা যদিcontinue-এর পরে থাকে, তাহলেcontinueচলার সময় ওটা এড়িয়ে যাবে — আর লুপ ওখানেই আটকে থাকবে চিরকাল। উপরের কোডে তাই বাড়ানোর লাইনটা সবার আগে রাখা হয়েছে।continueব্যবহার করলে এই ক্রমটা প্রতিবার মিলিয়ে দেখুন।
অবশেষে: ঠিক ইনপুট পাওয়া পর্যন্ত জিজ্ঞেস করা
এই জিনিসটার জন্যই দুই অধ্যায় ধরে অপেক্ষা:
while True:
raw = input("Your age: ").strip()
if raw.isdigit():
age = int(raw)
break
print("Please type a whole number, digits only.")
print(f"Thank you. Age recorded as {age}.")Your age: twenty
Please type a whole number, digits only.
Your age: 22.5
Please type a whole number, digits only.
Your age: 22
Thank you. Age recorded as 22.এটাই সেই নকশা যা আপনি সারা জীবন ব্যবহার করবেন: অসীম লুপ, ভেতরে যাচাই, ঠিক হলে break, ভুল হলে বার্তা দিয়ে আবার। প্রোগ্রাম আর ভুল ইনপুটে ভেঙে পড়ে না, আর ইউজারকেও আবার সবকিছু শুরু করতে হয় না।
একটা সম্পূর্ণ উদাহরণ
shopping.py:
# Keep taking item prices until the user is done, then summarise
total = 0.0
item_count = 0
print("Enter item prices. Type 'done' to finish.")
while True:
entry = input("Price: ").strip().lower()
if entry == "done":
break
if entry == "":
print(" Nothing typed — try again.")
continue
# Accept only digits and at most one decimal point
if entry.replace(".", "", 1).isdigit():
price = float(entry)
total = total + price
item_count = item_count + 1
print(f" Added {price:.2f}. Running total {total:.2f}")
else:
print(f" '{entry}' is not a price. Try again.")
print()
if item_count == 0:
print("No items were entered.")
else:
average = total / item_count
print(f"Items : {item_count}")
print(f"Total : {total:.2f}")
print(f"Average : {average:.2f}")Enter item prices. Type 'done' to finish.
Price: 120
Added 120.00. Running total 120.00
Price: abc
'abc' is not a price. Try again.
Price: 85.5
Added 85.50. Running total 205.50
Price: done
Items : 2
Total : 205.50
Average : 102.75এই প্রোগ্রামে তিনটা জিনিস একসাথে কাজ করছে, আর তিনটাই আজকের শেখা:
break— ইউজারdoneলিখলে লুপ থেকে বেরিয়ে আসাcontinue— ফাঁকা লাইন পেলে বাকিটা এড়িয়ে সোজা আবার জিজ্ঞেস করা- অ্যাকিউমুলেটর —
totalআরitem_countদুটোই লুপের বাইরে শুরু, ভেতরে বাড়ছে
শেষ if item_count == 0 শর্তটা কেন দরকার, সেটা একবার ভেবে দেখুন। ইউজার কিছু না লিখেই সোজা done লিখলে item_count থাকবে 0, আর total / item_count তখন ZeroDivisionError দিয়ে প্রোগ্রাম ভেঙে দিত। লুপের পরে জমা মান ব্যবহার করার আগে "একবারও কিছু জমেছে কি" — এই প্রশ্নটা প্রতিবার করতে হয়।
কিছু ভাঙা অবস্থা ও তার সমাধান
প্রোগ্রাম থামছে না, লেখা ছুটছে Ctrl + C চাপুন। তারপর দেখুন লুপের ভেতরে শর্তটাকে এগিয়ে দেওয়ার লাইনটা আছে কি না, আর সেটা continue-এর আগে আছে কি না।
লুপ একবারও চলল না শর্তটা শুরুতেই মিথ্যা ছিল। শুরুর মান আর শর্তটা মিলিয়ে দেখুন — while count > 0 লিখে count = 0 দিয়ে শুরু করলে ভেতরে কখনো ঢোকা হবে না।
একবার বেশি বা একবার কম চলছে < আর <= গুলিয়ে গেছে। n = 1 থেকে শুরু করলে while n < 5 চলে চারবার (n যখন ১, ২, ৩, ৪), আর while n <= 5 চলে পাঁচবার। শুরুর মান বদলালে এই গোনাও বদলায় — n = 0 থেকে শুরু করলে while n < 5 চলে পাঁচবার। তাই শুরুর মান আর শর্ত সব সময় একসাথে মিলিয়ে দেখুন।
IndentationError: expected an indented block after 'while' statement while-এর পরের লাইনটা ভেতরে ঠেলা হয়নি।
NameError — লুপের পরে ভেরিয়েবলটা চেনা যাচ্ছে না ভেরিয়েবলটা শুধু লুপের ভেতরে তৈরি হয়েছে, আর লুপ একবারও না চললে সেটা কখনো তৈরিই হয়নি। যেসব ভেরিয়েবল লুপের পরে দরকার, সেগুলো লুপের আগেই একটা শুরুর মান দিয়ে রাখুন।
লুপ শেষে যোগফল ভুল আসছে অ্যাকিউমুলেটরটা লুপের ভেতরে শুরু করা হয়েছে কি না দেখুন। total = 0 লাইনটা লুপের বাইরে থাকতে হবে।
ধাপ ৪ / ৬ — অনুমান
যাচাই করুন
এই লুপটার পুরো আউটপুট কী?
count = 3
while count > 0:
print(count)
count = count - 1
print("Go")- A2 1 0 Go
- B3 2 1 0 Go
- C3 Go
- D3 2 1 Go
এই প্রোগ্রামটা কখনো থামে না। কী বাদ পড়েছে?
total = 0
number = 1
while number <= 5:
total = total + number
print(total)- A`while`-এর বদলে `if` লিখতে হবে
- Bলুপের ভেতরে `number = number + 1` নেই, তাই শর্তটা কখনো মিথ্যা হয় না
- Cশর্তে `<=`-এর বদলে `<` লিখলেই লুপটা থামবে
- D`total` লুপের ভেতরে শুরু করা হয়নি
continue থাকায় এই লুপটা কী প্রিন্ট করবে?
number = 0
while number < 5:
number = number + 1
if number == 3:
continue
print(number)- A1 2 4 5
- B1 2 3 4 5
- C1 2 4
- D1 2
উত্তর দিতে অ্যাকাউন্ট লাগবে
উত্তর মিলিয়ে দেখতে সাইন ইন করুন
প্রশ্নগুলো উপরে আছে, আর মাথায় মাথায় উত্তর ভেবে নেওয়াই আসল কাজ। সঠিক উত্তর, ব্যাখ্যা আর তিন ধাপের ইঙ্গিত দেখতে সাইন ইন করুন।
নিজে করুন
একটা সংখ্যা-অনুমানের খেলা লিখুন, guess.py:
- একটা গোপন সংখ্যা ঠিক করুন কোডে, ১ থেকে ১০০-এর মধ্যে
- ইউজারকে অনুমান করতে বলুন, আর প্রতিবার বলুন "বেশি" না "কম"
- ঠিক অনুমান হলে অভিনন্দন জানিয়ে বেরিয়ে আসুন
- মোট কতবার অনুমান করলেন, সেটাও প্রিন্ট করুন
- ইউজার সংখ্যা ছাড়া কিছু লিখলে প্রোগ্রাম ভাঙবে না — বার্তা দিয়ে আবার জিজ্ঞেস করবে
- সাতবার চেষ্টার পরেও না মিললে খেলা শেষ, আর গোপন সংখ্যাটা জানিয়ে দিন
ছয় নম্বর শর্তটা ভাবতে বাধ্য করবে: আপনার লুপটা এখন দুই কারণে থামতে পারে — ঠিক অনুমান, নয়তো চেষ্টা শেষ। দুটো প্রস্থানপথ কীভাবে সাজাবেন, সেটাই এই অনুশীলনের আসল প্রশ্ন। আর শেষে একবার নিজের কোড পড়ে দেখুন: while লুপটা এমন কোনো অবস্থায় পড়তে পারে যেখানে সে চিরকাল চলবে?
এই মিশনে আরও কিছু আছে
উপরে যা পড়েছেন সেটাই সম্পূর্ণ মিশন — কিছু কেটে রাখা হয়নি। প্রো এর সাথে যোগ করে:
- ভেতরে আসলে কী ঘটে — পাইথন কীভাবে এটা চালায়
- অনুশীলনীর সম্পূর্ণ সমাধান, ধাপে ধাপে ব্যাখ্যাসহ
- কঠিন অতিরিক্ত অনুশীলনী
- এই বিষয়ে ইন্টারভিউতে যা জিজ্ঞেস করা হয়, আর তার আদর্শ উত্তর
ধাপ ৬ / ৬
কঠিন করা — অধ্যায়ের কুইজ
সহজ থেকে কঠিন — দশটি প্রশ্ন, শেষেরগুলো ইচ্ছে করেই কঠিন।
সাইন ইন করে কুইজ দিন