Python’da İlk Adımlar – 2

Python’da İlk Adımlar serisine devam ediyoruz. Önceki derste Python ile tanışmış olduk. Bu yazıda koşul durumlarını ve döngüleri öğreneceğiz.

Koşul durumlarına daha önce verdiğim bir örnek ile başlayalım.

if: Eğer yazı bittiyse kahve yap.

if-else: Eğer yazı bittiyse kahve yap; yoksa yazıya devam et.

if-elif-else: Eğer yazı bittiyse kahve yap; eğer yazı bitmediyse ama yorulduysan hava al; yoksa yazıya devam et.

Yaş kontrolü yaparak kişinin sokağa çıkıp çıkamayacağını kontrol edelim. Bunun için kişiden yaş bilgisini isteyelim.

yas = input("Yaşınız: ")

#Bir değer girdikten sonra;

type(yas)

str

Karşı taraftan bir input aldığımızda bunu bize str veri tipinde veriyor. Bunu int veri tipine dönüştürelim.

yas = int(input("Yaşınız: "))
type(yas)

int
if yas >= 65:
    print("Sokağa çıkamazsınız.")

Kişiden yaş bilgisini istedik ve şunu dedik: Eğer (if) yaşınız (yas) 65’e eşit veya 65’ten büyük (>= 65) ise sokağa çıkamazsınız. Eğer yaş bilgisi 65 veya üstü girilirse ekrana ‘Sokağa çıkamazsınız.’ yazısı gelecek.

yas = int(input("Yaşınız: "))

if yas >= 65:
    print("Sokağa çıkamazsınız.")

#70 girelim.

Yaşınız: 70
Sokağa çıkamazsınız.

Şimdi sokağa çıkamayacaklara 20 yaş ve altını da ekleyelim.

if yas >= 65 or yas <= 20:
    print("Sokağa çıkamazsınız.")

Eğer (if) yaşınız (yas) 65’e eşit veya 65’ten büyük (>=65) veya (or) 20’ye eşit veya 20’den küçük (<=20) ise sokağa çıkamazsınız. Eğer yaş bilgisi 65 veya üstü veya 20 veya altı girilirse ekrana ‘Sokağa çıkamazsınız.’ yazısı gelecek.

yas = int(input("Yaşınız: "))

if yas >= 65 or yas <= 20:
    print("Sokağa çıkamazsınız.")

#19 girelim.

Yaşınız: 19
Sokağa çıkamazsınız.

Harika! Peki, şunu da ekleyelim: Eğer 20 ile 65 yaş arasında iseniz sokağa çıkabilirsiniz.

if yas >= 65 or yas <= 20:
    print("Sokağa çıkamazsınız.")
else:
    print("Sokağa çıkabilirsiniz.")

Özet: Eğer yukarıdaki şartlar sağlanmıyorsa ‘Sokağa çıkabilirsiniz.’ yazdır. else burada ilk koşul sağlanmadığında çalışacak bloktur.

yas = int(input("Yaşınız: "))

if yas >= 65 or yas <= 20:
    print("Sokağa çıkamazsınız.")
else:
    print("Sokağa çıkabilirsiniz.")

#30 girelim.

Yaşınız: 30
Sokağa çıkabilirsiniz.

Basit bir şekilde koşul durumlarını kontrol etmeyi öğrendik. Diyelim ki kullanıcı yaşını eksi koyarak girdi. Bu durumda program ekrana ne bastırır?

yas = int(input("Yaşınız: "))

if yas >= 65 or yas <= 20:
    print("Sokağa çıkamazsınız.")
else:
    print("Sokağa çıkabilirsiniz.")

#-30 girelim.

Yaşınız: -30
Sokağa çıkamazsınız.

Aslında yanlış bir şey yok. Girilen değer 20’den küçük olduğu için ekrana ‘Sokağa çıkamazsınız.’ gönderildi. Fakat eksi yaş mantıksızlığından dolayı bunu da kontrol etmemiz gerekiyor.

if yas >= 0:
    if yas >= 65 or yas <= 20:
        print("Sokağa çıkamazsınız.")
    else:
        print("Sokağa çıkabilirsiniz.")
