Python Programlama Dili

2. Python’da Koşula Bağlı Durumlar

2.1. Giriş

Bu bölümde yine çok önemli bir konuya değineceğiz: Python’da koşula bağlı durumlar.

Bu bölüm sonunda, programlarımıza “karar vermeyi” öğretmiş olacağız. Bu bölümde öğreneceğimiz bilgileri kullanarak, yazdığımız bir programın, kullanıcıdan gelen verinin niteliğine göre farklı işlemler yapabilmesini sağlayacağız.

Python programlama dilinde, koşullu durumları belirtmek için üç adet deyimden yararlanıyoruz:

  • if deyimi
  • elif deyimi
  • else deyimi

Yukarıdaki deyimler, bir önceki bölümde gördüğümüz, kullanıcıdan veri almamızı sağlayan input() fonksiyonuyla kol kola gider. Bu fonksiyon ve yukarıdaki deyimler esasında bir program içinde birbirini tamamlayan unsurlar olarak karşımıza çıkar.

Gelin isterseniz bir an önce bu önemli konuya giriş yapalım.

2.2. if deyimi

Eğer daha önceden herhangi bir programlama dilini az da olsa kurcalama fırsatınız olduysa, bir programlama dilinde if deyimlerinin ne işe yaradığını az çok biliyorsunuzdur. Daha önceden hiç bir programcılık deneyiminiz olmamışsa da ziyanı yok. Zira bu bölümde if deyimlerinin ne işe yaradığını ve nerelerde kullanıldığını enine boyuna tartışacağız.

İngilizce bir kelime olan “if”, Türkçe’de “eğer” anlamına gelir. Anlamından da çıkarabileceğimiz gibi, bu kelime bir koşul bildiriyor. Yani “eğer bir şey filanca ise...” ya da “eğer bir şey falanca ise...” gibi... İşte biz Python’da bir koşula bağlamak istediğimiz durumları if deyimi aracılığıyla göstereceğiz.

Gelin isterseniz bu deyimi nasıl kullanacağımıza dair ufacık bir örnek vererek işe başlayalım:

Öncelikle elimizde şöyle bir değişken olsun:

n = 255

Yukarıda verdiğimiz değişkenin değerinin bir karakter dizisi değil, aksine bir sayı olduğunu görüyoruz. Şimdi bu değişkenin değerini sorgulayalım:

if n > 10:

Burada sayının 10’dan büyük olup olmadığına bakıyoruz.

Burada gördüğümüz “>” işaretinin ne demek olduğunu açıklamaya gerek yok sanırım. Hepimizin bildiği “büyüktür” işareti Python’da da aynen bildiğimiz şekilde kullanılıyor. Mesela “küçüktür” demek isteseydik, “<” işaretini kullanacaktık. İsterseniz hemen şurada araya girip bu işaretleri yeniden hatırlayalım:

>
büyüktür
<
küçüktür
>=
büyük eşittir
<=
küçük eşittir
==
eşittir
!=
eşit değildir

Gördüğünüz gibi hiçbiri bize yabancı gelecek gibi değil... Yalnızca en sondaki “eşittir” (==) işareti ve “eşit değildir” (!=) işaretleri biraz değişik gelmiş olabilir. Burada “eşittir” işaretinin “=” olmadığına dikkat edin. Python’da “=” işaretini değer atama işlemleri için kullanıyoruz (a = 25 gibi...). “==” işaretini ise “eşittir” anlamında... Neyse konuyu dağıtmayalım... Ne diyorduk?

if n > 10:

Bu ifadeyle Python’a şöyle bir şey demiş oluyoruz:

“Eğer sayının değeri 10’dan büyükse...”

Burada kullandığımız işaretlere dikkat edin. En sonda bir adet “:” işaretinin olduğunu gözden kaçırmıyoruz... Bu tür işaretler Python için çok önemlidir. Bunları yazmayı unutursak Python gözümüzün yaşına bakmadan bize hata mesajı gösterecektir.

Dedik ki, “if n > 10:” ifadesi, “eğer bir sayının değeri 10’dan büyükse...” anlamına gelir. Bu ifadenin eksik olduğu apaçık ortada. Yani belli ki bu cümlenin bir de devamı olması gerekiyor. O halde biz de devamını getirelim:

if n > 10:
    print("sayı 10'dan büyüktür!")

