Döngüler
İlk kontrol yapımıza geçiyoruz. Normalde bilgisayar işleme ilk satırla başlar ve oradan aşağıya doğru diğer satırları işler. Kontrol yapıları, deyimlerin yürütüleceği sırayı değiştirir veya belirli bir deyimin çalıştırılıp çalıştırılmayacağına karar verir. While
kontrol yapısını kullanan bir programın kaynağına aşağıda bakalım:
a = 0 # İlk olarak, değişkenin başlangıç değerini 0 olarak ayarla.
while a < 10: # a değişkeninin değeri 10'dan küçük olduğu sürece aşağıdakileri yap:
a = a + 1 # a değişkeninin değerini her seferinde 1 artır: a = a + 1!
print(a) # a değişkeninin şuanki değerini yazdır.
# a değişkeninin değeri 9'a eşit olana kadar YİNELE!?
# NOT:
# a değişkeninin değeri her yinelemede veya her 'while' döngüsünde 1 artar.
# Ör. a = 1 sonra a = 2 sonra a = 3 vb. ta ki a = 9 olana kadar...
# kod, a'ya 1 ekler (şimdi a = 10), sonucu yazdırır ve ardından 'while' dönüsünden çıkarak tamamlanır.
# --
# While a < 10: |
# a = a + 1 |<--[ while döngü bloğu]
# print (a) |
# --
Ve işte son derece heyecan verici çıktı:
1
2
3
4
5
6
7
8
9
10
Peki program ne yapıyor? Önce a = 0
satırını görür ve a
‘yı sıfıra eşitler. Sonra while a<10:
satırını görür ve a’nın 10’dan küçük olup olmadığını (a < 10
) kontrol eder. Bilgisayar bu deyimi ilk kez gördüğünde a
sıfırdır, bu nedenle 10’dan azdır. Başka bir deyişle, ondan az olduğu sürece, bilgisayar sekmeli ifadeleri çalıştırır. Sonunda a’yı ona eşit hale getirir (tekrar tekrar bir ekleyerek) ve a < 10
ifadesi artık doğru değildir. Bu noktaya ulaşan program girintili satırları çalıştırmayı durdurur.
Her zaman while
ifade satırının sonuna iki nokta üst üste “:” koymayı unutmayın!
while
kullanımına başka bir örnek:
a = 1
s = 0
print('Toplama eklenecek Sayıları Girin.')
print('Çıkmak için 0 girin.')
while a != 0:
print('Geçerli Toplam:', s)
a = float(input('Sayı? '))
s = s + a
print('Toplam =', s)
Toplama eklenecek Sayıları Girin.
Çıkmak için 0 girin.
Geçerli Toplam: 0
Sayı? 200
Geçerli Toplam: 200.0
Sayı? -15.25
Geçerli Toplam: 184.75
Sayı? -151.85
Geçerli Toplam: 32.9
Sayı? 10.00
Geçerli Toplam: 42.9
Sayı? 0
Toplam = 42.9
print('Total Sum =', s)
deyiminin sadece son çalıştığına dikkat edin. while
deyimi yalnızca girintili satırları etkiler. !=
ifadesi eşit değildir anlamına gelir, bu nedenle while a != 0:
ifadesi sıfır olmadığı sürece aşağıdaki girintili deyimleri çalıştır anlamına gelir.
a
‘nın kayan nokta sayısı olduğunu ve tüm kayan nokta sayılarının doğru bir şekilde temsil edilemeyeceğine dikkat edin. Bu nedenle !=
ifadesini kullanmak bazen işe yaramayabilir. Bunu test etmek için etkileşimli modda 1.1 yazmayı deneyebilirsiniz.
Sonsuz döngüler veya Hiç Bitmeyen Döngü
Artık while döngülerimiz olduğuna göre, sonsuza kadar çalışan programlar yazabiliriz. Bunu yapmanın kolay bir yolu, aşağıdakine benzer bir program yazmaktır:
while 1 == 1:
print("Yardım edin, bir döngünün içindeyim.")
“==” işleci, işlecin iki tarafındaki ifadelerin eşitliğini test etmek için kullanılır, tıpkı “<” işlecinin daha önce “küçüktür” için kullanıldığı gibi (bir sonraki bölümdeki tüm karşılaştırma işleçlerinin tam bir listesine bakacağız).
Bu program evren yok olana kadar çalışır ve her döngüde “Yardım edin, bir döngünün içindeyim.” yazdırır. Çünkü 1 sonsuza kadar 1’e eşit olacaktır. Ya da bu döngüyü elle durdurabilirsiniz. Döngüyü durdurmanın yolu, Kontrol (veya Ctrl) ve C’ye (harf) aynı anda basmaktır. Bu programı öldürür. (Not: bazen Kontrol-C’den sonra enter tuşuna basmanız gerekir.) Bazı sistemlerde bu da işlemez, çalışan işlevi öldürmek gerekir — bu yüzden bu döngülerden kaçının!
Örnekler
Fibonacci dizisi
Fibonacci-method1.py
# Bu program Fibonacci dizisini hesaplar
a = 0
b = 1
count = 0
max_count = 20
while count < max_count:
count = count + 1
print(a, end=" ") # print işlevinin yeni bir satır oluşturmasını engelleyen end=" " argümanına dikkat edin.
old_a = a # a'yı değiştirdiğimiz için takip etmeliyiz.
a = b
b = old_a + b
print() # yeni bir satır bastırır
Çıktı:
0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181
print
işlevindeki ek end=" "
değişkeni nedeniyle çıktının tek bir satırda olduğunu unutmayın.
Fibonacci-method2.py
# Fibonacci dizisini hesaplamak için basitleştirilmiş ve daha hızlı yöntem
a = 0
b = 1
count = 0
max_count = 10
while count < max_count:
count = count + 1
print(a, b, end=" ") # end=" " argümanına dikkat edin
a = a + b
b = a + b
print() # yeni bir satır bastırır
Çıktı:
0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181
Fibonacci-method3.py
a = 0
b = 1
count = 0
maxcount = 20
#döngü başlatıldıktan sonra döngü içinde kalıyoruz
while count < maxcount:
count += 1
olda = a
a = a + b
b = olda
print(olda,end=" ")
print()
Çıktı:
0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181
Parola girin
Password.py
# Parola girilene kadar bekler. Parola girmeden çıkmak için Kontrol-C'yi kullanın
#While döngüsünün en az bir kez çalışması için parola girilmesi gerektiğini unutmayın.
password = str()
# != ifadesi eşit değildir anlamına gelir
while password != "unicorn":
password = input("Password: ")
print("Hoşgeldiniz")
Örnek çalıştırma:
Password: auo
Password: y22
Password: password
Password: open sesame
Password: unicorn
Hoşgeldiniz
Alıştırmalar
Kullanıcıdan kullanıcı adı ve parolası isteyen bir program yazın. Daha sonra “kilit” yazdıklarında, programın kilidini açmak için ad ve şifrelerini yazmalarını istesin.
Çözüm:
name = input("Kullanıcı adınız: ")
password = input("Şifreniz: ")
print("Bilgisayarı açmak için kilit yazın.")
command = None
input1 = None
input2 = None
while command != "kilit":
command = input("Komut nedir: ")
while input1 != name:
input1 = input("Kullanıcı adı: ")
while input2 != password:
input2 = input("Şifre: ")
print("Sisteme hoşgeldin!")
Programın sürekli çalışmasını istiyorsanız,tüm kodun etrafına bir while 1 == 1:
döngüsü eklemeniz yeterlidir. Bunu kodun üstüne eklediğinizde programın geri kalanını girintilemeniz gerekir, ancak endişelenmeyin, her satır için manuel olarak yapmanıza gerek yok! Girintili istediğiniz her şeyi seçin ve piton penceresinin üst çubuğundaki “Biçim” altındaki “Girinti” ye tıklayın.
Bunu programı yazmanın başka bir yolu da şu olabilir:
name = input('İsim belirleyin: ')
password = input('Şifre belirleyin: ')
while 1 == 1:
nameguess=""
passwordguess=""
key=""
while (nameguess != name) or (passwordguess != password):
nameguess = input('İsim? ')
passwordguess = input('Şifre? ')
print("Merhaba,", name, ". kilitlemek için kilit yazın.")
while key != "lock":
key = input("")
Döngü içerisindeki henüz görmediğimiz or
ifadesine dikkat edin (nameguess != name) or (passwordguess != password)
. Belki ne işe yaradığına dair bir fikriniz vardır?