ماڈیول اسباق (2/4)
جبکہ loops
while لوپ بلاک کو اس وقت تک دہراتا ہے جب تک کہ حالت درست رہتی ہے۔ استعمال کریں۔
while جب آپ سامنے نہیں جانتے کہ آپ کو کتنی تکرار کی ضرورت ہوگی:
راؤنڈز کی تعداد اس چیز پر منحصر ہے جو لوپ کے اندر تبدیل ہوتی ہے۔
نحو
n = 1
while n < 1000:
n = n * 2
n # 1024انڈینٹڈ بلاک کو بار بار پھانسی دی جاتی ہے۔ ہر تکرار ازگر سے پہلے حالت کا اندازہ کرتا ہے: جیسے ہی یہ غلط ہو جاتا ہے، لوپ ختم ہو جاتا ہے اور بلاک کے بعد عملدرآمد جاری ہے۔
عام پیٹرن
دستی کاؤنٹر — دوسری زبانوں میں کلاسک for کے مساوی:
i = 0
while i < 5:
print(i)
i = i + 1انفینیٹ لوپ + انٹرنل ایگزٹ کنڈیشن — مفید جب کنڈیشن ہو۔ کچھ کرنے کے بعد اندازہ لگایا گیا:
acc = 0
while True:
acc = acc + 1
if acc * acc > 100:
break
acc # 11 (11*11 = 121 is the first square > 100)break سب سے اندرونی لوپ سے فوراً باہر نکلتا ہے (ہم اسے اگلے میں دیکھیں گے
سبق)۔
کلاسک غلطی: لامحدود لوپ
اگر لوپ کے اندر حالت میں متغیر تبدیل نہیں ہوتا،
پروگرام کبھی ختم نہیں ہوتا۔ یہ while کے ساتھ نمبر ون بگ ہے:
n = 0
while n < 10:
print(n) # n is never modified → infinite loop!ہماری مشقوں میں ایک ایگزیکیوشن ٹائم آؤٹ ہوتا ہے، لہذا ایک لامحدود لوپ ناکام ہو جائے گا۔ براؤزر کو منجمد کرنے کے بجائے واضح پیغام کے ساتھ۔ لیکن پیداوار میں ایک لامحدود لوپ ایک سنگین بگ ہے۔
لامحدود لوپس کے خطرے اور ختم ہونے کے حالات
ایک while لوپ اس وقت تک عمل میں آتا ہے جب تک اس کی حالت درست ہونے کا اندازہ ہوتا ہے۔ اگر آپ حالت کو متاثر کرنے والے متغیرات کو اپ ڈیٹ کرنا بھول جاتے ہیں، تو آپ کا لوپ لامحدود طور پر چلے گا، رن ٹائم منجمد ہو جائے گا۔ ہمیشہ یقینی بنائیں کہ لوپ باڈی باہر نکلنے کی حالت کی طرف پیشرفت کرے۔
خود ہی آزمائیں۔
سب سے چھوٹا انٹیجر `n >= 1` تلاش کریں جیسے کہ 2**n ایک ملین سے زیادہ ہو۔ اسے 'نتیجہ' کے لیے تفویض کریں اور اس کا اندازہ کریں (یہ 20 ہونا چاہیے)۔
اشارہ دکھائیں۔
2**20 = 1,048,576 1,000,000 سے تجاوز کرنے والا پہلا ہے۔
3 کوششوں کے بعد حل دستیاب ہے۔
ورزش کا جائزہ لیں۔
`n = 1000` سے شروع ہو کر، عددی تقسیم (n // 2) کے ساتھ n کو نصف کریں جب تک کہ یہ 0 نہ ہو جائے۔ شمار کریں کہ یہ `قدموں` میں کتنی تکرار کرتا ہے۔ 'قدموں' کا اندازہ لگائیں۔
اشارہ دکھائیں۔
1000 → 500 → 250 → 125 → 62 → 31 → 15 → 7 → 3 → 1 → 0: دس مراحل۔
3 کوششوں کے بعد حل دستیاب ہے۔
اضافی چیلنج
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 کوششوں کے بعد حل دستیاب ہے۔