Temel seviyede Pyhtonla Birlikte Algoritma ve Programlama Nedir, Aralarındaki İlişki Nasıldır?

Levent Burak İyigün
10 min readAug 13, 2022

Bu yazımızda günümüzün önemli konularından olan algoritma ve programlamanın ne olduğundan python dilini kullanarak basitçe bahsedeceğiz. Algoritma ve programlamanın farklı başlıklar olduğu sıkça konuşulur, bu kavramların neler olduğunu analiz ettiğimizde farkları kendiliğinden ortaya çıkar. Daha sonra da ne oldukları üzerinden ilişkilerini anlatacağız. Algoritma ile başlayalım, ilk sorumuz algoritma nedir? Yaygın bir tanımla algoritma bir problemi çözmek veya bir amaca ulaşmak için tasarlanan yoldur. Tanımdan anlaşılacağı üzere algoritma bilgisayarların hayatımıza girmesiyle ortaya çıkan bir kavram değildir zaten algoritma sözcüğü 8. ve 9. yüzyılda yaşamış matematik bilgini Harezmi’nin adından gelir. Bir programlama tanımından önce özü muhakeme olan matematiğin terimidir. Tanım üzerine biraz düşünerek gerçek hayattan bir sürü algoritma örneği bulabilirsiniz. Basit bir örneği biz inceleyelim sabah işe gitmek için kalktınız, duşa girdiniz, duştan çıktıktan sonra kahvaltı yaptınız ve metroya binmek için durağa kadar 5dk yürüdünüz, metroya binip 3 durak sonra inip indiğiniz yerde otobüse binerek işe vardınız. Amacınız işe gitmekti, bütün bu yaptıklarınız da amacınıza ulaşmanız için tasarladığınız yoldu yani algoritmanız. Değerlendireceğimiz ikinci başlığımız programlamaya geçelim. Bu kavram çözmek istediğimiz problem veya ulaşmak istediğimiz amaç için tasarladığımız algoritmanın bazı üstün özellikleri sayesinde muhakeme konusunda oldukça becerili olan bilgisayarlara aktarılmasıyla alakalıdır. Bu aktarımı anlamak için önce insandan insana aktarımı inceleyelim. Bir insan diğer insanlara düşündüklerini aktarmak için dil dediğimiz aracı kullanır. İngilizce, Türkçe, İspanyolca vb. gibi türleri olan bu kavram insanlar olarak birbirimizi anlamamız için yegâne yoldur. İnsanlar olarak kullandığımız dil biraz esnektir, anlatmak istediğimiz şeyi tam olarak kurallarına uygun bir şekilde anlatamasak bile karşı taraf bizi anlayabilir. Bilgisayarlarsa bizim dilimizi anlayamaz, kendilerine has dilleri vardır, bizim İngilizce, Türkçe, İspanyolca vb. dillerimiz olduğu gibi onların da C, C+, Python, Javascript vb. gibi dilleri vardır. Eğer algoritmalarımızı bilgisayarlara anlatmak ve sonuçlar için yardım almak istiyorsak bu dilleri kullanmamız gerekir. Bilgisayarların dilleri bizimkilerin aksine esnek değildir yani anlatmak istediğimizi tam olarak kurallarına uygun bir şekilde aktaramazsak bilgisayarlara anlatmak istediğimizi anlatamayız. Yazının devamında bu programlama dillerinden Python’u seçerek dili basitçe tanıtıp birkaç örnek gösterdikten sonra yazıyı bitireceğim. Öncelikle Python neleri kendiliğinden yapabilir onlardan bahsedelim. Sayıları tanır, işlem önceliklerine dikkat ederek 4 işlem yapabilir -+ ile toplama, — ile çıkarma, * ile çarpma, / ile bölme işlemi yapar-, ** işaretiyle sayının üstünü alır -3**2=9 gibi-, % ile kalan sayıyı verir -11%2=1 gibi-. Ayrıca Python girdiğimiz elementleri sınıflandırır bunlara data types denir. Şöyle örneklendirilebilir;

Integer: 5, 3, 8, -21

Floating point: 3.14, 5.774, 12.5

