HomeCoursesPython
Chapter 6 of 14

লুপ

for loop, while loop, break, continue, range() & nested loops

for Loop

Python-এ for loop ব্যবহার করে কোনো sequence (list, string, range ইত্যাদি) এর প্রতিটি element-এর উপর একই কাজ বারবার করা যায়। এটি Python-এর সবচেয়ে বেশি ব্যবহৃত loop:

# list-এর উপর iterate
fruits = ["আম", "জাম", "লিচু", "কাঁঠাল"]
for fruit in fruits:
    print(fruit)
# Output:
# আম
# জাম
# লিচু
# কাঁঠাল

# string-এর প্রতিটি character
for ch in "Python":
    print(ch, end=" ")
# Output: P y t h o n

range() ফাংশন

range() নির্দিষ্ট সংখ্যক বার loop চালাতে ব্যবহৃত হয়। তিনটি রূপ আছে:

সিনট্যাক্সকাজউদাহরণOutput
range(stop)0 থেকে stop-1 পর্যন্তrange(5)0, 1, 2, 3, 4
range(start, stop)start থেকে stop-1 পর্যন্তrange(2, 7)2, 3, 4, 5, 6
range(start, stop, step)start থেকে step পরপরrange(0, 10, 2)0, 2, 4, 6, 8
range(start, stop, -step)উল্টোদিকেrange(5, 0, -1)5, 4, 3, 2, 1
# range() উদাহরণ
for i in range(5):
    print(i, end=" ")    # 0 1 2 3 4

print()
for i in range(1, 11):
    print(i, end=" ")    # 1 2 3 4 5 6 7 8 9 10

print()
# জোড় সংখ্যা
for i in range(2, 21, 2):
    print(i, end=" ")    # 2 4 6 8 10 12 14 16 18 20

print()
# উল্টো গণনা
for i in range(10, 0, -1):
    print(i, end=" ")    # 10 9 8 7 6 5 4 3 2 1

enumerate() — index সহ iterate

Loop-এ element-এর সাথে তার index-ও দরকার হলে enumerate() ব্যবহার করুন:

# enumerate — index ও value একসাথে
students = ["রহিম", "করিম", "জামাল", "কামাল"]

for index, name in enumerate(students):
    print(f"{index + 1}. {name}")
# Output:
# 1. রহিম
# 2. করিম
# 3. জামাল
# 4. কামাল

# start parameter দিয়ে index শুরুর মান
for i, name in enumerate(students, start=1):
    print(f"{i}. {name}")

while Loop

while loop condition True থাকা পর্যন্ত বারবার চলতে থাকে। কতবার চলবে আগে থেকে জানা না গেলে while ব্যবহার করা হয়:

# বেসিক while loop
count = 1
while count <= 5:
    print(f"গণনা: {count}")
    count += 1  # এটি না দিলে infinite loop হবে!
# Output:
# গণনা: 1
# গণনা: 2
# গণনা: 3
# গণনা: 4
# গণনা: 5

Counter Pattern ও User Input Loop

# ব্যবহারকারীর কাছ থেকে বারবার input নেওয়া
while True:
    command = input("কমান্ড দিন (exit দিলে বন্ধ): ")
    if command == "exit":
        print("বিদায়! 👋")
        break
    print(f"আপনি লিখেছেন: {command}")

# সংখ্যা অনুমান খেলা
import random
secret = random.randint(1, 100)
attempts = 0

while True:
    guess = int(input("অনুমান করুন (1-100): "))
    attempts += 1
    if guess < secret:
        print("আরো বড় সংখ্যা! ⬆️")
    elif guess > secret:
        print("আরো ছোট সংখ্যা! ⬇️")
    else:
        print(f"🎉 সঠিক! {attempts} বার চেষ্টায় পেয়েছেন!")
        break
বৈশিষ্ট্যfor Loopwhile Loop
কখন ব্যবহারকতবার চলবে আগে জানা থাকলেআগে জানা না থাকলে
Iterate করেSequence-এর উপরCondition-এর উপর
Infinite loopসাধারণত হয় নাসতর্ক না হলে হতে পারে
Counter দরকারনা (range ব্যবহার)হ্যাঁ, ম্যানুয়ালি বাড়াতে হয়
বেশি ব্যবহৃত✅ (Pythonic)নির্দিষ্ট ক্ষেত্রে

