Python 3'te While Döngüleri Nasıl Oluşturulur
Giriş
Bilgisayar programları, görevleri otomatikleştirme ve tekrarlama konusunda harikadır, böylece bizim yapmamıza gerek kalmaz. Benzer görevleri tekrarlamanın bir yolu da döngüler (loops) kullanmaktır. Bu eğitimde Python'un while döngüsünü (while loop) ele alacağız.
Bir while
döngüsü, verilen bir Boolean koşuluna bağlı olarak kodun tekrarlı olarak çalıştırılmasını sağlar. While bloğundaki kod, while ifadesi True olarak değerlendirildiği sürece çalışır.
While
döngüsünü, tekrarlayan bir koşullu ifade (conditional statement) olarak düşünebilirsiniz. If
ifadesinden sonra program kodları çalıştırmaya devam eder, ancak while döngüsünde, koşul False olana kadar program while ifadesinin başına geri döner.
Belirli sayıda çalışan for döngülerinin (for loops) aksine, while döngüleri koşula bağlıdır; bu yüzden kodun kaç kez tekrar edeceğini bilmeniz gerekmez.
While Döngüsü (While Loop)
Python'da while
döngüleri aşağıdaki gibi yapılandırılır:
while [bir koşul doğru olduğunda]:
[bir şey yap]
Yapılmakta olan şey, değerlendirilen koşul artık doğru olmadığında çalışmayı bırakacaktır.
Küçük bir program oluşturarak while döngüsünün nasıl çalıştığını görelim. Bu programda, kullanıcıdan bir şifre girmesini isteyeceğiz. Bu döngü sırasında iki olası sonuç vardır:
- Şifre doğruysa, while döngüsü sona erer.
- Şifre doğru değilse, while döngüsü çalışmaya devam eder.
Bilgi: Bu örnek kodları takip etmek için, Python interaktif kabuğunu çalıştırarak python3
komutunu yerel sisteminizde çalıştırabilirsiniz. Sonrasında, örnekleri >>>
komut isteminin ardından kopyalayabilir, yapıştırabilir veya düzenleyebilirsiniz.
Tercih ettiğimiz bir metin düzenleyicide password.py
adında bir dosya oluşturacağız ve password değişkenini boş bir string olarak başlatacağız:
password.py
password = ' '
Boş string, while döngüsü içinde kullanıcıdan girdi almak için kullanılacaktır.
Şimdi while ifadesini ve koşulunu oluşturacağız:
password.py
password = ' '
while password != 'password':
Burada, while
ifadesi password
değişkeni ile takip ediliyor. Amacımız password değişkeninin string password
değerine eşit olup olmadığını kontrol etmektir (kullanıcı girdiğine bağlı olarak), ancak istediğiniz herhangi bir stringi de seçebilirsiniz.
Bu, eğer kullanıcı password
stringini girerse döngünün duracağı ve programın döngü dışındaki herhangi bir kodu çalıştırmaya devam edeceği anlamına gelir. Ancak, kullanıcının girdiği string password
stringine eşit değilse, döngü devam edecektir.
Şimdi while döngüsü içinde bir şeyler yapan kod bloğunu ekleyeceğiz:
password.py
password = ''
while password != 'password':
print('Şifre nedir?')
password = input()
while
döngüsü içinde, program bir şifre istemi için print ifadesi çalıştırır. Ardından, password değişkeni input()
fonksiyonu ile kullanıcının girdiği değere atanır.
Program, password değişkeninin password
stringine atanıp atanmadığını kontrol eder ve eğer öyleyse, while döngüsü sona erer. Bu durumda programa, bu durum gerçekleştiğinde çalıştırılacak başka bir satır kod ekleyelim:
password.py
password = ''
while password != 'password':
print('Şifre nedir?')
password = input()
print('Evet, şifre ' + password + '. Girebilirsiniz.')
Son print()
ifadesi, while döngüsünün dışındadır, bu yüzden kullanıcı şifreyi doğru girdiğinde, döngü dışında yer alan son print ifadesini görecektir.
Ancak kullanıcı şifreyi hiç girmezse, son print() ifadesine ulaşamaz ve sonsuz bir döngüde (infinite loop) kalır.
Bir sonsuz döngü, bir programın aynı döngü içinde sürekli çalıştığı ve asla çıkmadığı durumdur. Komut satırında sonsuz döngülerden çıkmak için CTRL + C
tuşlarına basabilirsiniz.
Programı kaydedin ve çalıştırın:
$ python password.py
Bir şifre girmeniz istenecek ve çeşitli olası girişlerle test edebilirsiniz. İşte programdan bir örnek çıktı:
Çıktı
Şifre nedir?
merhaba
Şifre nedir?
deniz
Şifre nedir?
PASSWORD
Şifre nedir?
password
Evet, şifre password. Girebilirsiniz.
Unutmayın ki, stringler büyük/küçük harfe duyarlıdır (case-sensitive) ancak kontrol etmeden önce stringi tüm küçük harf (örneğin) yapmak için bir string fonksiyonu kullanabilirsiniz.
While Döngüsü ile Örnek Program
While döngüsünün genel mantığını anladığımıza göre, while döngüsünü etkin bir şekilde kullanan bir komut satırı tahmin oyunu oluşturalım. Bu programın nasıl çalıştığını en iyi anlamak için koşullu ifadeler (conditional statements) ve veri tiplerini dönüştürme hakkında bilgi sahibi olmalısınız.
İlk olarak, tercih ettiğimiz bir metin düzenleyicide guess.py
adında bir dosya oluşturacağız. Kullanıcı için rastgele sayılar oluşturmak amacıyla, bir import ifadesi ile random
modülünü içe aktaracağız. Bu pakete aşina değilseniz, rastgele sayı üretme hakkında daha fazla bilgiye Python belgelerinden ulaşabilirsiniz.
guess.py
import random
Şimdi, number
değişkenine rastgele bir tamsayı atayacağız ve 1 ile 25 arasında (dahil) kalmasını sağlayacağız; bu, oyunun çok zor olmamasını ummamızı sağlar.
guess.py
import random
number = random.randint(1, 25)
Bu noktada, while döngümüze başlayabiliriz; önce bir değişkeni başlatıp ardından döngüyü oluşturacağız.
guess.py
import random
number = random.randint(1, 25)
number_of_guesses = 0
while number_of_guesses < 5:
print('1 ile 25 arasında bir sayı tahmin edin:')
guess = input()
guess = int(guess)
number_of_guesses = number_of_guesses + 1
if guess == number:
break
number_of_guesses
değişkenini 0 olarak başlattık, böylece döngümüzün her yinelemesinde (iteration) bu değeri artırarak sonsuz döngüye (infinite loop) girmememizi sağlıyoruz. Ardından, while
ifadesini ekleyerek number_of_guesses
değişkeninin toplamda 5 ile sınırlı olmasını sağladık. Beşinci tahminden sonra kullanıcı komut satırına dönecek, ancak şimdilik kullanıcı tam sayı dışında bir şey girerse bir hata alacak.
Döngü içerisinde, kullanıcıdan bir sayı girmesini istemek için bir print()
ifadesi ekledik, bunu input()
fonksiyonuyla aldık ve guess
değişkenine atadık. Ardından guess
değişkenini bir stringden tam sayıya (integer) dönüştürdük.
Döngü bitmeden önce number_of_guesses
değişkenini 1 artırmak istiyoruz ki döngüyü 5 kez tekrarlayabilelim.
Son olarak, kullanıcının yaptığı tahminin bilgisayarın ürettiği sayıya eşit olup olmadığını görmek için bir koşullu if ifadesi (conditional if statement) yazdık; eğer öyleyse, döngüden çıkmak için break
ifadesini kullanıyoruz.
Program tamamen işlevseldir ve aşağıdaki komutla çalıştırabiliriz:
$ python guess.py
Program çalışsa da, şu anda kullanıcı doğru tahminde bulunsa bile bunu öğrenemiyor ve doğru tahmin edip etmediğini bilmeden toplam 5 kez tahmin yapabiliyor. Programın mevcut çıktısı şu şekilde görünüyor:
Çıktı:
1 ile 25 arasında bir sayı tahmin edin:
11
1 ile 25 arasında bir sayı tahmin edin:
19
1 ile 25 arasında bir sayı tahmin edin:
22
1 ile 25 arasında bir sayı tahmin edin:
3
1 ile 25 arasında bir sayı tahmin edin:
8
Döngünün dışında bazı koşullu ifadeler (conditional statements) ekleyerek kullanıcının sayıyı doğru tahmin edip etmediğine dair bir geri bildirim almasını sağlayalım. Bu ifadeler, mevcut dosyamızın en sonuna eklenecektir.
guess.py
import random
number = random.randint(1, 25)
number_of_guesses = 0
while number_of_guesses < 5:
print('1 ile 25 arasında bir sayı tahmin edin:') # Guess a number between 1 and 25:
guess = input()
guess = int(guess)
number_of_guesses = number_of_guesses + 1
if guess == number:
break
if guess == number:
print('Sayiyi ' + str(number_of_guesses) + ' tahminde buldunuz!')
else:
print('Sayiyi tahmin edemediniz. Sayı ' + str(number) + ' idi.')
Bu noktada, program kullanıcıya sayıyı doğru tahmin edip etmediğini söyleyecektir, ancak bu, kullanıcı tahmin haklarını doldurana kadar bekleyebilir.
Kullanıcıya biraz yardımcı olmak için, while döngüsü içinde birkaç koşullu ifade daha ekleyelim. Bu ifadeler, kullanıcının tahmin ettiği sayının çok düşük mü yoksa çok yüksek mi olduğunu söyleyerek doğru sayıyı tahmin etme olasılığını artıracaktır. Bu ifadeleri if guess == number
satırının öncesine ekleyeceğiz.
guess.py
import random
number = random.randint(1, 25)
number_of_guesses = 0
while number_of_guesses < 5:
print('1 ile 25 arasında bir sayı tahmin edin:')
guess = input()
guess = int(guess)
number_of_guesses = number_of_guesses + 1
if guess < number:
print('Tahmininiz çok düşük')
if guess > number:
print('Tahmininiz çok yüksek')
if guess == number:
break
if guess == number:
print('Sayiyi ' + str(number_of_guesses) + ' tahminde buldunuz!')
else:
print('Sayiyi tahmin edemediniz. Sayı ' + str(number) + ' idi.')
Programı yeniden python guess.py
komutuyla çalıştırdığımızda, kullanıcı tahminlerinde daha fazla yönlendirme alacaktır. Örneğin, rastgele üretilen sayı 12 ise ve kullanıcı 18 tahmin ederse, tahmininin çok yüksek olduğu söylenecek ve bir sonraki tahminini buna göre ayarlayabilecektir.
Kodun daha da iyileştirilmesi mümkün, örneğin kullanıcı bir tam sayı girmediğinde hata işlemesi (error handling) yapılabilir. Ancak bu örnekte, kısa bir komut satırı programında while döngüsünün nasıl çalıştığını görüyoruz.
Sonuç
Bu eğitimde, Python'da while
döngülerinin (while loops) nasıl çalıştığını ve nasıl oluşturulacağını inceledik. While döngüleri, while ifadesinde ayarlanan koşul True olduğu sürece bir kod bloğu içinde döngüye devam eder.
Lisa Tagliaferri tarafından yazılan How To Construct While Loops in Python 3a Programming makalesinin düzenlenmiş çevirisi
Daha Fazla Oku:
- Sonraki Makale: Python for Döngüsü
- Önceki Makale: Python 3'te Koşullu İfadeler Nasıl Yazılır