else:
    print("Yaş eksi değer alamaz.")

Özet: Eğer (if) yaş (yas) 0 veya 0’dan büyük (>=0) ise daha önce yazdığımız koşulları kontrol et. Eğer yaş (yas) 0’dan küçük ise ki bu durumda else devreye giriyor, ‘Yaş eksi değer alamaz.’ uyarısı ver.

yas = int(input("Yaşınız: "))

if yas >= 0:
    if yas >= 65 or yas <= 20:
        print("Sokağa çıkamazsınız.")
    else:
        print("Sokağa çıkabilirsiniz.")
else:
    print("Yaş eksi değer alamaz.")

#-30 girelim.

Yaşınız: -30
Yaş eksi değer alamaz.

#30 girelim.

Yaşınız: 30
Sokağa çıkabilirsiniz.

Gelin bir başka uygulama ile pekiştirelim. Bu uygulamada kullanıcı adı ve şifresini kontrol edip kullanıcının giriş yapıp yapamayacağını kontrol edelim.

username = "admin" #veritabanındaki bilgi
password = "qwert" #veritabanındaki bilgi

kullaniciAdi = input("Kullanıcı Adı: ")
sifre = input("Şifre: ")

if kullaniciAdi == username and sifre == password:
    print("Hoş geldin,",kullaniciAdi)
elif kullaniciAdi != username or sifre != password:
    print("Yanlış Kullanıcı Adı ve/veya Şifre!")

Özet: Eğer (if) kullaniciAdi username’e eşit (==) ve (and) sifre password’e eşit (==) ise ekrana kullanıcı adı ile ‘Hoş geldin’ yazdır. (Bir diğer) eğer (elif) kullaniciAdi username’e eşit değil (!=) ise veya (or) sifre password’e eşit değil (!=) ise ekrana ‘Yanlış Kullanıcı Adı ve/veya Şifre!’ yazdır.

elif dediğimiz aslında if else’in kısaltmasıdır. Python’da kısaca elif yazabilirsiniz. elif’ler if koşulu sağlanmadığında devreye girecektir.

Buna bir de kullanıcının boş geçmemesini sağlayacak bir koşul girelim.

kullaniciAdi = input("Kullanıcı Adı: ")
sifre = input("Şifre: ")

if len(kullaniciAdi) == 0 or len(sifre) == 0:
    print("Kullanıcı Adı ve şifre boş geçilemez!")
else:
    if kullaniciAdi == username and sifre == password:
        print("Hoş geldin,",kullaniciAdi)
    elif kullaniciAdi != username or sifre != password:
        print("Yanlış Kullanıcı Adı ve/veya Şifre!")

#Boş geçelim.

Kullanıcı Adı: 
Şifre: 
Kullanıcı Adı ve şifre boş geçilemez!

Özet: Eğer (if) kullaniciAdi veya (or) sifre uzunluğu (len) sıfıra eşit (==0) ise ekrana ‘Kullanıcı Adı ve şifre boş geçilemez!’ yazdır. Bu koşul çalışmazsa (else’e git) daha önce yazılan rutin koşulu kontrol et.

Yaptığımız uygulamalarda program bir kere çalıştı ve bitti. Biz eğer bunların sürekli olarak çalışmasını istiyorsak devreye döngüleri sokuyoruz. Döngüler verilen koşula bağlı olarak sürekli olarak tekrar eden yapılardır.

İlk döngümüz for. for döngüsü ile daha önce gördüğümüz veri tiplerinin içinde dolaşabiliriz. Örneğin, elimizde bir liste olsun ve bu listenin tüm elemanlarını sırası ile yazdıralım.

liste = [1,2,3,4,5]

for i in liste:
    print("Eleman:",i)

Eleman: 1
Eleman: 2
Eleman: 3
Eleman: 4
Eleman: 5

Özet: i gibi bir değişken olsun. Bu değişkene başka bir isim de verebilirsiniz. Bu değişken kendini listenin her bir elemanına sırası ile eşitliyor ve verdiğimiz komut ile bu elemanı ekrana yazdırıyor.

Madem i değişkeni listenin içinde geziyor. O halde, gezinirken çift olan sayıları alsın ve ekrana yazdırmamıza yardımcı olsun.

