Python’da Hesap Makinesi Programı Yapımı
Giriş
Python programlama dili, sayısal işlemler yapmak ve matematiksel ifadeleri değerlendirmek için harika bir yazılım dilidir.
Bu güçlü özelliği kullanarak, günlük hayatta işe yarayan kullanışlı programlar geliştirebiliriz.
Sizlerle beraber bu yazımızda hesap makinesi uygulaması yapacağız. Bu uygulama, komut satırında çalışan bir hesap makinesi programı olacaktır.
Bu hesap makinesi, başlangıçta yalnızca temel aritmetik işlemleri yapabilecek (toplama, çıkarma, çarpma, bölme vb.),
ancak rehberin sonunda, bu kodu nasıl geliştirebileceğine dair
fikirler de bulacaksınız. Yani daha da gelişmiş bir hesap makinesi için sağlam bir temel oluşturacağız.
Bu hesap makinesini oluştururken şu temel Python bileşenlerini kullanacağız:
- Matematiksel operatörler (
+,-,*,/vb.) - Değişkenler (kullanıcının girdiği verileri saklamak için)
- Koşul ifadeleri (if–elif–else) (hangi işlemin yapılacağını belirlemek için)
- Fonksiyonlar (kodumuzu düzenli ve tekrar kullanılabilir hale getirmek için)
- Kullanıcı girişi (input) (kullanıcının işlem ve sayı girmesini sağlamak için)
Tüm bu parçaları birleştirerek, tamamen komut satırından çalışan mini bir hesap makinesi yapacağız.
Adım 1 — Kullanıcıdan Girdi Almak
Bir hesap makinesi, en iyi şekilde insanın girdiği işlemleri çözmek için çalışır.
Yani programımızın ilk adımı, kullanıcının sayıları ve işlemi girmesini sağlamaktır.
Öncelikle, programımız için bir Python dosyası oluşturacağız.
Bu örnekte dosyamızın adını hesapmakinesi.py yapıyoruz.
İstersen nano, VS Code veya başka bir metin düzenleyici kullanabilirsin:
nano hesapmakinesi.py
Şimdi dosyamıza programı çalıştıracak kodları ekleyelim.
Bu örnekte kullanıcıdan iki sayı isteyeceğiz.
Bunun için Python’un yerleşik input() fonksiyonunu kullanabiliriz.
Bu fonksiyon, klavyeden kullanıcı girişi alır ve girilen değeri bir değişkende saklamamıza izin verir.
Parantez içine bir yazı (string) ekleyerek kullanıcıya ne girmesi gerektiğini belirtebiliriz.
Ayrıca, kullanıcı girdisi ile yazının birbirine yapışmaması için sorunun sonuna bir boşluk ( ) koymak iyi bir alışkanlıktır.
sayi1 = input("Birinci sayıyı girin: ")
sayi2 = input("İkinci sayıyı girin: ")
Bu iki satırı yazdıktan sonra, programını kaydetmeyi unutma.
Eğer nano editörünü kullanıyorsan:
- CTRL + X tuşlarına bas,
- ardından Y tuşuna basarak kaydetmeyi onayla,
- ve ENTER ile çık.
Şimdi programı terminalden çalıştıralım:
python calculator.py
Bu komutu çalıştırdığında, terminalde program senden giriş yapmanı isteyecektir:
Birinci sayıyı girin: 5
İkinci sayıyı girin: 7
Programı birkaç kez çalıştırıp sayıdan farklı girdiler denersen Python’un bunları kabul ettiğini fark edersin.
Bunun nedeni, input() fonksiyonunun tüm girdileri string (metin) olarak almasıdır.
Yani Python, senin gerçekten sayı girdiğini varsaymaz; senin sadece bir metin yazdığını düşünür.
Bu yüzden, bu verilerle işlem yapmadan önce girdileri sayısal değerlere dönüştürmemiz gerekir.
Bu programda girdileri sayıya dönüştürmek istememizin iki temel nedeni var:
-
Matematiksel işlemleri yapabilmek için:
Python’un toplama, çıkarma veya çarpma işlemlerini doğru şekilde gerçekleştirebilmesi gerekir.
Bu da ancak veriler sayısal tipte (int veya float) olduğunda mümkündür. -
Kullanıcı girdisinin geçerli bir sayı olduğunu doğrulamak için:
Eğer kullanıcı yanlışlıkla harf ya da sembol girerse,
program bunu algılayıp hatayı düzgün bir şekilde yönetebilmelidir.
Hesap makinenin ihtiyacına göre, input() fonksiyonundan gelen string değeri
tamsayı veri tipine veya ondalıklı sayıya dönüştürebilirsin.
Bu örnekte sadece tamsayılarla çalışacağımız için, input() fonksiyonunu int() ile sarmalayarak
kullanıcı girdisini dönüştüreceğiz (convert)
ve onu tamsayı (int) türüne çevireceğiz:
sayi1 = int(input("Birinci sayıyı girin: "))
sayi2 = int(input("İkinci sayıyı girin: "))
Artık programı çalıştırıp iki tamsayı (integer) girdiğinde, herhangi bir hata almazsın.
Birinci sayıyı girin: 5
İkinci sayıyı girin: 7
Ancak, eğer harf, sembol ya da tamsayı olmayan bir değer girersen, Python şu hatayı verir:
ValueError: invalid literal for int() with base 10: 'a'
Şu ana kadar, kullanıcıdan aldığın girdileri tamsayı (integer) olarak aldın ve veri tipi olarak saklamak için iki değişken tanımladın.
Adım 2 — Operatörleri Ekleme
Programı tamamlamadan önce, toplam dört adet matematiksel operatör ekleyeceğiz:
+→ toplama-→ çıkarma*→ çarpma/→ bölme
Bu operatörler sayesinde, hesap makinemiz artık temel aritmetik işlemleri gerçekleştirebilecek.
Programı geliştirirken, her bölümün doğru çalıştığından emin olmak önemlidir.
Bu yüzden işe toplama işlemiyle başlayalım.
Kullanıcı sonuçları görebilsin diye, iki sayıyı print() fonksiyonunun içinde toplayacağız:
sayi1 = int(input("Birinci sayıyı girin: "))
sayi2 = int(input("İkinci sayıyı girin: "))
print(sayi1 + sayi2)
Şimdi programı çalıştır ve istenilen 2 sayıyı gir ve sonucu gör.
Birinci sayıyı girin: 5
İkinci sayıyı girin: 7
12
Programın çıktısı, işlemin doğru çalıştığını gösteriyor.
Şimdi kullanıcıya program boyunca daha anlaşılır bir geri bildirim sunalım.
Bunu yapmak için, string biçimlendirme (string formatting) kullanabiliriz.
Böylece kullanıcıya hangi sayıları girdiğini, hangi operatörün kullanıldığını ve elde edilen sonucu açık bir şekilde gösterebiliriz.
sayi1 = int(input("Birinci sayıyı girin: "))
sayi2 = int(input("İkinci sayıyı girin: "))
print(f"{sayi1} + {sayi2} işleminin sonucu: {sayi1 + sayi2}")
Artık programı tekrar çalıştırdığında, kullanıcı yapılan matematiksel işlemi doğrulayabileceği ek bir çıktı görecek:
Birinci sayıyı girin: 5
İkinci sayıyı girin: 7
5 + 7 işleminin sonucu: 12
String biçimlendirme kullanmak, kullanıcıya yapılan işlem hakkında daha net bir geri bildirim sağlar.
Artık bu noktada, diğer operatörleri de ekleyebilirsin. Toplama işlemi için kullandığın formatı koruyarak,
çıkarma, çarpma ve bölme işlemlerini de programa dahil edelim:
sayi1 = int(input("Birinci sayıyı girin: "))
sayi2 = int(input("İkinci sayıyı girin: "))
print(f"{sayi1} + {sayi2} = {sayi1 + sayi2}")
print(f"{sayi1} - {sayi2} = {sayi1 - sayi2}")
print(f"{sayi1} * {sayi2} = {sayi1 * sayi2}")
print(f"{sayi1} / {sayi2} = {sayi1 / sayi2}")
Burada, programına kalan operatörleri (-, *, /) de ekledin.
Eğer şu anda programı çalıştırırsan, tüm bu işlemler aynı anda çalışacaktır.
Ancak amacımız, kullanıcıya tek bir işlem seçme hakkı vermek. Yani program, her seferinde yalnızca bir işlem yapmalı.
Bunu sağlamak için koşul ifadelerini (if–elif–else) kullanacağız.
Bu yapılar sayesinde, kullanıcı hangi operatörü seçerse program sadece o işlemi gerçekleştirecek.
Adım 3 — Koşul İfadeleri (if–elif–else) Ekleme
Artık hesapmakinesi.py programımızın amacı,
kullanıcının farklı aritmetik operatörler arasından seçim yapabilmesini sağlamak.
Bunun için programın en üstüne, kullanıcıya ne yapması gerektiğini anlatan ve seçim yapma kısmını içeren bir bilgi metni ekleyeceğiz.
Birden fazla satırlık metin yazmak için üç tırnak kullanabiliriz:
print("""
Lütfen yapmak istediğiniz işlemi seçin:
1. Toplama (+)
2. Çıkarma (-)
3. Çarpma (*)
4. Bölme (/)
""")
Bu programda kullanıcılar, hangi işlemi yapmak istediklerini belirtmek için
operatör sembollerini (+, -, *, /) kullanacak.
Örneğin kullanıcı çıkarma işlemini yapmak istiyorsa - girecek.
Kullanıcıdan işlem seçimi alacağımız için yine input() fonksiyonunu kullanacağız.
Bu girdiyi bir değişkende saklayacağız:
islem = input("Yapmak istediğiniz işlemi girin (+, -, *, /): ")
sayi1 = int(input("Birinci sayıyı girin: "))
sayi2 = int(input("İkinci sayıyı girin: "))
print(f"{sayi1} + {sayi2} = {sayi1 + sayi2}")
print(f"{sayi1} - {sayi2} = {sayi1 - sayi2}")
print(f"{sayi1} * {sayi2} = {sayi1 * sayi2}")
print(f"{sayi1} / {sayi2} = {sayi1 / sayi2}")
Bu noktada, programı çalıştırırsan ilk girdi ekranında ne yazarsan yaz, hiçbir şey olmayacaktır. Çünkü henüz koşul ifadeleri (if–elif–else) eklemedik.
Bu sorunu çözmek için, her bir operatör için ayrı bir koşul tanımlayacağız:
if→ toplama işlemini yapacak,elif→ çıkarma, çarpma ve bölme işlemlerini yönetecek,else→ kullanıcı geçersiz bir operatör girdiğinde hata mesajı verecek.
islem = input('''
Lütfen yapmak istediğiniz işlemi seçin:
+ → Toplama
- → Çıkarma
* → Çarpma
/ → Bölme
''')
sayi1 = int(input("Birinci sayıyı girin: "))
sayi2 = int(input("İkinci sayıyı girin: "))
if islem == "+":
print(f"{sayi1} + {sayi2} = {sayi1 + sayi2}")
elif islem == "-":
print(f"{sayi1} - {sayi2} = {sayi1 - sayi2}")
elif islem == "*":
print(f"{sayi1} * {sayi2} = {sayi1 * sayi2}")
elif islem == "/":
print(f"{sayi1} / {sayi2} = {sayi1 / sayi2}")
else:
print("Geçersiz bir işlem seçtiniz! Lütfen +, -, * veya / girin.")
Programın nasıl çalıştığını adım adım inceleyelim
-
Program önce kullanıcıdan bir işlem sembolü girmesini ister.
Örneğin kullanıcı*yazar (çarpma işlemi). -
Ardından iki sayı ister.
Diyelim ki kullanıcı sırasıyla 15 ve 25 giriyor. -
Bu noktada program, yapılan işlemi ve sonucu ekrana yazdırır:
Lütfen yapmak istediğiniz işlemi seçin:
+ → Toplama
- → Çıkarma
* → Çarpma
/ → Bölme
Birinci sayıyı girin: 15
İkinci sayıyı girin: 25
15 * 25 = 375
Programın yapısı gereği, kullanıcı ilk işlem seçimi ekranında örneğin % gibi geçersiz bir karakter girerse,
program hatayı ancak sayıları girdikten sonra gösterecektir.
Bu durum kullanıcı deneyimini olumsuz etkileyebilir.
Bu nedenle, farklı senaryoları daha iyi yönetmek için girdi doğrulama (input validation) ya da
hatalı seçimde yeniden sorma gibi geliştirmeler düşünebilirsin.
Bu noktaya kadar oluşturduğun program tamamen çalışır durumdadır. Toplama, çıkarma, çarpma ve bölme işlemlerini başarıyla yapabiliyor.
Ancak şu anda tek seferlik bir hesaplama yapabiliyor.
Yeni bir işlem yapmak istediğinde programı yeniden çalıştırman gerekiyor.
Bir sonraki adımda, bu durumu çözmek için birkaç fonksiyon tanımlayacağız.
Bu sayede program, kullanıcı isterse birden fazla işlem yapabilecek hale gelecek.
Adım 4 — Fonksiyonları Tanımlama
Kullanıcının programı istediği kadar çalıştırabilmesi için, artık kodumuza fonksiyonlar ekleyeceğiz.
İlk adım olarak, mevcut kod bloğunu bir fonksiyon içine alalım. Bu fonksiyona calculate() adını vereceğiz.
Fonksiyonun içinde yer alan kodlar bir seviye içeriden yazılmalıdır.
Ayrıca, programın gerçekten çalışması için dosyanın en altına
fonksiyonu çağırmamız (call etmemiz) gerekir.
def calculate():
islem = input('''
Lütfen yapmak istediğiniz işlemi seçin:
+ → Toplama
- → Çıkarma
* → Çarpma
/ → Bölme
''')
sayi1 = int(input("Birinci sayıyı girin: "))
sayi2 = int(input("İkinci sayıyı girin: "))
if islem == "+":
print(f"{sayi1} + {sayi2} = {sayi1 + sayi2}")
elif islem == "-":
print(f"{sayi1} - {sayi2} = {sayi1 - sayi2}")
elif islem == "*":
print(f"{sayi1} * {sayi2} = {sayi1 * sayi2}")
elif islem == "/":
print(f"{sayi1} / {sayi2} = {sayi1 / sayi2}")
else:
print("Geçersiz bir işlem seçtiniz! Lütfen +, -, * veya / girin.")
# Fonksiyonu çağır
calculate()
Şimdi ikinci fonksiyonumuzu oluşturalım.
Bu fonksiyon, kullanıcının yeniden hesaplama yapmak isteyip istemediğini soracak. 🔁
Bu yapıyı yine koşul ifadeleriyle (if, elif, else) kuracağız.
Bu sefer yalnızca üç durumumuz olacak:
- Kullanıcı evet derse program yeniden çalışacak,
- hayır derse program sonlanacak,
- başka bir şey yazarsa hata mesajı verip tekrar soracak.
Fonksiyonun adı again() olacak ve def calculate(): bloğundan sonra eklenecek:
# Kullanıcıya hesap makinesini tekrar kullanmak isteyip istemediğini soran fonksiyon
def again():
# Kullanıcıdan giriş al
tekrar = input('''
Yeni bir işlem yapmak ister misiniz?
Evet için E, Hayır için H tuşlayın:
''')
# Eğer kullanıcı 'E' yazarsa hesaplamayı yeniden başlat
if tekrar.upper() == 'E':
calculate()
# Eğer kullanıcı 'H' yazarsa programı sonlandır
elif tekrar.upper() == 'H':
print('Görüşmek üzere! 👋')
# Geçersiz bir giriş olursa tekrar sor
else:
print("Geçersiz giriş! Lütfen 'E' veya 'H' girin.")
again()
# calculate() fonksiyonunu programın sonunda çağır
calculate()
Yukarıdaki else yapısı hatalı girişleri yakalıyor olsa da, kullanıcı büyük–küçük harf farkıyla “Evet / Hayır” yerine
“e / h” veya “E / H” gibi kısa cevaplar da verebilir.
Bunu daha kullanıcı dostu hale getirmek için
str.upper() veya str.lower() fonksiyonlarını kullanabiliriz.
def again():
tekrar = input('''
Yeni bir işlem yapmak ister misiniz?
Evet için E, Hayır için H tuşlayın:
''')
# Küçük veya büyük harf fark etmeksizin 'E' kabul edilir
if tekrar.upper() == 'E':
calculate() # Hesaplamayı yeniden başlat
# Küçük veya büyük harf fark etmeksizin 'H' kabul edilir
elif tekrar.upper() == 'H':
print('Görüşmek üzere! 👋')
else:
print("Geçersiz giriş! Lütfen 'E' veya 'H' girin.")
again() # Hatalı girişte yeniden sor
Bu noktada, kullanıcıya devam edip etmek istemediğini soran kodun çalışması için again() fonksiyonunu calculate() fonksiyonunun sonuna eklemelisin.
def calculate():
islem = input('''
Lütfen yapmak istediğiniz işlemi seçin:
+ → Toplama
- → Çıkarma
* → Çarpma
/ → Bölme
''')
sayi1 = int(input("Birinci sayıyı girin: "))
sayi2 = int(input("İkinci sayıyı girin: "))
if islem == "+":
print(f"{sayi1} + {sayi2} = {sayi1 + sayi2}")
elif islem == "-":
print(f"{sayi1} - {sayi2} = {sayi1 - sayi2}")
elif islem == "*":
print(f"{sayi1} * {sayi2} = {sayi1 * sayi2}")
elif islem == "/":
print(f"{sayi1} / {sayi2} = {sayi1 / sayi2}")
else:
print("Geçersiz bir işlem seçtiniz! Lütfen +, -, * veya / girin.")
# ✅ Her işlemden sonra tekrar sorma fonksiyonunu çağır
again()
def again():
tekrar = input('''
Yeni bir işlem yapmak ister misiniz?
Evet için E, Hayır için H tuşlayın:
''')
if tekrar.upper() == 'E':
calculate()
elif tekrar.upper() == 'H':
print('Görüşmek üzere! 👋')
else:
print("Geçersiz giriş! Lütfen 'E' veya 'H' girin.")
again()
# Programın başlangıç noktası
calculate()
Artık terminal pencerende python hesapmakinesi.py komutunu çalıştırarak programını başlatabilir ve istediğin kadar işlem yapabilirsin.
Adım 5 — Kodu Geliştirme
Artık elinde gayet güzel, tamamen çalışan bir program var.
Ancak bu kodu geliştirmek için yapabileceğin çok daha fazla şey bulunuyor.
Örneğin, programın en üstüne kullanıcıyı karşılayan bir karşılama fonksiyonu ekleyebilirsin.
Bu fonksiyon, program başlatıldığında kullanıcıya hoş geldin mesajı gösterebilir.
def welcome():
print('''
==============================
Python Hesap Makinesine Hoş Geldin!
==============================
''')
# Program başlarken çalıştır
welcome()
calculate()
Programın geneline daha fazla hata kontrolü (error-handling) ekleme fırsatları bulunuyor.
Örneğin, kullanıcıdan sayı istenirken "plankton" gibi geçersiz bir değer girilse bile
programın çökmeden çalışmaya devam etmesini sağlayabilirsin.
Şu anda programda sayi1 ve sayi2 tam sayı (integer) değilse, kullanıcı bir hata alır
ve program tamamen durur.
Ayrıca kullanıcı bölme işlemi ( / ) seçip ikinci sayı olarak 0 girerse,
aşağıdaki hata oluşur:
ZeroDivisionError: division by zero
Bu alıştırmada yalnızca dört operatörle sınırlı kaldık,
ancak istersen programa daha fazla matematiksel operatör ekleyebilirsin.
islem = input('''
Lütfen yapmak istediğiniz işlemi seçin:
+ → Toplama
- → Çıkarma
* → Çarpma
/ → Bölme
** → Üs Alma
% → Mod (Kalan Bulma)
''')
Ek olarak, programın belirli bölümlerini bir döngü (loop) yapısıyla yeniden yazmak isteyebilirsin.
Bu sayede kod daha düzenli olur ve kullanıcı tekrar tekrar işlem yapabilmek için
programı baştan çalıştırmak zorunda kalmaz.
Her programlama projesinde hataları ele almanın, kodu geliştirmenin ve
iyileştirmenin birden fazla yolu vardır.
Akılda tut: Kod yazarken önemli olan “mükemmel çözümü” bulmak değil,
çalışan ve geliştirilebilir bir çözüm üretebilmektir.
Sonuç
Bu eğitimde, komut satırında çalışan basit bir hesap makinesi programının
nasıl oluşturulabileceğini adım adım öğrendin.
Artık bu örneği temel alarak kodu geliştirebilir, yeni özellikler ekleyebilir
ve kullanıcı etkileşimi gerektiren diğer projelere gönül rahatlığıyla başlayabilirsin.