Bölüm 1: Yapay Zekanın Giriş Kapısı: Geliştirme Ortamı ve Python Temelleri
Yapay zeka, makine öğrenmesi ve veri bilimi dünyasına adım atarken karşımıza çıkan ilk ve en önemli soru şudur: “Neden Python?” C++, Java veya C# gibi köklü ve performans odaklı diller dururken, modern yapay zeka ekosisteminin neden Python üzerinde yükseldiğini anlamak, bir mühendis olarak yazılım mimarisine bakışımızı şekillendirir.
Python; öğrenme eğrisinin yumuşak olması, açık kaynaklı yapısı sayesinde sürekli gelişmesi, kullanıcı arayüzü (GUI) tasarımlarına imkan tanıması ve Nesne Tabanlı Programlamaya (OOP) tam uyumluluk göstermesiyle öne çıkar. Ancak yapay zeka dünyası için onu vazgeçilmez kılan asıl güç, neredeyse her problem için hazır bir çözüm sunan devasa kütüphane ağı (NumPy, Pandas, Scikit-Learn, TensorFlow, PyTorch) ve arkasındaki aktif topluluktur.
Bu yazı dizimizde, yapay zeka algoritmalarının mutfağına inecek, temel Python yapılarından başlayarak karmaşık veri manipülasyonlarına ve Nesne Tabanlı Programlama (OOP) ile kurumsal proje mimarisi geliştirmeye uzanan kapsamlı bir yolculuğa çıkacağız.
Geliştirme Ortamının Hazırlanması: Anaconda ve Google Colab
Yapay zeka projelerinde yüzlerce farklı kütüphane (kütüphane paketleri) bir arada çalışır. Bu kütüphanelerin bilgisayarınızda birbiriyle çakışmadan, sağlıklı bir şekilde yönetilmesi, kurulması ve silinmesi için bir paket yönetim sistemine ihtiyaç duyarız. Sektör standardı olan Anaconda Distribution, bu karmaşık süreci bizim için tamamen otomatikleştirir.
Anaconda ve Spyder IDE Kurulumu
Anaconda kurulumu yaparken dikkat edilmesi gereken en kritik nokta, kurulum yolunda (path) Türkçe karakter veya boşluk bulunmamasıdır. Windows, Mac veya Linux işletim sisteminize uygun (64-bit veya 32-bit) grafik yükleyiciyi indirip kurduktan sonra, projelerimizi geliştireceğimiz entegre geliştirme ortamı (IDE) olan Spyder‘ı başlatabiliriz
Alternatif ve Güçlü Bir Bulut Ortamı: Google Colab
Eğer bilgisayarınızın donanım kaynakları (RAM, GPU) kısıtlıysa veya yerel bir kurulumla uğraşmak istemiyorsanız, Google’ın tamamen bulut üzerinde çalışan ücretsiz hizmeti Google Colab (Jupyter Notebook) harika bir alternatiftir. Tarayıcınız üzerinden hiçbir kurulum yapmadan, güçlü bulut kaynaklarına erişerek hızlıca Python kodu yazabilir ve yürütebilirsiniz.
Python Temelleri ve Yapay Zekadaki Karşılıkları
Yapay zekayı lise son sınıfta veya üniversitede gördüğümüz karmaşık bir integral problemine benzetirsek; Python temelleri (değişkenler, döngüler, fonksiyonlar), bu integrali çözebilmemiz için bilmemiz gereken ilkokul düzeyindeki toplama, çıkarma ve çarpma işlemleridir. Temeli sağlam atmadan, ileri düzey makine öğrenmesi modellerini inşa etmek imkansızdır.
- Yapay zeka dünyasında literatürü takip edebilmek ve Stackoverflow gibi platformlarda karşılaştığınız hataları araştırabilmek için tüm terimleri Türkçe karşılıklarıyla değil, İngilizce terimleriyle (Integer, String, Float, Variable, List vb.) öğrenmeye özen göstermelisiniz.
1. Değişkenler (Variables) ve Temel Veri Tipleri
Python’da veriyi bellekte tutmak için değişkenleri kullanırız. Karşımıza en çok çıkan üç temel component (bileşen) şunlardır:
-
Integer (Tam Sayı): Matematiksel operasyonların temelidir. (Örn:
yas = 10) -
Float/Double (Ondalıklı Sayı): İstatistiki veriler ve olasılık hesaplamalarında kullanılır. (Örn:
ondalik_sayi = 13.7) -
String (Metin/Kelimeler): Metin işleme (Doğal Dil İşleme – NLP) projelerinin temel ham maddesidir. (Örn:
name = "Ali")
# Değişken Tanımlama ve Tür Kontrolü (type)
variable_1 = 10
variable_2 = 15.5
string_name = "Yapay Zeka"
print(type(variable_1)) # Output: <class 'int'>
print(type(variable_2)) # Output: <class 'float'>
print(type(string_name)) # Output: <class 'str'>
Veri Yapıları: List, Tuple ve Dictionary
Yapay zeka projelerinde veriler tek tek değil, yığınlar (veri setleri) halinde gelir. Bu verileri organize etmek için Python’ın yerleşik veri yapılarını kullanırız.
List (Listeler)
Farklı veya aynı türden birçok değişkeni tek bir çatı altında, sıralı olarak tutmamızı sağlar. Köşeli parantez [] ile tanımlanır. Python’da ve çoğu programlama dilinde saymaya günlük hayattaki gibi 1’den değil, 0’dan (sıfırıncı indeksten) başlanır.
# Liste Oluşturma ve İndeksleme (Indexing / Slicing)
sayi_listesi = [10, 20, 30, 40, 50]
print(sayi_listesi[0]) # Sıfırıncı indeks: 10
print(sayi_listesi[-1]) # Sondan birinci eleman: 50
print(sayi_listesi[0:3]) # 0, 1 ve 2. indeksleri al (3 dahil değil): [10, 20, 30]
# Listeye eleman ekleme (Append) ve sıralama (Sort)
sayi_listesi.append(60)
sayi_listesi.sort()
Tuple (Demetler)
Listelere çok benzer ancak en büyük farkı değiştirilemez (immutable) olmalarıdır. Normal parantez () ile tanımlanırlar. Yapay zeka modellerinin mimarisinde, modelin girdi boyutları (shape) gibi kesinlikle değiştirilmemesi gereken sabit veri gruplarını tutmak için Tuple yapısı tercih edilir.
# Tuple Tanımlama
model_shape = (224, 224, 3) # Değiştirilemez veri kümesi
Dictionary (Sözlükler)
Yapay zekada adeta lokal bir veri tabanı (local database) görevi görür. Verileri Key-Value (Anahtar-Değer) çiftleri halinde tutar. Süslü parantez {} ile tanımlanır. Özellikle model parametrelerini (hyperparameters) veya çoklu fonksiyon çıktısını düzenli bir şekilde döndürmek için biçilmiş kaftandır.
# Dictionary Yapısı ile Küçük Bir Veri Tabanı
veri_tabani = {"Ali": 32, "Veli": 45, "Ayşe": 13}
print(veri_tabani["Ali"]) # Output: 32
# Sözlük anahtarlarına ve değerlerine erişim
print(veri_tabani.keys()) # dict_keys(['Ali', 'Veli', 'Ayşe'])
print(veri_tabani.values()) # dict_values([32, 45, 13])
Kontrol Blokları, Döngüler ve Fonksiyonlar
Algoritmik mantığın yürütülmesini sağlayan, kodun karar verme mekanizmaları ve tekrarlı işlemleridir.
If-Else Statements (Koşullu Durumlar)
Verilen şartların sağlanıp sağlanmadığını denetler. Python syntax’ında (yazım kuralında) koşul ifadelerinden sonra iki nokta (:) konur ve alt satıra bir Tab boşluğu bırakılarak (Indentation) başlanır.
# Basit Bir Koşul Bloğu
yas = 18
if yas < 18:
print("Çocuk")
elif yas == 18:
print("Reşit Olma Sınırı")
else:
print("Yetişkin")
Loops (Dengeler/Döngüler): For ve While
Yapay zeka modellerinin eğitiminde (Epoch süreçlerinde) veya veri setindeki tüm satırları tek tek gezerken döngülere başvururuz.
-
For Loop: Genellikle belirli bir aralıkta (range) veya bir listenin elemanları üzerinde iterasyon yapmak için kullanılır.
-
While Loop: Belirli bir koşul
Trueolduğu sürece dönmeye devam eder.
# For Döngüsü ile Liste Elemanlarını Toplama
rakamlar = [3, 4, 5, 6]
toplam = 0
for her_sayi in rakamlar:
toplam += her_sayi
print("Toplam:", toplam) # Output: 18
# While Döngüsü Mantığı
sayac = 0
while sayac < 4:
print(sayac)
sayac += 1
Fonksiyonlar ve Yapıcıların Gücü
Fonksiyonlar, sürekli tekrar eden kod bloklarını tek bir isim altında toplayıp ihtiyaç duyduğumuzda parametreler göndererek çalıştırmamızı sağlar. def keyword’ü ile tanımlanırlar. Fonksiyonun ürettiği çıktıyı kodun başka bir yerinde değişken olarak kullanabilmek için return anahtar kelimesi ile dışarı fırlatmamız gerekir.
# Kullanıcı Tanımlı (User Defined) ve Parametreli Fonksiyon
def daire_alani_hesapla(yari_cap, pi=3.14): # pi değeri 'default' parametredir
alan = pi * (yari_cap ** 2)
return alan
# Fonksiyonun Çağrılması
sonuc = daire_alani_hesapla(5)
print("Dairenin Alanı:", sonuc) # Output: 78.5
Gizli Silah: Lambda Fonksiyonları
Büyük veri manipülasyonlarında, satırlarca fonksiyon yazmak yerine tek satırda hızlıca işimizi halletmemizi sağlayan isimsiz (anonymous) fonksiyonlardır.
# Gelen sayının karesini alan tek satırlık Lambda fonksiyonu
karesini_al = lambda x: x * x
print(karesini_al(3)) # Output: 9
Bölüm Özeti ve Geleceğe Bakış
Bu bölümde, yapay zekanın veri mutfağındaki en temel yapı taşlarını; geliştirme ortamlarını, veri tiplerini, listeleri, sözlükleri ve kodun kalbi olan fonksiyon yapılarını inceledik. Bu temel kavramları iyi kavramak, bizi bir sonraki adımda göreceğimiz gelişmiş veri işleme süreçlerine hazırlar.
Yol haritamızın bir sonraki durağında, önce pandas, numpy gibi önemli kütüphaneleri ve veri görselleştirmeyi daha sonra da büyük ölçekli kurumsal projelerin ve yapay zeka mimarilerinin iskeletini oluşturan Nesne Tabanlı Programlama (OOP) felsefesini inceleyecek, ardından GitHub repomuzda yer alan kapsamlı Araç Kiralama Projesi‘nin yazılım mimarisini adım adım inşa edeceğiz.
Serinin Kodlarına Ulaşın: https://github.com/Rasittekin18/1-Python_Programming_for_Artificial_Intelligence
Bölüm 2: Veri Biliminin Ağır İşçileri: NumPy ve Pandas ile Veri Manipülasyonu
Yapay zeka ve makine öğrenmesi projelerinde algoritmalardan önce en çok mesai harcanan yer veri ön işleme (data preprocessing) aşamasıdır. Çünkü bir yapay zeka modeli, ham metinleri veya dağınık tabloları doğrudan algılayamaz. Verinin mutlaka çok boyutlu matrislere dönüştürülmesi, temizlenmesi ve yapılandırılması gerekir.
İşte bu aşamada modern veri biliminin iki devi devreye girer: NumPy ve Pandas. Bu yazıda, ham veriyi yapay zeka modellerinin beslenebileceği kusursuz yapılara nasıl dönüştüreceğimizi ve bu verileri Matplotlib ile nasıl görselleştireceğimizi kod örnekleriyle inceleyeceğiz.
1. NumPy: Çok Boyutlu Matris Matematik Altyapısı
Python listeleri esnektir ancak büyük veri setlerinde (örneğin milyonlarca pikselden oluşan bir görsel matrisinde) matematiksel işlemler yaparken çok yavaş kalırlar. NumPy (Numerical Python), C diliyle optimize edilmiş Ndarray (N-dimensional array) yapısı sayesinde, verileri bellekte ardışık tutarak döner ve vektörel matematik işlemlerini ışık hızında gerçekleştirir.
NumPy Temelleri ve Matris Manipülasyonu
Yapay zeka modellerine giren görseller aslında 3 boyutlu (Genişlik x Yükseklik x Renk Kanalı) birer NumPy array’idir.
import numpy as np
# Python listesinden NumPy Array'i oluşturma
liste = [1, 2, 3, 4, 5]
array = np.array(liste)
# 3x3 boyutunda sıfırlardan veya birlerden oluşan matrisler (Model ağırlıkları başlatılırken kullanılır)
sifirlar = np.zeros((3, 3))
birler = np.ones((3, 3))
# Matris Boyutunu Değiştirme (Shape Manipulation)
# 1D olan 10 elemanlı bir diziyi 2x5'lik bir matrise dönüştürme
vektör = np.arange(10)
matris = vektör.reshape(2, 5)
print(matris.shape) # Output: (2, 5)
İndeksleme, Dilimleme (Slicing) ve Birleştirme
Bir veri setinden belirli satır veya sütunları seçmek ya da iki farklı veri matrisini uç uca eklemek (Stacking) yapay zekada her gün yaptığımız işlemlerdir.
# Matris Dilimleme (Slicing)
# 2D bir matrisin ilk satırını ve tüm sütunlarını seçme
print(matris[0, :])
# Dizileri Dikey veya Yatay Birleştirme (Vertical & Horizontal Stack)
array1 = np.array([[1, 2], [3, 4]])
array2 = np.array([[5, 6], [7, 8]])
dikey_birlesim = np.vstack((array1, array2)) # Vertical Stack
yatay_birlesim = np.hstack((array1, array2)) # Horizontal Stack
Pandas: Veri Analitiğinin ve Tabloların Efendisi
NumPy matris matematiği için harikadır ancak sütun isimleri olan, eksik veriler (NaN) barındıran gerçek dünya tablolarıyla (CSV, Excel) çalışırken Pandas kütüphanesini kullanırız. Pandas bize SQL veya Excel konforunu Python kodlarıyla sunar.
Veri Çerçeveleri (DataFrame) ve Temel Metotlar
Veri setini projeye dahil ettikten sonra ilk yapmamız gereken verinin genel yapısını analiz etmektir.
import pandas as pd
# Sözlük yapısından bir Pandas DataFrame oluşturma
data = {
"İsim": ["Ahmet", "Mehmet", "Ayşe", "Fatma"],
"Yaş": [24, 30, 22, 35],
"Maaş": [40000, 55000, 42000, 62000]
}
df = pd.DataFrame(data)
# Veriyi hızlıca tanıma metotları
print(df.head(2)) # İlk 2 satırı gösterir
print(df.info()) # Sütun türlerini ve eksik veri durumunu gösterir
print(df.describe()) # Sayısal sütunların istatistiksel özetini (ortalama, min, max) çıkarır
Filtreleme ve Veri Dönüştürme (Transforming)
Yapay zeka modellerini eğitmeden önce veriyi temizlemek veya belirli şartlara göre filtrelemek gerekir. Örneğin, sadece maaşı 45.000 TL’den yüksek olan kişileri seçmek veya List Comprehension kullanarak yeni sütunlar üretmek oldukça pratiktir:
# Koşullu Filtreleme (Filtering)
zengin_df = df[df["Maaş"] > 45000]
# List Comprehension ile Yeni Sütun Oluşturma (Transforming)
# Yaşı 25'ten büyük olanlara 1, küçük olanlara 0 değeri atayan yeni bir feature (özellik) ekleyelim
df["Kategori"] = [1 if x > 25 else 0 for x in df["Yaş"]]
Matplotlib ile Veri Görselleştirme (Data Visualization)
Veriyi sadece sayılar ve tablolar olarak görmek, veri dağılımındaki sapmaları veya modelin hata (loss) oranının düşüş trendini anlamamızı zorlaştırır. Matplotlib, veriyi grafiklere dökerek arkasındaki hikayeyi görmemizi sağlar.
Yapay Zekada En Çok Kullanılan Grafik Türleri
-
Line Plot (Çizgi Grafik): Genellikle modelin eğitim sürecindeki başarı (Accuracy) ve hata (Loss) değişimini zamana (Epoch) bağlı görmek için kullanılır.
-
Scatter Plot (Serpiliş Grafiği): Veri noktalarının uzaydaki dağılımını gösterir. Özellikle kümeleme (Clustering) ve sınıflandırma algoritmalarında kritik önem taşır.
-
Histogram: Bir değişkenin hangi aralıklarda yoğunlaştığını (veri dağılımını) anlamamızı sağlar.
import matplotlib.pyplot as plt
# Basit Veri Seti
epoch = [1, 2, 3, 4, 5]
loss = [0.9, 0.6, 0.4, 0.2, 0.1]
# 1. Çizgi Grafik (Line Plot)
plt.figure(figsize=(10, 4))
plt.subplot(1, 2, 1) # Yan yana iki grafik çizdirmek için alt grafik (Subplot) alanı
plt.plot(epoch, loss, color="red", marker="o", label="Eğitim Hatası")
plt.title("Model Hata Oranı (Loss Tracking)")
plt.xlabel("Epoch")
plt.ylabel("Loss")
plt.grid(True)
plt.legend()
# 2. Serpiliş Grafiği (Scatter Plot)
yas = [22, 25, 30, 35, 40, 45]
maas = [30, 35, 55, 60, 80, 85]
plt.subplot(1, 2, 2)
plt.scatter(yas, maas, color="blue", alpha=0.7)
plt.title("Yaş - Maaş Dağılımı")
plt.xlabel("Yaş")
plt.ylabel("Maaş (Bin TL)")
plt.grid(True)
plt.tight_layout()
plt.show()
Bölüm Özeti ve Geleceğe Bakış
Bu bölümde, yapay zekanın veri mutfağını oluşturan NumPy‘ın matris operasyonlarını, Pandas‘ın güçlü veri çerçevelerini ve manipülasyon yeteneklerini, son olarak da veriyi analiz etmemizi sağlayan Matplotlib kütüphanesini ele aldık. Unutmayın, iyi bir veri bilimci zamanının %80’ini veriyi temizleyip görselleştirerek geçirir.
Artık elimizdeki veriyi yoğurmayı ve kontrol etmeyi biliyoruz. Yol haritamızın bir sonraki durağında, kodlarımızı kurumsal standartlara taşıyacak, büyük ölçekli projelerin mimari iskeletini oluşturan Nesne Tabanlı Programlama (OOP) felsefesine geçiş yapıyoruz!
Serinin Kodlarına Ulaşın: https://github.com/Rasittekin18/1-Python_Programming_for_Artificial_Intelligence
Bölüm 3: Kurumsal Yazılım Mimarisi: Nesne Tabanlı Programlama (OOP) ve Araç Kiralama Projesi
Yapay zeka ve büyük veri projelerinde sadece çalışan bir kod yazmak yeterli değildir. Proje büyüdükçe yazılan yüzlerce fonksiyonun sürdürülebilir, modüler, genişletilebilir ve temiz olması gerekir. İşte bu noktada yazılım dünyasının en güçlü felsefelerinden biri olan Nesne Tabanlı Programlama (Object Oriented Programming – OOP) devreye girer.
Yapay zeka modellerinin mimarilerinde (örneğin PyTorch veya TensorFlow’da bir derin öğrenme katmanı yazarken) her şey OOP üzerine inşa edilmiştir. Bu yazıda; sınıflar, kapsülleme, miras, soyut sınıflar ve çok biçimlilik gibi ileri seviye OOP kavramlarını, GitHub depolarımda yer alan Araç Kiralama Projesi (Rent a Vehicle) mimarisi üzerinden, pratik kod bloklarıyla inceleyeceğiz.
OOP Temelleri: Sınıf (Class) ve Yapıcı Metot (Constructor)
OOP mantığında her şey gerçek hayattaki nesneleri modeller. Class (Sınıf) bu nesnelerin genel şablonu veya çatısıdır; Object (Nesne) ise bu şablondan türetilen somut yapılardır.
Yazılım dünyasında sınıfların ilk harfinin büyük yazılması (Örn: VehicleRent) bir standarttır. Sınıf oluşturulurken tetiklenen ilk yapıya Constructor / Initializer (__init__) yani yapıcı metot denir. Sınıf içerisindeki metotlarda nesnenin kendi özelliklerine erişebilmesi için ilk parametre olarak her zaman self keyword’ünü (anahtar kelimesini) kullanırız.
Gerçek Bir Proje Üzerinden OOP Anatomisi: Araç Kiralama Projesi
Teoriyi bir kenara bırakıp, tüm OOP kavramlarını tek bir projede birleştirelim. Projemizin adı Rent a Vehicle. Sistemde bir ana araç kiralama dükkanımız (VehicleRent), buradan türeyen araç tiplerimiz (CarRent, BikeRent) ve bu araçları kiralayacak bir müşteri sınıfımız (Customer) yer alıyor.
A. Soyutlama (Abstraction) ve Şablon Oluşturma
Abstract (Soyut) sınıflar, child (yavru) sınıflar için bir rehber veya şablon görevi görür. Kendisinden doğrudan bir nesne üretilemez (instantiate edilemez), ancak alt sınıfların mutlaka yazması gereken metotları zorunlu kılar.
from abc import ABC, abstractmethod
# Abstract (Soyut) Üst Sınıfımız: Tüm araç kiralama türleri için bir şablondur.
class VehicleRent(ABC):
def __init__(self, stock):
self.stock = stock # Stok bilgisi
@abstractmethod
def display_stock(self):
"""Alt sınıflar bu metodu mutlaka ezmek (override) zorundadır."""
pass
@abstractmethod
def rent_hourly(self, n):
pass
@abstractmethod
def rent_daily(self, n):
pass
B. Kapsülleme (Encapsulation): Veri Güvenliği
Banka hesapları, müşteri bilgileri veya şirket stokları gibi hassas verilere dışarıdan doğrudan erişilip modify edilmesini (değiştirilmesini) engellemek için Encapsulation kullanırız. Python’da bir değişkenin veya metodun önüne iki alt çizgi (__) koyduğumuzda, o yapı artık Private (özel/gizli) hale gelir. Bu verilere kontrollü erişim için get_ ve set_ metotları yazılır.
class Customer:
def __init__(self, name, surname):
self.name = name
self.surname = surname
# Kapsülleme (Encapsulation) uygulayarak kiralama detaylarını private yapıyoruz
self.__bill = 0
self.__rental_basis = 0 # 1: Saatlik, 2: Günlük
self.__rental_quantity = 0
# Private veriyi dış dünyaya güvenli açma (Get metodu)
def get_bill(self):
return self.__bill
# Private veriyi güvenli bir şekilde güncelleme (Set metodu)
def set_bill(self, amount):
if amount >= 0:
self.__bill = amount
Miras (Inheritance) ve Çok Biçimlilik (Polymorphism)
Daha önce yazdığımız bir sınıfın özelliklerini ve metotlarını sıfırdan yazmak yerine kalıtım yoluyla yeni bir sınıfa aktarmaya Inheritance denir. Üst sınıfın (Parent) metotlarını alt sınıfta (Child) kendi mantığımıza göre yeniden yazmaya Overriding, aynı isimdeki metodun farklı sınıflarda farklı çıktılar üretmesine ise Polymorphism (Çok Biçimlilik) denir.
# CarRent sınıfı, VehicleRent soyut sınıfından miras (Inheritance) alıyor
class CarRent(VehicleRent):
def __init__(self, stock):
# Üst sınıfın (Parent) constructor'ını tetikliyoruz
super().__init__(stock)
self.hourly_price = 10 # Arabanın saatlik kiralama bedeli
self.daily_price = 60 # Arabanın günlük kiralama bedeli
# Üst sınıftaki soyut metodu kendi mantığımıza göre eziyoruz (Overriding / Polymorphism)
def display_stock(self):
print(f"Mağazamızda şu an kiralık {self.stock} adet araba bulunmaktadır.")
return self.stock
def rent_hourly(self, n):
if n <= 0:
print("Geçersiz araç sayısı.")
return None
elif n > self.stock:
print(f"Üzgünüz, mağazamızda sadece {self.stock} adet araba var.")
return None
else:
self.stock -= n
print(f"{n} adet araba saatlik olarak kiralandı.")
return n
def rent_daily(self, n):
# Benzer şekilde günlük kiralama mantığı işletilir...
pass
Sistemin Birleştirilmesi ve Test Süreci (Main Execution)
Yazdığımız tüm bu kurumsal yazılım mimarisini test etmek için dinamik bir akış kurgulayabilir, müşteriden inputlar (girdiler) alarak sistemi simüle edebiliriz.
# Ana Çalıştırma Bloğu (Main Pipeline)
if __name__ == "__main__":
# Mağazalarımızı başlatalım (Stok sayılarıyla)
car_store = CarRent(10)
# Müşterimizi oluşturalım
customer = Customer("Raşit", "Tekin")
print("--- Araç Kiralama Sistemine Hoş Geldiniz ---")
car_store.display_stock() # Output: Mağazamızda şu an kiralık 10 adet araba bulunmaktadır.
# Müşteri 3 adet araba talep ediyor (Saatlik)
rented_cars = car_store.rent_hourly(3)
if rented_cars:
customer.set_bill(3 * car_store.hourly_price)
print(f"Güncel Faturanız: {customer.get_bill()} $") # Output: Güncel Faturanız: 30 $
car_store.display_stock() # Güncel stok: 7 araba kaldı.
Bölüm Özeti ve Serinin Sonu
Bu bölümde, projelere yazılım mimarı gözüyle bakmamızı sağlayan Nesne Tabanlı Programlama (OOP) felsefesini, tüm ileri düzey konseptleriyle birlikte temiz bir Araç Kiralama Projesi üzerinden inceledik. OOP kurallarını bilmek; yazdığınız yapay zeka pipeline’larının, veri ön işleme scriptlerinin ve kurumsal web servislerinizin spagetti koda dönüşmesini engeller.
Bu yazı ile birlikte Yapay Zeka ve Veri Bilimi İçin Python Yol Haritası blog serimizin sonuna geldik. Sıfırdan değişkenlerle başladığımız bu yolculukta; döngüleri, fonksiyonları, veri biliminin ağır işçileri olan NumPy ve Pandas’ı, verinin dilini konuşan Matplotlib’i ve son olarak kurumsal mimarinin kalbi OOP’yi tamamen pratik projelerle harmanlayarak tamamladık.
Unutmayın; yapay zeka dünyasında zirveye giden yol, temiz kod yazmaktan ve veriyi doğru işlemekten geçer!
Projenin Tüm Kodlarına Ulaşın:
