Python - Koşul Kontrolü
Şimdiye kadar tüm kodlarımızı blok olarak çalıştırmıştık. Fakat interaktif bir uygulama yazacaksak kullanıcıdan aldığımız verilere göre program akışını yönlendirip ona göre sonuçlar üretmeliyiz. Python'da koşullu işlemeyi if
deyimi ile yaparız.
Şimdiye kadar kodlarımızı etkileşimli kabukta çalıştırmıştık. Artık betikleri ".py" uzantılı dosyalara yazıp terminalden çalıştıracağız.
İstediğiniz bir dizinde ".py" uzantılı bir dosya oluşturun. Kolay erişilebilir bir dizinde olmasına dikkat edebilirsiniz, örneğin linux için home, windows için C:/ dizininde olabilir. Dosyaları düzenlemek için her hangi basit metin düzenleyici kullanabilirsiniz. Örneğin sublime text ya da notepad++ olabilir. Ben sublime kullanıyorum, arayüzü daha basit ve renkleri çok güzel. :))
Betiklerimizi çalıştırırken sorun yaşamamak için başına eklememiz gereken iki satır var. Şöyle bir deneme betiği hazırlayıp dosyanıza kaydedin:
#!/usr/bin/env python # -*- coding: utf-8 -*- print("Bu betik terminalden çalışıyor.")
İlk satır Python'ın kurulu olduğu dizini belirtiyor. İkincisi ise çalışacağımız karakter kodlamasını. Eğer ikinci satırı silerseniz Python Türkçe karakterleri tanıyamadığı için hata alacaksınız.
Nasıl Çalıştırılır?
Etkileşimli kabuğu açmak için python
ya da python3
komutunu kullanıyorduk. Eğer bu komuta parametre olarak çalıştırmak istediğiniz dosya adını verirseniz kabuğu açmadan direkt betiği çalıştıracaktır.
python3 ornekDosyaAdi.py
Terminalde Dolaşmak
Terminalde klasörler arası gezmek için cd
(change directory) komutu kullanılır. Eğer sadece cd yazarsanız home (ev) dizinine gider. Komutla beraber klasör adını verirseniz o klasöre girer. Örneğin;
cd cd ornekDizin python3 uygulama.py
Yukarıdaki örnekte cd
ile ev dizinine çıkıp, ornekDizin klasörüne girdik. Sonra da o klasördeki "uygulama.py" betiğini çalıştırdık.
Yorum Satırları
Yeri gelmişken, #
ile başlayan satırlar "yorum satırları"dır ve Python tarafından yok sayılırlar. Yorum satırları programcının betiğe bıraktığı notlardır ve kodları okumayı kolaylaştırır. Şöyle bir örnek verilebilir;
#!/usr/bin/env python # -*- coding: utf-8 -*- # değişkenleri tanımla sayi1 = 25 sayi2 = 36 # sayıları topla toplam = sayi1 + sayi2 # ekrana yazdır print(toplam)
Bu gibi bir betikte çok anlamsız görülebilir fakat program büyüdükçe olduça önemli olmaya başlarlar.
Kullanıcıdan Girdi Almak
Koşul kontrolüne girmeden önce terminalde kullanıcıdan nasıl girdi alınacağından bahsedelim. Bunun için iki fonksiyon var. Birisi input
diğeri raw_input
. Temelde ikisinin tek farkı var, input ile alınan veriler Python kodu olarak algılanır ve betikte çalıştırılırlar. Ancak raw_input ile alınan veri sadece string olarak alınır. Bu yüzden uygulamanın güvenliği için asla input kullanmamanızı öneririm. Zaten raw_input büyük çoğunlukla ihtiyacınızı karşılayacaktır.
Ancak Python 3 sürümünden üzerini kullanıyorsanız eğer input kullanmalısınız çünkü raw_input oraya taşındı. Ben Python 2.7 kullandığım örneklerde raw_input kullanacağım, siz input kullanabilirsiniz. Hatırlarsanız python -V
komutu ile kullandığımız versiyonu öğrenebiliyorduk. Ki zaten python3 komutunu kullanıyorsanız versiyon belli.
Fonksiyona parametre olarak gönderilen string değer konsolda kullanıcı için gösterilir. Geriye de kullanıcının girdiği string veri döndürülür. Hemen örnek bir uygulama yapalım.
#!/usr/bin/env python # -*- coding: utf-8 -*- isim = raw_input("Adınızı girin: ") print("Hoşgeldin " + isim)
Kullanıcıdan adını girmesini isteyip ekrana hoşgeldin mesajı yazdırdık. Pek bir numarası yok, tek dikkat edilmesi gereken nokta şu; gelen veri ne olursa olsun string değerindedir. Eğer matematiksel ya da mantıksal bir işlemde kullanılacaksa tipi dönüştürülmelidir. Birazdan ona da kısaca değineceğim.
Koşul Kontrolü
Sonuda asıl konuya gelebildik. Şimdi kullanıcıdan ismini isteyip alınan değere göre işlem yapalım. Önce şu örneği inceleyip çalıştırın;
#!/usr/bin/env python # -*- coding: utf-8 -*- isim = raw_input("Adınızı girin: ") if isim == "umut": print("Hoşgeldin yüce insan!") else: print("You shall not pass! " + isim)
Koşul kontrolünü if
deyimiyle yaptığımızı söylemiştik. Alınan değerin "umut" olup olmadığına baktık ve hoşgeldin mesajı verdik. Burada dikkat etmeniz gereken şey koşula bağlı satırların girinti ile yazılmış olması gerektiğidir. Girintileri dört ve ya iki tane boşluk ya da tab ile yapabilirsiniz. Ben tab ile yapıyorum. Programın hata vermemesi için kullandığınız girintiler her yerde aynı olmalıdır. Ya hep boşluk kullanın ya da hep tab.
Koşullu satırların başladığını belirtmek için de koşulun sonuna iki nokta üst üste:
eklemeliyiz. Koşullu satırları yazdıktan sonra tekrar girintisiz yazmaya devam edebiliriz.
Koşulun altında else
bloğu görüyorsunuz. Bu kısım koşul sağlanmadığında işlenecek olan bloktur. Biz de eğer girilen isim "umut" değilse "Burdan asla geçemezsin!" dedik.
Şimdi bir örnekle daha kullanıcıdan alınan yaş bilgisinin on sekizden büyük olup olmadığını kontrol edelim.
#!/usr/bin/env python # -*- coding: utf-8 -*- yas = raw_input("Yaşınızı girin: ") if int(yas) >= 18: print("Hoşgeldin...") else: print("Çek git bebeğim uzaklara...")
Kullanıcıdan alınan verilerin ne olursa olsun string olduğunu söylemiştik. Dikkat ettiyseniz koşul kontrolü yaparken int
fonksiyonunu kullandık. Bu fonksiyon tahmin ettiğiniz gibi verilen değeri tam sayıya çevirir.
Veriyi tam sayıya çevirdikten sonra kullanıcının reşit olup olmadığına bakıp ona göre cevap yazdırdık. Şimdi üç sorudan oluşan basit bir başkent bilmece oyunu yapalım isterseniz.
#!/usr/bin/env python # -*- coding: utf-8 -*- puan = 0 soru1 = "Türkiye'nin başkenti neresidir?" soru2 = "Fransa'nın başkenti neresidir?" soru3 = "Almanya'nın başkenti neresidir?" # birinci soruyu sor print(soru1) cevap = raw_input("Cevap: ") if cevap == "ankara": puan = puan + 100 print("Tebrikler. Puan: ", puan) else: print("Yanlış cevap verdiniz. Doğru cevap: ankara") # ikinci soruyu sor print(soru2) cevap = raw_input("Cevap: ") if cevap == "paris": puan = puan + 100 print("Tebrikler. Puan: ", puan) else: print("Yanlış cevap verdiniz. Doğru cevap: paris") # son soruyu sor print(soru3) cevap = raw_input("Cevap: ") if cevap == "berlin": puan = puan + 100 print("Tebrikler. Puan: ", puan) else: print("Yanlış cevap verdiniz. Doğru cevap: berlin") # puanı göster print("Oyun bitti. Toplam puan: ", puan)
Soruları tanımladıktan sonra teker teker kullanıcıdan cevap istedik ve alınan cevaplara göre puan değişkenini artırdık. Tüm soruları sorduktan sonra da toplam puanı ekrana yazdırdık.
İstersek elif
komutu ile birden fazla koşullu bloklar oluşturabiliriz. Bu bloklar sıra ile işler. Öce if bloğunu kontrol eder, eğer şart sağlanmıyorsa sırasıyla elif bloklarına bakar eğer hiç bir şart sağlanıyorsa else bloğunu işler.
Örnek olarak kullanıcı notunu girdiğinde harf notunu gösterelim.
#!/usr/bin/env python # -*- coding: utf-8 -*- print("--- Not Hesaplayıcı ---") sinavNotu = raw_input("Notu girin: ") sinavNotu = int(sinavNotu) if sinavNotu < 0 or sinavNotu > 100: print("Geçersiz bir not girdiniz...") elif sinavNotu > 87: print("Harf notu: AA (Mükemmel)") elif sinavNotu > 80: print("Harf notu: BA (Çok İyi)") elif sinavNotu > 73: print("Harf notu: BB (İyi)") elif sinavNotu > 66: print("Harf notu: CB (Orta)") elif sinavNotu > 59: print("Harf notu: CC (Geçer)") elif sinavNotu > 52: print("Harf notu: DC (Başarısız)") elif sinavNotu > 45: print("Harf notu: DD (Başarısız)") elif sinavNotu > 34: print("Harf notu: FD (Başarısız)") else: print("Harf notu: FF (Başarısız)")
İlk önce girilen notun sıfırdan küçük ya da(or) yüzden büyük olup olmadığına bakıp geçerli not girişini kontrol ettik. Ardından elif
blokları ile notu kontrol edip harf notunu yazdırdık. Eğer hiç bir şart sağlanmadıysa (yani girilen not otuz dörtten küçükse) notun FF olduğunu yazdırdık.
Şimdi de girilen sayının negatif mi pozitif mi olduğunu bulalım.
#!/usr/bin/env python # -*- coding: utf-8 -*- sayi = raw_input("Sayıyı girin: ") sayi = int(sayi) if sayi > 0: print("Sayı pozitif.") elif sayi < 0: print("Sayı negatif.") else: print("Sıfır girdiniz.")
Sanırım anlatılacak bişey kalmadı. Bir kaç tane örnek uygulama yaparsanız mantığı oturacaktır. Kolay gelsin...
Devam et: Listeler