Fatih

Python Temelleri

Python Temeller Updated Sep 30, 2025 10 min read 27 sections

Atıl Samancıoğlu’nun verdiği Python 100 Günlük Programlama Kampın’dan aldığım notlar 📄

Eğitim’e ulaşmanız için linki buraya bırakıyorum ⤵️

Python 2025 : 100 Günlük Programlama Kampı

#Değişken Nedir?

İçerilerinde veri tutabilen yapılara değişken denir. Değişken verileri ramde saklar.

Python
age = 10

# Bundan sonra Age'i bana 10 olarak getirir her zaman.

#Veri Tipleri Nedir?

Veri tipleri, bir programlama dilinde kullanılan verilerin türlerini belirleyen yapısal özelliklerdir.

Python
type(10)

# Kodu çalıştırdığımızda bize parantez içindeki değerin tipini söyler.

# Veri tipi  int ⇒ Tam Sayı

Python
type(3.14)

# Kodu çalıştırdığımızda bize parantez içindeki değerin tipini söyler.

# Veri tipi  float ⇒ Ondalıklı Sayı

Python'da diğer bazı programlama dillerinden farklı olarak, iki tam sayı (integer) bölündüğünde sonuç her zaman float (ondalıklı sayı) olur. Bu durum yalnızca bölme işlemi (/) için geçerlidir.


Farklı İşlemler

Python
2 ** 5

# Bu işlem üssü tanımlar, 2 üzerin 5 olarak tanımlar.

10 % 3

# Bu işlem ise işlemden kalanını bulmamızı sağlar.


#String Nedir?

Metinsel değerlerin veri tiplerine string denir. Pythonda string tek veya çift tırnak içerisinde belirtilir.

Python
'Meercat's restaurant' 
												# çift tırnak bu tür durumlarda kullanmak daha mantıklıdır.
"Meercat's restaurant"

Escape Characters

Python
print("Meercat's \nrestaurant") #/n'den sonra gelen kısmı yeni satırda yazdırır.
#/n => newline
print("Meercat's \trestaurant")#/t yazılan yere bir tablık boşluk bırakır.
#/t => tab

#String Metotları

String metotları ise str (string) veri tipine ait özel fonksiyonlardır. Bunlar, metin üzerinde işlem yapmamızı sağlayan hazır fonksiyonlardır.

capitalize() ⇒ String’in ilk karakterini büyük harfe çevirir.

count() ⇒ String’de bulunan herhangi bir değerin, kaç adet bulunduğunu gösterir.

upper() ⇒ String’in tüm karakterlerini büyük harfe çevirir.


Bu metotlarda bilmediğimiz bir metodun ne işe yaradığını öğrenmek için help fonksiyonunu kullanırız.

Python
help(name.count)

#İndex Nedir?

Programlamada indeks, bir dizilimdeki (metin veya liste gibi) her bir öğeye, örneğin bir karaktere, karşılık gelen ve ilk öğe için 0'dan başlayarak atanan sayısal bir konum belirtecidir.

Python
myString[x] # myString içerisinden, indeksi 'x' olan karakteri getirir.


Python'da, myName gibi bir string'in veya benzeri bir sıralı veri tipinin son karakterine/öğesine erişmek istediğimizde iki yaygın yöntem kullanabiliriz: ya veri tipinin toplam uzunluğunu (len(myName)) bulup bundan 1 çıkararak son elemanın indeksini (myName[len(myName)-1]) hesaplarız ya da Python'un sunduğu pratik negatif indeksleme kolaylığından faydalanarak doğrudan myName[-1] yazarız.


#Slicing Nedir?

Bir veri yapısından istediğiniz bir parçayı almanızı sağlar.

Python
veri_yapisi[başlangıç:bitiş:kaçarkaçarilerleyelim]

başlangıç (start): Alınacak parçanın başlayacağı indeks numarasıdır. Bu indeksteki eleman parçaya dahil edilir.

bitiş (stop): Alınacak parçanın biteceği indeks numarasıdır. Bu indeksteki eleman parçaya dahil edilmez. Eğer belirtilmezse, varsayılan olarak dizilimin sonuna kadar gidilir.

