মূল কন্টেন্টে যান
মডিউল 2 · 2-এর পাঠ 4কোর্সে 6/36~8 min
মডিউল পাঠ (2/4)

যখন loops

while লুপ একটি ব্লকের পুনরাবৃত্তি করে যতক্ষণ একটি শর্ত সত্য থাকে। ব্যবহার করুন while যখন আপনি জানেন না যে আপনার কতগুলি পুনরাবৃত্তির প্রয়োজন হবে: রাউন্ডের সংখ্যা এমন কিছুর উপর নির্ভর করে যা লুপের ভিতরে পরিবর্তিত হয়।

সিনট্যাক্স

Python
n = 1
while n < 1000:
    n = n * 2
n  # 1024

ইন্ডেন্টেড ব্লক বারবার কার্যকর করা হয়। প্রতিটি পুনরাবৃত্তি Python আগে শর্তটি মূল্যায়ন করে: যত তাড়াতাড়ি এটি মিথ্যা হয়ে যায়, লুপটি বন্ধ হয়ে যায় এবং ব্লক পরে মৃত্যুদন্ড অব্যাহত.

সাধারণ নিদর্শন

ম্যানুয়াল কাউন্টার — অন্যান্য ভাষায় ক্লাসিক for এর সমতুল্য:

Python
i = 0
while i < 5:
    print(i)
    i = i + 1

ইনফিনিট লুপ + অভ্যন্তরীণ প্রস্থান কন্ডিশন — উপযোগী যখন শর্ত থাকে কিছু করার পরে মূল্যায়ন করা হয়:

Python
acc = 0
while True:
    acc = acc + 1
    if acc * acc > 100:
        break
acc  # 11   (11*11 = 121 is the first square > 100)

break ভেতরের লুপ থেকে অবিলম্বে প্রস্থান করে (আমরা এটি পরবর্তীতে দেখতে পাব পাঠ)।

ক্লাসিক ভুল: অসীম লুপ

যদি অবস্থার ভেরিয়েবলটি লুপের ভিতরে পরিবর্তিত না হয়, তাহলে প্রোগ্রাম কখনই বন্ধ হয় না। এটি while এর সাথে এক নম্বর বাগ:

Python
n = 0
while n < 10:
    print(n)   # n is never modified → infinite loop!

আমাদের অনুশীলনে একটি কার্যকর করার সময়সীমা রয়েছে, তাই একটি অসীম লুপ ব্যর্থ হবে ব্রাউজার হিমায়িত করার পরিবর্তে একটি পরিষ্কার বার্তা সহ। কিন্তু উৎপাদনে একটি অসীম লুপ একটি গুরুতর বাগ।

অসীম loops ঝুঁকি এবং অবসান শর্ত

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

নিজে চেষ্টা করে দেখুন

ব্যায়াম#python.m2.l2.e1
প্রচেষ্টা: 0লোড হচ্ছে...

সবচেয়ে ছোট পূর্ণসংখ্যা `n >= 1` খুঁজুন যেমন 2**n এক মিলিয়ন ছাড়িয়ে গেছে। এটিকে 'ফলাফল' হিসাবে বরাদ্দ করুন এবং এটি মূল্যায়ন করুন (এটি 20 হওয়া উচিত)।

সম্পাদক লোড হচ্ছে...
ইঙ্গিত দেখান

2**20 = 1,048,576 হল প্রথম যা 1,000,000 অতিক্রম করে।

সমাধান 3 প্রচেষ্টার পরে উপলব্ধ

ব্যায়াম পর্যালোচনা করুন

ব্যায়াম#python.m2.l2.e2
প্রচেষ্টা: 0লোড হচ্ছে...

`n = 1000` থেকে শুরু করে, পূর্ণসংখ্যা বিভাজন (n // 2) সহ n অর্ধেক করুন যতক্ষণ না এটি 0 হয়ে যায়। 'পদক্ষেপে' কতগুলি পুনরাবৃত্তি লাগে তা গণনা করুন। 'পদক্ষেপ' মূল্যায়ন করুন।

সম্পাদক লোড হচ্ছে...
ইঙ্গিত দেখান

1000 → 500 → 250 → 125 → 62 → 31 → 15 → 7 → 3 → 1 → 0: দশটি ধাপ।

সমাধান 3 প্রচেষ্টার পরে উপলব্ধ

অতিরিক্ত চ্যালেঞ্জ

ব্যায়াম#python.m2.l2.e3
প্রচেষ্টা: 0লোড হচ্ছে...

Given the variable `n = 32`, write a `while` loop to count how many times you can divide `n` by 2 (using floor division `//`) before `n` becomes less than or equal to 1. Store the count in `divisions` and evaluate it.

সম্পাদক লোড হচ্ছে...
ইঙ্গিত দেখান

The while condition is n > 1. Inside the loop, divide n by 2 and increment divisions by 1.

সমাধান 3 প্রচেষ্টার পরে উপলব্ধ