for i in liste:
    if i % 2 == 0:
        print("Çift sayı:",i)

Çift sayı: 2
Çift sayı: 4

i değişkeni her bir sayıyı 2 sayısına böldü ve kalan 0 ise ki burada koşul belirttik, ekrana çift sayılar yazdırıldı. Peki, tek sayıları yazdırmak isteseydik ne yapabilirdik? Koşulun başına not koyardık. Bu 2 sayısına bölümünden kalan sıfır değilse anlamına gelirdi. Burada not’ı pekiştirmek için bu yolu seçtim.

for i in liste:
    if not (i % 2 == 0):
        print("Tek sayı:",i)

Tek sayı: 1
Tek sayı: 3
Tek sayı: 5

Bir diğer göreceğimiz döngü while. while döngüsü koşul True oldukça çalışacaktır ve bu döngünün bir yerde False olması gerekir; çünkü False olmazsa sonsuz döngü yapısı ile karşılaşırız. Örneğin, yeni bir yıla girerken geri sayım yapılır. 5,4,3,2,1 dedikten sonra döngüden çıkmak gerekir yoksa bu sayıma göre bir türlü yeni yıla giremeyiz: 0,-1,-2,-3,…

geriSayim = 5

while(geriSayim > 0):
    print(geriSayim)
    geriSayim -= 1

5
4
3
2
1

Özet: İçinde 5 olan bir geriSayim değişkeni yarattık. geriSayim değişkenindeki değer 0’dan büyük oldukça (geriSayim > 0) ekrana geriSayim değişkenini yazdırdık. Fakat geriSayim değişkenindeki değeri her döngüde 1 azaltmazsak bu sonsuza kadar gider. O nedenle, her döngüden sonra 1 azaltma işlemini (-= 1) gerçekleştirdik.

Uygulamalara geçmeden önce belli bir aralıkta sayı üreten range(), döngüyü sonlandıran break ve komutu çalıştırmadan döngünün başına gönderen continue ne demek bakalım.

for döngüsünde yer alan i değişkeni 0’dan 10’a kadar değer alsın.

for i in range(0,11,1):
    print(i)

0
1
2
3
4
5
6
7
8
9
10

range() fonksiyonunun aldığı üç parametre için range(opsiyonel(başlangıç-default 0), gerekli(bitiş), opsiyonel(adım-default 1)) diyebiliriz. Örneğin, yukarıdaki gibi range(0,11,1) yapmak ile range(11) yapmak arasında bir fark yoktur.

for i in range(11):
    print(i)

0
1
2
3
4
5
6
7
8
9
10

break ile bir döngüyü belli bir koşul altında sonlandırabiliriz.

for i in range(11):
    if i == 5:
        break
    print(i)

0
1
2
3
4

i değişkeni 0’dan 10’a kadar gidecekti fakat 5’e eşit olması durumunda döngüyü sonlandır dediğimiz için 4’ten sonra herhangi bir yazdırma işlemi gerçekleştirmedi.

continue ile de bir döngüyü belli bir koşul altında komutu çalıştırmadan başa almasını sağlayabiliriz.

for i in range(11):
    if i == 3 or i == 9:
        continue
    print(i)

0
1
2
4
5
6
7
8
10

i değişkeni 0’dan 10’a kadar gitti fakat bu değişkenin 3 veya 9’a eşit olması durumunda ekrana herhangi bir şey yazdırmamasını ve döngünün başına gidip bir sonraki değer ile devam etmesini sağladık.

Şimdi döngüleri kullanarak daha önce yaptığımız kullanıcı girişi uygulamasını tekrar yapalım. Kullanıcının 3 tane hakkı olsun ve her yanlış bilgi girişi yaptığında giriş hakkı 1 azalsın. Eğer haklarını bitirirse döngü sonlansın.

username = "admin" #veritabanındaki bilgi
password = "qwert" #veritabanındaki bilgi

girisHakki = 3