adım (step): Parça alınırken elemanlar arasında atlanacak mesafeyi belirtir. Örneğin 2 yazılırsa, bir eleman alınıp bir eleman atlanır. Eğer belirtilmezse, varsayılan olarak 1 kabul edilir (yani tüm elemanlar sırayla alınır).

[::-1] kestirmesi, bir dizilimi ters çevirmenin Python'daki yaygın ve kısa bir yoludur.


#Liste Nedir?

Liste (list), Python'da birden fazla öğeyi (sayı, metin, başka listeler vb.) tek bir isim altında toplamanızı sağlayan, sıralı ve değiştirilebilir bir veri yapısıdır. Öğeler köşeli parantez [] içine virgülle ayrılarak yazılır.

Python
metin = "Merhaba"
# metin[0] = "A"  # Bu satır HATA verir (TypeError), çünkü string'ler immutable'dır.


Ama, listeler değiştirilebilir (mutable) veri yapıları olduğu için, bir listenin belirli bir indeksindeki öğeyi (elemanı) doğrudan değiştirebiliriz.

Python
meyveler = ["elma", "armut", "muz"]
print("Önce:", meyveler)

#Çıktı:

Önce: ['elma', 'armut', 'muz']

# 1. indeksteki "armut" öğesini "kiraz" ile değiştirelim
meyveler[1] = "kiraz"

print("Sonra:", meyveler)

#Çıktı:

Sonra: ['elma', 'kiraz', 'muz']

#Liste Özellikleri

#Veri Tipine Dönüştürme


Veri tipine dönüştürme (Type Conversion veya Type Casting), bir değişkende veya değerde saklanan verinin tipini başka bir veri tipine çevirme işlemidir.

Farklı İşlemler İçin: Matematiksel işlem yapmak için metin (string) olarak alınmış bir sayıyı tam sayı (int) veya ondalık sayıya (float) çevirmek gerekebilir. Ya da bir sayıyı metinle birleştirmek için string'e (str) dönüştürmek gerekebilir.

Kullanıcı Girdisi: Kullanıcıdan input() fonksiyonu ile alınan veriler her zaman metin (string) tipindedir. Eğer kullanıcıdan sayı girmesini istediysek, bu metni sayısal bir tipe (örn. int) dönüştürmemiz gerekir.

#İleri Seviye Listeler

#Sözlükler Nedir?

Python
# Bir öğrenci bilgilerini içeren bir sözlük oluşturalım
ogrenci = {
    "ad": "Ahmet",
    "soyad": "Yılmaz",
    "numara": 123,
    "aktif_mi": True,
    "dersler": ["Matematik", "Fizik"]
}

# Python da bu anahtarı bulup ona karşılık gelen "Ahmet" değerini döndürüyor.

#Sözlük Methodları

#Set Nedir?

Python
# Tekrarlı liste:
countryList = ["de", "fr", "tr", "fr", "tr", "tr", "de", "nl", "de", "tr"]

# Sete çevirince tekrarlar gider:
set(countryList)
#çıktı {'nl', 'de', 'fr', 'tr'}

Satış yapılan ülkelerin listesi (countryList) içinde aynı ülkeler tekrar tekrar yazıyor ("tr", "de" gibi). Hangi farklı ülkelere satış yapıldığını görmek için bu listeyi set() ile sete çeviriyoruz.

#Set Methodları

not

Boş set oluşturmak için set() kullanman gerekiyor, çünkü: Python, boş süslü parantezi {} varsayılan olarak boş bir sözlük (dictionary) olarak yorumlar, boş bir set olarak değil. Bu yüzden boş set için bos_set = set() demek zorundayız.

#Tuple Nedir?

Tuple (()): Listelere benzeyen, sıralı bir veri yapısıdır ama en önemli farkı değiştirilemez (immutable) olmasıdır.

Kütüphaneler, değişmez oldukları için sabit verileri veya fonksiyonlardan dönen çoklu sonuçları güvenle tuple olarak kullanır.

#Bool Nedir?