Burada çok önemli bir durumla karşı karşıyayız. Dikkat ederseniz, ikinci satırı ilk satıra göre girintili yazdık. Elbette bunu şirinlik olsun diye yapmadık. Python programlama dilinde girintiler çok büyük önem taşır. Hatta ne kadarlık bir girinti verdiğiniz bile önemlidir. Eğer Python kodlarına duyarlı bir metin düzenleyici kullanıyorsanız, kullandığınız metin düzenleyici çoğu durumda sizin yerinize uygun bir şekilde girintilemeyi yapacaktır. Mesela IDLE adlı geliştirme ortamını kullananlar, ilk satırdaki “:” işaretini koyup “enter” tuşuna bastıklarında otomatik olarak girinti verildiğini farkedeceklerdir. Eğer kullandığınız metin düzenleyici, satırları otomatik olarak girintilemiyorsa sizin bu girintileme işlemini elle yapmanız gerekecektir. Yalnız elle girintilerken, ne kadar girinti vereceğimize dikkat etmeliyiz. Genel kural olarak 4 boşlukluk bir girintileme uygun olacaktır. Girintileme işlemini klavyedeki sekme (tab) tuşuna basarak da yapabilirsiniz. Ama aynı program içinde sekmelerle boşlukları karıştırmayın. Yani eğer girintileme işlemini klavyedeki boşluk (space) tuşuna basarak yapıyorsanız, program boyunca aynı şekilde yapın. Kısaca söylemek gerekirse; Python’da girintileme ve girintilemede tutarlılık çok önemlidir. Özellikle büyük programlarda, girintilemeler açısından tutarsızlık gösterilmesi programın çalışmamasına sebep olabilir... Neyse... Konumuza devam edelim.

Eğer yukarıdaki if bloğunu bir metin düzenleyici içine değil de doğrudan etkileşimli kabuğa yazmışsanız bazı şeyler dikkatinizi çekmiş olmalı... Etkileşimli kabukta “if sayı > 10:” satırını yazıp enter tuşuna bastığınızda şöyle bir görüntüyle karşılaşmış olmalısınız:

>>> if n > 10:
...

Dikkat ederseniz, “>>>” işareti, “...” işaretine dönüştü. Eğer bu noktada herhangi bir şey yazmadan enter tuşuna basacak olursanız Python size şöyle bir hata mesajı verecektir:

File "<stdin>", line 2
    ^
IndentationError: expected an indented block

Hata mesajında da söylendiği gibi, Python bizden girintilenmiş bir blok beklerken, biz onun bu beklentisini karşılamamışız. Dolayısıyla bize yukarıdaki hata mesajını göstermiş. “...” işaretini gördükten sonra yapmamız gereken şey, dört kez boşluk (space) tuşuna basarak girinti oluşturmak ve if bloğunun devamını yazmak olmalıydı. Yani şöyle:

>>> if n > 10:
...      print("sayı 10'dan büyüktür!")
...

Gördüğünüz gibi, print() fonksiyonunu yazıp enter’e bastıktan sonra yine “...” işaretini gördük. Python burada bizden yeni bir satır daha bekliyor. Ama bizim yazacak başka bir kodumuz olmadığı için tekrar enter tuşuna basıyoruz ve nihai olarak şöyle bir görüntü elde ediyoruz:

>>> if n > 10:
...      print("sayı 10'dan büyüktür!")
...
sayı 10'dan büyüktür!
>>>

Demek ki 250 sayısı 10’dan büyükmüş! Ne büyük bir buluş! Merak etmeyin, daha çok şey öğrendikçe daha mantıklı programlar yazacağız... Burada amacımız işin temelini kapmak. Bunu da en iyi, saçma sapan ama basit programlar yazarak yapabiliriz.

Şimdi metin düzenleyicimizi açarak daha mantıklı şeyler yazmaya çalışalım. Zira yukarıdaki örnekte değişkeni kendimiz belirlediğimiz için, bu değişkenin değerini if deyimleri yardımıyla denetlemek pek akla yatkın görünmüyor. Ne de olsa değişkenin değerinin ne olduğunu biliyoruz. Dolayısıyla bu değişkenin 10 sayısından büyük olduğunu da biliyoruz! Bunu if deyimiyle kontrol etmek çok gerekli değil... Ama şimdi daha makul bir iş yapacağız. Değişkeni biz belirlemek yerine kullanıcıya belirleteceğiz:

#!/usr/bin/env python3.0

sayı = int(input("Bir sayı giriniz: "))

if sayı > 10:
    print("Girdiğiniz sayı 10'dan büyüktür!")

if sayı < 10:
    print("Girdiğiniz sayı 10'dan küçüktür!")

if sayı == 10:
    print("Girdiğiniz sayı 10'dur!")

Gördüğünüz gibi, art arda üç adet if bloğu kullandık. Bu kodlara göre, eğer kullanıcının girdiği sayı 10’dan büyükse, ilk if bloğu işletilecek; eğer sayı 10’dan küçükse ikinci if bloğu işletilecek; eğer sayı 10’a eşit ise üçüncü if bloğu işletilecektir... Peki ya kullanıcı muziplik yapıp sayı yerine harf yazarsa ne olacak? Böyle bir ihtimal için programımıza herhangi bir denetleyici yerleştirmedik. Dolayısıyla eğer kullanıcı sayı yerine harf girerse programımız hata verecek, yani çökecektir. Bu tür durumlara karşı nasıl önlem alacağımızı ilerleyen derslerimizde göreceğiz. Biz şimdilik bildiğimiz yolda yürüyelim...

