Aşağıdaki kod Python yasal olduğunu fark ettim. Sorum neden? Belirli bir nedeni var mı?
n = 5
while n != 0:
print n
n -= 1
else:
print "what the..."
after:.
Aşağıdaki kod Python yasal olduğunu fark ettim. Sorum neden? Belirli bir nedeni var mı?
n = 5
while n != 0:
print n
n -= 1
else:
print "what the..."
after:.
Yanıtlar:
Yan elsetümce yalnızca whiledurumunuz yanlış olduğunda yürütülür . Eğer varsa breakbir özel duruma neden olmadığını döngünün ya, bu yürütülmez.
Bunu düşünmenin bir yolu, koşulla ilgili bir if / else yapısı olarak:
if condition:
handle_true()
else:
handle_false()
döngü yapısına benzer:
while condition:
handle_true()
else:
# condition is false now, handle and go on with the rest of the program
handle_false()
Örnek olarak şunlar verilebilir:
while value < threshold:
if not process_acceptable_value(value):
# something went wrong, exit the loop; don't pass go, don't collect 200
break
value = update(value)
else:
# value >= threshold; pass go, collect 200
handle_threshold_reached()
while {} something haricinde olduğunu somethingeğer atlanır breakiçinde whiledöngü.
elseEğer bir try bloğu alt döngü koşulunu isabet veya düşme ile, normal olarak bir blok çıkarsanız bloğu icra edilir. O edilir değil sizi eğer idam breakveya returnbir bloğun dışında veya bir istisna. Sadece süre ve döngüler için değil, aynı zamanda blokları da dener.
Genellikle normalde bir döngüden erken çıkacağınız yerlerde bulursunuz ve döngünün ucundan kaçmak beklenmedik / olağandışı bir durumdur. Örneğin, bir değer arayan bir listede dolaşıyorsanız:
for value in values:
if value == 5:
print "Found it!"
break
else:
print "Nowhere to be found. :-("
found_it=FalseBir döngünün başına kaç kez koyduğumu bilmiyorum ve sonra found_itsonunda bir if kontrolü yapın
Yanıt olarak Is there a specific reason?, burada ilginç bir uygulama var: çoklu döngü seviyelerinin kırılması.
İşte böyle çalışır: dış döngü sonunda bir mola var, bu yüzden sadece bir kez yürütülür. Ancak, iç döngü tamamlanırsa (bölen bulunmazsa), başka ifadeye ulaşır ve dış kopmaya asla ulaşılmaz. Bu şekilde, iç döngüdeki bir kopukluk, bir döngüden ziyade her iki döngüden de kopar.
for k in [2, 3, 5, 7, 11, 13, 17, 25]:
for m in range(2, 10):
if k == m:
continue
print 'trying %s %% %s' % (k, m)
if k % m == 0:
print 'found a divisor: %d %% %d; breaking out of loop' % (k, m)
break
else:
continue
print 'breaking another level of loop'
break
else:
print 'no divisor could be found!'
Her ikisi için whileve fordöngüler, elsesürece açıklamada, sonunda yürütülür breakkullanıldı.
Çoğu durumda bunu yapmanın daha iyi yolları vardır (bir işleve sarmak veya bir istisna oluşturmak), ancak bu işe yarar!
Else-yan tümcesi while-koşulu false olarak değerlendirildiğinde çalıştırılır.
Gönderen belgeler :
While ifadesi, bir ifade doğru olduğu sürece tekrarlanan yürütme için kullanılır:
while_stmt ::= "while" expression ":" suite ["else" ":" suite]Bu, ifadeyi tekrar tekrar test eder ve eğer doğruysa, birinci takımı yürütür; ifade yanlışsa (ilk test edildiğinde olabilir)
else, varsa cümlenin paketi yürütülür ve döngü sona erer.
breakİlk süitte yürütülen bir deyim,elseyan tümce süiti yürütülmeden döngüyü sonlandırır .continueİlk süitte yürütülen bir ifade, süitin geri kalanını atlar ve ifadeyi test etmeye geri döner.
Cevabım, başka / ne zaman kullanabileceğimize odaklanacaktır.
İlk bakışta, kullanırken farklı bir şey yok gibi görünüyor
while CONDITION:
EXPRESSIONS
print 'ELSE'
print 'The next statement'
ve
while CONDITION:
EXPRESSIONS
else:
print 'ELSE'
print 'The next statement'
Çünkü print 'ELSE'ifade her iki durumda da (her ikisi de whiledöngü bittiğinde ya da çalışmadığında) her zaman yürütülmüş gibi görünür .
Daha sonra, yalnızca print 'ELSE'ifade yürütülmeyeceği zaman farklıdır . Bir olduğu bir zamanda verilmiş bulunuyor breakkod bloğu altındakiler içeridewhile
In [17]: i = 0
In [18]: while i < 5:
print i
if i == 2:
break
i = i +1
else:
print 'ELSE'
print 'The next statement'
....:
0
1
2
The next statement
Farklıysa:
In [19]: i = 0
In [20]: while i < 5:
print i
if i == 2:
break
i = i +1
print 'ELSE'
print 'The next statement'
....:
0
1
2
ELSE
The next statement
return bu kategoride değildir, çünkü yukarıdaki iki durum için aynı etkiyi yapar.
istisna zamması da fark yaratmaz, çünkü bir sonraki kodun çalıştırılacağı yerde istisna işleyicide (blok hariç), elseyan tümcedeki veya yan tümcesinden hemen sonra kod whileyürütülmez.
Bunun eski bir soru olduğunu biliyorum ama ...
Raymond Hettinger'in dediği gibi, bunun while/no_breakyerine çağrılmalıdır while/else.
Bu snippet'e bakarsanız, anlaşılmayı kolay buluyorum.
n = 5
while n > 0:
print n
n -= 1
if n == 2:
break
if n == 0:
print n
While while döngüsünden sonra durumu kontrol etmek yerine onu değiştirebilir elseve bu kontrolden kurtulabiliriz.
n = 5
while n > 0:
print n
n -= 1
if n == 2:
break
else: # read it as "no_break"
print n
Her zaman while/no_breakkodu anlamak için okudum ve sözdizimi benim için çok daha mantıklı.
Else yan tümcesi yalnızca while koşulu yanlış olduğunda çalıştırılır .
İşte bazı örnekler:
Örnek 1: Başlangıçta koşul yanlıştır, bu nedenle else-cümlesi yürütülür.
i = 99999999
while i < 5:
print(i)
i += 1
else:
print('this')
ÇIKTI:
this
Örnek 2: while-koşul i < 5 nedeniyle yanlış olamadı i == 3döngü, bu nedenle araları başka fıkra infaz edilmedi.
i = 0
while i < 5:
print(i)
if i == 3:
break
i += 1
else:
print('this')
ÇIKTI:
0
1
2
3
Örnek 3: while-koşul i < 5 zaman yanlış oldu ioldu 5, bu yüzden başka fıkra infaz edildi.
i = 0
while i < 5:
print(i)
i += 1
else:
print('this')
ÇIKTI:
0
1
2
3
4
this
else:Deyim while döngüsü artık koşulunu karşılayan sadece (sizin örnekte, ne zaman ve ne zaman çalıştırılır n != 0yanlıştır).
Yani çıktı şu olurdu:
5
4
3
2
1
what the...
While döngüsü kırılmadıysa, başka yürütülür.
Bunu bir 'koşucu' metaforu ile düşünmeyi seviyorum.
"Başka", parkurun başında mı yoksa sonunda mı başladığınızla ilgili olmayan bitiş çizgisini geçmek gibidir. "Başka" okunur değil sen arasında bir yerde bölerseniz idam.
runner_at = 0 # or 10 makes no difference, if unlucky_sector is not 0-10
unlucky_sector = 6
while runner_at < 10:
print("Runner at: ", runner_at)
if runner_at == unlucky_sector:
print("Runner fell and broke his foot. Will not reach finish.")
break
runner_at += 1
else:
print("Runner has finished the race!") # Not executed if runner broke his foot.
Ana kullanım örnekleri, bu iç içe döngülerden ayırmayı kullanmak veya yalnızca döngü bir yerde kırılmadıysa bazı ifadeleri çalıştırmak istiyorsanız (kırılmanın olağandışı bir durum olduğunu düşünün).
Örneğin, değişkenler kullanmadan veya try / catch yapmadan bir iç döngüden nasıl çıkılacağı konusunda bir mekanizma aşağıdadır:
for i in [1,2,3]:
for j in ['a', 'unlucky', 'c']:
print(i, j)
if j == 'unlucky':
break
else:
continue # Only executed if inner loop didn't break.
break # This is only reached if inner loop 'breaked' out since continue didn't run.
print("Finished")
# 1 a
# 1 b
# Finished
Python'da 'while: else:' yapısının daha iyi kullanılması, 'while' içinde hiçbir döngü yürütülmezse, 'else' deyimi yürütülürse kullanılmalıdır. Bugün çalışma şekli mantıklı değil çünkü aşağıdaki kodu aynı sonuçlarla kullanabilirsiniz ...
n = 5
while n != 0:
print n
n -= 1
print "what the..."
elsedöngüden breakveya returnanahtar kelimeden ayrılırsanız bloğun yürütülmeyeceğidir . Örnekte, printdöngü üzerinde sona ermişse de çalıştırılacaktır breakkomuta.
Sosyal etkileşim için yararlıdır.
while (Date != "January 1st"):
time.sleep(1)
else:
print("Happy new year!")
elsenedir? Kod onsuz tam olarak aynı şeyi yapar.
breakgeri sayım sırasında saat ve takvim kullanmıyorsanız else, "Mutlu yıllar!" anında hiçbir anlam ifade etmiyor.
break" ile ne demek istiyorsun ? Kodda yok break.
elsebu kullanım için kelime seçiminin oldukça kötü bir fikir olduğunu ve bunların daha fazlasını yapmayacaklarını söylediğine inanıyorum.