bool: Sadece True (Doğru) veya False (Yanlış) değerini alabilen, mantıksal durumları belirten veri tipidir.

not

#If Kontrolleri Nedir?

if kontrolü, bir programın akıllı karar verme mekanizmasıdır. Belirli bir koşulun doğru (True) veya yanlış (False) olup olmadığını değerlendirir. Eğer koşul doğruysa, kod bloğu içindeki işlemler çalıştırılır; yanlışsa, bu işlemler atlanır ve program akışı devam eder.

Python
my_superhero = "Batman"

# 'my_superhero' değişkeni "Batman" olarak tanımlandı.

if my_superhero == "Batman" :
    print("x")
    
# 'my_superhero' değişkeni "Batman"e eşit olduğu için koşul doğru.
# Bu nedenle "x" çıktısı ekrana yazdırılır.    

elif elif, Python'da "else if"in kısaltmasıdır. Bir if koşulu yanlış olduğunda, başka bir koşulu kontrol etmek için kullanılır.else, if ve elif koşullarının hiçbiri doğru olmadığında çalışan son bloğu belirtir. Diğer bir deyişle, tüm diğer koşulların yanlış olduğu "aksi takdirde" durumunu ifade eder.

Python
my_superhero = input("enter superhero: ")

# Kullanıcıdan bir süper kahraman adı girmesini istiyor ve bu değeri 'my_superhero' değişkenine atıyor.

if my_superhero == "Iron-Man":
    print("Iron-Man")
    
# Eğer girilen değer "Iron-Man" ise, iron-man çıktısını alırız.    

elif my_superhero == "Aquaman":
    print("Aquaman")
    
# 'if' koşulu sağlanmazsa ve girilen değer "Aquaman" ise, aquaman çıktısını alırız.   

else:
    print(":(")
    
# Yukarıdaki hiçbir koşul sağlanmazsa (ne "Iron-Man" ne de "Aquaman"), çıktıda :( ifadesini alırız.    

#Döngüler Nedir?

for döngüsü, bir kod bloğunu belirli bir sayıda veya belirli bir koleksiyondaki her eleman için tekrar tekrar çalıştırmanın bir yoludur.


Python
for num in my_list:
    print(num / 5 *2)
    
# my_list içindeki her bir sayıyı 5'e bölüp 2 ile çarparak ekrana yazdırır.

Bir döngüyü tamamen sonlandırmak için kullanılır. break komutu çalıştırıldığında, program döngüden çıkar.

Python
for num in my_list:
    print(num)
    if num == 40:
        print("yes")
        break
# 'break' komutu döngüyü tamamen sonlandırır ve program bu satırdan çıkar.


Döngünün mevcut adımını atlayıp, bir sonraki adıma geçmesini sağlar. continue komutundan sonraki kodlar o adım için çalıştırılmaz, ancak döngü devam eder.


Python
for num in my_list:
    print(num)
    if num == 40:
        continue
        print("yes")
        
# 'continue' sonrası bu satır atlanır ve döngü bir sonraki elemana geçer.
# Bu nedenle "yes" çıktısı asla ekrana yazdırılmaz.

pass, Python'da hiçbir şey yapmayan boş bir komuttur. Söz dizimi gerektiren ancak şimdilik boş bırakılacak kod bloklarında yer tutucu olarak kullanılır.

Python
for num in my_list:
    pass

while döngüsü, bir koşul doğru (True) olduğu sürece belirli bir kod bloğunu tekrarlamak için kullanılır. Koşul yanlış (False) olduğunda döngü sona erer.

Python
# x değişkeni 10'dan küçük olduğu sürece döngü devam eder.

while x < 10:
# x'in o anki değerini ekrana yazdır
    print(x)
# Her döngüde x'in değerini 1 artır.
    x = x + 1
    
    

range(), belirli bir başlangıç ve bitiş noktası arasında bir sayı dizisi oluşturmak için kullanılır.

Python
list(range(5,25))

# çıktı
# [5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24]