break ও continue

Loop-এর প্রবাহ নিয়ন্ত্রণ করতে দুটি বিশেষ keyword ব্যবহৃত হয়:

Keywordকাজব্যবহার
breakপুরো loop বন্ধ করে দেয়নির্দিষ্ট শর্তে loop থেকে বের হতে
continueবর্তমান iteration এড়িয়ে পরবর্তীতে যায়নির্দিষ্ট element skip করতে
passকিছুই করে না — placeholderখালি block রাখতে
# break — প্রথম ঋণাত্মক সংখ্যা পেলে থামো
numbers = [10, 25, -3, 40, -7, 50]
for num in numbers:
    if num < 0:
        print(f"ঋণাত্মক সংখ্যা পাওয়া গেছে: {num}")
        break
    print(f"প্রক্রিয়াকরণ: {num}")
# Output:
# প্রক্রিয়াকরণ: 10
# প্রক্রিয়াকরণ: 25
# ঋণাত্মক সংখ্যা পাওয়া গেছে: -3

# continue — ঋণাত্মক সংখ্যা skip করো
for num in numbers:
    if num < 0:
        continue  # skip করে পরবর্তী iteration-এ যায়
    print(f"ধনাত্মক: {num}")
# Output:
# ধনাত্মক: 10
# ধনাত্মক: 25
# ধনাত্মক: 40
# ধনাত্মক: 50

Nested Loops

একটি loop-এর ভিতরে আরেকটি loop-কে Nested Loop বলে। বাইরের loop-এর প্রতিটি iteration-এ ভিতরের loop পুরোটা চলে:

# নামতা (Multiplication Table)
for i in range(1, 6):
    for j in range(1, 11):
        print(f"{i}×{j}={i*j:2d}", end="  ")
    print()  # প্রতি সারীর পর নতুন লাইন

# Output:
# 1×1= 1  1×2= 2  1×3= 3  ...
# 2×1= 2  2×2= 4  2×3= 6  ...
# ...

তারকা প্যাটার্ন (Star Patterns)

# ত্রিভুজ প্যাটার্ন
n = 5
for i in range(1, n + 1):
    print("*" * i)
# Output:
# *
# **
# ***
# ****
# *****

# উল্টো ত্রিভুজ
for i in range(n, 0, -1):
    print("*" * i)

# পিরামিড
for i in range(1, n + 1):
    spaces = " " * (n - i)
    stars = "*" * (2 * i - 1)
    print(spaces + stars)
🔑 Nested Loop মনে রাখুন
  • বাইরের loop = সারি (row), ভিতরের loop = কলাম (column)
  • সময় জটিলতা: বাইরের n × ভিতরের m = O(n×m)
  • Nested loop-এ break শুধু ভিতরের loop বন্ধ করে, বাইরেরটা নয়
  • অতিরিক্ত nesting (3+ স্তর) এড়িয়ে চলুন — কোড জটিল হয়ে যায়

Loop-else

Python-এর একটি বিশেষ feature হলো loop-এর সাথে else ব্যবহার করা যায়। loop যদি break ছাড়া সম্পূর্ণ শেষ হয়, তাহলে else block চলে:

# break না হলে else চলে
numbers = [2, 4, 6, 8, 10]
for num in numbers:
    if num % 2 != 0:
        print(f"বিজোড় সংখ্যা পাওয়া গেছে: {num}")
        break
else:
    print("সব সংখ্যা জোড়! ✅")
# Output: সব সংখ্যা জোড়! ✅

# break হলে else চলে না
numbers = [2, 4, 5, 8, 10]
for num in numbers:
    if num % 2 != 0:
        print(f"বিজোড় সংখ্যা পাওয়া গেছে: {num}")
        break
else:
    print("সব সংখ্যা জোড়!")
# Output: বিজোড় সংখ্যা পাওয়া গেছে: 5

মৌলিক সংখ্যা পরীক্ষা — loop-else দিয়ে

