Programlama öğrenme sürecinde teorik bilgileri pratiğe dökmek, mantıksal düşünme becerisini geliştiren en temel unsurdur. Python sözdizimi açısından sade, okunabilirliği yüksek ve yeni başlayanlar için öğrenme eğrisi oldukça yumuşak bir dildir. Bir programlama dilinin temel yapı taşlarını kavramanın klasik ve en verimli yollarından biri ise hesap makinesi projesidir.
Bu rehberde, sıfırdan bir python hesap makinesi uygulaması geliştireceğiz. Geliştireceğimiz proje; değişken tanımlama, kullanıcıdan veri alma, veri türü dönüştürme, fonksiyonlar, koşullu ifadeler ve hata yönetimi gibi temel programlama konseptlerini içerecektir.
Projede Kullanılacak Temel Kavramlar
Bir hesap makinesi yazarken Python dilinin sunduğu temel mekanizmalardan yararlanırız. Kod bloklarına geçmeden önce bu mekanizmaların ne işe yaradığını bilmek süreci kolaylaştırır:
- Fonksiyonlar: Kod tekrarını önlemek ve belirli bir matematiksel işlemi tek bir çatı altında toplamak için kullanılır.
- Kullanıcı Girişi (input): Kullanıcının klavyeden sayı ve işlem tercihi girmesini sağlar.
- Tip Dönüşümü (Type Casting): Kullanıcıdan alınan veriler varsayılan olarak metin (string) biçimindedir. Aritmetik işlem yapabilmek için bunları ondalıklı sayı (float) türüne dönüştürmemiz gerekir.
- Koşullu İfadeler (if-elif-else): Kullanıcının seçtiği işleme göre hangi hesaplama bloğunun çalışacağını belirler.
- Döngüler (while): Kullanıcı çıkış yapmak isteyene kadar uygulamanın kapanmadan çalışmaya devam etmesini sağlar.
- Hata Yakalama (try-except): Sayı yerine geçersiz karakter girilmesi veya sıfıra bölme hatası gibi durumlarda programın çökmesini engeller.
Aritmetik Fonksiyonların Tanımlanması
Yazılım mimarisinde modülerlik önemlidir. Hesap makinesinin temel dört işlemini bağımsız fonksiyonlar olarak tanımlayarak işe başlayacağız. Bu yaklaşım kodun okunabilirliğini ve ileride yeni özellikler eklenmesini kolaylaştırır.
def topla(x, y):
return x + y
def cikar(x, y):
return x - y
def carp(x, y):
return x * y
def bol(x, y):
if y == 0:
return "Hata: Bir sayı sıfıra bölünemez."
return x / y
Yukarıdaki kod bloğunda dört temel matematiksel işlem fonksiyon haline getirilmiştir. Fonksiyonlar aldıkları iki parametre üzerinde işlem yaparak sonucu return ifadesiyle geri döndürür. Bölme işleminde paydanın sıfır olup olmadığı koşullu ifade ile kontrol edilir. Matematiksel olarak bir sayının sıfıra bölünmesi tanımsız olduğu için, programın çökmesini önlemek amacıyla bu denetim fonksiyon içerisinde yapılmıştır.
Kullanıcı Arayüzü ve Menü Döngüsü
Kullanıcının hangi işlemi yapmak istediğini seçebileceği bir menü tasarlamalıyız. Programın tek bir işlemden sonra kapanmasını engellemek için kodları sonsuz bir while döngüsü içine alacağız.
def menu():
print("n--- Hesap Makinesi ---")
print("1. Toplama")
print("2. Çıkarma")
print("3. Çarpma")
print("4. Bölme")
print("q. Çıkış")
Bu fonksiyon ekrana sade bir seçenek listesi yazdırır. Kullanıcı yapmak istediği işlemin numarasını veya çıkmak için ‘q’ tuşunu girecektir.
Kodların Birleştirilmesi ve Mantık Akışı
Tüm parçaları bir araya getirerek eksiksiz çalışan bir python hesap makinesi oluşturalım. Kullanıcıdan sayıları alırken ve seçim yaptırırken oluşabilecek hataları en aza indirmek için yapılandırılmış bir kontrol akışı kuracağız.
def topla(x, y):
return x + y
def cikar(x, y):
return x - y
def carp(x, y):
return x * y
def bol(x, y):
if y == 0:
return "Hata: Bir sayı sıfıra bölünemez."
return x / y
def hesap_makinesi():
while True:
print("n--- Hesap Makinesi ---")
print("1. Toplama")
print("2. Çıkarma")
print("3. Çarpma")
print("4. Bölme")
print("q. Çıkış")
secim = input("Lütfen bir işlem seçin (1/2/3/4/q): ").strip().lower()
if secim == 'q':
print("Programdan çıkılıyor...")
break
if secim not in ('1', '2', '3', '4'):
print("Geçersiz seçim! Lütfen menüdeki seçeneklerden birini girin.")
continue
try:
sayi1 = float(input("Birinci sayıyı girin: "))
sayi2 = float(input("İkinci sayıyı girin: "))
except ValueError:
print("Geçersiz giriş! Lütfen geçerli bir sayı girin.")
continue
if secim == '1':
sonuc = topla(sayi1, sayi2)
print(f"Sonuç: {sayi1} + {sayi2} = {sonuc}")
elif secim == '2':
sonuc = cikar(sayi1, sayi2)
print(f"Sonuç: {sayi1} - {sayi2} = {sonuc}")
elif secim == '3':
sonuc = carp(sayi1, sayi2)
print(f"Sonuç: {sayi1} * {sayi2} = {sonuc}")
elif secim == '4':
sonuc = bol(sayi1, sayi2)
print(f"Sonuç: {sayi1} / {sayi2} = {sonuc}")
if __name__ == "__main__":
hesap_makinesi()
Kodun Çalışma Mantığı
- ‘while True’ döngüsü, kullanıcı açıkça ‘q’ tuşuna basıp döngüyü kırana (break) kadar çalışmaya devam eder.
- ‘strip().lower()’ metotları, kullanıcının girdiği metnin başındaki veya sonundaki boşlukları temizler ve harfi küçülterek büyük ‘Q’ girişlerini de geçerli kılar.
- ‘secim not in’ kontrolü, kullanıcının 1, 2, 3 veya 4 dışında rastgele bir tuşa basması durumunda döngünün başına dönmesini (continue) sağlar.
- ‘try-except’ bloğu, sayı girişinde harf girilmesi durumunda programın çökmesini önler. Eğer ‘float()’ dönüşümü başarısız olursa ‘ValueError’ yakalanır ve kullanıcı bilgilendirilir.
- ‘if __name__ == “__main__”:’ satırı, bu dosyanın doğrudan çalıştırıldığında fonksiyonun tetiklenmesini, başka bir dosyaya modül olarak aktarıldığında ise otomatik çalışmamasını temin eder.
Siber Güvenlik ve Kod Güvenliği Açısından Önemli Bir Not
Yeni başlayan bazı yazılımcılar dinamik hesaplamalar için Python’daki yerleşik ‘eval()’ fonksiyonunu kullanmayı tercih edebilir. Örneğin, kullanıcının yazdığı “5 + 3” ifadesini doğrudan ‘eval(“5 + 3”)’ şeklinde çalıştırmak pratik görünebilir.
Ancak siber güvenlik perspektifinden bakıldığında ‘eval()’ fonksiyonu ciddi bir güvenlik açığıdır (Remote Code Execution potansiyeli taşır). Kötü niyetli bir kullanıcı sisteme ait dosyaları silen veya sunucuya komut gönderen bir zararlı kodu bu alana yazabilir. Dolayısıyla, hesap makinesi gibi basit araçlarda dahi kullanıcı girdilerini kesin kurallarla sınırlandırmak ve güvenli fonksiyonlar üzerinden çalıştırmak en temel güvenlik prensibidir.
Özet ve Sonraki Adımlar
Bu yazıda, Python dilinin temel unsurlarını kullanarak dayanıklı ve hataya kapalı bir konsol hesap makinesi geliştirdik. Fonksiyonel programlama adımlarını uygulayarak mantıksal akışı kontrol ettik ve veri dönüşümlerini yönettik.
Bir sonraki adım olarak bu projeyi geliştirebilirsiniz:
- Üs alma ve karekök gibi ileri seviye matematik fonksiyonlarını ekleyebilirsiniz.
- Geçmiş hesaplamaları bir liste veya harici bir metin dosyasında tutarak işlem geçmişi özelliği geliştirebilirsiniz.
- Tkinter veya PyQt gibi kütüphaneleri kullanarak bu terminal uygulamasını grafiksel bir masaüstü arayüzüne taşıyabilirsiniz.


التعليقات
لا توجد تعليقات بعد. كن أول من يعلّق.