• Sonuç bulunamadı

Python’da Ko¸ sula Ba ˘ glı Durumlar

2.5 Basit bir Hesap Makinesi

¸

Su ana kadar Python’da pek çok ¸sey ö˘grendik. Bu ö˘grendi˘gimiz ¸seylerle artık kısmen yararlı bazı programlar yazabiliriz. Elbette henüz yazaca˘gımız programlar pek yetenekli olamayacak olsa da, en azından bize ö˘grendiklerimizle pratik yapma imkanı sa˘glayacak... Bu bölümde, özellikleif, elif ve else yapılarını kullanarak çok basit bir hesap makinesi yapmayı deneye-ce˘giz. Bu arada, bu derste yeni ¸seyler ö˘grenerek ufkumuzu ve bilgimizi geni¸sletmeyi de ihmal etmeyece˘giz.

˙Isterseniz önce kullanıcıya bazı seçenekler sunarak i¸se ba¸slayalım:

#!/usr/bin/env python3.0

˙Ilk satırın sadece GNU/Linux kullanıcılarını ilgilendirdi˘gini biliyoruz artık. Bu satırı Windows kullanıcıları yazmasa da olur...

˙Ilk satırın ardından kullanıcıya bazı seçenekler sunuyoruz. Bu seçenekleri ekrana yazdırmak için üç tırnaktan yararlandı˘gımıza dikkat edin. Birden fazla satıra yayılmı¸s bu tür ifadeleri en kolay üç tırnak yardımıyla yazdırabiliriz. Esasında her bir seçenek için ayrı bir de˘gi¸sken tanımlamak da mümkündür. Yani aslında yukarıdaki kodları ¸sö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˘ger programınızda yukarı-daki ¸sekli kullanmak isterseniz, bu seçeneklerin yan yana de˘gil de, alt alta görünmesini sa˘ gla-mak için Python’un bize sundu˘gu çok faydalı bir parçacıktan yararlanabilirsiniz. Bu parçacı˘gın adı “sep”tir. “sep”, ˙Ingilizce “separator” (ayraç) kelimesinin kısaltmasıdır. Kullanımı tıpkı daha önce ö˘grendi˘gimiz “end” parçacı˘gı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ı˘gının de˘geri olarak “\n” kaçı¸s dizisini belirledi˘gimize dikkat edin. “\n”

kaçı¸s dizisinin ne i¸se yaradı˘gını hatırlıyorsunuz. Bu dizi, “yeni satır” olu¸sturmamızı sa˘glıyordu...

Burada, “ayraç” olarak “yeni satır” kaçı¸s dizisini belirledi˘gimiz için her bir seçenek yan yana de˘gil, alt alta görünecektir. Elbette “sep” parçacı˘gı için istedi˘giniz de˘geri belirleyebilirsiniz.

Mesela her bir seçene˘gi “yeni satır i¸saretiyle” ayırmak yerine, “–” gibi bir i¸saretle ayırmayı da tercih edebilirsiniz:

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

Programınızda nasıl bir giri¸s paragrafı belirleyece˘giniz konusunda özgürsünüz. Gelin isterseniz biz birinci ¸sekille yolumuza devam edelim:

#!/usr/bin/env python3.0

Burada “giri¸s” adlı bir de˘gi¸sken olu¸sturduk. Bu de˘gi¸skenin içinde barındırdı˘gı de˘geri kul-lanıcıların görebilmesi için print() fonksiyonu yardımıyla bu de˘gi¸skeni ekrana yazdırıyoruz.

Devam edelim:

soru = input("Yapmak istedi˘giniz i¸slemin numarasını girin: ")

Bu kod yardımıyla kullanıcıya bir soru soruyoruz. Kullanıcıdan yapmasını istedi˘gimiz ¸sey, yukarıda belirledi˘gimiz giri¸s 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˘gi numaranın kar¸sısında yazan i¸sleme yönlendirece˘giz. Yani mesela e˘ger kullanıcı klavyedeki “1” tu¸suna basarsa hesap makinemiz toplama i¸slemi yapacaktır... “2” tu¸su ise kullanıcıyı “çıkarma” i¸slemine yönlendirir...

input() fonksiyonunu i¸sledi˘gimiz bölümde, bu fonksiyonun de˘ger olarak bir “karakter dizisi”

(string) verdi˘gini söylemi¸stik. Yukarıdaki kodun çıktısı da do˘gal olarak bir karakter dizisi ola-caktır. Bizim ¸su a¸samada kullanıcıdan karakter dizisi almamızın bir sakıncası yok. Çünkü kullanıcının girece˘gi “1”, “2”, “3”, “4” veya “5” de˘gerleriyle herhangi bir matematik i¸slemi yapmayaca˘gız. Kullanıcının girece˘gi bu de˘gerler, yalnızca bize onun hangi matematik i¸slemini yapmak istedi˘gini belirtecek. Dolayısıyla input() fonksiyonunu yukarıdaki ¸sekilde kullanıy-oruz...

˙Isterseniz ¸simdiye kadar gördü˘gümüz kısma topluca bakalım:

#!/usr/bin/env python3.0

giri¸s = """

soru = input("Yapmak istedi˘giniz i¸slemin numarasını girin: ")

Bu kodları çalı¸stırdı˘gımızda, ekranda giri¸s paragrafımız görünecek ve kullanıcıya, yapmak iste-di˘gi i¸slemin ne oldu˘gu sorulacaktır. Henüz kodlarımız eksik oldu˘gu için, kullanıcı hangi sayıyı girerse girsin, programımız hiç bir i¸s yapmadan kapanacaktır. O halde yolumuza devam ede-lim:

if soru == "1":

Böylece ilk if deyimimizi tanımlamı¸s olduk. Buradaki yazım ¸sekline çok dikkat edin. Bu kod-larla Python’a ¸su emri vermi¸s oluyoruz:

“E˘ger “soru” adlı de˘gi¸skenin de˘geri “1” ise, yani e˘ger kullanıcı klavyede “1” tu¸suna basarsa...“

if deyimlerinin en sonuna ”:” i¸saretini koymayı unutmuyoruz. Python’a yeni ba¸slayanların en çok yaptı˘gı hatalardan birisi, sondaki bu ”:” i¸saretini koymayı unutmalarıdır. Bu i¸saret bize çok ufak bir ayrıntıymı¸s gibi görünse de Python için manevi de˘geri çok büyüktür! Python’un bize öfkeli mesajlar göstermesini istemiyorsak bu i¸sareti koymayı unutmayaca˘gız. Bu arada, burada

“==” i¸saretini kullandı˘gımıza da dikkat edin. Bunun ne anlama geldi˘gini önceki derslerimizde ö˘grenmi¸stik. Bu i¸saret, iki ¸seyin aynı de˘gere sahip olup olmadı˘gını kar¸sıla¸stırmamızı sa˘glıyor.

Biz burada “1”in de˘geri ile “soru” adlı de˘gi¸skenin de˘gerinin aynı olup olmadı˘gını sorguladık.

“1”in de˘geri tabii ki “1”dir, ama “soru” de˘gi¸skeninin de˘geri kullanıcı tarafından belirlenece˘gi için henüz bu de˘gi¸skenin de˘gerinin ne oldu˘gunu bilmiyoruz. Bizim programımızda kullanıcı klavyeden “1”, “2”, “3”, “4” veya “5” de˘gerlerinden herhangi birini seçebilir... Biz yukarıdaki kod yardımıyla, e˘ger kullanıcı klavyede “1” tu¸suna basarsa ne yapılaca˘gını belirleyece˘giz. O halde devam edelim:

if soru == "1":

sayı1 = int(input("Toplama i¸slemi için ilk sayıyı girin: ")) sayı2 = int(input("Toplama i¸slemi için ikinci sayıyı girin: ")) print(sayı1, "+", sayı2, "=", sayı1 + sayı2)

Böylece ilkif blo˘gumuzu tanımlamı¸s olduk.

if deyimimizi yazdıktan sonra ne yaptı˘gı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˘ger bu girintileri vermezsek programımız çalı¸smayacaktır. E˘ger Python kodlarına duyarlı bir metin düzenleyici kullanıyorsanız, ”:” i¸saretini koyup “enter”e bastıktan sonra otomatik olarak girinti verilecektir.

E˘ger kullandı˘gınız metin düzenleyici size böyle bir güzellik sunmuyorsa “enter”e bastıktan sonra klavyedeki bo¸sluk (space) tu¸sunu kullanarak dört vuru¸sluk bir girinti olu¸sturabilirsiniz. Bu girintiler, ilk satırda belirledi˘gimizif deyimiyle gösterilecek i¸slemlere i¸saret ediyor. Dolayısıyla burada yazılan kodları Pythonca’dan Türkçe’ye çevirecek olursak ¸söyle bir ¸sey elde ederiz:

e˘ger sorunun de˘geri "1" ise:

Toplama i¸slemi için ilk sayı girilsin ve biz bu de˘gere "sayı1" diyelim Ardından toplama i¸slemi için ikinci sayı girilsin ve biz bu de˘gere

"sayı2" diyelim

Son olarak, "sayı1", "+" i¸sareti, "=" i¸sareti, "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

soru = input("Yapmak istedi˘giniz i¸slemin numarasını girin: ") if soru == "1":

sayı1 = int(input("Toplama i¸slemi için ilk sayıyı girin: ")) sayı2 = int(input("Toplama i¸slemi için ikinci sayıyı girin: ")) print(sayı1, "+", sayı2, "=", sayı1 + sayı2)

Bu kodları çalı¸stırıp, klavyede “1” tu¸suna bastı˘gımızda, bizden bir sayı girmemiz istenecektir.

˙Ilk sayımızı girdikten sonra bize tekrar bir sayı girmemiz söylenecek. Bu emre de uyup “enter”

tu¸suna basınca, girdi˘gimiz bu iki sayının toplandı˘gını görece˘giz... Fena sayılmaz, de˘gil mi?

¸

Simdi programımızın geri kalan kısmını yazıyoruz. ˙I¸sin temelini kavradı˘gımıza göre birden fazla kod blo˘gunu aynı anda yazabiliriz:

elif soru == "2":

sayı3 = int(input("Çıkarma i¸slemi için ilk sayıyı girin: ")) sayı4 = int(input("Çıkarma i¸slemi için ikinci sayıyı girin: ")) print(sayı3, "-", sayı4, "=", sayı3 - sayı4)

elif soru == "3":

sayı5 = int(input("Çarpma i¸slemi için ilk sayıyı girin: ")) sayı6 = int(input("Çarpma i¸slemi 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¸slemi için ilk sayıyı girin: ")) sayı8 = int(input("Bölme i¸slemi 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˘giniz 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ı¸s oluyoruz. Bu bölümdeki tek fark, ilkif blo˘gunun aksine, buradaelif bloklarını kullanmı¸s olmamız... E˘ger burada bütün blokları if kullanarak yazarsanız, biraz sonra kullanaca˘gımızelse blo˘gu etkisiz kalacaktır. Yukarıdaki kodlarda az da olsa farklılık gösteren tek yer en son elif blo˘gumuz. Esasında buradaki fark da pek büyük bir fark sayılmaz. Neticede tek bir sayının karesini hesaplayaca˘gımız için, kul-lanıcıdan yalnızca tek bir giri¸s istiyoruz.

¸

Simdi de son blo˘gumuzu yazalım. Az evvel çıtlattı˘gımız gibi, bu son blok birelse blo˘gu olacak:

else:

print("Yanlı¸s giri¸s.")

print("A¸sa˘gıdaki seçeneklerden birini giriniz:", giri¸s)

Çok basit bir else blo˘gu ile i¸simizi bitirdik. Bu blo˘gun ne i¸se yaradı˘gını biliyorsunuz. “E˘ger kullanıcının girdi˘gi de˘ger yukarıdaki bloklardan hiç birine uymuyorsa bu else blo˘gunu i¸slet,”

gibi bir komut vermi¸s oluyoruz bu else blo˘gu yardımıyla... Mesela kullanıcımız “1”, “2”, “3”,

“4” veya “5” seçeneklerini girmek yerine “6” yazarsa, bu blok i¸sletilecek...

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

#!/usr/bin/env python3.0

soru = input("Yapmak istedi˘giniz i¸slemin numarasını girin: ") if soru == "1":

sayı1 = int(input("Toplama i¸slemi için ilk sayıyı girin: ")) sayı2 = int(input("Toplama i¸slemi için ikinci sayıyı girin: ")) print(sayı1, "+", sayı2, "=", sayı1 + sayı2)

elif soru == "2":

sayı3 = int(input("Çıkarma i¸slemi için ilk sayıyı girin: ")) sayı4 = int(input("Çıkarma i¸slemi için ikinci sayıyı girin: ")) print(sayı3, "-", sayı4, "=", sayı3 - sayı4)

elif soru == "3":

sayı5 = int(input("Çarpma i¸slemi için ilk sayıyı girin: ")) sayı6 = int(input("Çarpma i¸slemi 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¸slemi için ilk sayıyı girin: ")) sayı8 = int(input("Bölme i¸slemi 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˘giniz sayıyı giriniz: ")) print(sayı9, "sayısının karesi =", sayı9 ** 2)

else:

print("Yanlı¸s giri¸s.")

print("A¸sa˘gıdaki seçeneklerden birini giriniz:", giri¸s)

Genel olarak baktı˘gımızda, bütün programın aslında basit bir “if, elif, else” yapısından ibaret oldu˘gunu görüyoruz. Ayrıca bu kodlardaki simetriye de dikkatinizi çekmek isterim.

Gördü˘günüz gibi her “paragraf” birif, elif veya else blo˘gundan olu¸suyor ve her blok kendi içinde girintili bir yapı sergiliyor. Temel olarak ¸söyle bir ¸seyle kar¸sı kar¸sıyayız:

E˘ger böyle bir durum varsa:

¸

söyle bir i¸slem yap

Yok e˘ger ¸söyle bir durum varsa:

böyle bir i¸slem yap

E˘ger bamba¸ska bir durum varsa:

¸

söyle bir ¸sey yap

Böylelikle ¸sirin bir hesap makinesine sahip olmu¸s olduk!... Hesap makinemiz pek yetenekli de˘gil, ama olsun... Henüz bildiklerimiz bunu yapmamıza müsaade ediyor. Yine de ba¸slangıçtan bu noktaya kadar epey yol katetti˘gimizi görüyorsunuz.

¸

Simdi bu programı çalı¸stırın ve neler yapabildi˘gine göz atın. Bu arada kodları da iyice inceleyin.

Programı yeterince anladıktan sonra, program üzerinde kendinize göre bazı de˘gi¸siklikler yapın, yeni özellikler ekleyin. Eksikliklerini, zayıf yönlerini bulmaya çalı¸sın. Böylece bu dersten azami faydayı sa˘glamı¸s olacaksınız.

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

BÖLÜM

3