String: “Levent”, “Python”, “Fenerbahçe”

Stringlerin tırnak içinde olduğuna dikkat edin her harf veya harflerden oluşan anlamlı veya anlamsız kelime string değildir. Örneğin Python’a

yazalım- print bilgisayarın parantez içinde yazdığımızı bize output olarak vermesi için kullanılan bir fonksiyondur, ayrıca bilgisayara anlatmak istediğimiz her farklı durum için bir satır kullanırız eğer print(x)’i aşağı satıra değil de x=3+5’in yanına yazsaydık bilgisayar bizi anlamazdı-, sonuç olarak bize şunu verecektir;

yani bilgisayar x’i string olarak değil integer olarak gördü- bu örnekle beraber nasıl değişken atayabileceğimizi de görmüş olduk. Şimdi Pythonda koşullu ifadeler -conditional statement- nasıl gösterilir onu inceleyelim. İlk if koşuluyla başlayalım. “İf” insan dili olan İngilizcede eğer anlamına gelir, Pythonda da anlamı eğerdir. Bir örnek üzerinde neye benzediğini gösterelim. Yine x=3+5 olsun. Eğer x değişkenimiz 8’se bilgisayar bize x=8 yazsın. Bu algoritma aşağıdaki şekilde bilgisayara aktarılır.

Koşullarda ve yazının devamında bahsedeceğimiz for ve while döngülerinde-iki durumda da yazı turuncu görünür -eşitse anlamı “==”le eşit değilse anlamı “!=”le verilir ayrıca x=8’i tırnak içinde yazdığımıza dikkat edelim çünkü bilgisayardan bunu string şeklinde istedik -print(“x=”, x) yazsaydık da x= 8 yazacaktı, “x=”i string x’i integer olarak görecekti-. Büyük ihtimalle if x==8’den sonra “:” geldiğini ve alttaki satırın daha önden başladığını fark ettiniz bu if koşulun içerisindeki kod parçalarının koşulun içine girildiğinde çalışmasıyla ilgilidir, bilgisayar bu bilgiyi bu şekilde tanır -iki noktayı koyduktan sonra enter tuşuna basarak alt satıra indiğinizde sizi otomatik olarak ilerden başlatır-. Bu koşulları mantık dersinden hatırlayabileceğiniz “ve” “ya da” gibi bağlaçlarla da tasarlayabilirsiniz. Mesela x’i yine x=5+3 olarak tanımlayalım x=8 ve 8+0=8’se “x=8” yaz şeklinde bir algoritma oluşturduğumuzda bilgisayarın x=8 yazması için hem x’in 8 olması hem de 8+0’ın 8 olması gerekiyor. Her ikisi de doğru olduğundan bilgisayar if koşulunun içine girer ve x=8 yazar. Programlama dilinde ve İngilizcedeki gibi and demektir. Şu şekilde yazılır;

ya da ile de şöyle bir algoritma tasarlayalım x yine 3+5 olarak tanımlansın, if koşulu x!=8 ya da 8+0=8’se olsun. Kodun çalışması için bir koşulun sağlanması yeterlidir. İlk koşul sağlanmaz, ikinci koşul sağlanır ve bilgisayar if koşulunun içine girer. Python’da “ya da” İngilizcedeki gibi “or” ile yazılır. Bir başka koşulumuz else’dir. Bu koşul şu anlama gelir eğer if’de tanımladığımız koşul sağlanmıyorsa beni çalıştır. Bir örnek verelim ama bu sefer algoritmamızı sözde kod olarak Türkçeye çevirebileceğimiz pseudocode adı verilen kodu anlatmak için kullanılan bir şeyle açıklayalım;

x=3+5

if x!=8 and 5+11=16:

display matematik öldü

else:

display matematik hayatta

bu sözde kodu Python koduna dönüştürdüğümüzde şöyle bir şey olur ve output olarak matematik hayatta yazar.

Diğer bir koşulumuz elif’dir. Else-if’ten gelir ve anlamı if’in koşulu sağlanmıyor ve benim koşulum sağlanıyorsa beni çalıştır. Örneğimizi yine benzer bir örnekle pseudocode üzerinden açıklayalım ve Python’da çalıştıralım