random kütüphanesi, Python'da rastgele sayılar ve rastgele seçimler yapmak için kullanılan bir modüldür. Oyunlardan bilimsel simülasyonlara kadar birçok alanda rastgeleliğe ihtiyaç duyulduğunda kullanılır.

Python
from random import randint

randint(), random kütüphanesinden, belirtilen iki sayı arasındaki (bu sayılar dahil) rastgele bir tam sayıyı seçmeye yarayan bir fonksiyondur.

Python
randint(0,100)
# çıktı
# 73

shuffle(), bir listenin öğelerinin sırasını rastgele karıştırmak için kullanılır.

Python
print(my_list)

# çıktı
# [20, 30, 40, 50, 60]

shuffle(my_list)
# shuffle kullanarak my_list'in değerlerini karıştırıyoruz.
print(my_list)

# çıktı
# [50, 60, 40, 20, 30]

zip(), birden fazla yinelenebilir (iterable) nesneyi (örneğin, listeleri) birleştirerek, her birinden gelen öğeleri bir tuple içinde gruplamanızı sağlayan bir fonksiyondur.

Python
food_list = ["apple", "banana", "melon"]
calories_list = [100, 200, 300]
day_list = ["monday", "tuesday", "wednesday"]
zipped_list = list(zip(food_list,calories_list,day_list))
print(zipped_list)
# çıktı
# [('apple', 100, 'monday'),('banana', 200, 'tuesday'),('melon', 300, 'wednesday')]

#List Comprehension Nedir?

Python'da listeleri tek bir satırda, daha kısa ve okunabilir bir şekilde oluşturmak için kullanılan güçlü bir yapıdır. Normalde bir for döngüsü ve append metodu ile yapılan işlemleri çok daha pratik hale getirir.

Python
new_list = []
my_string = "TheWeeknd"
for element in my_string:
    new_list.append(element)
print(new_list)

# çıktı
# ['T', 'h', 'e', 'W', 'e', 'e', 'k', 'n', 'd']

Python
new_list = [element for element in my_string]
print(new_list)
# çıktı
# ['T', 'h', 'e', 'W', 'e', 'e', 'k', 'n', 'd']

#Fonksiyonlar Nedir?

Fonksiyon, belirli bir görevi yerine getirmek için tasarlanmış, yeniden kullanılabilir kod bloğudur.

Python
# python'da bir fonksiyon tanımlamak için def anahtar kelimesi (keyword) kullanırız.

def hello_python():
    print("hello")
# hello_python fonksiyonuna belirli bir kod bloğu tanımladık.
Python
hello_python()

# çıktı
# hello

return, bir fonksiyondan bir değer döndürmek ve fonksiyonun çalışmasını sonlandırmak için kullanılır.

Python
def return_sum(num1, num2, num3):
    return num1 + num2 + num3
Python
x = return_sum(10,2,8)
x + 1
# return dönen değeri kullanmamızı sağlar.
# çıktı
# 21

*args (arguments): Fonksiyona istediğiniz sayıda pozisyonel (sıralı) argüman göndermenizi sağlar. Bu argümanlar, fonksiyon içinde bir tuple (demet) olarak toplanır.

Python
def args_sum(*args):
    print(sum(args))
Python
args_sum(10,30,30,40,50)
#çıktı
#160

**kwargs (keyword arguments): Fonksiyona istediğiniz sayıda anahtar kelime (keyword) argümanı göndermenizi sağlar. Bu argümanlar, fonksiyon içinde bir dictionary (sözlük) olarak toplanır.

Python
def kwargs_example(**kwargs):
    print(kwargs)
Python
kwargs_example(apple=50,banana=150,melon=200)
#çıktı
#{'apple': 50, 'banana': 150, 'melon': 200}

#Hazır Fonksiyonlar

map(), bir listedeki her elemana, bir fonksiyondaki işlemi uygulayarak yeni bir liste oluşturan yerleşik bir Python fonksiyonudur.

filter(), bir listedeki elemanları, verilen bir fonksiyonda True (doğru) döndüren koşullara göre filtreleyerek yeni bir liste oluşturan yerleşik bir Python fonksiyonudur.

