Sıfırdan Zirveye Python Programlama

Berkcan Gümüşışık
Yetkin Yayın
Published in
17 min readAug 23, 2022

Merhaba arkadaşlar. Bu yazımda en temelden ileri seviyeye Python programlama dili hakkında bilgi vererek hızlı bir Python turuna çıkacağız. Kemerleri bağlayın uçuşa geçiyoruz.

Python Nedir?

Python bir programlama dilidir. Üstelik pek çok dile kıyasla öğrenmesi kolay bir programlama dilidir. Bu yüzden, eğer daha önce hiç programlama deneyiminiz olmamışsa, programlama maceranıza Python’la başlamayı tercih etmeniz doğru olacaktır. Geliştirilmeye 1990 yılında Guido van Rossum tarafından Amsterdam’da başlanmıştır.

İsmini birçok kişi yılandan aldığını sansada Guido van Rossum’un sevdiği, Monty Python adlı altı kişilik bir İngiliz komedi grubunun Monty Python’s Flying Circus adlı gösterisinden almıştır.

  • 1994 yılında Python 1.0 kullanıma sunuldu.
  • 2000 yılında Python 2.0 sürümü kullanıma sunuldu.
  • 2008 yılında Python 3.0 sürümü kullanıma sunuldu.

Python Yazmak İçin Kullanılan IDE’ler

Python yazarken bir çok farklı IDE kullanılmaktadır. Eğer sunum şeklinde hem notlarınızı tutmak ya da bir yerde sunum yapacaksanız Jupyter Notebook ya da Google Colab kullanabilirsiniz. Google Colab ile Jupyter Notebook arasındaki fark Google Colab tamamen online çalışarak tüm çalışmalarınızı Google Drive’da yedeklemektedir ama Jupyter Notebook’u bilgisayara kurmak gerekir.

Google Colab ve Jupyter Notebook haricinde PyCharm, Visual Studio Code gibi IDE’ler de kullanmak mümkündür.

Pythonu aşağıdaki linkten bilgisayarınıza indirebilirsiniz:

Neden Python Öğrenmeliyiz?

  • Genel amaçlı, yüksek seviyeli ve yorumlanabilir bir dildir.
  • Açık kaynak kodludur.
  • Dinamik tip tanımlamalı bir dildir.
  • Birçok platformda çalışma imkanı sunar: Grafik , veritabanı , oyun yapay zeka vb
  • Nesne yönelimlidir.
  • Öğrenmesi kolaydır.

Değişkenler

Değişkenler bir verininin değerini saklamayı sağlarlar.

Değişkenler verilerin sonradan değiştirilmesine olan sağladığı için çok kullanışlıdır. Mesela bir bankada çalışıyoruz ve faiz oranını mesela 1.3'ten 1.1'e düşürmek isteniyor ve elimizde 1000 satırlık veri var bu oranı bir değişkene atarsak tek seferde bir yerde 1.1 yapmamız yeterli olacaktır. Diğer durumda 1000 satırlık kodu tek tek incelememiz gerekir.

Değişken Adlandırma Kuralları

  • Değişken adlarında sayılar, harfler ya da alt çizgi kullanılabilir. Ama değişken isimlendirmeleri alt çizgi ya da harfle başlar.
1berkcan = 5  Hatalı bir adlanırma kuralı
berkcan1 = 5 Doğru bir adlandırma
_berkcan = 5 Doğru bir adlandırma
  • Değişken adlandırırken Türkçe karakter kullanmamaya özen göstermeliyiz.
ağırlık = 5 hatalı kullanım
agirlik = 5 doğru kullanım
  • Değişken isimlendirirken boşluk kullanılmaz. Genellikle camelCase adlandırma yaparız.
isim soyisim = “Berkcan Gümüşışık” Hatalı kullanımisimSoyisim = “Berkcan Gümüşışık” Doğru kullanımisim_soyisim = “Berkcan Gümüşışık” Doğru kullanım
  • Python anahtar kelimeleri kullanılamaz.
  • Büyük küçük harf duyarlıdır.
A = "Python"a = "Berkcan"print(A) # Pythonprint(a) # Berkcan

- Değişken adları ne çok kısa, ne de çok uzun olmalıdır. Aynı zamanda kodu okuyan kişi değişkeninin ne için kullanıldığını anlaması gerekir.

print() Fonkisyonu

Ekrana bir çıktı vermeyi sağlayarak ekrana yazdırmayı sağlar. Bir yazılımcının olmazsa olmazı ekrana “Merhaba, Dünya” çıktısı verdirelim.

print("Merhaba Dünya") #Merhaba Dünya

print() Parametreleri

1.sep

sep ifadesi, İngilizcede separator (ayırıcı, ayraç) kelimesinin kısaltmasıdır. Dolayısıyla print() fonksiyonundaki bu sep parametresi, ekrana basılacak öğeler arasına hangi karakterin yerleştirileceğini gösterir. Kullanılmasının veya kullanılmamasının pek bir önemi yoktur. Çünkü görünmese bile hep oradadır.

print("http://", "www.", "google.", "com", sep="")
# http://www.google.com
print("Adana", "Mersin", sep="-") # Adana-Mersin

2.end

Tıpkı sep parametresi gibi, end parametresi de print() fonksiyonunda görünmese bile her zaman oradadır. end parametresi ise bu parametrelerin sonuna neyin geleceğini belirler.

print("Bugün günlerden Salı", end=".") # Bugün günlerden Salı.

Yorum Satırları

Python programlama dilinde tek satır halinde açıklama satırı eklemek için # işareti, çoklu yorum satırı için 3 tane tek tırnak kullanılır.

Satırın başı ve sonu arasındaki herhangi bir metin ve kodun Python programlama dili tarafından yok sayılır ve çalıştırılmaz.

# Tekli Yorum Satırı'''
Çoklu
yorum
satırı
'''

Kaçış Dizileri

1.Ters Taksim( \ )

Bir karakter dizisi içinde çift tırnak işareti geçiyorsa, o karakter dizisini tek tırnakla; eğer tek tırnak geçiyorsa da o karakter dizisini çift tırnakla tanımlayarak bu sorunun üstesinden gelebiliyorduk. Ama çift tırnak geçen karakter dizilerini yine çift tırnakla tanımlayabiliriz.

print("\"laptop\" kelimesi Türkçede \"dizüstü bilgisayar\" anlamına gelir.") # "laptop" kelimesi Türkçede "dizüstü bilgisayar" anlamına gelir.

2.\n

Yeni satır eklemeyi sağlar.

3. \t

Burada \t adlı kaçış dizisi, sanki Tab (sekme) tuşuna basılmış gibi bir etki oluşturarak boşluk bırakır.

print("abc\tdef") # abc def

type() Methodu

Bir değişkenin integer, float, string ya da boolean olup olmadığını verir. Yani veri tipini verir.

Sayısal Veri Türleri

1.integer

Tam sayıları ifade eder. Mesela 10 20 0 -35

myVariable = 10myVariable2 = 20print(myVariable + myVariable2) # 30print(type(myVariable)) # <class 'int'>

2.float

Ondalıklı sayıları ifade eder. Mesela 10.0 20.5 0.0 -35.8

Python 2 rakamı birbirine böldüğü zaman gerçek sonuca ulaşmak için float değer döndürür.

pi = 3.14print(type(pi)) # <class 'float'>

Aritmetik Operatörler

  • +: Toplama
  • -: çıkarma
  • *: Çarpma
  • /: Bölme
  • **: Üs alma
  • %: Mod alma
  • //:Tam Bölme

String Veri Türleri

Metinsel ifadelerdir. Metinsel ifadeler “ “, ‘ ‘, “”” “”” arasına yazılması gerekir. Metinsel ifadelerde eğer tek tırnak ile başlandıysa tek tırnak ile devam edilmesi gerekmektedir.

Metinsel ifadelerin index ile ulaşma imkanı sağlar. Yazılımda index 0'dan başlar. Mesela “Merhaba Dünya” metninin 2. indexinde r vardır. String indexleme işlemi aşağıdaki gibidir.

String Metotları

len() metodu bir metnin kaç karakterden oluştuğunu verir.

x = "Merhaba"
print(len(x)) # 7

upper() metodu, metinsel ifade içinde kullandığımız her bir karakteri büyük harfe çevirir.

mesaj = "python öğreniyorum"print(mesaj.upper()) #PYTHON ÖĞRENİYORUM

lower() metodu, metinsel ifade içinde kullandığımız her bir karakteri küçük harfe çevirir.

print(mesaj.lower()) #python öğreniyorum.

capitalize() metodu, bir metinsel ifadenin ilk harfini büyük harfe çevirir.

isim = "berkcan gümüşışık"print(isim.capitalize()) #Berkcan gümüşışık

swapcase() metodu, metin içindeki küçük karaterleri büyüğe; büyük karakterleri küçüğe çevirir.

isim = "Berkcan"
print(isim.swapcase()) # bERKCAN

replace() metodu, karakter dizisi (string) veri tipindeki bir değişkeni güncellemek için kullanılır.

mesaj = "python öğreniyorum"
print(mesaj.replace("ö","o") # python oğreniyorum

split() metodu, karakter dizisi (string) veri tipindeki değişkeni belirtilen karaktere ya da bir ifadeye göre parçalar.

bilgi1 = "Berkcan Gümüşışık 22 Ankara"
print(bilgi1.split(" ")) #['Berkcan', 'Gümüşışık', '22', 'Ankara']

strip() metodu, metinsel ifadenin başından ve sonundan siler. Metod içindeki silinecek karakterler kısmının boş bırakılması durumunda strip metodu boşluk karakterini siler.

metin = " Hello World "
print(metin.strip()) # Hello World

startswith metodu, bir metinsel ifadenin bir şeyle başlayıp başlamadığının kontrolünü sağlar true ya da false değer döndürür.

endswith metodu, bir metinsel ifadenin bir şeyle bitip bitmediğinin kontrolünü sağlar true ya da false değer döndürür.

metin = "Hello World"
print(metin.startswith("Hel"))#True
print(metin.endswith("lo"))#False

find() metodu, ifadenin string içinde kaçıncı indexten itibaren başladığını verir. Bulamadıysa -1 döndürür.

print(metin.find("lo") # 3

isAlpha() metodu, bir ifadenin alfabetik olup olmadığını söyler. True ya da false değer döndürür.

isDigit() metodu, bir ifadenin rakamlarının sıralı olup olmadığını söyler.True ya da false değer döndürür.

String Formatlama

adim = "Berkcan"
print("Benim adım {}".format(adim)) #Benim adım Berkcan
print(f"Benim adım {adim}")#Benim adım Berkcan
print("Benim adım " + adim) #Benim adım Berkcan

input()

Kullanıcıdan veri girişi almamızı sağlar. input ile veri alırken string gibi davranır bu yüzden input alırken sayı alacaksan int ya da float kullan.

name = input("Adınız nedir: ")
print("Merhaba " + name)
"""
Adınız nedir: Berkcan
Merhaba Berkcan
"""

Listeler

[ ] içerisinde tutulurlar. Indexleme, veri güncelleme, silme, veri ekleme gibi işlemler yapılabilir. İç içe listeleme işlemi yapılabilir. İçerisinde her veri türünden elema eklenebilir.

ogrenciler = ["Berkcan","Engin","Derin","Salih"]
print(ogrenciler) # ["Berkcan","Engin","Derin","Salih"]
print(ogrenciler[0]) # Berkcan
ogrenciler[3] = "Ahmet"
print(ogrenciler) # ["Berkcan","Engin","Derin","Ahmet"]
nestedList = [1,5,"berkcan",4,[6,"z"]]
print(nestedList[0]) #1
print(nestedList[1]) #5
print(nestedList[4]) #[6,"z"]
print(nestedList[4][0]) #6
print(nestedList[4][1]) #z

Liste Metotları

append() metodu , listeye yeni eleman eklemeyi sağlar.

ogrenciler = ["Berkcan","Şevval","Nurana","Mete"]
ogrenciler.append("Kaan")
print(ogrenciler) #['Berkcan', 'Şevval', 'Nurana', 'Mete', 'Kaan']

remove() metodu, listeden eleman çıkarmayı sağlar.

ogrenciler = ["Berkcan","Şevval","Nurana","Mete"]
ogrenciler.remove("Kaan")
print(ogrenciler) #['Berkcan', 'Şevval', 'Nurana', 'Mete']

**Olmayan indexe veri eklemek mümkün değildir.**

len() metodu, dizinin kaç elemandan oluştuğunu verir.

sehirler = list(("Ankara","İstanbul"))
print(len(sehirler)) #2

clear() metodu, listenin tamamını boşaltır.

sehirler = list(("Ankara","İstanbul"))
sehirler.clear()
print(sehirler) # []

count() metodu, girilen değerin liste içinde kaç tane bulunduğunu gösterir.

ogrenciler = ["Berkcan","Şevval","Nurana","Mete"]
print("Listedeki Berkcan sayısı = " + str(ogrenciler.count("Berkcan"))) # Listedeki Berkcan Sayısı = 1

index() metodu, listedeki elemanın indexini verir. Aranan veriyi ilk bulduğunda durur. Diğer verilerde aynı veri varsa getirmez. Eğer veri bulunamazsa ValueError hatası verir.

ogrenciler = ["Berkcan","Şevval","Nurana","Mete"]
print("Berkcan'ın İndexi = " + str(ogrenciler.index("Berkcan")))# Berkcan'ın İndeksi : 0

pop() metodu, listede indexe göre silme işlemini gerçekleştirir.

ogrenciler = ["Berkcan","Şevval","Nurana","Mete"]
ogrenciler.pop(3)
print(ogrenciler) # ['Berkcan', 'Şevval', 'Nurana']

insert() metodu, listeye indexe göre eleman ekler.

sehirler = []
sehirler.insert(0,"İstanbul")
sehirler.insert(1,"Ankara")
sehirler.insert(2,"Ankara")
print(sehirler) #["İstanbul","Ankara","Ankara"]

reverse() metodu, listeyi tersine çevirir.

sehirler = ['Ankara', 'Ankara', 'İstanbul']
sehirler.reverse()
print(sehirler) # ['Ankara', 'Ankara', 'İstanbul']

sort() metodu, listeyi büyükten küçüğe, alfabetik olarak sıralar.

ogrenciler = ["Berkcan","Şevval","Nurana"]
ogrenciler.sort()
print(ogrenciler) #['Berkcan', 'Nurana', 'Şevval']

Liste Toplama

liste1 = ["Atıl","Ahmet","Zeynep"]
liste2 = ["Mehmet","Mahmut","Atlas"]
liste3 = liste1 + liste2
print(liste3) #['Atıl', 'Ahmet', 'Zeynep', 'Mehmet', 'Mahmut', 'Atlas']

tuple(Demet)

  • Tuple listelere benzerdir.
  • Tuple ile liste arasındaki en önemli fark tuple elemanlarının değiştirilemez, liste elemanlarınının değiştirilebilir olmasıdır.
  • Performanslı bir data sağlar.
  • () içerisinde tanımlanabilir.
  • İç içe tuple oluşturulabilir.
  • Liste içerisinde tuple, tuple içersinide liste tanımlamak mümkündür.
  • Bir kere tanımlandıktan sonra değiştirilemezler yalnızca okunurlar.
  • Tek elemansa tuple olduğunu belirtmek için bir virgül koyulmalıdır.
tupleListe = (2,4,6,"Ankara",(2,3,4),[])
tupleListe[0] = 6
print(tupleListe) # TypeError: 'tuple' object does not support item assignment

Set

  • Listelere benzer.
  • En önemli özelliği indexsiz ve sırasız elemanlardan oluşmasıdır.
  • Veri tekrarı söz konusu değildir. Tüm elemanlar eşsizdir.
  • {} içerisinde tanımlanır.
  • Çok hızlı bir veri tipidir.
students = {"Engin","Derin","Salih","Berkcan"}
print(students) #{'Salih', 'Berkcan', 'Engin', 'Derin'}
print(type(students)) # <class 'set'>
print("Berkcan" in students) #Listede var mı diye sorgulatma True

add() metodu , sete veri eklemeyi sağlar.

update() metodu, sete çoklu veri eklemeyi sağlar.

remove() metodu, çoklu eleman eklemeyi sağlar.

pop() metodu, setin son elemanını siler.

clear() metodu, setin içini boşaltır.

Dictionary(Sözlük)

  • Sırasız veri tutar.
  • Günlük hayattaki sözlükler gibi düşünebiliriz.
  • {} arasına yazılır.
  • key- value esasına göre çalışır. {“anahtar kelime” : deger} olarak düşünürsek {key : value} şeklinde değer tutar. {06 : “Ankara”} 06 key Ankara value değeridir.
yemekKaloriSozlugu = {"Elma":100 , "Karpuz":200,"Muz":300}
print(yemekKaloriSozlugu)#{'Elma': 100, 'Karpuz': 200, 'Muz': 300}
print(type(yemekKaloriSozlugu))# <class 'dict'>

Bir değere ulaşmak istersek key değerini kullanarak erişebiliriz.

yemekKaloriSozlugu = {"Elma":100 , "Karpuz":200,"Muz":300}
print(yemekKaloriSozlugu["Elma"]) #100

Sözlüklere integer, float, string ya da tuple veri tipleri kullanılırken listeler ve sözlükler kullanılmaz.

Veri ekleme, silme ve güncelleme işlemleri aşağıdaki gibi yapılmaktadır.

Sözlüklerde Metotlar

.keys() metodu ile sözlükteki tüm key değerlerini verir.

.values() metodu ile sözlükteki tüm value değerlerini getirmeyi sağlar.

. items() metodu ile sözlükteki tüm key value değerleri getirilir.

sozluk = {
"table" : "masa",
"pencil" : "kalem"

}
print(sozluk.keys()) #dict_keys(['table', 'pencil'])
print(sozluk.values()) # dict_values(['masa', 'kalem'])
print(sozluk.items()) # dict_items([('table', 'masa'), ('pencil', 'kalem')])

Boolean

True ya da False değer döndürerek bir şeyin doğru mu yanlış mı olduğunu sağlatan veri türüdür.

dogru = True
print(dogru) # True
yanlis = False
print(yanlis) # False

Karşılaştırma Operatörleri

Karşılaştırma operatörleri karar yapılarında çok fazla işimize yararlar.

  • = atama operatörüdür. Mesela x = 5 dersek x değerini 5'e atamış oluyoruz.
  • == iki değerin birbirine eşit olup olmadığını kontrol eder. Eşitse True eşit değilse False değerini döndürürür.
  • != eşit değil mi? Cevap eşit değilse True, eşitse False değerini döndürür.
  • > büyüktür.
  • < küçüktür.
  • >= büyük eşittir.
  • <= küçük eştittir.

Mantıksal Operatörler

1. and Operatörü

  • True and True = True
  • True and False = False
  • False and True = False
  • False and False= False

Her iki durumda eğer doğruysa True değerini döndürür. Diğer durumlarda hep False değerini döndürür.

hak = 5
devam = "e"
print((hak > 0) and (devam=="e")) #True

2. or Operatörü

  • True orTrue = True
  • True or False = True
  • False or True = True
  • False or False= False

Yalnızca 2 durumun yanlış olduğu zaman False diğer her durumda True değer verir.

x = 5
print((x > 0) or (x % 2 == 0)) # True

3. not Operatörü

  • True ise False, False ise True yapar.

Karar Yapıları

if kosul1:   Kosul1 True olduğunda bu kod bloğu çalışırelif kosul2:   Kosul2 True olduğunda  bu kod bloğu çalışırelse:   Diğer koşullar sağlanmadığı zaman çalışır.
  • Eğer if bloğu doğruysa diğer durumlara bakılmaz ve if bloğu altındaki kodlar çalışır.
  • Else yapısının kullanılması zorunlu değildir olsa da olur olmasada olur.
  • Elif yapısının kullanılması zorunlu değildir olsa da olur olmasada olur.
  • Else yapısı if ve varsa elif yapısının false olduğu durumda ikinci nihai durum olarak çalışır .
  • elif yapısına birden çok farklı koşullardan doğacak durumların kontrolünü sağlamak için kullanırız .
isim = "Berkcan Gümüşışık"
if
"Gümüşışık" in isim: # isimde Gümüşışık varsa
print("Varmış")
else:
print("Yokmuş")

Yukarıdaki kodun çıktısı “Varmış” yazdıracaktır. Bir uygulama örneği yapalım:

Kullanıcıdan vize ve final notu isteyin. Girilen vize notunun %40’ı vegirilen finalnotunun ise %60’ı alınarak yıl sonu not ortalaması hesaplanacaktır.Bu notortalaması eğer 85 ve üzeri ise AA,75 ve 85 arasında ise BA,70 ve 75 arasında ise BB,65 ve 70 arasında ise CB,60 ve 65 arasında ise CC,55 ve 60 arasında ise DC,50 ve 55 arasında ise DD olarak hesaplanacaktır.Bu öğrencinin yıl sonu toplam notu 50’nin altında ise FF ile dersten kalacaktır.Ayrıca öğrencinin final notu 50’nin altında ise direkt FF ile kalacaktır.

in Operatörü

- Belirtilen bir değerin, dizi, metin, liste veya demet gibi bir dizinin öğesi olup olmadığını kontrol eder.

- True ya da False değeri döndürür.

string = "Python"
print("p" in string) # False
print("y" in string) # True
liste = [1,2,3,4,5,6]
print(1 in liste) # True
print(10 in liste) #False

Döngüler

  • Döngüler, temel olarak, verilen koşullar karşılanana kadar devam eden tekrar eden bir süreçtir.
  • Döngünün koşulu her zaman doğruysa döngü sonsuza kadar devam eder. Hangisine “Sonsuz döngü” denir. Bu tür döngülere genellikle while döngüsünde rastlarız.
  • Eğer bir döngünün koşulu baştan yanlışsa, bu nedenle döngünün çalışmasına izin vermez. Sonra buna “sıfır açma döngüsü” denir.

1. for Döngüsü

for Döngüsü , listelerin ,demetlerin, stringlerin ve hatta sözlüklerin üzerinde dolaşmamızı sağlayan bir döngü türüdür. Yapısı şu şekildedir.

for eleman in veriYapisi:
Yapılacak İşlemler

Bir liste içerisinde gezinme örneği yapalım:

liste1 = [1,2,3,4,5]
for i in liste1:
print(i)
"""
Çıktı:
1
2
3
4
5
"""

Stringler içerisinde for döngüsü ile gezinme yapalım:

string1 = "Python"
for i in string1:
print(i)
"""
P
y
t
h
o
n
"""

Demetler içerisinde for döngüsü ile gezinme yapalım:

demet = (1,2,3,4)
for i in demet:
print(i)
"""
1
2
3
4
"""

Dictionary içerisinde for döngüsü ile gezinme yapalım:

sozluk = {"TL" : "Türkiye","Euro" : "Avrupa", "Dolar":"ABD"}
for i in sozluk:
print(i)
"""
TL
Euro
Dolar
"""

For döngüsü ile yıldız oluşturan bir uygulama yapalım:

sayi = int(input("Yıldız sayısını giriniz :"))
yildiz = ""
for x in range(1,sayi+1):
yildiz = yildiz +"*"
print(yildiz)
"""
Yıldız Sayısı Giriniz: 5
*
**
***
****
*****
"""

2. while Döngüsü

while döngüleri belli bir koşul sağlandığı sürece bloğundaki işlemleri gerçekleştirmeye devam eder. while döngülerinin sona ermesi için koşul durumunun bir süre sonra False olması gereklidir.Yapısı şu şekildedir;

while koşul:
Yapılacak İşlemler
sum = 0
i = 1
while i <= 10:
sum += i
i += 1
print("Toplam :", sum) # Toplam : 55

range() Fonksiyonu

range fonksiyonu ile sayıların aralığını belirleyebiliriz. range(başlangıç, bitiş, artış) şeklinde kullanılır.

for x in range(5):
print(x)
"""
0
1
2
3
4
"""
for x in range(1,10,2):
print(x)
"""
1
3
5
7
9
"""

break ve continue Deyimi

break ifadesi bir döngü içinde çalıştırıldığında, döngüyü durdurur ve ondan dışarı atlar.

i = 0
while (i < 10):
if(i == 5):
break
print(i)
i += 1
"""
0
1
2
3
4
"""

continue ifadesi mevcut değeri atlar (geri döndürmez) ve döngüdeki sonraki yinelemeye gider ancak bu döngünün yürütülmesini durdurmaz.

for i in range(7):
if(i == 5):
continue
print(i)
"""
0
1
2
3
4
6
"""

List Comprehension

Liste işlemlerinde kodu uzun uzadıya yazmak yerine tek bir satırda düzenleme imkanı sunmaktadır.

Normalde list comprehension yapısını kullanmazsak ve bir dizinin elemanları kendisiyle çarpımını yapmak istesek aşağıdaki yapı oluşacaktır.

liste = [1,2,3,4,5,6,7,8,9,10]
yeni = []
for i in liste:
yeni.append(i* i)
print(yeni) # [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

List comprehension yöntemiyle olan çözüm ise daha kısa bir şekilde aşağıdaki gibi bir yapı oluşacaktır:

liste = [1,2,3,4,5,6,7,8,9,10]
yeniListe = [i*i for i in liste]
print(yeniListe) # [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

Fonksiyonlar

Bir kodu bir çok yerde kullanmamız gerekiyorsa, her yerde tekrar tekrar yazmayı önler. Programlamanın temeli : DRY(Don’t Repeat Yourself — Kendini tekrar etme)

Fonksiyonların içindeki değişkenler yereldir, yani bir fonksiyonun içinde bir değişken tanımladığınızda, o değişkeni fonksiyonun dışında çağıramayız. Çünkü o değişken o fonksiyona özeldir ve gloabalde kullanılamaz. Ne zaman bir fonksiyon çağırılırsa, fonksiyonu yazdıktan sonra yapmalısınız.

Fonksiyon Yazılması

def fonksiyon_adı(parametre1,parametre2..... (opsiyonel)):
# Fonksiyon bloğu
Yapılacak işlemler
# dönüş değeri - Opsiyonel

Fonksiyon Çağırılması

Tanımlanan bir fonksiyonun kullanılmasına programlama dillerinde Fonksiyon Çağrısı denmektedir. Fonksiyon çağrısı şu şekilde yapılabilmektedir:

fonksiyon_adı(Argüman1,Argüman2....)

Bir fonksiyon örneği yapalım:

def helloWorld():
print("Merhaba")
helloWorld() # Merhaba

Argüman

  • işlev çağrılırken parantez içindeki işlevlere iletilen değerler (string , number, vb.) (ör. islev_adı (argüman))
  • Eğer fonksiyon çağrılırken bir argüman yoksa, bu argümanın değeri None olacaktır. Bu nedenle fonksiyonun içinde ifade edilecek bir değer yoksa, belirlenen değeri kullanılmasını isteyebiliriz. def helloWorld(name = “ziyaretçi”)
  • Birden fazla parametre olabilir. Her biri virgülle ayrılır.
def carp(sayi1 = 1 , sayi2 = 1, sayi3 = 1):
c = sayi1 * sayi2 * sayi3
print(c)
carp(2,3) # 6

return

  • Kodun tamamında kullanmak için işlevin kodu tamamlandıktan sonra kalan değeri (sonuç değeri) döndürür
  • “return” anahtar sözcüğünden sonraki kodlar yürütülmez. Bu, görmezden gelindikleri anlamına gelir.
  • return yardımıyla fonksiyonlar değerleri çağrıldığı yere döndürebilir ve biz de bu değerleri istediğimiz yerde kullanabiliriz.
def dikUcgenAlaniHesapla(a,b):
return (a * b)/2
print(dikUcgenAlaniHesapla(2,3)) # 3

*args

Sınırsız sayıda parametreli fonksiyon oluşturmak için parametremizin önüne tek yıldız (*) koyabiliriz. İsimsiz argümanlardır.

def sayilar(*x):
print(x)
sayilar(4) # 4
sayilar(4,5,6) # 4,5,6

**kwargs

Çift yıldızlı (**) parametrelerin tek yıldızlı (*) parametrelerden en önemli farkı, fonksiyonu çağırırken anahtar değer ilişkisiyle çağırabilmemizdir. İsimli argümanlardır.

Pass Deyimi

Python programlamasında pass ifadesi null değer atama için kullanılır. Python’daki bir açıklama ve geçiş ifadesi arasındaki fark, yorumlayıcı bir yorumu tamamen yok sayırken, geçişin göz ardı edilmemesidir.

Global ve Yerel Değişkenler

  • Global değişken fonksiyonlarımızın dışında tanımladığımız değişkenlerdir.
  • Yerel değişkenler ise fonksiyon içinde kullandığımız değişkenlerdir.
  • Fonksiyonun dışında tanımladığımız fonksiyonların içinde kullanılırken, fonksiyonların içinde tanımladığımız değişkenler fonksiyon dışında kullanılamaz.
def yazdir2():    x = 5    print(x)yazdir2()print(x)

Bir fonksiyon kendi içerisinde çağrılırsa sonsuz döngüye girer.

Lambda Gösterimi

Pythonda isimsiz olarak tanımladığımız fonksiyonlara lambda fonksiyonları denir. Tek satırda yazılırlar. Gösterimi fonksiyonAdi = lambda parametreler : yapılacakIslem

dikUcgeninAlani = lambda a,b : a*b/2dikUcgeninAlani(2,3) #3

Modüller

Bir Python modülünü programımıza dahil ederek bu modüller içinde yazılan fonksiyonlardan ve sınıflardan kullanabilir ve programlarımızı daha efektif bir şekilde yazabiliriz. Eğer modül diye bir kavram olmasaydı, programlarımızdaki herbir fonksiyonu ve sınıfı kendimiz yazmak zorunda kalacaktık. Kütüphaneleri kullanmak için import modulAdi şeklinde dahil edebiliriz.

from modül_adı import * ile kütüphanemizi kullanabiliriz.

math Modülü

Matematiksel ifadelerle ilgili kullandığımız modüldür.

Modüllerle ilgili bir sayı tahmin oyunu yapalım.

Gömülü Fonksiyonlar

1. map Fonksiyonu

Parametre olarak aldığı fonksiyona, parametre olarak aldığı listenin her elemanını sırasıyla parametre olarak gönderir.

map(fonksiyon,iterasyon yapılabilecek veritipi(liste,demet vb),....)

map fonksiyonunu bir örnekle inceleyelim:

numbers = [2, 8, 16, 32, 64]
powers = []
def power(x):
return x ** 2
powers = list(map(power, numbers))
print(powers) # [4,64,256,1024,4096]

2. filter Fonksiyonu

Filtreleme işlemini yapmayı sağlar.

filter(fonksiyon,iterasyon yapılabilen bir veritipi(liste vb.))

Filter ile ilgili bir örnek yapalım:

def asal_mi(x):
i = 2
if (x == 1):
return False # Asal değil
elif
(x == 2):
return True # Asal sayı
else
:
while(i < x):
if (x % i == 0):
return False # Asal Değil
i += 1
return True
list(filter(asal_mi, range(1,100))) # 1 ile 100 arasındaki asal sayılar

3. zip Fonksiyonu

liste1 = [1,2,3,4]liste2 = [5,6,7,8]liste3 = ["Python","Php","Java","Javascript","C"]list(zip(liste1,liste2,liste3)) # [(1, 5, 'Python'), (2, 6, 'Php'), (3, 7, 'Java'), (4, 8, 'Javascript')]

4. enumerate Fonksiyonu

İngilizcede enumerate kelimesi ‘numaralandırmak’ anlamına gelir. enumerate() fonksiyonunun görevi de kelimenin bu anlamıyla aynıdır. Yani bu fonksiyonu kullanarak nesneleri numaralandırabiliriz.

liste = ["Elma","Armut","Muz","Kiraz"]
list(enumerate(liste)) #[(0, 'Elma'), (1, 'Armut'), (2, 'Muz'), (3, 'Kiraz')]

5. all Fonksiyonu

all() fonksiyonu bütün değerler True ise True, en az bir değer False ise False sonuç döndürür.

liste = [True,False,True,False,True]all(liste) # False

6. any Fonksiyonu

any() fonksiyonu bütün değerler False ise False, en az bir değer True ise True sonuç döndürür.

liste = [0,0,0,0,0,0,0]any(liste) # False

Hata Yönetimi

Python programlarında bazen bir değişkenin tanımlanmadan kullanılmaya çalıştırılması , bazen de yapılamayacak bir aritmetik işlemin yapılması Pythonda hatalara yol açar. Ancak bu istisnai durumlarda, hataların türüne göre programlarımızı daha güvenli bir şekilde yazabiliriz.Yani hata çıkarabilecek kodlarımızı öngörerek bu hataları programlarımızda yakalayabiliriz.

try — except Blokları

try:
Hata çıkarabilecek kodlar buraya yazılıyor.
Eğer hata çıkarsa program uygun olan except bloğuna girecek.
Hata oluşursa try bloğunun geri kalanındaki işlemler çalışmayacak.
except Hata1:
Hata1 oluştuğunda burası çalışacak.
except Hata2:
Hata2 oluştuğunda burası çalışacak.

Hata türünü verirsek hata türüne göre hata çıktısı verir. Ama hata türü vermezsek her hatada aynı çıktıyı verir.

try - except- else

try bloğunun içinde hata oluşursa except bloğuna girer. try bloğunun içinde hata oluşmazsa else bloğuna girer.

try:    hata çıkarabilecek kodlar buraya yazılır.except Hata1:    Hata1 oluştuğunda burası çalışacak.else:    Hata oluşmazsa burası çalışacak.

Bir örnekle bakalım:

try:
a = int(input("Sayı1:"))
b = int(input("Sayı2:"))
print(a / b)
except ValueError:
print("Lütfen inputları doğru girin.")
except ZeroDivisionError:
print("Bir sayı 0'a bölünemez.")
else:
print("Doğru Çalıştı")

try - except - finally

try:    hata çıkarabilecek kodlar buraya yazılır.except Hata1:    Hata1 oluştuğunda burası çalışacak.finally:    Kesin olarak her zaman çalışacak.

Hata Fırlatma

raise anahtar kelimesiyle yapılır.

raise HataAdı(opsiyonel hata mesajı)

Bir örnekle raise kullanımını öğrenelim:

Dosya İşlemleri

1. Dosya Okuma

Dosya açmak ve oluşturmak için open() kullanılır. Dosyayı kapatmak için close() kullanılır.

open(dosyaIsmi, dosyaModu)
  • dosyaModu: Dosyayı hangi modda açacağını belirtir. r: Okuma modunda açmayı sağlar. Belirtilen konumda dosya olması gerekir.

Dosya okumak için bilgiler.txt adında bir dosya oluşturalım ve içerisindeki verileri okuyalım.

file = open("bilgiler.txt","r",encoding= "utf-8") # Dosyayı okuma kipiyle açıyoruz. Türkçe karaktere dikkat.
for
i in file: # dosyanın her bir satırı üzerinde geziniyoruz.
print(i) # Her bir satırı ekrana basıyoruz
file.close()

read() => Eğer içine hiçbir değer vermezsek bütün dosyamızı okuyacaktır.

file = open("bilgiler.txt","r",encoding="utf-8")
icerik = file.read()
print("Dosya İçeriği:\n",icerik,sep ="")
file.close()

read() fonksiyonuyla bir dosyayı okuduğumuzda dosya imlecimiz dosyanın en sonuna gider ve read() fonksiyonu 2. okuma da artık boş string döner.

readline() => Her çalıştığında bir satır okur. Mesela 15 tane satır varsa 15 kere readline() komutunu çağırmak gerekir. Okuyacak herhangi bir şey kalmayınca boş string döner.

readlines() => Dosyanın bütün satırları bir liste şeklinde döner.

2. Dosyaya Yazma

w : Yazma modu. Dosyayı konumda oluşturur. Eğer dosya mevcut ise, dosyayı siler ve yeni bir dosya oluşturur. write fonksiyonu ile dosyaya yazmayı sağlar.

file = open("bilgiler.txt","w",encoding="utf-8")
file.write("Berkcan Gümüşışık\n")
file.close()

Yukarıdaki örnekte bilgiler.txt dosyası olduğu için eski dosyayı silip yeni dosya açınca yalnızca “Berkcan Gümüşışık” yazar.

a: append (ekleme) modudur. Dosya konumda yoksa oluşturur, dosya konumda varsa ekleme işlemi yapar.

r+ : Hem okuma hem yazma modudur. Dosya konumda yoksa hata verir.

3. Dosyaları Otomatik Kapatma

with open(dosya_adı,dosya_kipi) as file:
Dosya işlemleri

4. Dosyaları İleri Geri Sarmak

seek() metodunu kullanarak istediğiniz bayt konumuna dönebilirsiniz. Dosyanın hangi bayt konumunda bulunduğunuzu öğrenmek isterseniz de tell() metodunu kullanabilirsiniz

Nesne Yönelimli Programlama (OOP)

İyi bir programcı olmak istiyorsanız, kendiniz hiç kullanmasanız bile, nesne tabanlı programlamayı öğrenmek zorundasınız.

Class

Sınıflar veya Classlar objelerimizi oluştururken objelerin özelliklerini ve metodlarını tanımladığımız bir yapıdır. Bir araba classımızın olduğunu düşünelim ve özelliklerini aşağıdaki gibi girelim.

class Araba():
# Sınıfın özellikleri(attribute)
model = "Renault Megane"
renk = "Gümüş"
beygirGucu = 110
silindir = 4

Obje oluşturma

obje_ismi = Sınıf_İsmi(parametreler(opsiyonel))

Özelliklere Erişme

obje_ismi.özellik_ismi

Obje oluşturma ve özelliklere erişmeyi öğrendikten sonra araba nesnemize erişmeyi aşağıdaki gibi yapabiliriz.

araba1 =  Araba() # Araba veri tipinden bir "araba1" isminde bir obje oluşturduk.print(araba1.model) # Araba1'in modeli Reneault Meganeprint(araba1.renk) # Araba1'in rengi Gümüşprint(araba1.beygirGucu) # Araba1'in beygir gücü 110print(araba1.silindir) # Araba1'in silindiri 4

__init__()

Pythonda yapıcı(constructor ) fonksiyon olarak tanımlanmaktadır. Bu metod objelerimiz oluşturulurken otomatik olarak ilk çağrılan fonksiyondur. Bu metodu özel olarak tanımlayarak objelerimizi farklı değerlerle oluşturabiliriz.

self anahtar kelimesi, objeyi oluşturduğumuz zaman o objeyi gösteren bir referanstır ve metodlarımızda en başta bulunması gereken bir parametredir. İstersek init metodunu varsayılan değerlerle de yazabiliriz.

class Araba():
def __init__(self,model,renk,beygir_gücü,silindir): # Parametrelerimizin değerlerini objelerimizi oluştururken göndereceğiz.
self
.model = model # self.özellik_ismi = parametre değeri şeklinde objemizin model özelliğine değeri atıyoruz.
self
.renk = renk # self.özellik_ismi = parametre değeri şeklinde objemizin renk özelliğine değeri atıyoruz.
self
.beygir_gücü = beygir_gücü # self.özellik_ismi = parametre değeri şeklinde objemizin beygir_gücü özelliğine değeri atıyoruz.
self
.silindir = silindir # self.özellik_ismi = parametre değeri şeklinde objemizin silndir özelliğine değeri atıyoruz.
araba1 = Araba("Peugeot 301","Beyaz",90,4)
print(araba1.renk)
print(araba1.model)

Method Kullanımı

Inheritance(Miras Alma)

Bu konsepti aslında bizim kendi anne babamızdan değişik özellikleri ve davranışları miras almamıza benzetebiliriz. Bir sınıfın özelliklerinin ve metotlarının başka sınıflara aktarılarak işlevinin artırılmasını sağlar. Mesela öğrenci ve öğretmeni düşündüğümüz zaman öğrencinin adı, soyadı, adresi, cinsiyeti ve numarası vardır. Öğretmeninse ad, soyad, adres, cinsiyet ve branşı vardır. Bunun yerine kisi sınıfı oluşturup ad, soyad, adres ve cinsiyet tutulur. Öğrenci ve öğretmen classında ise öğrenciye veya öğretmene özgü özellikler ve metotlar tutulur.

super() en genel anlamıyla miras aldığımız sınıfın metodlarını alt sınıflardan kullanmamızı sağlar. super._init_() metodu çalışırken sınıfın özelliklerini ve metotlarını kullanır.

Base Class ana sınıftır. Sub Class, Base Class’ının özelliklerini ve metotlarını kullanır.

Kısa Bir Kapanış

Bu yazımızda Python programlama dilinin temellerini ve nesne yönelimli programlama konusuna detaylıca inceledik. Yazılıma ilk başlayanlar için detaylı bir dokümantasyon olduğunu düşünüyorum. İleride ki yazılarda kütüphaneleri anlatıyor olacağım. Daha detaylı örnekler ve projeler incelemek isterseniz aşağıdaki Github reposunu inceleyebilirsiniz.

Sorularınız olursa bana istediğiniz zaman ulaşabilirsiniz. Sağlıklı ve bugsuz günler dilerim.

--

--