x=3+5

if x=9 or 4=2:

display Nil nehri çevresindeki tarlalar yanlış dağıtıldı

elif x=8:

display Nil nehri çevresindeki tarlalar doğru dağıtıldı

else:

display Devlet tarlalara el koydu

Bu pseudocode’u Python diline çevirip bilgisayara sunarsak bize “Nil nehri çevresindeki tarlalar doğru dağıtıldı” yazacaktır. Bu sefer Python dilinde yazmayı siz deneyin.

Bazen kodda bazı durumları kullanıcının belirlemesini isteyebilirsiniz, bu gibi durumlar için de input dediğimiz kavramı anlamanız gerekir. Bazı durumları kullanıcının belirlemesini isteyebilirsiniz derken neyi kastediyorum bir örnekle netleştireyim, yukarıdaki birçok örnekte x’i 3 ve 5’in toplamı olarak tanımlamıştık. X’in hangi sayıların toplamı olarak tanımlanacağını kullanıcının belirlemesini isteyebilirsiniz veya bir koşul sağlandığında bilgisayarın neyi görüntüleyeceğini kullanıcının seçmesini isteyebilirsiniz. Python dilinde bu şu şekilde yazılır, x= y+z olsun y ve z’yi kullanıcıdan istediğimizi söylemiştik isteğimizi şu şekilde gerçekleştiririz; x tanımlamamızın üstüne y=int(input(“ Lütfen y için tamsayı girin”)) ve z= int(input(“ Lütfen z için tamsayı girin”)) şeklinde y ve z tanımlarız -int(input()) yazımı kullanıcıdan istediğimiz girdiler tamsayıysa kullandığımız bir yazı şeklidir, int integerin kısaltmasıdır-. Şimdi örnek kodumuz için şöyle bir pseudocode tasarlayalım;

y= kullanıcının girdisi

z= kullanıcının girdisi

x= y+z

if x!=8 and 5+11=16:

t=input(“Lütfen yazdırmak istediğiniz yazıyı yazın”)

print(t)

else:

t=input(“Lütfen yazdırmak istediğiniz yazıyı yazın”)

print(t)

Python koda şu şekilde çevrilir;

her iki koşul içerisindeki değişkene de t atayabildim çünkü koşullardan birinin içine girdiğinde bilgisayar için diğer koşul yok hükmündedir bu yüzden bir problem yaşamayız. Bu kodu çalıştırdığımızda adım adım alacağımız outputlar şöyledir;

Alacağımız ilk output budur, bu outputla karşılaştığımızda 3’e ardından enter’a bastığımızda z’yi 3 olarak tanımlamış oluruz, hemen bu output’un y için olanı gelir onu da 5 olarak tanımladığımızı varsayalım. Verdiğimiz tamsayı değerleri sonucunda if’in koşulu sağlamadığı için şu outputu alırız;

Buraya da yukarıda verdiğimiz örneğe uysun diye matematik hayatta yazalım ve enter tuşuna basalım, alacağımız output matematik hayatta yazısıdır.

Sırada döngülerimizden ilki olan for loop var. For loop’un ne olduğunu anlamak için pseudecode’da yaygın olarak gösterilişini incelemek faydalı olabilir. For loop pseudocode’larda genellikle “for each i from a to b” şeklinde verilir. Bu ifadeyi Türkçeye çevirecek olursak her i için -i iteration variable ifadesinden gelir bu da yineleme değişkeni demektir- a dan b’ye demektir. Yani i sırasıyla a sayısında b sayısına kadar olan sayıların değerini alır. Bahsettiğimizin nasıl bir şey olduğunu somutlaştırmak için basit bir örnek tasarlayalım.

for each i from 1 to 4:

display i

1’den 4’e ifadesi Python dilinde range(1,5) şeklinde gösterilir -anlaşılabileceği üzere range yazımlarında üst sınırın bir altına kadar gelinir-.

Output da şu şekildedir:

Eğer range kısmı (5) şeklinde tanımlansaydı output 0,1,2,3,4; (1,5,2) şeklinde tanımlansaydı output 1,3 şeklinde olurdu.

