Bu uygulamada basit bir hesap makinesi yapmaya çalışacağız. Bu uygulamanın, fonksiyon mantığını kavramak için gayet güzel olduğunu düşünüyorum. Bu projede bir 'işlemler menüsü' olacak ve kullanıcı, programı çalıştırdığında bu listeyi görecek; ona göre işlem seçecek. Ayrıca listeyi tekrar görebilmek için belli bir anahtar kelime belirleyeceğiz. Başlayalım.
İlk olarak calculator.py isimli bir dosya açıyorum ve içerisine bir menü yerleştiriyorum.

Gördüğünüz gibi basit bir menü oluşturdum ve bunu 'welcome' isminde bir değişkene atadım. Son olarak print(welcome) ifadesini verdim. Kullanıcı, programı çalıştırır çalıştırmaz aşağıdaki gibi bir görüntüyle karşılaşacak:

Menümüzde toplam 7 adet matematiksel işlemimiz mevcut. Kullanıcı, bu sayıları girdiğinde sayının ait olduğu işlemi yapabilmesi gerekiyor. Bununla beraber '99' sayısını girdiğinde program sonlanacaktır. Bunun neden böyle olduğunu sorgulamayın; güvenlik veya saldırı aracı yazmanın getirdiği racon böyle :). Menünün en altında ise şu ifade söz konusu: "Eğer operasyonlar listesini tekrar görmek isterseniz 'list' anahtar kelimesini giriniz". O zaman bunu da ayarlamamız gerekecek.
Menümüzü anladıktan sonra işe başlayalım. İlk önce ben bu 7 işlem için belli fonksiyonlar tanımlamak istiyorum. Fonksiyonlar, belli bir işi yapan yapılardı.
Bunun için toplama işleminden başlayarak sırasıyla fonksiyonlarımı tanımlıyorum.

Fonksiyonlarımı tanımladım ve bunların içine henüz bir şey yazmayacağım için 'pass' komutunu verdim; uslu uslu beklesinler. Şimdi, toplama (addition) işleminden başlayalım.
Bunun için ilk önce addition() fonksiyonundaki 'pass' komutunu siliyorum. Sonrasında; bir toplama işlemi için iki sayı almamız ve bunları toplamamız lazım.

İki sayı aldım ve bunları print ile toplayıp yazdırdım. Peki, burada neden return kullanmadım? Çünkü buradan gelecek sonucu şu an için başka bir yerde kullanmayı planlamıyorum; print yeterli. Bu noktada siz, return kullanmak isterseniz bu fonksiyonu çağırırken onu bir değişkene atayıp değişkeni çağırmanız gerektiğini biliyorsunuz. Ancak bunu, print(addition()) şeklinde de çağırabilirsiniz.
Toplama işlemi için yaptıklarımın benzerini geri kalan 3 temel matematik işlemi için de yapacağım. Sadece işaretlerini değiştireceğim.

Gördüğünüz gibi hepsi için benzer şeyler yaptım. Neden böyle yaptığımı birazdan göreceksiniz; bu aslında kodun mimarisiyle ilgili.
Şimdi, biraz farklılık yapalım ve argümanlı fonksiyonları deneyelim. Kalan fonksiyonlarımız; faktöriyel alma, üs alma ve kök alma. Ben bu üçü için math kütüphanesini kullanmayı tercih ettim. Bu yüzden en başa 'import math' ifadesini yerleştirdim ve math kütüphanesini projeme dahil ettim.

Şimdi, factorial() fonksiyonumuzu inşa edelim bakalım.

Burada, factorial(number) şeklinde bir kullanım yaptım yani fonksiyona number isminde bir parametre verdim. Hemen sonrasında math kütüphanesinin factorial fonksiyonuna bu parametreyi verdim. Bu sayede number parametresinin değeri karşılandığı zaman math.factorial ifadesi, o değer ile işlem yapacaktır. Son olarak bunu ekrana yazdırdım.
Peki, burada neden input almadım? Ben aslında parametre vererek zaten input almış oluyorum. Ancak kullanıcının bundan haberi bile olmayacak çünkü ekranda 'Sayı gir: ' tarzında bir ifade göremeyecek. Bu şekilde bir kullanım ile hâkimiyet tamamen bizde; fonksiyonu çağırırken 'factorial(5)' tarzında çağırmamız gerekecek. Ancak, bunu kullanıcıdan almak zorundayız.
Bunun için Fonksiyonlar blogunda da gösterdiğim gibi; fonksiyonu çağırırken input alacağız. Yani şunu yapacağız: 'factorial(number=int(input("Number: ")))'. Bu sayede hem parametreli hem de kullanıcıdan girdi alabildiğimiz bir fonksiyonumuz olacaktır. Bunu şimdi yapmıyoruz çünkü biz şimdi, sadece fonksiyonların görevlerini tanımlıyoruz.
Peki, neden fonksiyonun içinde girdi alma işlemi yapmadım? Çünkü fonksiyonu çalıştırdığımız zaman number değerini karşılayan bir şey olmadığı, biz bunu kullanıcıdan almak istediğimiz için hata alacağız. Python, number değerinin karşılığını bulamadığı için hata verecek ve fonksiyonun içerisindeki input alma işlemine hiçbir zaman erişemeyecektir.
Şimdi, üs alma işlemine bir bakalım.

