Python ile Programlama ‘Doğum Günü Uygulaması’ #3

Murat Kurtuluş
Three Arrows Security
5 min readAug 3, 2018

Merhaba sayın okurlarımız Python ile programlama yazı dizisinin üçüncü yazısına hoş geldiniz. Bu yazımızda doğum günü uygulaması geliştireceğiz.
Doğum günü uygulamasını geliştirirken şu konulara değineceğiz:

  • Fonksiyonlar
  • datetime modülü

Geliştireceğimiz doğum günü uygulamasının çalışma mekanizmasını açıklayalım ilk olarak. Programımız kullanıcıdan doğum tarihini girmesini isteyecek. Sonrasında uygulamamız kullanıcının doğum günü ile bugünün tarihi arasındaki ilişkiye göre bir çıktı verecek. Bu uygulamayı geliştirirken Python’la beraber gelen standart kütüphanede tanımlı datetime modülünü kullanacağız. Datetime modülü ile işlerimiz kolaylaşacak. Programımız örnek olarak aşağıdaki gibi çıktılar verecek:

‘Bu yıl 45 gün önce doğum günün vardı.’
‘Doğum günün 37 gün içinde!’
‘Doğum günün kutlu olsun!!!’

Gelin programın kaynak kodunu inceleyerek başlayalım işimize.

Öncelikle programa datetime modülünü dahil ederek başlıyoruz. Bir modülü içeri aktarmak için import ifadesini kullanırız. Daha sonra kendimiz fonksiyonlar tanımlıyoruz. Her zaman bizim işimize yarayacak fonksiyonlar hazır olarak bulunmaz. Bu gibi durumlarda kendimiz bir fonksiyon tanımlamak zorundayız. Basit bir örnek üzerinden fonksiyon nasıl tanımlanır onu gösterelim.

Bir fonksiyon tanımlamak için ilk önce def deyimini kullanırız. Daha sonra yanına tanımlayacağımız fonksiyon ismini yazarız. Bu fonksiyon ismi açık olmalıdır. Yani yaptığı iş fonksiyon isminden anlaşılabilmelidir. Örnekte fonksiyona selam adını verdik. Daha sonra girintileme yaparak fonksiyonumuz hangi işleri yapacaksa o işleri yazacağız. Bizim örneğimizde fonksiyonumuz parametre olarak kullanıcının adını alacak ve print() fonksiyonu ile ekrana

Selam Murat

olarak bir çıktı verecek. Fonksiyonu tanımladıktan sonra yazdığımız fonksiyonu çalıştırabilmek için fonksiyonu çağırmamız lazım.
Yani selam(‘kullanıcı_adı’) diyerek kodumuzu çalıştırabiliriz.

Tanımlayacağımız fonksiyonlar ile her zaman ekrana bir şey bastırmayacağız tabii ki. Hesaplama yapacağımız fonksiyonlar olacak ve bu fonksiyonlar ile bir değer döndürmemiz gerekecek. Örneğin kullanıcının girdiği sayının karesini hesaplayan bir fonksiyon tanımlayalım.

Örneğimize def ifadesi ile fonksiyonu tanımlayarak başladık. Daha sonra fonksiyona ‘kare_hesaplama’ adını verdik. Fonksiyonumuz tek parametre alacaktır. Bu parametre kullanıcının karesini hesaplamak istediği sayıyı temsil etmektedir. Bir alt satıra geçerek girintileme yaptıktan sonra fonksiyonunun yapacağı işleri koda dökebiliriz. Biz bu örnekte sadece kare alacağımız için return ifadesi ile sayının karesini aldıktan sonra kullanıcıya hesaplanmış sayıyı döndürebiliriz. Şimdi fonksiyonu çağırarak çalıştırabiliriz. Kullanıcıdan hesaplamak istediği sayıyı input() fonksiyonu ile alıyoruz. Daha sonra kullanıcının girmiş olduğu bu sayıyı print() fonksiyonunun içinde yazdığımız kare_hesaplama() fonksiyonunu çağırarak hesaplıyoruz ve ekrana bastırıyoruz.

Fonksiyon nasıl tanımlanır ve çağrılır öğrendiğimize göre geri uygulamamıza dönebiliriz. Doğum günü uygulaması 5 fonksiyondan oluşmaktadır. Bu fonksiyonların her birisi ayrı bir iş yapmaktadır.

Açıklamaya ilk fonksiyonla başlayalım. İlk olarak başlık_yazdır() fonksiyonunu tanımlıyoruz. Bu fonksiyonumuz ekrana süs verecek :). Daha önceki yazılarımızda başlık yazmak için sadece print() fonksiyonu kullanmıştık. Bu örnekte ise print() fonksiyonlarını bir fonksiyonunun içinde yazdık. Bu sayede her başlık yazdırmak istediğimizde sadece fonksiyon çağrısı yaparak bu işi halledebileceğiz. Fonksiyonlar bizi bu gibi rutinlerden kurtarır.

Tanımlayacağımız bir sonraki fonksiyon

kullanıcıdan_doğumgünü_bilgisini_al()

isimli bir fonksiyondur. Bu fonksiyon ilk olarak ekrana ‘Ne zaman doğdunuz?’ çıktısını basacaktır. Daha sonra sırayla yıl gün ay olarak kullanıcının doğum gününü girmesini ister. Girilen bu tarihi datetime.date(yıl, gün, ay) ifadesi ile işlem yapılabilecek bir hale getiririz. En son olarak return ile bu değeri doğum_günü değişkeni içerisinde döndürürüz.