While döngüsüne geçmeden önce listelerden ve liste oluşturmaktan bahsedersek daha doyurucu while döngüsü örnekleri vermemiz olası olabilir. Listeler anladığımız anlamdadır, örnek vermek gerekirse x isimli bir listemiz olsun ve elemanları 1,2,3,4 olsun. Python dilinde şu şekilde yazılır x=[1,2,3,4]. Bilgisayarın listemizi doğru anladığını kontrol etmek için x’i yazmasını isteyelim. Python kodu şu şekilde olacaktır;

x=[1,2,3,4]

print(x)

output [1,2,3,4] olur, kodu print(x[0]) olacak şekilde düzenlersek output 1, x[1] şeklinde 2 olacaktır. Bunun mantığını kavramayı siz okuyuculara bırakıyorum. Ek olarak print(len(x)) yazarsanız 4 output’u alacağınızı göreceksiniz, sebebi len(x) ifadesinin x’in eleman sayısını temsil etmesidir. Listelere eleman eklemek için append metodu kullanılır- isterseniz çıkartmak için neler kullanılabilir araştırabilirsiniz-. Kullanımını x listesi üzerinde gösterecek olursak x.append(5) yazarsanız x listesine 5 sayısını eklemiş olursunuz, print(x) satırının üstüne yazıp kodu çalıştırırsanız gözlemleyebilirsiniz.

Şimdi while döngüsüne geçebiliriz. While İngilizce -ken anlamındadır. Python dilinde de aynı anlama gelir, tam ne olduğunun anlaşılması için cümle içinde kullanalım: Yorgunken uyu. Yorgunluk durumu bitene kadar uyuma işlemi devam eder. Programlama diline uygun örneğimize geçmeden önce örneğimizde kullanacağım bir özellikten bahsedeceğim. Random, bazı rastgelelik metodlarının çalışması için import edilen bir package’dır. Merak ederseniz packagelerin ne olduğuna bakabilirsiniz ama bugünkü yazımız için sadece random.choice(x) ifadesinin x listesinden rastgele bir eleman seçmeye yaradığını bilmeniz yeterlidir. Örneğimizin pseudocode’u şöyledir;

import random

x=[10,5,-5,3]

y=[]

z=0

while len(y) ≠4:

z=z+1

y.append(random.choice(x))

display y

display z

pseudocode’u kabaca yorumlarsak halihazırda eleman sayısı 0 olan y kümesinin eleman sayısı 4 değilken değeri 0 olan z değerine 1 ekle ve y listesine x listesinden rastgele eleman ekle, daha sonra y ve z değerlerini oynat. “z” değeri bize döngünün kaç defa döndüğünü gösterecektir. Python kod şöyledir:

x’ten çektiğimiz elemanlar rastgele olduğu için y değişken olacaktır ama outputta değişmeyen iki şey vardır: Y 4 elemanlıdır ve z=4’tür. Çünkü döngü y listesine 4 eleman eklendiğinde biter ve while döngüsünden çıkıldığı için z’ye de daha fazla 1 eklenmez, döngü toplamda 4 kere çalışır.

