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