முக்கிய உள்ளடக்கத்திற்குச் செல்லவும்
தொகுதி 2 · பாடம் 2 இன் 4பாடத்திட்டத்தில் 6/36~8 min
தொகுதி பாடங்கள் (2/4)

சுழல்கள் போது

நிலை உண்மையாக இருக்கும் வரை 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ஏற்றுகிறது…

2**n ஒரு மில்லியனைத் தாண்டிய சிறிய முழு எண்ணான `n >= 1` ஐக் கண்டறியவும். அதை `முடிவு` என ஒதுக்கி மதிப்பிடவும் (அது 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 முயற்சிகளுக்குப் பிறகு தீர்வு கிடைக்கும்