Bana kod yazmayı öğret baba – Bölüm 2
İlk dersimizde Mehmet’in yaşıdır, Leyla’nın saçıdır derken bir iki ufak şey öğrendik. Compiler nedir, nasıl çalışır gördük. Üç beş satır kod yazdık. İki tane önemli kuralı aklımızın bir köşesine yazdık. Toplama işlemi bile yaptık. Yani biz ona kısaca okyanusa ayaklarımızı soktuk diyelim. Öyleyse bir iki kulaç atalım artık, zamanı gelmiş.
Dersimize tekrar bir iki satır kod yazarak başlayalım. Compilerımızı unutanlar için linkimiz burada.
x = 13 y = -903.14 z = "merhaba"
Bu 3 satır kod içerisinde biri tam sayı, biri kesirli sayı, biri de kelime olmak üzere 3 farklı değişken tanımladık. Burada biraz Python’un bu tanımları nasıl algıladığını konuşmakta fayda var. Bu tanımları yaptığımız anda Python Bey içeride “x bir integer (tam sayı), y bir float (reel sayı), z de bir string (kelime) değişken” şeklinde bir sınıflandırma yapıyor. Neden? Çünkü değişkenlerimizi ilerleyen safhalarda kullanırken et mi, balık mı, elma mı, armut mu bilmemiz lazım. Lafı uzatmadan örneklerle devam edelim. Önceden yazdığımız kodumuza şu kısmı ekleyelim ve çalıştıralım:
a = x - 2.3 print(a) a = y - 2.3 + a / 3.48 print(a) b = a * (x + 55) / (-65 - 4.61) + a print(b)
Compiler’ımıza abuk subuk hesaplar yaptırdığımız bu 6 satırda her şeyin güzel gidiyor olması lazım. Bu 6 satırın birincisinde Python Bey’in aklından neler geçiyor nelere benzemez:
Şimdi x bir integer değişken, değeri de 13. 2.3 bir float. Bir integer’dan bir float çıkarma işlemi bende tanımlı mı? Evet tanımlıymış. Sonucu da bir float olacakmış. Çıkarttım, 10.7 buldum. Sol tarafa bakalım şimdi. Evet a diye bir değişken var. Bu tanımlı mı? Hayır coder hanımımız/beyimiz kendisini henüz tanımlamış. Tamam, o zaman hafızada yer açalım ve a‘yı bir float değişken olarak tanımlayalım ve onun değerini 10.7 yapalım.
Kodumuzun devamında dört işlem dozajını artırıp a‘yı ve b‘yi tekrar hesaplıyoruz. Beşinci satırda dikkat ederseniz b‘yi hesaplarken compiler hiç bir hata yapmadan paranteziyle, çarpmasıyla, bölmesiyle işlem sırasını gayet doğru uyguluyor (sağlamasını yapmanıza gerek yok, biz yaptık). Buradan da şu sonucu çıkartıyoruz. Amcalarınız, teyzeleriniz bu problemleri Facebook’ta çözerken hata yapabilirler ama Python yapmaz.
Ödev 2.1: İlk ödevimiz dört işlem konusundan gelsin o zaman. “49.253 – 2 / 5.27″ işlemini hesaplayıp sonucunu ekrana yazan bir kod yazın. Çözümleri bir sonraki bölümümüzde açıklayacağız. Bu arada not: Bir sayının 3’üncü kuvvetini hesaplamak için Python’un özel yöntemleri var ama şimdilik oraya girmeye gerek yok. Siz güzel güzel aynı sayıyı 3 kere birbiriyle çarpın.
Peki benzer bir işlemi z‘ye uygularsak ne olur? Elinizi korkak alıştırmayın. Deneyelim ve görelim. Aşağadaki satırı kullanarak bir string olarak tanımladığımız z‘den bir float çıkartalım.
a = z - 2.3
Dersin içeriği dahilinde ilk hatamızı yaptık dostlar. Demiştim ama, hata yapa yapa öğreneceğiz diye. Compiler satırları teker teker takip ederek geldi ta ki “a = z – 2.3” satırına kadar. Sonrasında bize hata raporunda söylemeye çalıştığı şey şu: “Birader bir string’den bir float’u çıkarma işlemi bende tanımlı değil. Zorlama lütfen.” Bu açıklamayı insanların anlayacağı dile çevirecek olursak “Elmalarla armutları aynı işleme sokamazsınız.” Peki armutlarla armutları işleme sokalım o zaman. Burada armuttan kastımız stringler. Önceki kodda hatayı yaratan kısmı silelim ve şu satırları ekleyelim.
a = z + " televole" print(a) a = z - " televole" print(a)
Bir iki satır daha hatasız devam ettik ama yine hatalara gark olduk dostlar. Buraya kadar örnekleri harfi harfine takıp ettiyseniz ekran görüntünüzün şöyle bir şey olması lazım.
Yaşananlara bir göz atalım. a‘nın 5’inci satırdaki değeri 10.7, 7’inci satırdaki değeri -902.3652873563218 ve 11’inci satırdaki değeri “merhaba televole” ekranımıza yazılmış. Buraya kadar sorun yok. Sonrasında compiler 12’inci satırdaki çıkarma işlemi için hata vermiş (bunu hata raporunda geçen line 12’den anlıyoruz) ve “stringler için çıkarma işlemi bende tanımlı değil,” demiş. Evet hata yaptık yapmasına ama doğru yaptığımız bir iki şey de var. Mesela 10’uncu satırdaki a = z + ” televole” stringleri toplama işlemi hatasızca tamamlandı ve sonuç yazıldı. Python Bey burada insan beyni içinde tanımlı olmayan bir toplama işlemi uyguladı ve kelimeleri topladı, yani uç uca ekledi. Sonuç: merhaba televole! Öte yandan hatadan da gördüğümüz üzere stringleri birbirinden çıkarma işlemi kendisinin bilgisi dahilinde değil.
Bu arada yukarıdaki kodda istemeden de olsa enteresan bir olaya imza attık. 6’ncı satıra bakarsanız a değeri -20.87068111828296 olan bir float, değişken olarak hayatına devam etmekte. 10’uncu satırda ise kendisini bir string’e çeviriyoruz. Bu nasıl oldu diye soracak olursanız “Python’un kerameti,” diye cevap veririm. Başka programlama dillerinde yaptığınız anda hata yiyeceğiniz bu harekete Python’da izin veriliyor. Değişkenlerin cinsini istediğiniz şekilde değiştirebiliyorsunuz.
Bir başka değinmemiz gereken nokta da string kullanırken hep tırnak işareti (“”) kullanmamız gerektiğidir. Bunu neden yapıyoruz? İlk baştaki kuralımızı hatırlayalım. Programlama dilleriyle konuşurken onun anlayacağı dilden konuşmamız lazım. Şimdi
x = merhaba
dediğimizde Python’un anlayacağı şey şu olur:
merhaba diye bir değişkenimiz var. x’in değerini merhaba’nın değerine eşitleyim.
bunu böyle söylersek eğer:
x = "merhaba"
tırnak işareti geldiğine göre sağ taraf bir string, x’i o stringing değerine eşitleyim şeklinde anlayacaktır. O yüzden kelimeleri birbirine eklerken kelimeler arası boşluk (” “) bırakmamız. Bunu ” televole” yazarken yaptık misal. Boşluk biz insanlar için gayet anlamsız bir şey. Adı üstünde boşluk. Ama programlama dilleri için herhangi bir harf veya karakterden bir farkı yok. Özellikle kelimeleri birleştirip büyük stringler kurarken aradaki boşlukları unutmamamız gerekiyor. Yani “merhaba” ve “televole” stringlerini topladığımızda Python’un “bunlar birer ayrı kelime, bunların arasına bir boşluk koyayım ben” demesini beklemeyin. O boşluğu kendiniz koyun.
Peki peki peki, bir integer’i veya float’u string’le nasıl iletişim haline sokabiliriz? Mesela ekrana a‘nın değerini bodoslama “10.7” şeklinde yazdıracağımıza biraz daha afilli bir şekilde “a‘nın şu anki değeri 10.7″ yazdırabilir miyiz? Bunu tabiki print(“a’nın su anki degeri 10.7”) gibi tek bir parça kodla yapabilirim. Ama ben bu kodun a her değeri değiştiğinde kendini adapte ederek oraya yeni değerini yazmasını istiyorum. O yüzden şöyle bir şey yazmam lazım aslında: print(“a’nın su anki degeri [buraya a’nın o anki degeri gelecek]”). Nasıl yapsak, nasıl yapsak? Şöyle bir şeye ne dersiniz?
yazmak_istedigim_cumle = "a'nın su anki degeri " + a print(yazmak_istedigim_cumle)
Olabilir sanki? Önceden yazdığımız kodları biraz derleyip toparlayalım ve aşağıdaki kısmı çalıştıralım.
x = 13 y = -903.14 z = "merhaba" a = x - 2.3 yazmak_istedigim_cumle = "a'nın su anki degeri " + a print(yazmak_istedigim_cumle) a = y - 2.3 + a / 3.48 yazmak_istedigim_cumle = "a'nın su anki degeri " + a print(yazmak_istedigim_cumle)
Yine “TypeError: Can’t convert ‘float’ object to str implicitly” hatasına ulaştık dostlar. Dikkat ederseniz yukarıda “a = z – 2.3” koduyla string’den float çıkarmaya çalışıp aynı hatayı yaratmıştık. Mantık aynı, elmayla (float) armutu (string) toplamaya çalışıyoruz. Doğal olarak Python Bey isyan ediyor. Peki, ne yapmalıyız? Bu sorunun cevabına üçüncü kuralımız yetişsin.
Üçüncü kural: elmalarla armutları işleme sokarken hata alıyorsanız elmaları armutlara çevirmeye çalışın.
Yazmak istediğimiz şey nihayetinde bir cümle, yani string olduğuna göre gelin elimizdeki float a‘yı string’e çevirip toplama işlemini yapalım. Bu iş için çok kullanışlı bir fonksiyonumuz var. Kendisinin adı str(). İçine yazdığınız tüm integer ve floatları string’e çevirmekle görevli. O zaman ne bekliyoruz. Yapalım şu değişikliği.
yazmak_istedigim_cumle = "a'nın su anki degeri " + str(a)
Görüntü çok şahane değil mi dostlar? Hem hatalar ortadan kalktı. Hem de anladığımız dilden bir şeyler görüyoruz ekranda.
Ödev 2.2: Yukarıdaki kodu öyle bir değiştirin ki ekrana şunu yazsın: “a’nın su anki degeri [buraya a’nın o anki değeri gelecek], y’ninki de [buraya y’nin o anki değeri gelecek]”.
Ödev 2.3: Yukarıdaki kodu öyle bir değiştirin ki ekrana şunu yazsın: “a’nın su anki degeri [buraya a’nın o anki değeri gelecek], y’ninki [buraya y’nin o anki değeri gelecek], bu esnada z’ninki de [buraya z’nin o anki değeri gelecek]”. Tabii burada z’nin bir string olduğunu varsayalım.
Ödev 2.4: Yukarıdaki kodu öyle bir değiştirin ki ekrana şunu yazsın: “a’yi y’ye bolersek [buraya a/y’nin o anki değeri gelecek] cikiyor.”
Bu vakte kadar 3 çeşit değişken cinsi öğrendik dostlar. Öğrendiklerimizi bir özetleyelim konular daha fazla karışmadan:
- Integer: Python dünyasında tam sayı demek. Integerlar birbirleriyle ve float’larla dört işleme rahatlıkla girebilirler.
- Float: Python dünyasında reel (veya kesirli diyelim biz ona) sayı demek. Evet integerlarla araları baya iyidir. Rahat rahat dört işlemde kullanınız.
- String: Python dünyasında kelime manasına gelir. Kendilerini birbiriyle toplayabilirsiniz ama integer ve floatlarla işleme sokmayınız. İlla sokmak istiyorsanız float ve integerları önce str() fonksiyonuyla string’e çevirin.
Bu dersin son konusu olarak istisnasız her yazılımcının kullandığı ama bir integer, bir float, bir string kadar namı yürümemiş olan bir değişken cinsinden bahsedelim. O aslında pek çok şeyin temeli, özellikle de bir sonraki derste göreceğimiz if‘lerin. O bir veya sıfır. O doğru veya yanlış. Onun adı boolean.
- Boolean: Python dünyasında bir önermenin doğruluğu/yanlışlığının cevabı demek. Topu topu iki değer alabilir: True ve False
Örneklerle başlayalım. Dileyen bu vakte kadar yazdığımız kodları silip yeni bir sayfayla başlayabilir. Dileyen sadece sonda hata veren kısmı silebilir.
x = 3 < 5 print(x) y = 11.2 > 303 print(y)
Python’a 2 tane soru sorduk. Birinci “3, 5’ten küçük mü?”, ikinci “11.2, 303’ten büyük mü?”. Aynı zamanda bu soruların cevaplarını x ve y değişkenlerine eşitlemesini istedik. Python bey bu soruların (veya önermelerin de diyebiliriz) cevaplarını biliyordu ve bize dönüşü doğru/yanlış seklinde birer boolean oldu. Böylelikle x ve y birer boolean değişkeni oldular. Bu konuyu ileride özellikle if‘lere bakarken daha çok irdeleyeceğiz. Fakat şunu öğrenmemizde fayda var. Python’a yukarıdaki gibi sorular sorup doğru/yanlış şeklinde cevaplar alabiliyoruz ve bu hayatımızı çok çok kolaylaştıracak. Dersimizi kapatmadan Python’a daha ne çeşit sorular sorabiliriz örneklerle bakalım.
x = 13 y = -903.14 a = x <= y print(a) y = 13 a = x == y print(a)
3’üncü satırda “x, y‘ye küçük eşit mi?” sorusunu sorduk. 6’ncı satırda sorduğumuz soru ise “x, y‘ye eşit midir?” Doğal olarak hepimizin aklına gelen soru “Eşitlik sorusunu sormak için neden ‘==’ kullanıyoruz ‘=’ yerine?” Tek eşitliği malumunuz sol taraftaki değişkenleri sağ taraftaki değerlere eşitlemek için kullanıyoruz. O yüzden eşitlik sorusunu sormak için farklı bir işaret kullanmamız lazım ki Python Bey’in kafası karışmasın.
Ödev 2.5: “435 246‘dan büyük müdür?” sorusunu hesaplayıp cevabını yazan bir kod yazın.
Python’daki değişken çeşitlerini ezberledik artık. Biraz daha eğlenceli bir şeyler öğrenmenin zamanı geldi sanki. O zaman devam edelim.
Hafız Lakyab
Yazar: Hafız Lakyab (tümünü gör)
- Dev Kütleli Bir Kara Deliğin Olması Gereken Yer, Galaksisinin Merkezi midir? - 17 Eylül 2019
- Bana kod yazmayı öğret baba – Bölüm 9 - 10 Mart 2019
- Bana kod yazmayı öğret baba – Bölüm 8 - 24 Şubat 2019
- Bana kod yazmayı öğret baba – Bölüm 7 - 10 Şubat 2019
- Bana kod yazmayı öğret baba – Bölüm 6 - 27 Ocak 2019