if deyimlerini kullanıcı adı veya parola denetlerken de kullanabiliriz. Mesela şöyle bir program taslağı yazabiliriz:

#!/usr/bin/env python3.0

print("""
Dünyanın en gelişmiş e.posta hizmetine
hoşgeldiniz... Yalnız hizmetimizden
yararlanmak için önce sisteme giriş
yapmalısınız..
""")

parola = input("Parola: ")

if parola == "bilmiyorum":
    print("Sisteme Hoşgeldiniz!")

Gördüğünüz gibi, programın başında üç tırnak işaretlerinden yararlanarak uzun bir metni kullanıcıya gösterdik. Bu bölümü, kendiniz göze hoş gelecek bir şekilde süsleyebilirsiniz de... Eğer kullanıcı, kendisine parola sorulduğunda cevap olarak “bilmiyorum” yazarsa kullanıcıyı sisteme alıyoruz.

Daha önce de söylediğimiz gibi, if deyimi dışında Python’da koşullu durumları belirtmek için kullandığımız, elif ve else adlı iki deyim daha vardır. Bunlar if ile birlikte kullanılırlar. Gelin isterseniz bu iki deyimden, adı elif olana bakalım...

2.3. elif deyimi

Python’da, if deyimleriyle birlikte kullanılan ve yine koşul belirten bir başka deyim de elif deyimidir. Buna şöyle bir örnek verebiliriz:

#!/usr/bin/env python3.0

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

if yaş == 18:
    print("18 iyidir!")

elif yaş < 0:
    print("Yok canım, daha neler!...")

elif yaş < 18:
    print("Genç bir kardeşimizsin!")

elif yaş > 18:
    print("Eh, artık yaş yavaş yavaş kemale eriyor!")

Yukarıdaki örneği elbette şöyle de yazabiliriz:

#!/usr/bin/env python3.0

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

if yaş == 18:
    print("18 iyidir!")

if yaş < 0:
    print("Yok canım, daha neler!...")

if yaş < 18:
    print("Genç bir kardeşimizsin!")

if yaş > 18:
    print("Eh, artık yaş yavaş yavaş kemale eriyor!")

Bu iki program da aynı işlevi görecektir. O halde şöyle bir soru geliyor akla: if varken elif‘e ne lüzum var? İlk bakışta pek belli olmasa da if ile elif arasında çok önemli bir fark vardır. if bize olası bütün sonuçları listeler, elif ise sadece doğru olan ilk sonucu verir. Bu soyut tanımlamayı biraz somutlaştıralım:

#!/usr/bin/env python3.0

a = int(input("Bir sayı giriniz: "))

if a < 100:
    print("verdiğiniz sayı 100'den küçüktür.")

if a < 50:
    print("verdiğiniz sayı 50'den küçüktür.")

if a == 100:
    print("verdiğiniz sayı 100'dür.")

if a > 100:
    print("verdiğiniz sayı 100'den büyüktür.")

if a > 150:
    print("verdiğiniz sayı 150'den büyüktür.")

Yukarıdaki kodları çalıştırdığımızda, doğru olan bütün sonuçlar listelenecektir. Yani mesela kullanıcı 40 sayısını girmişse, ekrana verilecek çıktı şöyle olacaktır:

verdiğiniz sayı 100'den küçüktür.
verdiğiniz sayı 50'den küçüktür.

Burada “40” sayısı hem “100”den, hem de “50”den küçük olduğu için iki sonuç da çıktı olarak verilecektir. Ama eğer yukarıdaki kodları şöyle yazarsak:

#!/usr/bin/env python3.0

a = int(input("Bir sayı giriniz: "))

if a < 100:
    print("verdiğiniz sayı 100'den küçüktür.")

elif a < 50:
    print("verdiğiniz sayı 50'den küçüktür.")

elif a == 100:
    print("verdiğiniz sayı 100'dür.")

elif a > 150:
    print("verdiğiniz sayı 150'den büyüktür.")

elif a > 100:
    print("verdiğiniz sayı 100'den büyüktür.")

Kullanıcının “40” sayısını girdiğini varsayarsak, bu defa programımımız yalnızca şu çıktıyı verecektir:

verdiğiniz sayı 100'den küçüktür.

Gördüğünüz gibi, elif deyimlerini kullandığımız zaman, ekrana yalnızca doğru olan ilk sonuç veriliyor. Yukarıda “40” sayısı hem 100’den hem de 50’den küçük olduğu halde, Python bu sayının 100’den küçük olduğunu görür görmez sonucu ekrana basıp, kodların geri kalanını incelemeyi bırakıyor. if deyimlerini arka arkaya sıraladığımızda ise, Python bütün olasılıkları tek tek değerlendirip, geçerli olan bütün sonuçları ekrana döküyor...