while True:
    
    if girisHakki == 0:
        print("Giriş hakkınız kalmadı.")
        break
    else:
        kullaniciAdi = input("Kullanıcı Adı: ")
        sifre = input("Şifre: ")
        if kullaniciAdi == username and sifre == password:
            print("Hoş geldin,",kullaniciAdi)
            break
        elif kullaniciAdi != username or sifre != password:
            print("Yanlış Kullanıcı Adı ve/veya Şifre!")
            girisHakki -= 1
            print("Kalan giriş hakkınız:",girisHakki)

#3 defa yanlış girelim.

Kullanıcı Adı: amdin
Şifre: qwert
Yanlış Kullanıcı Adı ve/veya Şifre!
Kalan giriş hakkınız: 2

Kullanıcı Adı: admin
Şifre: qwe
Yanlış Kullanıcı Adı ve/veya Şifre!
Kalan giriş hakkınız: 1

Kullanıcı Adı: a
Şifre: q
Yanlış Kullanıcı Adı ve/veya Şifre!
Kalan giriş hakkınız: 0
Giriş hakkınız kalmadı.

Öncelikle while döngüsü True oldukça çalışacaktır. Bunun için while True: yazılabilir. Kullanıcının giriş hakkı (girisHakki) 3 olarak tanımlandı. Eğer (if) girisHakki değişkeni 0 ise break ile döngüyü sonlandır. 0 değilse else’e geç ve diğer koşulları çalıştır. Eğer (if) kullaniciAdi ve (and) sifre sırası ile veritabanında yer alan username ve password’e eşit ise kullanıcıyı kullaniciAdi ile karşıla ve döngüyü break ile sonlandır. Eğer bu koşul sağlanmıyorsa diğer koşula (elif) geç. kullaniciAdi veya (or) sifre yanlış ise kullanıcıya bilgi ver ve girisHakki değişkenini 1 azalt (-=1). Ardından da kullanıcıya giriş hakkı bilgisini ver. Giriş hakkındaki azalma döngünün başına dönüldüğünde kontrol edilecektir. Giriş hakkı kalmazsa kullanıcıyı bilgilendir.

Şimdi de bir ATM uygulaması yapalım. ATM uygulamasında müşterinin 4 tane işlem seçeneği olsun: Bakiye Sorgulama, Para Yatırma, Para Çekme ve Çıkış. Müşteri bakiyesini 10 000 TL olarak tanımlayalım.

bakiye = 10000

print("""

Çıkış: q

Bakiye Sorgulama: 1

Para Yatırma: 2

Para Çekme: 3

""")

while True:
    
    islem = input("Bir işlem seçiniz: ")
    
    if islem == "q":
        print("İşlem sonlandırıldı.")
        break
    elif islem == "1":
        print("Bakiyeniz {} TL'dir.".format(bakiye))
    elif islem == "2":
        yatirilacakMiktar = int(input("Yatırılacak miktarı giriniz: "))
        bakiye += yatirilacakMiktar
        print("Yeni bakiyeniz {} TL'dir.".format(bakiye))
    elif islem == "3":
        cekilecekMiktar = int(input("Çekilecek miktarı giriniz: "))
        if bakiye < cekilecekMiktar:
            print("Yetersiz bakiye! Bakiyeniz {} TL'dir.".format(bakiye))
            continue
        bakiye -= cekilecekMiktar
        print("Yeni bakiyeniz {} TL'dir.".format(bakiye))
    else:
        print("Geçersiz işlem!")

#Bakiye öğrenelim, 20 000 TL yatıralım, 35 000 TL çekelim sonra 30 000 TL çekelim, çıkış yapalım.

Bir işlem seçiniz: 1
Bakiyeniz 10000 TL'dir.

Bir işlem seçiniz: 2
Yatırılacak miktarı giriniz: 20000
Yeni bakiyeniz 30000 TL'dir.

Bir işlem seçiniz: 3
Çekilecek miktarı giriniz: 35000
Yetersiz bakiye! Bakiyeniz 30000 TL'dir.

Bir işlem seçiniz: 3
Çekilecek miktarı giriniz: 30000
Yeni bakiyeniz 0 TL'dir.

Bir işlem seçiniz: q
İşlem sonlandırıldı.