Sıradaki fonksiyonumuz kullanıcının doğum günü ile bugün arasındaki farkı hesaplayacaktır. Bu fonksiyonun ismi
tarihler_arasındaki_günleri_hesapla(orijinal_tarih, hedef_tarih) dir. Bu fonksiyona iki parametre veriyoruz. Parametrelerden birincisi orijinal_tarih yani kullanıcının doğum günü. Diğer parametre ise hedef_tarih yani bugün. Kullanıcının doğum günü ile bugün arasındaki gün sayısını hesaplayabilmek için ilk olarak bu yıl doğum günü hangi tarihe geliyor onu hesaplamamız lazım. Aşağıdaki ifadede bunu hesaplayan kod parçasını göreceksiniz.

bu_yıl = datetime.date(hedef_tarih.year, orijinal_tarih.month, orijinal_tarih.day)

Daha önce yaptığımız gibi bu tarihlerle işlem yapacağımız için datetime modülünü kullanıyoruz. Bu modülün içinde tanımlı olan datetime.date() fonksiyonu ile parantezler arasında yazdığımız değerleri işlem yapılabilecek hale getiriyoruz. hedef_tarih.year ifadesi ile bugün hangi yıl içinde olduğumuzu hesaplıyor, orijinal_tarih.month ile doğum gününün hangi ayda olduğunu hesaplıyor, orijinal_tarih.day ile doğum gününün hangi o ayın kaçıncı gününe denk geldiğini hesaplıyoruz. Daha sonra bu yılın doğum günü tarihi ile bugün arasındaki gün sayısını hesaplıyoruz. gün_farkı adını verdiğimiz değişkene atıyoruz.

gün_farkı = bu_yıl — hedef_tarih
return gün_farkı.days

return gün_farkı.days ile kaç gün olduğunu hesaplayıp geri döndürüyoruz.

Şimdiye kadar yaptıklarımızı bir özet geçelim. İlk olarak başlık yazdırmak için bir fonksiyon tanımladık. Daha sonra kullanıcının doğum günü bilgilerini öğrenmek için bir fonksiyon tanımladık. Bu fonksiyon kullanıcının doğum tarihini bize geri döndürür. Daha sonra doğum tarihi ile bugünün tarihi arasındaki gün sayısını hesaplamak için bir fonksiyon tanımladık. Şimdi bu bilgiler ile doğum gününe kaç gün kaldı veyahut doğum gününüz geçti gibi kullanıcıya çıktı vermemiz lazım. Bu iş için de bir fonksiyon tanımlıyoruz.

Her zaman ki gibi fonksiyon tanımlamaya def ifadesi ile başlıyoruz. Fonksiyonumuzun yaptığı işi çağrıştıracak bir isim veriyoruz. Bu durumda
doğum_günü_bilgilerini_yazdır(günler) adını alacak fonksiyonumuz. Parametre olarak günler veriyoruz. Burada vereceğimiz değer sıfırdan küçük ise kullanıcının doğum günü geçmiştir. Eğer değer sıfırdan büyük ise kullanıcının doğum gününe daha vardır. Bu iki ihtimal de değilse kullanıcının doğum günü bugündür. İşte programın buna karar verebilmesi için if/elif/else yapısından faydalanıyoruz.

Geriye tanımlayacağımız son bir fonksiyon kaldı. Bu fonksiyonun adı main()dir. main() fonksiyonunda şimdiye kadar tanımladığımız dört fonksiyonu kullanacağız. Sırası ile ilk olarak başlık_yazdır() fonksiyonu ile ekrana başlık yazdırılacak. Daha sonra kullanıcıdan_doğumgünü_bilgisini_al() fonksiyonu ile doğum tarihini
alıyoruz ve dgünü değişkenine atama yapıyoruz. Bugünün tarihini hesaplamamız için datetime.date.today() fonksiyonu ile bugün adlı fonksiyona atıyoruz. Bu sene ki doğum günü tarihi ile bugün arasındaki farkı bulabilmek için tarihler_arasındaki_günleri_hesapla() fonksiyonunu çağırıyoruz ve günlerin_sayısı değişkenine atıyoruz. Son olarak kullanıcıya bu bilgiler doğrultusunda bir çıktı vermemiz lazım. günlerin_sayısı değişkenini doğum_günü_bilgilerini_yazdır() fonksiyonuna parametre olarak veriyoruz.

doğum_günü_bilgilerini_yazdır(günlerin_sayısı)

Şimdiye kadar yazdığımız kodlar hep fonksiyon tanımlamaktı ve tanımladığımız bu fonksiyonların çağrılması lazım. En son işlem olarak main() fonksiyonunu çağırıyoruz. Kodumuzu çalıştırdığımızda aşağıdaki gibi bir çıktı alırız.

Bir yazının daha sonuna geldik. Umarım anlatabilmişimdir ve faydalı olmuştur. Okuduğunuz için teşekkürlerimi sunuyorum. İyi günler iyi çalışmalar efenim.

--

--

Murat Kurtuluş
Three Arrows Security

İzmir Katip Çelebi Üniversitesi Elektrik elektronik mühendisliği 1.sınıf