Merhaba Python if, elif, else ve girintiler yazısını okuyan ziyaretçi! :)

Önceki yazımda input() ile kullanıcıdan veri almayı anlatmıştım. Bu yazımda sıkça input() fonksiyonunu kullanacağız. Okumadıysan ve input() hakkında bilgin yoksa, bağlantıya tıkla ve oradaki yazıyı okuduktan sonra yeniden buraya uğra :)

Hiç bir program yoktur ki, if-else kullanmasın. Bu yazımda anlamadığın yer olursa mutlaka üzerinde dur ve bana sor. if-else çok önemli bir konudur. Aynı zamanda Python'un girintilere dayalı bir dil olduğunu söylemiştik. İlerleyen satırlarda girintilere de değineceğiz.


if, herhangi bir şartı kontrol etmek ve şartlar sağlandığında işlem yapmak için kullanılır.
if, Türkçede eğer anlamına gelir. Örnekler üzerinde daha iyi anlayacaksın.

Bir Python dosyası oluştur ve aşağıdaki satırları dosyaya kayıt edip çalıştır.
#!/usr/bin/env python
# -*- coding: utf-8 -*-

a = 5
if a > 2:
    print ("sayı 2'den büyük.")

İlk iki satırın açıklamasını atlıyorum. Daha önce bahsetmiştim. Olmazsa olurumuz :)
4. satırda 5 değerine sahip a değişkenini oluşturdum.
5. satırda ise a > 2 diyerek; a değeri 2'den büyükse şunu yap dedim ve alt satıra geçtim.
6. satırda; 4 boşluk bırakarak print() fonksiyonumuzu ekledim.

if değeri ekledikten sonra TAB tuşu ile boşluğu ekleyebilirsin. Ama nasıl başladıysan diğer satırlarda da aynısını kullanman gerekiyor. Ve if altındaki işlemler bitene kadar aynı boşlukları eklemen gerekiyor.

TAB yerine 2 boşluk, 4 veya 8 boşlukta ekleyebilirsin. Benim önerim girintiyi TAB ile eklemen. Gelişmiş metin editörlerinde TAB tuşuna bastığında kendiliğinden hizalıyor.

Python girintilere dayalı bir dil ve girintiler olmadan çalışmaz. if, elif ve else'de her zaman girinti kullanmalısın.


Şimdi if'e geri dönelim. Fark ettiysen if satırının sonuna iki nokta(:) ekledim. Bunu da eklemek zorundasın.

Bir örnek vereyim ve üzerinde konuşalım.

#!/usr/bin/env python
# -*- coding: utf-8 -*-

giris = input('Sayı giriniz>')
giris = int(giris)

if giris > 5:
   print ("Bu sayı 5'den büyük")
   
elif giris < 5:
   print ("Bu sayı 5'den küçük")

İlk satırda input() oluşturarak kullanıcıdan sayı girmesini istedim.

İkinci satırda, alınan verinin integer olduğunu belirttim. input() yazısında veri dönüşümlerinden bahsetmiştim.

Üçüncü satıra bir şey girmedim :)

Dördüncü satırda "eğer giris değişkeni 5'den büyükse" işlemini başlattım ve beşinci satırda bu sayı 5'den büyük yazdırdım. Burada matematik işlemi yaptık kısmen, büyüktür işareti kullandık.

Altıncı satır boş, yedinci satırda ise elif tanımladım, yani ikinci eğer belirttim. elif'i şartların artması durumunda elif kullanırız. Bu satırda girilen sayı 5'den küçükse sayı 5'den küçük yazdırmasını belirttim.

Operatörlere geçmeden önce bir kaç dipnot ekleyeyim. Burada ayrı ayrı if belirleyebilirdim, yani elif yerine if kullanabilirdim. İlerleyen satırlarda bunların farklarına değineceğim.

İf'leri parantez içerisine alabilirsiniz.
if (giris > 5):
Ben bu şekilde kullanmıyorum. Olur da bir gün karşınıza çıkarsa şaşırma diye yazayım dedim :)


Operatörler inceleyelim.
> Büyüktür
< Küçüktür
>= Büyük eşittir
<= Küçük eşittir
== eşittir
!= eşit değildir.

Operatörlerde dikkat etmen gereken şey, eşittir operatörünün iki işaret olması. Tek eşittir işaretini değişken oluşturmak için kullanırız. Çok karıştırılır aman sen karıştırma ;)

Şimdi bir örnek ile hem operatörleri hemde else'yi inceleyelim.

#!/usr/bin/env python
# -*- coding: utf-8 -*-

giris = str(input('İsminizi giriniz>'))

if giris == 'anarşist':
   print ("Sen o'sun!")

elif giris == 'x':
   print ("Taklitsin!")

else:
   print ("Aaah! O, Sen değilsin!")

input() dikkatini çekti mi? Veri dönüştürmelerini bu şekilde de yapabiliriz ;)

if ile giris değişkenini kontrol ettim ve girilen ismin, anarşist olup olmadığına baktım. Yani girilen isim anarşist'e eşitse şöyle olsun dedim.
elif ile değerin x olduğunu kontrol ettim.
ve else ile dedim ki x yada anarşist değeri değilse bunu yap! Ama else için bir şart eklemedim, dikkat! :) else, şartların dışındaysa, anlamına gelir. Yahu şart falan diyorum da şart ne ola ki?! Hala anlamıysan, giris == 'x' bu bir şarttır. giriş, x olmak şartıyla anlamına gelir.

Bu işlemi operatörler yardımı ile tersten de yapabiliriz.
#!/usr/bin/env python
# -*- coding: utf-8 -*-