Artık True’nun, döngüyü False içermedikçe çalıştıracağını biliyoruz. Şu işlemleri yaptırdık: Her defasında müşteriden bir işlem türü girmesini isteyecek. Eğer müşteri q’ya basarsa işlemin sonlandırıldığına dair bir bilgi verecek ve döngüyü break ile sonlandıracak. Eğer 1 girerse bakiye bilgisini verecek. Eğer 2 girerse yatırılacak miktar bilgisi alacak ve bunu bakiyeye ekleyecek (+=yatirilacakMiktar). Eğer 3 girerse çekilecek miktar bilgisini alacak ve bunu bakiyeden düşecek (-=cekilecekMiktar). Fakat burada daha önce bahsettiğim continue’yu da gördük. Eğer müşterinin girmiş olduğu miktar bakiyeden fazla ise program müşteriye yetersiz bakiye olduğu bilgisini verecek ve continue ile döngünün başına atacak. Fakat miktar bakiyeyi aşmıyorsa işlemi gerçekleştirecek. q,1,2,3 dışında bir işlem girerse de son blok else’te geçersiz işlem olduğuna dair bilgi verilecek.

Son bir uygulama ile yazımızı bitirelim. Armstrong sayısını duydunuz mu hiç? Bir sayının basamağında yer alan tüm rakamların, basamağın uzunluğu kadar değerde kuvvetini alıyorsunuz ve bu sayıları topluyorsunuz. Eğer çıkan değer sayıya eşit ise buna Armstrong sayısı diyoruz. Örneğin, 1634. Basamağında yer alan tüm rakamların, sayının uzunluğu 4 olduğu için 4. kuvvetini almamız gerekiyor. Ardından da bunları topluyoruz.

1**4 + 6**4 + 3**4 + 4**4 == 1634

True

Sonucu True verdi. Yani, sonuç sayının kendisine eşittir. Bu da bir Armstrong sayısı olduğunu söyler.

Kullanıcıdan bir sayı alalım ve bu sayının Armstrong sayısı olup olmadığının bilgisi verelim.

sayi = input("Bir sayı giriniz: ")
uzunluk = len(sayi)

liste = list()

toplam = 0

for i in sayi:
    liste.append(int(i))
    toplam += int(i)**uzunluk
    
if toplam == int(sayi):
    print("Girmiş olduğunuz {} sayısı bir Armstrong sayısıdır.".format(sayi))
else:
    print("Girmiş olduğunuz {} sayısı bir Armstrong sayısı değildir.".format(sayi))

#370, 1634, 54748, 75234 sayılarını inceleyelim.

Girmiş olduğunuz 370 sayısı bir Armstrong sayısıdır.
Girmiş olduğunuz 1634 sayısı bir Armstrong sayısıdır.
Girmiş olduğunuz 54748 sayısı bir Armstrong sayısıdır.
Girmiş olduğunuz 75234 sayısı bir Armstrong sayısı değildir.

Kullanıcıdan bir sayı (sayi) girmesini istedik ve bu sayının uzunluğunu (uzunluk) len() ile hesapladık. Ardından basamaktaki her bir sayıyı ayrı ayrı listenin içine atabileceğimiz boş bir liste oluşturduk. for döngüsü ile i değişkenini sayi string’inde gezdirdik ve her biri aslında string olan rakamı integer veri tipinde ve append() metodu ile oluşturduğumuz listenin içine attık. Default 0 olarak oluşturduğumuz toplam değişkenini ise döngü her çalıştıkça yeni bir değer ile toplattırdık. Örneğin, 370 için i değişkeni önce 3 değerini aldı ve bunun 3. kuvvetini toplam değişkenine ekledi. toplam değişkeninin yeni değeri 0 + 27 = 27 oldu. Ardından i değişkeni 7 değerini aldı ve bunun 3. kuvvetini toplam değişkenine ekledi. toplam değişkeninin yeni değeri 27 + 343 = 370 oldu. Son olarak i değişkeni 0 değerini aldı ve bunun 3. kuvvetini toplam değişkenine ekledi. Fakat sonuç 0 olduğu için herhangi bir etki yapmadı. Bu durumda toplam değişkeni kullanıcının girdiği 370 değerine eşit olduğu için ekrana Armstrong sayısıdır bilgisini verdi.

Serinin son yazısında görüşmek dileği ile.

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir