Hot Post

6/recent/ticker-posts

Header Ads Widget

Python শেখার সিরিজ — পর্ব ৫ / ২০ (Loops — for ও while)

🐍 Python শেখার সিরিজ — পর্ব ৫ / ২০
python learning serise

Loops — for ও while
একই কাজ বারবার করানোর সহজ পদ্ধতি — for, while, range(), break, continue, pass এবং Nested Loop সহ বাস্তব প্রজেক্ট
⏱ পড়তে সময় ~১৮ মিনিট 🎯 Beginner Friendly 🐍 Python 3.x

কল্পনা করো তোমাকে ১ থেকে ১০০ পর্যন্ত সংখ্যা প্রিন্ট করতে হবে। print(1), print(2)... এভাবে ১০০টি লাইন লেখা কি কখনও বুদ্ধিমানের কাজ? অবশ্যই না! এই ধরনের পুনরাবৃত্তিমূলক কাজের জন্যই Python-এ আছে Loop

🔁 Loop কী এবং কেন দরকার?

Loop হলো একটি কোড Block যা বারবার চলতে থাকে। প্রতিটি চক্রকে বলে Iteration

বাস্তব জীবনে Loop-এর উদাহরণ:

🔄 প্রতিদিন সকালে উঠে ব্রাশ করা — যতদিন বেঁচে আছি ততদিন।
🔄 একটি ক্লাসের ৫০ জন শিক্ষার্থীর রোল কল করা।
🔄 ATM-এ PIN ৩ বার চেষ্টার সুযোগ দেওয়া।

Loopকখন ব্যবহার করবেউদাহরণ
forকতবার চলবে আগে থেকে জানা থাকলে১ থেকে ১০০ পর্যন্ত প্রিন্ট
whileকতবার চলবে জানা নেই, শর্তের উপর নির্ভরসঠিক পাসওয়ার্ড না দেওয়া পর্যন্ত চাও
🔢 for Loop — নির্দিষ্টভাবে পুনরাবৃত্তি

for loop কোনো Sequence (যেমন List, String, range) এর প্রতিটি উপাদানের উপর একে একে কাজ করে।

for variable in sequence:
    প্রতিটি উপাদানে যা করবে
উদাহরণ ১ — List-এর উপর Loop
Python — for loop with List
fruits = ["আম", "কলা", "লিচু", "আনারস"]

for fruit in fruits:
    print(f"ফল: {fruit}")

print("সব ফল প্রিন্ট শেষ!")
✔ আউটপুট
ফল: আম
ফল: কলা
ফল: লিচু
ফল: আনারস
সব ফল প্রিন্ট শেষ!
উদাহরণ ২ — String-এর উপর Loop
Python — for loop with String
word = "Python"

for letter in word:
    print(letter, end=" ")

print()  # নতুন লাইনে যাও
print(f"'{word}'-এ মোট {len(word)} অক্ষর আছে।")
✔ আউটপুট
P y t h o n
'Python'-এ মোট 6 অক্ষর আছে।
উদাহরণ ৩ — সংখ্যার যোগফল বের করা
Python
numbers = [10, 25, 7, 42, 13]
total   = 0

for num in numbers:
    total += num    # total = total + num
    print(f"যোগ করলাম {num}, এখন total = {total}")

print(f"\nমোট যোগফল: {total}")
print(f"গড়: {total / len(numbers):.2f}")
✔ আউটপুট
যোগ করলাম 10, এখন total = 10
যোগ করলাম 25, এখন total = 35
যোগ করলাম 7, এখন total = 42
যোগ করলাম 42, এখন total = 84
যোগ করলাম 13, এখন total = 97

মোট যোগফল: 97
গড়: 19.40
📊 range() ফাংশন — সংখ্যার ক্রম তৈরি

range() ফাংশন একটি সংখ্যার ক্রম তৈরি করে। for loop-এর সাথে ব্যবহার করলে নির্দিষ্ট সংখ্যকবার loop চালানো যায়।

range(stop)                   # 0 থেকে stop-1 পর্যন্ত
range(start, stop)           # start থেকে stop-1 পর্যন্ত
range(start, stop, step)     # step-এ step-এ বাড়বে
range(5) 01234
range(2, 8) 234567
range(1, 10, 2) 13579
range(10, 0, -2) 108642
Python — range() ব্যবহার
# ১ থেকে ১০ পর্যন্ত
for i in range(1, 11):
    print(i, end=" ")
print()

# শুধু জোড় সংখ্যা (step = 2)
print("জোড়:", end=" ")
for i in range(2, 21, 2):
    print(i, end=" ")
print()

# উল্টোদিকে (countdown)
print("Countdown:", end=" ")
for i in range(10, 0, -1):
    print(i, end=" ")
print("🚀")

# range দিয়ে index ট্র্যাক করা
students = ["রাহিম", "করিম", "সালমা"]
for i in range(len(students)):
    print(f"রোল {i+1}: {students[i]}")
✔ আউটপুট
1 2 3 4 5 6 7 8 9 10
জোড়: 2 4 6 8 10 12 14 16 18 20
Countdown: 10 9 8 7 6 5 4 3 2 1 🚀
রোল 1: রাহিম
রোল 2: করিম
রোল 3: সালমা
enumerate() — index ও value একসাথে
Python — enumerate()
cities = ["ঢাকা", "চট্টগ্রাম", "সিলেট", "রাজশাহী"]

for index, city in enumerate(cities, start=1):
    print(f"{index}. {city}")
✔ আউটপুট
1. ঢাকা
2. চট্টগ্রাম
3. সিলেট
4. রাজশাহী

enumerate() ব্যবহার করলে আলাদাভাবে range(len(...)) লিখতে হয় না। এটি Python-এর বেশি Pythonic পদ্ধতি।

⏳ while Loop — শর্ত সত্য থাকা পর্যন্ত

while loop শর্ত True থাকা পর্যন্ত চলতে থাকে। শর্ত False হলে loop শেষ হয়।

while শর্ত:
    কাজ করো
    # শর্ত পরিবর্তন না হলে Infinite Loop হবে!
উদাহরণ ১ — ১ থেকে ৫ পর্যন্ত প্রিন্ট
Python — while loop
count = 1

while count <= 5:
    print(f"count = {count}")
    count += 1      # এই লাইন না থাকলে Infinite Loop!

print("Loop শেষ হয়েছে।")
✔ আউটপুট
count = 1
count = 2
count = 3
count = 4
count = 5
Loop শেষ হয়েছে।
⚠️

Infinite Loop সাবধান! while loop-এ শর্ত কখনও False না হলে প্রোগ্রাম চিরকাল চলতে থাকবে। সবসময় নিশ্চিত করো loop-এর ভেতরে কোনোভাবে শর্ত পরিবর্তন হচ্ছে। থামাতে চাইলে Ctrl + C চাপো।

উদাহরণ ২ — ব্যবহারকারীর Input যাচাই
Python — Input Validation
password = ""

while password != "python123":
    password = input("পাসওয়ার্ড দাও: ")
    if password != "python123":
        print("❌ ভুল পাসওয়ার্ড, আবার চেষ্টা করো।")

print("✅ সঠিক পাসওয়ার্ড! স্বাগতম।")
✔ আউটপুট
পাসওয়ার্ড দাও: hello
❌ ভুল পাসওয়ার্ড, আবার চেষ্টা করো।
পাসওয়ার্ড দাও: python123
✅ সঠিক পাসওয়ার্ড! স্বাগতম।
for বনাম while — কোনটি ব্যবহার করবে?
পরিস্থিতিব্যবহার করো
নির্দিষ্ট সংখ্যকবার (যেমন ১০০ বার)for
List বা String-এর প্রতিটি উপাদানেfor
শর্ত পূরণ না হওয়া পর্যন্তwhile
সঠিক input না পাওয়া পর্যন্ত চাওwhile
কতবার চলবে জানা নেইwhile
🎮 break, continue ও pass — Loop নিয়ন্ত্রণ
break

Loop সম্পূর্ণ থামিয়ে দেয়। Loop-এর বাইরে চলে যায়।

continue

বর্তমান iteration skip করে পরের iteration-এ যায়।

pass

কিছু করে না। Placeholder হিসেবে ব্যবহার হয়।

break — খুঁজে পেলেই থামো
Python — break
students = ["রাহিম", "করিম", "সালমা", "জামাল", "নাসরিন"]
target   = "সালমা"

for student in students:
    print(f"খুঁজছি: {student}")
    if student == target:
        print(f"✅ '{target}' পাওয়া গেছে! Loop থামছে।")
        break

# ১ থেকে ১০০ পর্যন্ত প্রথম ৭ দ্বারা বিভাজ্য সংখ্যা
for n in range(1, 101):
    if n % 7 == 0:
        print(f"প্রথম ৭-এর গুণিতক: {n}")
        break
✔ আউটপুট
খুঁজছি: রাহিম
খুঁজছি: করিম
খুঁজছি: সালমা
✅ 'সালমা' পাওয়া গেছে! Loop থামছে।
প্রথম ৭-এর গুণিতক: 7
continue — skip করো, থামো না
Python — continue
# বিজোড় সংখ্যা skip করে শুধু জোড় প্রিন্ট
print("জোড় সংখ্যা:", end=" ")
for n in range(1, 11):
    if n % 2 != 0:
        continue    # বিজোড় হলে skip
    print(n, end=" ")
print()

# ফাঁকা নাম বাদ দিয়ে প্রিন্ট
names = ["রাহিম", "", "করিম", "", "সালমা"]

for name in names:
    if name == "":
        continue    # ফাঁকা হলে skip
    print(f"নাম: {name}")
✔ আউটপুট
জোড় সংখ্যা: 2 4 6 8 10
নাম: রাহিম
নাম: করিম
নাম: সালমা
pass — এখন কিছু করব না

pass একটি placeholder। যখন Syntax-এর জন্য কোনো Statement দরকার কিন্তু এখনো কোড লেখোনি, তখন pass ব্যবহার করো।

Python — pass
for i in range(5):
    if i == 3:
        pass        # পরে এখানে কিছু যোগ করব
    print(i, end=" ")
print()
✔ আউটপুট
0 1 2 3 4
🔀 for...else ও while...else

Python-এ Loop-এর সাথে else ব্যবহার করা যায়। Loop সম্পূর্ণ শেষ হলে (break দিয়ে না থামলে) else block চলে।

Python — for...else (Prime Number Check)
n = int(input("একটি সংখ্যা দাও: "))

if n < 2:
    print("মৌলিক সংখ্যা নয়।")
else:
    for i in range(2, n):
        if n % i == 0:
            print(f"{n} মৌলিক নয় ({i} দ্বারা বিভাজ্য)।")
            break        # break দিলে else চলবে না
    else:
        print(f"✅ {n} একটি মৌলিক সংখ্যা।")  # break না হলেই চলবে
✔ আউটপুট (n = 17)
একটি সংখ্যা দাও: 17
✅ 17 একটি মৌলিক সংখ্যা।
✔ আউটপুট (n = 15)
একটি সংখ্যা দাও: 15
15 মৌলিক নয় (3 দ্বারা বিভাজ্য)।
💡

Loop-এর else তখনই চলে যখন loop break ছাড়া স্বাভাবিকভাবে শেষ হয়। এটি "খুঁজে পাওয়া গেছে কিনা" যাচাই করার দারুণ পদ্ধতি।

🔲 Nested Loop — Loop-এর ভেতরে Loop

একটি Loop-এর ভেতরে আরেকটি Loop রাখলে সেটি Nested Loop। বাইরের Loop একবার চললে ভেতরের Loop সম্পূর্ণ একবার শেষ করে।

উদাহরণ ১ — গুণনীয়ক সারণি (Multiplication Table)
Python — Multiplication Table
print("গুণনীয়ক সারণি (১ থেকে ৫)")
print("─" * 30)

for i in range(1, 6):
    for j in range(1, 6):
        print(f"{i*j:4}", end="")  # 4 character wide
    print()  # প্রতিটি সারির পর নতুন লাইন
✔ আউটপুট
গুণনীয়ক সারণি (১ থেকে ৫)
──────────────────────────────
   1   2   3   4   5
   2   4   6   8  10
   3   6   9  12  15
   4   8  12  16  20
   5  10  15  20  25
উদাহরণ ২ — Star Pattern
Python — Star Patterns
# ডানদিকে বড় হওয়া ত্রিভুজ
for i in range(1, 6):
    print("★ " * i)

print()

# বাম-ডান সিমেট্রিক ত্রিভুজ
n = 5
for i in range(1, n + 1):
    print(" " * (n - i) + "★ " * i)
✔ আউটপুট
★
★ ★
★ ★ ★
★ ★ ★ ★
★ ★ ★ ★ ★

        ★
      ★ ★
    ★ ★ ★
  ★ ★ ★ ★
★ ★ ★ ★ ★
🎮 প্র্যাকটিক্যাল প্রজেক্ট — Number Guessing Game

এই পর্বের সব Loop ধারণা ব্যবহার করে একটি সম্পূর্ণ Number Guessing Game বানাই। প্রোগ্রাম একটি সংখ্যা মনে রাখবে, তুমি অনুমান করবে — সংখ্যাটি বের করার জন্য।

💻 প্রজেক্ট: Number Guessing Game