giris = str(input('İsminizi giriniz>'))

if giris != 'anarşist':
   print ("Sen değilsin")

if giris == 'anarşist':
   print ("Muhteşem!")

else'yi kullanmama gerek kalmadı. Girilen tüm değerler anarşist olmadığında sen değilsin yazacak. Çünkü ilk if'in operatörünü eşit değilse( != ) olarak belirttim.


Şimdi biraz zorlayalım. Bir kullanıcı girişi yazalım. Kodu incelemeden önce nasıl yaparım diye bir düşün ;)
#!/usr/bin/env python
# -*- coding: utf-8 -*-

kullanici = 'anarşist'
parola = '12345'

giris1 = str(input('Kullanıcı adınızı giriniz>'))
giris2 = str(input('Parolanızı giriniz>'))

if giris1 == kullanici and giris2 == parola:
   print ("Kullanıcı ve parola doğru")

else:
   print ("Bir şeylerde hata var şekerim!")

kullanici ve parola değişkenlerinden anlıyoruz ki; Kullanıcın adı anarşist, parolası ise 12345! (Böyle parola mı olurmuş!?)

giris1 ve giris2 input()'larında kullanıcıdan adını ve parolasını girmesini istiyoruz.

if'e geldiğimizde aman tanrım! and var? Bu da ne? and İngilizce'dir ve Türkçe karşılığı 've' anlamına gelir; burada da ve anlamında kullanılıyor farklı bişiycikler yok :)
and eklediğimizde iki şartında aynı olması durumunda işlemler gerçekleşiyor. Atladım sanırım, eşittir operatöründen sonra değişkeni belirledim fark ettin miiii? :)

Kod satırların eklemeden örnek vereyim. Bunu şöyle değiştirebiliriz.
if giris1 == kullanici and giris2 != parola:
Bu durumda giris1, kullanıcıya eşitse ve giris2 parolaya eşit değilse, anlamına gelir. Bir if içerisinde bir den fazla kural ve operatör kullanabilirsiniz :)


Çaaat! Bir örnek daha :)

#!/usr/bin/env python
# -*- coding: utf-8 -*-

kullanici = 'anarşist'
parola = '12345'

giris1 = str(input('Kullanıcı adınızı giriniz>'))
giris2 = str(input('Parolanızı giriniz>'))

if (giris1 == kullanici) or (giris2 == parola):
   print ("Kullanıcı yada parola doğru")

else:
   print ("Bir şeylerde hata var canım!")

Bu kod dizisinde ise farklı olarak or operatörünü ve if'lerin yanındaki parantezleri görüyoruz. Parantezlerden bahsetmiştim yukarıda okumadan geçmeee! or'a gelelim. or ise yada anlamında kullanılıyor. Bu kodu çalıştırdığımızda kullanıcı yada parola'dan birisi doğruysa; doğru olarak kabul edip işlem yapıyor. Her ikisi de uymuyorsa hata mesajını yazdırıyor.

Örneksiz olarak bir de in var :) in ise içinde demek. Yani içerisinde şu geçiyorsa şunu yap, demek için kullanılır.

Ben çok güzel anlattım sende çok güzel anladın mı? :)

Bir küçük dipnot daha :)
if not kullanici == 'anarşist':
Burada not operatörünü görüyorsun. Bu not operatörü işlemi tersine çeviriyor. Kullanıcı anarşist ise şeklinde şart koşulmuş ama not eklendiği için kullanıcı anarşist değilse, anlamına geliyor.

Bazen de is görürüz.
if kullanici is 'anarşist':
is operatörü ise == operatörüne denktir. Hangisini istersen kullanabilirsin ama karşına çıktığında anlamalısın. Sırf anla diye yazdım fazladan kaç satır falan filan :P


Özetle;
if bir şart koşmak,
elif ikinci şartı koşmak,
else ise şartların dışında durum oluştuğunda işlem yapmak için kullanılır.


Şimdi elif'i hangi durumlarda kullanmamız gerektiğine bakalım ve yazıyı bitirelim.
else'yi, if olmadan kullanamazsınız bu arada :) else ilk if'i algılar ve o şartların dışındaysa çalışır.

Şimdi aşağıdaki satırın açıklamasını vermeyeceğim, bir kaç yeri hariç tabi :)


#!/usr/bin/env python
# -*- coding: utf-8 -*-

şehir = str(input('Nerelisin>'))

if şehir != 'adana':
   print ('Olsun yahu :)')

if şehir == 'adana':
   print ('OO toprağım :)')
else:
   print ('Şehirler değil kişilik önemli :)')

Burada ilk if'te ayrı bir kural belirledim. adana değilse girilen şehir, Olsun yahu :) yazdırmasını, ikinci if'te ise, şehir adana ise Oo toprağım :) yazdırmasını söyledim.

Bu durumda çalışan kod, önce bakacak; girilen değer adana değilse bir print() çalıştıracak. ikinci if, adana olmadığı için else'yi çalıştıracak. Böylece iki print() çalışmış olacak.

Diğer bir durumda girilen değer adana olduğunda ilk if çalışmayacak ve yalnızca bir print() çalıştıracak. Çünkü ilk if şartına uymadı, diğer if şarta uyduğu için else'yi çalıştırmadı.


Umarım son örnekte söylediklerimi anlamışsındır anlamadıysan sıkıntı :)
Yazıyorum ama yeterli geribildirimi alamıyorum. Yahu bir mail, bir tweet, bir yorum yapmak çok mu zor :P Lütfen yazı hakkında sorularını ve yorumlarını bana ilet. Sonra yazasım gelmiyor :)