Bir sonraki bölümde else deyimini öğrendiğimiz zaman, elif‘in tam olarak ne işe yaradığını çok daha iyi anlamanızı sağlayacağını düşündüğüm bir örnek vereceğim.

elif‘i de incelediğimize göre, koşul bildiren deyimlerin sonuncusuna göz atabiliriz: else

2.4. else deyimi

Şimdiye kadar Python’da koşul bildiren iki deyimi öğrendik. Bunlar “if” ve “elif” idi. Bu bölümde ise koşul deyimlerinin sonuncusu olan “else”yi göreceğiz. Öğrendiğimiz şeyleri şöyle bir gözden geçirecek olursak, temel olarak şöyle bir durumla karşı karşıya olduğumuzu görürüz:

if falanca:
    bu işlemi yap

if filanca:
    şu işlemi yap

Veya şöyle bir durum:

if falanca:
    bu işlemi yap

elif filanca:
    şu işlemi yap

if ile elif arasındaki farkı biliyoruz. Eğer if deyimlerini art arda sıralayacak olursak, Python doğru olan bütün sonuçları listeleyecektir. Ama eğer if deyiminden sonra elif deyimini kullanırsak, Python doğru olan ilk sonucu listelemekle yetinecektir.

Bu bölümde göreceğimiz else deyimi, yukarıdaki tabloya bambaşka bir boyut kazandırıyor. Dikkat ederseniz şimdiye kadar öğrendiğimiz deyimleri kullanabilmek için ilgili bütün durumları tanımlamamız gerekiyor. Yani:

eğer böyle bir durum varsa:
    bunu yap

eğer şöyle bir durum varsa:
    şunu yap

eğer filancaysa:
    şöyle git

eğer falancaysa:
    böyle gel

gibi...

Ancak her durum için bir if bloğu yazmak bir süre sonra yorucu ve sıkıcı olacaktır. İşte bu noktada devreye else deyimi girecek. else‘nin anlamı kabaca şudur:

“eğer yukarıdaki koşulların hiçbiri gerçekleşmezse...”

Gelin isterseniz bununla ilgili şöyle bir örnek verelim:

#!/usr/bin/env python3.0

soru = input("Bir meyve adı söyleyin bana:")

if soru == "elma":
    print("evet, elma bir meyvedir...")

elif soru == "karpuz":
    print("evet, karpuz bir meyvedir...")

elif soru == "armut":
    print("evet, armut bir meyvedir...")

else:
    print(soru, "gerçekten bir meyve midir?")

Eğer kullanıcı soruya “elma”, “karpuz” veya “armut” cevabı verirse, “evet, ... bir meyvedir” çıktısı verilecektir. Ama eğer kullanıcı bu üçü dışında bir cevap verirse, “... gerçekten bir meyve midir?” çıktısını görürüz... Burada else deyimi, programımıza şu anlamı katıyor:

Eğer kullanıcı yukarıda belirlenen meyve adlarından hiç birini girmez, bunların yerine bambaşka bir şey yazarsa, o zaman ``else`` bloğu içinde belirtilen işlemi gerçekleştir.

Dikkat ederseniz yukarıdaki kodlarda if deyimlerini art arda sıralamak yerine ilk if‘ten sonra elif ile devam ettik. Peki şöyle bir şey yazarsak ne olur?

#!/usr/bin/env python3.0

soru = input("Bir meyve adı söyleyin bana:")

if soru == "elma":
    print("evet, elma bir meyvedir...")

if soru == "karpuz":
    print("evet, karpuz bir meyvedir...")

if soru == "armut":
    print("evet, armut bir meyvedir...")

else:
    print(soru, "gerçekten bir meyve midir")

Bu kodlar beklediğiniz sonucu vermeyecektir. İsterseniz yukarıdaki kodları çalıştırıp ne demek istediğimi daha iyi anlayabilirsiniz. Python’un doğru sonucu vermesi için bu tür durumlarda else deyiminden önce elif deyimlerinden yararlanmalıyız...

Yalnız bu dediğimizden, else ifadesi if ile birlikte kullanılmaz, anlamı çıkarılmamalı. Mesela şöyle bir örnek yapılabilir:

#!/usr/bin/env python3.0

soru = input("Programdan çıkmak istediğinize emin misiniz? \
Eminseniz 'e' harfine basın : ")

if soru == "e":
    print("Güle güle!")

else:
    print("Peki, biraz daha sohbet edelim!")

Bir önceki bölümde elif deyiminin tam olarak ne işe yaradığını anlamamızı sağlayacak bir örnek vereceğimizi söylemiştik. Şimdi bu örneğe bakalım:

#!/usr/bin/env python3.0

boy = int(input("boyunuz kaç cm?"))

if boy < 170:
    print("boyunuz kısa")

elif boy < 180:
    print("boyunuz normal")

else:
    print("boyunuz uzun")

Yukarıda sekiz satırla hallettiğimiz işi sadece if deyimleriyle yapmaya çalışırsanız bunun ne kadar zor olduğunu göreceksiniz. Diyelim ki kullanıcı “165” cevabını verdi. Python bu 165 sayısının 170’ten küçük olduğunu görünce “boyunuz kısa” cevabını verecek, öteki satırları değerlendirmeyecektir. 165 sayısı, elif ile gösterdiğimiz koşullu duruma da uygun olduğu halde (165 < 180), koşul ilk satırda karşılandığı için ikinci satır değerlendirmeye alınmayacaktır.

Kullanıcının “175” cevabını verdiğini varsayalım: Python 175 sayısını görünce önce ilk koşula bakacak, verilen 175 sayısının ilk koşulu karşılamadığını görecektir (175 > 170). Bunun üzerine Python kodları incelemeye devam edecek ve elif bloğunu değerlendirmeye alacaktır. 175 sayısının 180’den küçük olduğunu görünce de çıktı olarak “boyunuz normal” cevabını verecektir.

Peki ya kullanıcı “190” cevabını verirse ne olacak? Python yine önce ilk if bloğuna bakacak ve 190 cevabının bu bloğa uymadığını görecektir. Dolayısıyla ilk bloğu bırakıp ikinci bloğa bakacaktır. 190 cevabının bu bloğa da uymadığını görünce, bir sonraki bloğu değerlendirmeye alacaktır. Bir sonraki blokta ise else deyimimiz var. Bu bölümde öğrendiğimiz gibi, else deyimi, “eğer kullanıcının cevabı yukarıdaki koşulların hiçbirine uymazsa bu bloğu çalıştır,” anlamına geliyor. Kullanıcının girdiği “190” cevabı ne birinci ne de ikinci bloktaki koşula uyduğu için, normal bir şekilde else bloğu işletilecek, dolayısıyla da ekrana “boyunuz uzun” çıktısı verilecektir.

Python’da koşullu durumları nasıl göstereceğimizi öğrendiğimize göre, bu öğrendiklerimiz yardımıyla küçük bir alıştırma yapabiliriz. Bir sonraki yazımızın konusu, Python’da basit bir hesap makinesi nasıl yapılır?

2.5. Basit bir Hesap Makinesi

Şu ana kadar Python’da pek çok şey öğrendik. Bu öğrendiğimiz şeylerle artık kısmen yararlı bazı programlar yazabiliriz. Elbette henüz yazacağımız programlar pek yetenekli olamayacak olsa da, en azından bize öğrendiklerimizle pratik yapma imkanı sağlayacak... Bu bölümde, özellikle if, elif ve else yapılarını kullanarak çok basit bir hesap makinesi yapmayı deneyeceğiz. Bu arada, bu derste yeni şeyler öğrenerek ufkumuzu ve bilgimizi genişletmeyi de ihmal etmeyeceğiz.

İsterseniz önce kullanıcıya bazı seçenekler sunarak işe başlayalım:

#!/usr/bin/env python3.0

giriş = """
(1) topla
(2) çıkar
(3) çarp
(4) böl
(5) karesini hesapla
"""

print(giriş)

İlk satırın sadece GNU/Linux kullanıcılarını ilgilendirdiğini biliyoruz artık. Bu satırı Windows kullanıcıları yazmasa da olur...

İlk satırın ardından kullanıcıya bazı seçenekler sunuyoruz. Bu seçenekleri ekrana yazdırmak için üç tırnaktan yararlandığımıza dikkat edin. Birden fazla satıra yayılmış bu tür ifadeleri en kolay üç tırnak yardımıyla yazdırabiliriz. Esasında her bir seçenek için ayrı bir değişken tanımlamak da mümkündür. Yani aslında yukarıdaki kodları şöyle de yazabiliriz:

#!/usr/bin/env python3.0

seçenek1 = "(1) topla"
seçenek2 = "(2) çıkar"
seçenek3 = "(3) çarp"
seçenek4 = "(4) böl"
seçenek5 = "(5) karesini hesapla"

print(seçenek1, seçenek2, seçenek3, seçenek4, seçenek5)

Yalnız burada dikkat ederseniz, seçenekler hep yan yana diziliyor. Eğer programınızda yukarıdaki şekli kullanmak isterseniz, bu seçeneklerin yan yana değil de, alt alta görünmesini sağlamak için Python’un bize sunduğu çok faydalı bir parçacıktan yararlanabilirsiniz. Bu parçacığın adı “sep”tir. “sep”, İngilizce “separator” (ayraç) kelimesinin kısaltmasıdır. Kullanımı tıpkı daha önce öğrendiğimiz “end” parçacığına benzer:

#!/usr/bin/env python3.0

seçenek1 = "(1) topla"
seçenek2 = "(2) çıkar"
seçenek3 = "(3) çarp"
seçenek4 = "(4) böl"
seçenek5 = "(5) karesini hesapla"

print(seçenek1, seçenek2, seçenek3, seçenek4, seçenek5, sep="\n")

Burada “sep” parçacığının değeri olarak “\n” kaçış dizisini belirlediğimize dikkat edin. “\n” kaçış dizisinin ne işe yaradığını hatırlıyorsunuz. Bu dizi, “yeni satır” oluşturmamızı sağlıyordu... Burada, “ayraç” olarak “yeni satır” kaçış dizisini belirlediğimiz için her bir seçenek yan yana değil, alt alta görünecektir. Elbette “sep” parçacığı için istediğiniz değeri belirleyebilirsiniz. Mesela her bir seçeneği “yeni satır işaretiyle” ayırmak yerine, “–” gibi bir işaretle ayırmayı da tercih edebilirsiniz:

print(seçenek1, seçenek2, seçenek3, seçenek4, seçenek5, sep="--")

Programınızda nasıl bir giriş paragrafı belirleyeceğiniz konusunda özgürsünüz. Gelin isterseniz biz birinci şekille yolumuza devam edelim:

#!/usr/bin/env python3.0

giriş = """
(1) topla
(2) çıkar
(3) çarp
(4) böl
(5) karesini hesapla
"""

print(giriş)

Burada “giriş” adlı bir değişken oluşturduk. Bu değişkenin içinde barındırdığı değeri kullanıcıların görebilmesi için print() fonksiyonu yardımıyla bu değişkeni ekrana yazdırıyoruz. Devam edelim:

soru = input("Yapmak istediğiniz işlemin numarasını girin: ")

Bu kod yardımıyla kullanıcıya bir soru soruyoruz. Kullanıcıdan yapmasını istediğimiz şey, yukarıda belirlediğimiz giriş seçenekleri içinden bir sayı seçmesi... Kullanıcı “1”, “2”, “3”, “4” veya “5” seçeneklerinden herhangi birini seçebilir. Kullanıcıyı, seçtiği numaranın karşısında yazan işleme yönlendireceğiz. Yani mesela eğer kullanıcı klavyedeki “1” tuşuna basarsa hesap makinemiz toplama işlemi yapacaktır... “2” tuşu ise kullanıcıyı “çıkarma” işlemine yönlendirir...

input() fonksiyonunu işlediğimiz bölümde, bu fonksiyonun değer olarak bir “karakter dizisi” (string) verdiğini söylemiştik. Yukarıdaki kodun çıktısı da doğal olarak bir karakter dizisi olacaktır. Bizim şu aşamada kullanıcıdan karakter dizisi almamızın bir sakıncası yok. Çünkü kullanıcının gireceği “1”, “2”, “3”, “4” veya “5” değerleriyle herhangi bir matematik işlemi yapmayacağız. Kullanıcının gireceği bu değerler, yalnızca bize onun hangi matematik işlemini yapmak istediğini belirtecek. Dolayısıyla input() fonksiyonunu yukarıdaki şekilde kullanıyoruz...

İsterseniz şimdiye kadar gördüğümüz kısma topluca bakalım:

#!/usr/bin/env python3.0

giriş = """
(1) topla
(2) çıkar
(3) çarp
(4) böl
(5) karesini hesapla
"""

print(giriş)

soru = input("Yapmak istediğiniz işlemin numarasını girin: ")

Bu kodları çalıştırdığımızda, ekranda giriş paragrafımız görünecek ve kullanıcıya, yapmak istediği işlemin ne olduğu sorulacaktır. Henüz kodlarımız eksik olduğu için, kullanıcı hangi sayıyı girerse girsin, programımız hiç bir iş yapmadan kapanacaktır. O halde yolumuza devam edelim:

if soru == "1":

Böylece ilk if deyimimizi tanımlamış olduk. Buradaki yazım şekline çok dikkat edin. Bu kodlarla Python’a şu emri vermiş oluyoruz:

Eğer “soru” adlı değişkenin değeri “1” ise, yani eğer kullanıcı klavyede “1” tuşuna basarsa...

