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 else
tümce yalnızca while
durumunuz yanlış olduğunda yürütülür . Eğer varsa break
bir ö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 something
eğer atlanır break
içinde while
döngü.
else
Eğ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 break
veya return
bir 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=False
Bir döngünün başına kaç kez koyduğumu bilmiyorum ve sonra found_it
sonunda 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 while
ve for
döngüler, else
sürece açıklamada, sonunda yürütülür break
kullanı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,else
yan 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 while
dö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 break
kod 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ç), else
yan tümcedeki veya yan tümcesinden hemen sonra kod while
yürütülmez.
Bunun eski bir soru olduğunu biliyorum ama ...
Raymond Hettinger'in dediği gibi, bunun while/no_break
yerine ç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 else
ve 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_break
kodu 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 == 3
dö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 i
oldu 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 != 0
yanlış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..."
else
döngüden break
veya return
anahtar kelimeden ayrılırsanız bloğun yürütülmeyeceğidir . Örnekte, print
döngü üzerinde sona ermişse de çalıştırılacaktır break
komuta.
Sosyal etkileşim için yararlıdır.
while (Date != "January 1st"):
time.sleep(1)
else:
print("Happy new year!")
else
nedir? Kod onsuz tam olarak aynı şeyi yapar.
break
geri 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
.
else
bu 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.