# মৌলিক সংখ্যা পরীক্ষা (loop-else ব্যবহার)
num = 29
if num < 2:
    print(f"{num} মৌলিক নয়")
else:
    for i in range(2, int(num**0.5) + 1):
        if num % i == 0:
            print(f"{num} মৌলিক নয় (ভাজক: {i})")
            break
    else:
        print(f"{num} একটি মৌলিক সংখ্যা! ✅")
# Output: 29 একটি মৌলিক সংখ্যা! ✅
💡 মনে রাখার কৌশল — "FWBC"

Loop-এর চারটি মূল component: For (sequence iterate), While (condition-based), Break (বন্ধ করো), Continue (পরেরটায় যাও)। FWBC = "Fly With Big Confidence" — লুপ নিয়ে আত্মবিশ্বাসী হন!

ব্যবহারিক উদাহরণ

সংখ্যা প্যাটার্ন

# সংখ্যা ত্রিভুজ
for i in range(1, 6):
    for j in range(1, i + 1):
        print(j, end=" ")
    print()
# Output:
# 1
# 1 2
# 1 2 3
# 1 2 3 4
# 1 2 3 4 5

মৌলিক সংখ্যা খোঁজা

# 1 থেকে 50 পর্যন্ত মৌলিক সংখ্যা
print("মৌলিক সংখ্যা (1-50):")
for num in range(2, 51):
    for i in range(2, int(num**0.5) + 1):
        if num % i == 0:
            break
    else:
        print(num, end=" ")
# Output: 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47

যোগফল ক্যালকুলেটর

# ব্যবহারকারীর দেওয়া সংখ্যার যোগফল
total = 0
count = 0

print("সংখ্যা দিন (0 দিলে শেষ):")
while True:
    num = float(input("> "))
    if num == 0:
        break
    total += num
    count += 1

if count > 0:
    print(f"\nমোট {count}টি সংখ্যার যোগফল: {total}")
    print(f"গড়: {total/count:.2f}")
else:
    print("কোনো সংখ্যা দেওয়া হয়নি!")
🧠 Quick Check
এই অধ্যায়ের উপর ৫টি প্রশ্নের উত্তর দিন
Q1. range(2, 10, 3) কোন কোন সংখ্যা তৈরি করবে?
✅ সঠিক উত্তর: ক) 2, 5, 8range(2, 10, 3) মানে ২ থেকে শুরু, ৩ করে বাড়ো, ১০-এর আগে থামো। তাই: 2, 5, 8 (পরবর্তী 11 কিন্তু 10-এর বেশি তাই থামবে)।
Q2. breakcontinue এর মধ্যে মূল পার্থক্য কী?
✅ সঠিক উত্তর: ক) break পুরো loop বন্ধ করে, continue বর্তমান iteration skip করেbreak loop থেকে সম্পূর্ণ বের করে দেয়। continue শুধু বর্তমান iteration এড়িয়ে পরবর্তী iteration-এ চলে যায়। দুটোই for ও while উভয়তে কাজ করে।
Q3. Python-এ loop-else কখন else block execute হয়?
✅ সঠিক উত্তর: গ) loop সম্পূর্ণ শেষ হলে (break ছাড়া)। loop-else-এ else block তখনই চলে যখন loop স্বাভাবিকভাবে (break ছাড়া) সম্পূর্ণ হয়। break দিয়ে loop থামলে else চলবে না।
Q4. নিচের কোডে output কী হবে?
for i in range(3): print(i, end=" ")
✅ সঠিক উত্তর: খ) 0 1 2range(3) = range(0, 3) মানে ০ থেকে শুরু, ৩-এর আগে থামো। তাই 0, 1, 2 — মোট ৩টি সংখ্যা।
Q5. Nested loop-এ ভিতরের break কোন loop বন্ধ করে?
✅ সঠিক উত্তর: গ) শুধু ভিতরের loop। Nested loop-এ break শুধু সেই loop বন্ধ করে যেটির ভিতরে break আছে। বাইরের loop চলতে থাকে। দুটোই বন্ধ করতে হলে flag variable বা function return ব্যবহার করতে হবে।
← Previous: শর্তমূলক স্টেটমেন্ট Next: লিস্ট ও টাপল →