if deyimlerinin en sonuna “:” işaretini koymayı unutmuyoruz. Python’a yeni başlayanların en çok yaptığı hatalardan birisi, sondaki bu “:” işaretini koymayı unutmalarıdır. Bu işaret bize çok ufak bir ayrıntıymış gibi görünse de Python için manevi değeri çok büyüktür! Python’un bize öfkeli mesajlar göstermesini istemiyorsak bu işareti koymayı unutmayacağız. Bu arada, burada “==” işaretini kullandığımıza da dikkat edin. Bunun ne anlama geldiğini önceki derslerimizde öğrenmiştik. Bu işaret, iki şeyin aynı değere sahip olup olmadığını karşılaştırmamızı sağlıyor. Biz burada “1”in değeri ile “soru” adlı değişkenin değerinin aynı olup olmadığını sorguladık. “1”in değeri tabii ki “1”dir, ama “soru” değişkeninin değeri kullanıcı tarafından belirleneceği için henüz bu değişkenin değerinin ne olduğunu bilmiyoruz. Bizim programımızda kullanıcı klavyeden “1”, “2”, “3”, “4” veya “5” değerlerinden herhangi birini seçebilir... Biz yukarıdaki kod yardımıyla, eğer kullanıcı klavyede “1” tuşuna basarsa ne yapılacağını belirleyeceğiz. O halde devam edelim:

if soru == "1":
    sayı1 = int(input("Toplama işlemi için ilk sayıyı girin: "))
    sayı2 = int(input("Toplama işlemi için ikinci sayıyı girin: "))
    print(sayı1, "+", sayı2, "=", sayı1 + sayı2)

Böylece ilk if bloğumuzu tanımlamış olduk.

if deyimimizi yazdıktan sonra ne yaptığımız çok önemli. Buradaki girintileri, programımız güzel görünsün diye yapmıyoruz. Bu girintilerin Python için bir anlamı var. Eğer bu girintileri vermezsek programımız çalışmayacaktır. Eğer Python kodlarına duyarlı bir metin düzenleyici kullanıyorsanız, “:” işaretini koyup “enter”e bastıktan sonra otomatik olarak girinti verilecektir. Eğer kullandığınız metin düzenleyici size böyle bir güzellik sunmuyorsa “enter”e bastıktan sonra klavyedeki boşluk (space) tuşunu kullanarak dört vuruşluk bir girinti oluşturabilirsiniz. Bu girintiler, ilk satırda belirlediğimiz if deyimiyle gösterilecek işlemlere işaret ediyor. Dolayısıyla burada yazılan kodları Pythonca’dan Türkçe’ye çevirecek olursak şöyle bir şey elde ederiz:

eğer sorunun değeri "1" ise:
    Toplama işlemi için ilk sayı girilsin ve biz bu değere "sayı1" diyelim
    Ardından toplama işlemi için ikinci sayı girilsin ve biz bu değere
    "sayı2" diyelim
    Son olarak, "sayı1", "+" işareti, "=" işareti, "sayı2" ve "sayı1 + sayı2"
    ekrana yazdırılsın...

Gelin isterseniz buraya kadar olan bölümü yine topluca görelim:

#!/usr/bin/env python3.0

giriş = """
(1) topla
(2) çıkar
(3) çarp
(4) böl
(5) karesini hesapla
"""

print(giriş)

soru = input("Yapmak istediğiniz işlemin numarasını girin: ")

if soru == "1":
    sayı1 = int(input("Toplama işlemi için ilk sayıyı girin: "))
    sayı2 = int(input("Toplama işlemi için ikinci sayıyı girin: "))
    print(sayı1, "+", sayı2, "=", sayı1 + sayı2)

Bu kodları çalıştırıp, klavyede “1” tuşuna bastığımızda, bizden bir sayı girmemiz istenecektir. İlk sayımızı girdikten sonra bize tekrar bir sayı girmemiz söylenecek. Bu emre de uyup “enter” tuşuna basınca, girdiğimiz bu iki sayının toplandığını göreceğiz... Fena sayılmaz, değil mi?

Şimdi programımızın geri kalan kısmını yazıyoruz. İşin temelini kavradığımıza göre birden fazla kod bloğunu aynı anda yazabiliriz:

elif soru == "2":
    sayı3 = int(input("Çıkarma işlemi için ilk sayıyı girin: "))
    sayı4 = int(input("Çıkarma işlemi için ikinci sayıyı girin: "))
    print(sayı3, "-", sayı4, "=", sayı3 - sayı4)

elif soru == "3":
    sayı5 = int(input("Çarpma işlemi için ilk sayıyı girin: "))
    sayı6 = int(input("Çarpma işlemi için ikinci sayıyı girin: "))
    print(sayı5, "x", sayı6, "=", sayı5 * sayı6)

elif soru == "4":
    sayı7 = int(input("Bölme işlemi için ilk sayıyı girin: "))
    sayı8 = int(input("Bölme işlemi için ikinci sayıyı girin: "))
    print(sayı7, "/", sayı8, "=", sayı7 / sayı8)

elif soru == "5":
    sayı9 = int(input("Karesini hesaplamak istediğiniz sayıyı giriniz: "))
    print(sayı9, "sayısının karesi =", sayı9 ** 2)