১ থেকে ১০০-এর মধ্যে একটি সংখ্যা মনে রাখা আছে। তোমাকে সর্বোচ্চ ৭ বারের মধ্যে অনুমান করতে হবে। প্রতিটি ভুল অনুমানে "বেশি" বা "কম" hint দেওয়া হবে।

Python — number_guessing_game.py
import random

# সিক্রেট সংখ্যা তৈরি
secret    = random.randint(1, 100)
max_try   = 7
attempts  = 0
won       = False

print("╔══════════════════════════════╗")
print("║   Number Guessing Game 🎮    ║")
print("╚══════════════════════════════╝")
print(f"১ থেকে ১০০-এর মধ্যে একটি সংখ্যা ভাবা আছে।")
print(f"তোমার সুযোগ: {max_try} বার\n")

while attempts < max_try:
    baki  = max_try - attempts
    guess = int(input(f"অনুমান করো ({baki} সুযোগ বাকি): "))
    attempts += 1

    if guess == secret:
        print(f"\n🎉 অভিনন্দন! {attempts} বারে সংখ্যাটি বের করেছ!")
        won = True
        break
    elif guess < secret:
        print("📈 আরও বেশি!")
    else:
        print("📉 আরও কম!")

if not won:
    print(f"\n😔 সুযোগ শেষ! সংখ্যাটি ছিল: {secret}")

# স্কোর হিসাব
if won:
    score = (max_try - attempts + 1) * 10
    print(f"তোমার স্কোর: {score}/70")
✔ নমুনা আউটপুট
╔══════════════════════════════╗
║   Number Guessing Game 🎮    ║
╚══════════════════════════════╝
১ থেকে ১০০-এর মধ্যে একটি সংখ্যা ভাবা আছে।
তোমার সুযোগ: 7 বার

অনুমান করো (7 সুযোগ বাকি): 50
📈 আরও বেশি!
অনুমান করো (6 সুযোগ বাকি): 75
📉 আরও কম!
অনুমান করো (5 সুযোগ বাকি): 63
📈 আরও বেশি!
অনুমান করো (4 সুযোগ বাকি): 69
🎉 অভিনন্দন! 4 বারে সংখ্যাটি বের করেছ!
তোমার স্কোর: 40/70
💡

এই প্রজেক্টে while loop, break, if/elif/else, Assignment Operators এবং random module — এক সাথে ব্যবহার হয়েছে। random module পর্ব ১২-তে বিস্তারিত শিখব।

📚 এই পর্বে আমরা যা শিখলাম
  • Loop কী এবং কখন কোনটি ব্যবহার করতে হয়
  • for loop — List, String ও range-এর উপর
  • range(stop), range(start, stop), range(start, stop, step)
  • enumerate() — index ও value একসাথে
  • while loop — শর্ত সত্য থাকা পর্যন্ত
  • Infinite Loop এর বিপদ ও সাবধানতা
  • break — loop থামিয়ে দেয়
  • continue — বর্তমান iteration skip করে
  • pass — placeholder, কিছু করে না
  • for...else ও while...else
  • Nested Loop — গুণনীয়ক সারণি ও star pattern
  • Number Guessing Game প্রজেক্ট
🏋️ নিজে চেষ্টা করো
  1. FizzBuzz: ১ থেকে ৫০ পর্যন্ত — ৩-এর গুণিতক হলে "Fizz", ৫-এর গুণিতক হলে "Buzz", উভয়ের গুণিতক হলে "FizzBuzz", বাকিগুলো সংখ্যা প্রিন্ট করো
  2. Factorial: একটি সংখ্যার Factorial বের করো। যেমন ৫! = ৫×৪×৩×২×১ = ১২০
  3. Fibonacci: প্রথম ১৫টি Fibonacci সংখ্যা প্রিন্ট করো (০, ১, ১, ২, ৩, ৫, ৮...)
  4. Number Pattern: নিচের প্যাটার্ন তৈরি করো:
      1
      1 2
      1 2 3
      1 2 3 4
      1 2 3 4 5
  5. ATM আপগ্রেড: পর্ব ৪-এর ATM-এ while loop যোগ করো — ৩ বারের বেশি ভুল PIN দিলে "Card Blocked" দেখাও
⏭️ পরের পর্বে কী থাকছে? — পর্ব ৬: Functions
  • Function কী এবং কেন ব্যবহার করব
  • def দিয়ে নিজের Function তৈরি করা
  • Parameters ও Arguments — ডেটা পাঠানো
  • return Statement — ফলাফল ফেরত দেওয়া
  • Default ও Keyword Arguments
  • *args ও **kwargs

Post a Comment

0 Comments