Python
def controlString(string):
    return "Hakan" in string
Python
myStringList = ["Atil", "Hakan Pınarbaşı", "Serdar Ortaç", "Fatih", "Hakan Güneçıkan"]

list(filter(controlString,myStringList))

#çıktı
#['Hakan Pınarbaşı', 'Hakan Güneçıkan']

lambda fonksiyonu, Python'da tek bir ifade ile hızlıca oluşturulan, isimsiz ve küçük bir fonksiyondur.

Python
multipyLambda = lambda num : num * 3
multipyLambda(20)
# çıktı
# 60
Python
result = multipyLambda(10)
print(result)
# çıktı
# 30
# Görüldüğü gibi, 'def' ile bir fonksiyon metodu ve 'return' ifadesi kullanmadan,
# lambda sayesinde doğrudan işlem yapıp sonuca ulaşabiliyoruz.

#Scope (Kapsam) Nedir?

Bir değişkenin kodun neresinde tanındığını ve erişilebilir olduğunu belirten alandır. Python, bir değişkeni ararken LEGB kuralını kullanır.

Python

# B Built-in (Dahili ): Son olarak, orada da yoksa 
# Python'un kendi içinde tanımlanmış print, len, range 
# gibi dahili fonksiyon veya sabitlerde arar.


my_string = "Atil"
# G Global (En Dış Katman)

def my_func():
    my_string = "James"
    # E Enclosing (Çevreleyen Kapsam)
    
    def my_func_2():
        
        # L Local (Yerel Kapsam)
        my_string = "Lars"
        print(my_string)
        
    my_func_2()



Bir fonksiyon içinden, o fonksiyonun dışındaki (global kapsamdaki) bir değişkenin değerini kalıcı olarak değiştirmek istersek global anahtar’ını kullanarak değiştirebiliz.

Python
y = 10
def changeY():
	global y # !!!
	y = 5
	print(y)
Python
changeY()
# Çıktı
# 5

#Class (Sınıf) Nedir?


Python'da class (sınıf), kendi veri ve fonksiyonlarını barındıran özel bir yapıdır. Bir sınıf, nesne oluşturmak için bir şablon (template) gibidir.

Sınıflar, birbiriyle ilişkili verileri ve bu verilerle çalışacak fonksiyonları tek bir çatı altında toplar.

Python
class Person():
    name = "Fatih"
    age = "23"
Python
fatih.name = "Fatih Pınarbaşı"

Bu şekilde nesnenin içindeki veriyi sonradan da değiştirebiliriz.

__init__() Nedir?

Python
class Person:
    def __init__(self, name, age, gender):
        self.name = name
        self.age = age
        self.gender = gender
 
# Bu sınıftan bir kişi oluşturalım
fatih = Person("Fatih", 23, "Male")

# Artık fatih adında bir nesnemiz var.

# Peki bu nesne neler biliyor?

print(fatih.name)    # Fatih
print(fatih.age)     # 23
print(fatih.gender)  # Male


Sınıfın içinde tanımladığımız self, oluşturduğun nesnenin kendisini temsil eder.

#Sınıfa Özel Fonksiyonlar (Method)

Python’da bir sınıfın içine yazdığımız fonksiyonlara method (yöntem) denir.

Bu method’lar sadece o sınıfa ait nesneler tarafından çağrılabilir. Yani dışarıdan değil, sadece nesne üzerinden erişilebilir.

Python
class Person():
    def __init__(self, name, age, gender):
        self.name = name
        self.age = age
        self.gender = gender

    def test(self):
        print("test")

Burada test() adında bir method tanımladık.

Python
fatih = Person("Fatih", 23, "Male")

fatih.test()  
# Çıktı: test

Zorunlu olmayan bir parametre eklemek istersek ne yapmalıyız?Zorunlu olmayan parametre eklemek istersek napabiliriz

Python
class Person():
    # zorunlu olmayan parametre
    job = ""

    # initializer method
    def __init__(self, name, age, gender, job=""):
        self.name = name
        self.age = age
        self.gender = gender
        self.job = job

    # method
    def printName(self):
        print(self.name)