Bunlarla birlikte kodlarımızın büyük bölümünü tamamlamış oluyoruz. Bu bölümdeki tek fark, ilk if bloğunun aksine, burada elif bloklarını kullanmış olmamız... Eğer burada bütün blokları if kullanarak yazarsanız, biraz sonra kullanacağımız else bloğu etkisiz kalacaktır. Yukarıdaki kodlarda az da olsa farklılık gösteren tek yer en son elif bloğumuz. Esasında buradaki fark da pek büyük bir fark sayılmaz. Neticede tek bir sayının karesini hesaplayacağımız için, kullanıcıdan yalnızca tek bir giriş istiyoruz.

Şimdi de son bloğumuzu yazalım. Az evvel çıtlattığımız gibi, bu son blok bir else bloğu olacak:

else:
    print("Yanlış giriş.")
    print("Aşağıdaki seçeneklerden birini giriniz:", giriş)

Çok basit bir else bloğu ile işimizi bitirdik. Bu bloğun ne işe yaradığını biliyorsunuz. “Eğer kullanıcının girdiği değer yukarıdaki bloklardan hiç birine uymuyorsa bu else bloğunu işlet,” gibi bir komut vermiş oluyoruz bu else bloğu yardımıyla... Mesela kullanıcımız “1”, “2”, “3”, “4” veya “5” seçeneklerini girmek yerine “6” yazarsa, bu blok işletilecek...

Gelin isterseniz son kez kodlarımızı topluca bir görelim:

#!/usr/bin/env python3.0

giriş = """
(1) topla
(2) çıkar
(3) çarp
(4) böl
(5) karesini hesapla
"""

print(giriş)

soru = input("Yapmak istediğiniz işlemin numarasını girin: ")

if soru == "1":
    sayı1 = int(input("Toplama işlemi için ilk sayıyı girin: "))
    sayı2 = int(input("Toplama işlemi için ikinci sayıyı girin: "))
    print(sayı1, "+", sayı2, "=", sayı1 + sayı2)

elif soru == "2":
    sayı3 = int(input("Çıkarma işlemi için ilk sayıyı girin: "))
    sayı4 = int(input("Çıkarma işlemi için ikinci sayıyı girin: "))
    print(sayı3, "-", sayı4, "=", sayı3 - sayı4)

elif soru == "3":
    sayı5 = int(input("Çarpma işlemi için ilk sayıyı girin: "))
    sayı6 = int(input("Çarpma işlemi için ikinci sayıyı girin: "))
    print(sayı5, "x", sayı6, "=", sayı5 * sayı6)

elif soru == "4":
    sayı7 = int(input("Bölme işlemi için ilk sayıyı girin: "))
    sayı8 = int(input("Bölme işlemi için ikinci sayıyı girin: "))
    print(sayı7, "/", sayı8, "=", sayı7 / sayı8)

elif soru == "5":
    sayı9 = int(input("Karesini hesaplamak istediğiniz sayıyı giriniz: "))
    print(sayı9, "sayısının karesi =", sayı9 ** 2)

else:
    print("Yanlış giriş.")
    print("Aşağıdaki seçeneklerden birini giriniz:", giriş)

Genel olarak baktığımızda, bütün programın aslında basit bir “if, elif, else” yapısından ibaret olduğunu görüyoruz. Ayrıca bu kodlardaki simetriye de dikkatinizi çekmek isterim. Gördüğünüz gibi her “paragraf” bir if, elif veya else bloğundan oluşuyor ve her blok kendi içinde girintili bir yapı sergiliyor. Temel olarak şöyle bir şeyle karşı karşıyayız:

Eğer böyle bir durum varsa:
    şöyle bir işlem yap

Yok eğer şöyle bir durum varsa:
    böyle bir işlem yap

Eğer bambaşka bir durum varsa:
    şöyle bir şey yap

Böylelikle şirin bir hesap makinesine sahip olmuş olduk!... Hesap makinemiz pek yetenekli değil, ama olsun... Henüz bildiklerimiz bunu yapmamıza müsaade ediyor. Yine de başlangıçtan bu noktaya kadar epey yol katettiğimizi görüyorsunuz.

Şimdi bu programı çalıştırın ve neler yapabildiğine göz atın. Bu arada kodları da iyice inceleyin. Programı yeterince anladıktan sonra, program üzerinde kendinize göre bazı değişiklikler yapın, yeni özellikler ekleyin. Eksikliklerini, zayıf yönlerini bulmaya çalışın. Böylece bu dersten azami faydayı sağlamış olacaksınız.

Bu arada bu bölümde yazdığımız basit hesap makinesinin Python 2.x için olan bir benzerini zamanında http://www.istihza.com/kosul_elif.html adresinde vermiştim. O kodlarla bu kodları karşılaştırarak, Python 2.x ve 3.x sürümleri arasındaki bazı farkları görebilirsiniz...