Programlama ile ilgili temel bilgilerden bahsettik, yazının içinde programlama dillerinden bahsederken nasıl bizim dillerimiz varsa bilgisayarların da dilleri var ve eğer bilgisayarların olağanüstü yeteneklerinden faydalanmak istiyorsak isteklerimizi bu dilleri kullanarak bilgisayarlara aktarmamız gerektiğinden yani programlama dediğimizin aslında bir anlatı olduğundan bahsetmiştik. Bu bahsimizi somutlaştırmak ve programlamanın dünyadan çok kopuk olmadığını göstermek için günlük hayattan bir anlatı verip bu anlatımızı bilgisayara aktarmaya çalışalım. Varsayalım ki 17 yaşındasınız, saat 21. Kardeşinizle birlikte saat 22.30’da eve gelecek olan annenizi bekliyorsunuz, planınız anneniz eve geldiğinde kardeşiniz ve annenizle birlikte film izlemek. 1.30 saat size beklemek için çok uzun bir süre geliyor ve bu süre içinde sıkılmamak için kendinize oyalanacak bir şey arıyorsunuz. Aklınıza planınızın gerçekleşme ihtimalini hesaplamaya çalışmak geliyor ve bu hesabı yapmak için kendinizce şu şekilde kabuller alıyorsunuz; annemin işten erken veya normal saatinde ayrılma ihtimali %30, annemin gelince kendine yapacak bir iş bulması ihtimali %20, üçümüz arasında kimsenin uykusunun gelmeme ihtimali %20. Annem işten normal saatinde gelirse, kendine yapacak bir iş bulmazsa ve kimsenin uykusu gelmezse film izleriz. Bu durumda film izleme ihtimalimiz (3/10)*(8/10)*(2/10)=6/125’tir. Bu da şu demek eğer teorik olarak 125 defa aynı şartlar altında bu deneyimi yaşarsak 6 kere film izleyeceğiz, 1000 kere yaşarsak 48 kere. Programlama yani bilgisayara anlatı kısmına geçmeden önce random package sayesinde kullanabildiğimiz bir metodun işlevini bilmemiz gerekiyor, random.randint(x,y) kod parçası x’ten y’ye kadar tamsayılar içinden rastgele bir tamsayı seçilmesini sağlar. Anlattığımız durum için şöyle bir pesudocode tasarlayalım;

import random

x= 1 ve 10 arasında rastgele bir sayı

y= 1 ve 10 arasında rastgele bir sayı

z= 1 ve 10 arasında rastgele bir sayı

if x<=3 and y>=2 and z<=3:

display film izledik

else:

display film izlemedik

pseudocode’un Python code hali şöyledir;

kodu çalıştırdığımızda bize bir nevi bir simülasyon sonucu vermiş olacak.

Zaten film izleme olasılığımızı çok düşük hesaplamıştık bu yüzden çok şaşırtıcı olmadı. Şimdi de simülasyonu 125 ve 1000 kere çalıştıralım ve teorideki film izlediğimiz senaryo sayısıyla pratikteki sayıyı karşılaştıralım, aynı zamanda programlamadaki işimizi biraz daha zorlaştırarak kendimizi geliştirmeye çalışalım. Pseudocode’muzu şu şekilde revize edelim;

İmport random

Bir t değişkeni ata ve 0 değeri ver

f=0

r=0

while r≠125:

x= 1 ve 10 arasında rastgele bir sayı

y= 1 ve 10 arasında rastgele bir sayı

z= 1 ve 10 arasında rastgele bir sayı

r=r+1

if x<=3 and y>=2 and z<=3:

t=t+1

else:

f=f+1

print(“t=”t)

print(“f=”f)

sözde kodumuz kısaca şöyle anlatılabilir, t film izlediğimiz senaryoların sayısını, f film izlemediğimiz senaryoların sayısını temsil ediyor. Bu yüzden istediğimiz şartlar her sağlandığında t’ye bir ekliyoruz, sağlanmadığında da f’ye. “r” ise simülasyonu kaç kere çalıştırmak istediğimizi ayarlayabilmek için atadığımız bir değişken, döngü her çalıştığında 0 olan bu değerimize 1 ekleniyor ve while’ın koşulunda eşit değilken dediğimiz sayıya eşit olana kadar çalışmaya devam ediyor. Sözde kodumuzun Python dilindeki hali şudur;

Output ise budur;

teorik hesabımızda 6’ya 119’du, teorik sayıya yakın bir sayı çıktı. Şimdi de simülasyon sayısını artırarak 1000 yapalım ve sonuçları gözlemleyelim.

Teorideki sayılara daha da yaklaştı. Böylece Örnek sayısı arttırıldıkça deneysel olasılığın teorik olasılığa yakınsadığını da deneyimlemiş olduk. Algoritma ve programlama ile ilgili temel düzeyde bazı kazanımlar elde etmeniz için kaleme aldığım bu yazı umarım faydalı olmuştur.

--

--

Levent Burak İyigün

Part-time Levent Burak, Full-time kuş tüyü. Ayrıca 22 level. Otizmli bir pitbull