job parametesi zorunlu değil istenirse verilir, istenmezse boş kalır.

#Nesne yönelimli programlama (OOP – Object Oriented Programming) Nedir?

Programları nesneler aracılığıyla modellememizi sağlayan bir programlama yaklaşımıdır.

Inheritance (Kalıtım)

Kalıtım, bir sınıfın başka bir sınıftan özelliklerini ve metotlarını almasıdır. Alt sınıf, üst sınıfın yeteneklerine sahip olur.

Python
class Musician():
    def __init__(self, name):
        print("Musician class")
        self.name = name

    def test1(self):
        print("test1")

    def test2(self):
        print("test2")

Musician adında bir sınıf tanımladık. Bu sınıf, müzisyenlerin temel özelliklerini içeriyor.

Python
class MusicianChild(Musician):
    def __init__(self, name):
        print("MusicianChild")
        super().__init__(name)

Polymorphism (Çok Biçimlilik)


Aynı isimdeki bir methodun, farklı sınıflarda farklı şekillerde davranmasıdır.

Python
class Banana():
    def __init__(self, name):
        self.name = name

    def info(self):
        return f"100 calories {self.name}"


class Apple():
    def __init__(self, name):
        self.name = name

    def info(self):
        return f"150 calories {self.name}"

Python
fruits = [Banana, Apple]

for fruit in fruits:
    print(fruit.info())

# çıktı
# 100 calories Muz
# 150 calories Elma

Encapsulation (Kapsülleme) Nedir?

Veriyi dışarıya karşı koruma altına alma işlemidir. Bazı değişkenleri dışarıdan erişilemez hale getiririz. (private)

Python
class Phone():
    def __init__(self, name, price):
        self.name = name
        self.price = price

    def info(self):
        print(f"{self.name} price is: {self.price}")

Python
class Phone():
    def __init__(self, name, price):
        self.__name = name       # özel hale getirdik
        self.__price = price     # özel hale getirdik

    def info(self):
        print(f"{self.__name} price is: {self.__price}")

Python
def changePrice(self, price):
    self.__price = price

changePrice() Fonksiyonu Ne Yapar?

#Abstraction (Soyutlama) Nedir?

Karmaşık yapıları gizleyerek, sadece önemli bilgileri gösterme tekniğidir. Kullanıcı ne yapıldığını bilir, nasıl yapıldığını bilmek zorunda değildir.

Python
from abc import ABC, abstractmethod

class Car(ABC):
    @abstractmethod
    def maxSpeed(self):
        pass

Car sınıfı soyut bir sınıftır; içindeki maxSpeed() fonksiyonu sadece bir şablondur ve alt sınıflar bu fonksiyonu mutlaka kendileri tanımlamak zorundadır. Bu sınıf doğrudan kullanılamaz, yalnızca kalıtım için vardır.

Python
class Tesla(Car):
    def maxSpeed(self):
        print("200km")
Python
class Mercedes(Car):
    def maxSpeed(self):
        print("250km")
Python
tesla = Tesla()
tesla.maxSpeed()        # 200km

mercedes = Mercedes()
mercedes.maxSpeed()     # 250km

Soyutlama, nasıl yapılacağını değil, ne yapılacağını tanımlar. Her araba maxSpeed'e sahip olmalı ama nasıl çalışacağı alt sınıfa bağlı.

#Python’da Özel Methodlar


Bu methodlar Python'da özel anlamlar taşıyan, genellikle çift alt çizgili (__) olan fonksiyonlardır.

__str__() Methodu

Python
class Fruit():
    
    def __init__(self, name, calories):
        self.name = name
        self.calories = calories

    def __str__(self):
        return f"{self.name}: {self.calories} calories"
Python
myFruit = Fruit("banana", 150)
print(myFruit)  
# Çıktı: banana: 150 calories


Normalde print(nesne) yazınca ekrana nesnenin adresi basılırdı. Ama __str__() sayesinde, ekranda daha anlamlı bir metin görünür.

Özel Methodlar buraya tıklayarak daha fazla özel method’a bakabilirsiniz.