Lesson 6
Döngü sırasında
1. Döngü sırasında
while
döngü defalarca eylemlerin sırasını tekrarlar bazı koşul olarak değerlendirilirse kadar False
. Durum, döngü gövdesinden önce verilir ve döngü gövdesinin her çalıştırılmasından önce kontrol edilir. Tipik olarak, while
döngüsü kullanılan önceden döngü yineleme tam sayısını tespit etmek mümkün olduğu zaman.
En basit durumdaki while
döngüsünün sözdizimi şöyle görünür:
while some condition: a block of statements
Python öncelikle durumu kontrol eder. Yanlış ise, döngü sonlandırılır ve denetim while
döngü gövdesinden sonraki sonraki ifadeye geçirilir. Durum Doğru ise, döngü gövdesi yürütülür ve daha sonra koşul tekrar kontrol edilir. Bu durum Koşul Doğru iken devam eder. Durum yanlış hale geldiğinde, döngü sona erer ve kontrol, döngüden sonraki sonraki ifadeye geçirilir.
Örneğin, aşağıdaki program parçası, 1 ile 10 arasındaki tüm tam sayıların karelerini basar. Burada "while" döngüsü yerine for ... in range(...)
döngüsü for ... in range(...)
1234i = 1while i <= 10:print(i ** 2)i += 1
Bu örnekte, döngü içindeki i
değişkeni 1'den 10'a kadar yinelenir. Her yeni döngü yinelemesiyle değeri değişen bir değişkene sayaç denir. Bu parçayı çalıştırdıktan sonra, i
değişkeninin değeri tanımlanır ve 11
eşittir, çünkü i == 11
olduğunda i <= 10
durumu ilk defa False olur.
Burada başka bir örnektir kullanımı while
bir tamsayıdır basamak sayısını belirlemek için döngü n
:
123456n = int(input())length = 0while n > 0:n //= 10 # bu n = n // 10'a eşdeğerdirlength += 1print(length) # 4
Her yinelemede, sayının son rakamını 10 ( n //= 10
) ile tamsayı bölme kullanarak kestik. Değişken length
bunu kaç kez yaptığımızı sayıyoruz.
Python'da bu problemi çözmek için daha kolay, daha kolay bir yol var:
.
2. Döngü kontrol akışı: başka
Biri else:
bir else:
yazabilir else:
bir döngü gövdesinden sonra, döngüden sonra bir kez yürütülen ifade:
123456i = 1while i <= 10:print(i)i += 1else:print('Loop ended, i =', i)
İlk bakışta, bu ifade mantıklı görünmüyor, çünkü else:
deyim gövdesi sadece döngü sonundan sonra konabilir. Bir döngüden sonra "else" ifadesi, komut break
birlikte kullanıldığında yalnızca anlamlıdır. Döngü Python yorumlayıcısının yürütülmesi sırasında break
yaşanırsa, döngü yürütmeyi hemen durdurur ve buradan çıkar. Bu durumda, else:
şube yürütülür. Bu nedenle, herhangi bir yinelemenin ortasında döngü yürütmeyi iptal etmek için break
verilir.
İşte Black Jack benzeri bir örnek: sayıları okuyan ve toplamı 21'e eşit veya daha büyük olana kadar toplayan bir program. Tüm sıralamaların toplam toplamı olsa bile, programın durması için girdi sırası 0 ile biter. 21'den az.
Farklı girdilerde nasıl davrandığını görelim.
Sürüm 1. Durum kontrol edildikten sonra döngü normal olarak çıkarılır, böylece "else" dalı yürütülür.
12345678910total_sum = 0a = int(input())while a != 0:total_sum += aif total_sum >= 21:print('Total sum is', total_sum)breaka = int(input())else:print('Total sum is less than 21 and is equal to', total_sum, '.')
Sürüm 2. döngü tarafından iptal edilir break
yüzden "başka" dal atlanır.
12345678910total_sum = 0a = int(input())while a != 0:total_sum += aif total_sum >= 21:print('Total sum is', total_sum)breaka = int(input())else:print('Total sum is less than 21 and is equal to', total_sum, '.')
"Else" şubesi "for" döngüsü ile de kullanılabilir. Bir program 5 tam sayı okurken, ancak ilk negatif tam sayı karşılandığında sağa durduğunda örneğe bakalım.
Sürüm 1. Döngü normal olarak çıkar, bu yüzden "başka" şube yürütülür.
1234567for i in range(5):a = int(input())if a < 0:print('Met a negative number', a)breakelse:print('No negative numbers met')
Sürüm 2. Döngü durduruldu, bu nedenle "başka" şube yürütülür.
1234567for i in range(5):a = int(input())if a < 0:print('Met a negative number', a)breakelse:print('No negative numbers met')
3. Döngü kontrol akışı: devam
Döngü yürütmeyi kontrol etmek için kullanılan başka bir talimat continue
. Python yorumlayıcısı, döngü yinelemesinin ortasında bir yerde continue
, kalan tüm talimatları atlar ve sonraki yinelemeye geçer.
12345for num in range(2, 10):if num % 2 == 0:print("Found an even number", num)continueprint("Found a number", num)
break
ve continue
birkaç iç içe döngüler içine yerleştirilirse, sadece en içteki olanı etkileyebilirler. Bunu göstermek için oldukça aptalca bir örneğe bakalım:
123456for i in range(3):for j in range(5):if j > i:# sadece 2 numaralı hat için kırılıyorbreakprint(i, j)
Fikrinizi kullanmadan uygulayabiliyorsanız, talimatlar break
ve continue
ettirilir. İşte kötü kullanım tipik örneğidir break
: Bu kod bir tamsayı basamak sayısını sayar.
12345678n = int(input())length = 0while True:length += 1n //= 10if n == 0:breakprint('Length is', length)
Bu döngüyü anlamlı bir döngü koşul ile yeniden yazmak için daha temiz ve daha kolay okunabilir:
123456n = int(input())length = 0while n != 0:length += 1n //= 10print('Length is', length)
4. Çoklu atama
Python'da, birden fazla değişkenin değerini değiştirmek için tek bir atama ifadesi mümkündür. Bakalım:
1a, b = 0, 1
Yukarıdaki kodda gösterilen etki şu şekilde yazılabilir:
12a = 0b = 1
İki sürüm arasındaki fark, çoklu atamanın aynı anda iki değişkenin değerlerini değiştirmesidir.
İki değişkenin değerlerini değiştirmeniz gerektiğinde çoklu atama yararlıdır. Birden fazla atamayı desteklemeden eski programlama dillerinde bu yardımcı değişken kullanılarak yapılabilir:
1234567a = 1b = 2tmp = aa = bb = tmpprint(a, b)# 2 1
Python'da, aynı swap bir satırda yazılabilir:
12345a = 1b = 2a, b = b, aprint(a, b)# 2 1
"=" 'Nin sol tarafı, virgülle ayrılmış değişken adlarından oluşan bir listeye sahip olmalıdır. Sağ taraf, virgülle ayrılmış herhangi bir ifade olabilir. Sol taraf ve sağ taraftaki listeler eşit uzunlukta olmalıdır.