مرکزی مواد پر جائیں
ماڈیول 2 · سبق 2 از 4کورس میں 6/36~8 min
ماڈیول اسباق (2/4)

جبکہ loops

while لوپ بلاک کو اس وقت تک دہراتا ہے جب تک کہ حالت درست رہتی ہے۔ استعمال کریں۔ while جب آپ سامنے نہیں جانتے کہ آپ کو کتنی تکرار کی ضرورت ہوگی: راؤنڈز کی تعداد اس چیز پر منحصر ہے جو لوپ کے اندر تبدیل ہوتی ہے۔

نحو

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

انڈینٹڈ بلاک کو بار بار پھانسی دی جاتی ہے۔ ہر تکرار ازگر سے پہلے حالت کا اندازہ کرتا ہے: جیسے ہی یہ غلط ہو جاتا ہے، لوپ ختم ہو جاتا ہے اور بلاک کے بعد عملدرآمد جاری ہے۔

عام پیٹرن

دستی کاؤنٹر — دوسری زبانوں میں کلاسک 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!

ہماری مشقوں میں ایک ایگزیکیوشن ٹائم آؤٹ ہوتا ہے، لہذا ایک لامحدود لوپ ناکام ہو جائے گا۔ براؤزر کو منجمد کرنے کے بجائے واضح پیغام کے ساتھ۔ لیکن پیداوار میں ایک لامحدود لوپ ایک سنگین بگ ہے۔

لامحدود لوپس کے خطرے اور ختم ہونے کے حالات

ایک 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 کوششوں کے بعد حل دستیاب ہے۔