Burada parametre vermek istemedim çünkü yukarıdaki gibi input alırken biraz karışık durabilir. O yüzden direkt olarak fonksiyonun içinden iki sayı istedim. Buradaki 'base', taban sayıyı ifade ederken 'exponent' üs değerini ifade ediyor. Örneğin kullanıcı bunlar için 2 ve 3 değerini girdiğinde Python şunu anlayacaktır: "2 üzeri 3". Sonrasında math kütüphanesinin pow fonksiyonuyla bu iki değeri hesaplıyorum ve bunu expo isimli değişkene atıyorum. Son olarak sonucu yazdırıyorum.
Son olarak kök alma işlemini de yapalım.

Burada, factorial() fonksiyonuna yaptığım şeyi yaptım. Bir parametre verdim ve bunun girdisini daha sonra fonksiyonu çağırırken alacağım. Yine math kütüphanesi içerisindeki sqrt fonksiyonu ile kök alma işlemini yapıyorum ve bunu yazdırıyorum.
Şimdi, menümüz ve fonksiyonlarımız hazır. Bunları kontrol etmemiz lazım. Bunun için menüdeki her operasyonu bir listeye atayabilir ve bunları o şekilde kullanabilirim diye düşünüyorum. Elbette, siz tuple yapılarını da kullanabilirsiniz. Hatta sözlük bile kullanabilirsiniz ama o zaman biraz karışık bir yapı elde edebilirsiniz. Deneyin, bozun, tekrar deneyin...
Şimdi, bahsettiğim listeyi tanımlayalım.

Listemi menünün hemen altına tanımladım ki kod sayfası boyunca buna sorunsuz bir şekilde erişebileyim. Ona, 'operations' ismini verdim ve içerisine sırasıyla menüdeki işlemlerin numaralarını verdim. Son olarak da 'list' ifadesini verdim.
Peki, her şeyimiz hazır. Şimdi, kullanıcıdan sürekli olarak girdi almamız gerekiyor. Bunun için bir while döngüsü açmak istiyorum. Hatta bunu da bir fonksiyon içerisine yazmak daha güzel olur diye düşünüyorum.

calculate isimli bir fonksiyon oluşturdum. Bu fonksiyon, diğer bütün fonksiyonların yönetildiği 'ana merkez' gibi bir şey olsun istiyorum. Sonrasında bu fonksiyonun içine while True: döngümü açtım ve choice yani 'seçim' isimli bir input aldım. Burada kullanıcıya; "Menüden bir işlemin numarasını seçin." diyorum.
Sonrasında birkaç if bloğu kullanabiliriz. Bu noktada şöyle düşünmemiz lazım: "Eğer kullanıcı, listenin ilk index'ini seçerse program sonlansın". Kodlarımızı bu düşünce kapsamında yazacağız.

if choice == operations[0]: ifadesini verdim ve kullanıcının, listenin ilk index'i olan '99. exit' seçmesi durumunda ona iyi bir dilekte bulunup programı break ile sonlandırıyorum. İşte, bu şekilde devam edeceğiz. Bu noktada işinize yarayacak ufak bir ipucu vermek istiyorum. Programı sonlandırmak gibi kritik işlerinizi if bloklarıyla halletmeniz gerekiyorsa bu işlemi ilk if bloğunda halletmeye çalışın. Sonrasında minimum efor harcayacağınızı rahatlıkla söyleyebilirim.

Bu sefer, '-1' ifadesiyle listeyi kontrol ettim ve kullanıcının 'list' kelimesini girmesi durumunda ona listeyi tekrar gösterdim. Bunun özel bir sebebi yok. Ancak 'list' ifadesi '99.exit' ifadesi gibi diğerlerinden farklı olduğu için bunu da ayırt etmek istedim.
Devam edelim.

Diğer işlemleri de aynı şekilde yaptım. Her işlem için ait olduğu index'i koşul olarak koydum. Ancak burada kırmızı kutularla işaretlediğim kısımlara dikkat edelim. factorial() ve rooting() fonksiyonlarına parametre vermiştim ve bunların input alma işini, onları çağırırken yapacağımızı söylemiştim. Bu sayede kullanıcı bunların ne istediğini bilecek, ona göre girdi verecektir. Son olarak kullanıcı, listedeki elemanların dışına çıkmak isterse onu else: ile uyarıyorum. Ancak dikkat edin; programı sonlandırmıyorum, uyarıyorum ve döngü tekrar başa sarıyor.
Projenin sonuna geldik. Şimdi, bütün işlemlerin kontrol edildiği calculate() fonksiyonunu çağırmamız gerekiyor.

Şimdi, kodumuzu çalıştırıp ne olacağına bakalım.

Menü gayet açıklayıcı bir şekilde geldi ve bizden bir işlem seçmemiz bekleniyor. İlk önce 99 sayısını seçelim bakalım.

Şimdi, toplama işlemini yapalım.

Toplama işlemi de gayet başarılı bir şekilde gerçekleşti. Dikkat ederseniz program sonlanmadı; bizden yine bir girdi bekliyor.

Çarpma işlemini de başarıyla sağladık. Şimdi biraz değişik olan factorial() ve rooting() fonksiyonlarını çalıştıralım.

Faktöriyel hesabı ve kök alma işlemi de gayet başarılı duruyor. Son olarak, üs alma ve listeyi tekrar görme işlemlerini de yapalım ve yazımızı sonlandıralım.

Bence program gayet başarılı. Siz de yazıp uygulayabilir, daha fazla geliştirebilirsiniz. Eğer kodu GitHub gibi platformlarda veya ödevlerinizde kullanacaksanız lütfen kaynak belirtin. Kodların kesintisiz hâli aşağıdadır, sevgiler.



Yayınlanma Tarihi: 2022-11-02 15:19:01
Son Düzenleme Tarihi: 2022-11-07 16:57:49