Yayın Tarihi: 4 Şubat 2025
Tabii ki! Hadi bunları eğlenceli örneklerle anlatalım:
- Lists (Listeler) 📝
# Listeler sıralı koleksiyonlardır ve köşeli parantez [] ile oluşturulur
okul_cantasi = ["kalem", "defter", "silgi", "cetvel"]
Düşün ki okul çantanı hazırlıyorsun. İçine birçok şey koyabilir, çıkarabilir veya değiştirebilirsin:
# Listeye yeni eşya ekleme
okul_cantasi.append("boya kalemi")
# Listeden eşya çıkarma
okul_cantasi.remove("silgi")
# Listedeki bir eşyayı değiştirme
okul_cantasi[0] = "tükenmez kalem"
- Tuples (Demetler) 🎁
# Tuplelar parantez () ile oluşturulur ve değiştirilemez
renkler = ("kırmızı", "mavi", "yeşil")
Bu bir hediye paketi gibidir. Bir kere paketlendiğinde içindekileri değiştiremezsin:
# Bu hata verecektir
renkler[0] = "sarı" # TypeError: 'tuple' object does not support item assignment
- Sets (Kümeler) 🎯
# Kümeler süslü parantez {} ile oluşturulur ve tekrar eden elemanları almaz
oyuncaklar = {"top", "araba", "bebek", "top"}
print(oyuncaklar) # {'top', 'araba', 'bebek'}
Düşün ki oyuncak kutun var. Aynı oyuncaktan iki tane koysan bile kutu sadece bir tanesini gösterir.
- Dictionaries (Sözlükler) 📚
# Sözlükler anahtar-değer çiftlerinden oluşur
hayvan_sesleri = {
"kedi": "miyav",
"köpek": "hav",
"kuş": "cik"
}
Bu bir hayvan sesleri kitabı gibidir. Her hayvanın (anahtar) kendi sesi (değer) vardır:
print(hayvan_sesleri["kedi"]) # "miyav"
- Comprehension (Anlama) 🎨 Bu biraz sihir gibidir! Uzun işlemleri tek satırda yapabilirsin:
# List Comprehension
# 1'den 5'e kadar olan sayıların karesini alma
kareler = [sayi * sayi for sayi in range(1, 6)]
print(kareler) # [1, 4, 9, 16, 25]
# Dictionary Comprehension
# Sayıları ve karelerini sözlüğe ekleme
sayi_kareleri = {sayi: sayi * sayi for sayi in range(1, 4)}
print(sayi_kareleri) # {1: 1, 2: 4, 3: 9}
Pratik Örnekler:
# Liste örneği: Sınıf listesi
sinif = ["Ali", "Ayşe", "Mehmet"]
sinif.append("Zeynep") # Yeni öğrenci ekleme
# Tuple örneği: Koordinatlar
nokta = (3, 4) # X ve Y koordinatları
# Set örneği: Sevdiğin meyveler
meyveler = {"elma", "armut", "muz", "elma"} # İki elma yazsak bile bir tane gösterir
# Dictionary örneği: Öğrenci notları
notlar = {
"Ali": 85,
"Ayşe": 90,
"Mehmet": 75
}
# List comprehension örneği: 1'den 10'a kadar çift sayılar
cift_sayilar = [x for x in range(1, 11) if x % 2 == 0]
print(cift_sayilar) # [2, 4, 6, 8, 10]
Her birinin özel kullanım alanları vardır:
- Listeler: Sıralı ve değiştirilebilir veriler için
- Tuplelar: Değişmemesi gereken veriler için
- Setler: Tekrar etmeyen benzersiz veriler için
- Sözlükler: İlişkili verileri eşleştirmek için
- Comprehension: Veri işlemlerini kısaca yazmak için
Bu yapıları anlamak Python’da programlama yaparken çok işine yarayacak! 😊
Hadi Generator’ları eğlenceli bir şekilde öğrenelim! 🎮
Önce şöyle düşün: Bir oyuncak fabrikası hayal et. İki çeşit fabrika var:
- Normal Fabrika (Normal Liste)
- Bütün oyuncakları bir kerede üretip depoya koyar
- Çok yer kaplar
- Tüm oyuncakları hemen yapar
- Sihirli Fabrika (Generator)
- Oyuncakları sadece istendiğinde, teker teker üretir
- Çok az yer kaplar
- Oyuncakları lazım oldukça yapar
İşte Generator örneği:
# Normal fabrika (Liste)
def normal_fabrika(n):
oyuncaklar = []
for i in range(n):
oyuncaklar.append(f"Oyuncak {i}")
return oyuncaklar
# Sihirli fabrika (Generator)
def sihirli_fabrika(n):
for i in range(n):
yield f"Oyuncak {i}"
# Farkı görelim
normal = normal_fabrika(1000000) # Hemen 1 milyon oyuncak üretir
sihirli = sihirli_fabrika(1000000) # Hiçbir oyuncak üretmez, sadece plan yapar
Pratik bir örnek yapalım - Sayı üreteci:
def sayi_uret(baslangic, bitis):
print(f"{baslangic}'dan başlıyorum!")
while baslangic <= bitis:
yield baslangic
baslangic += 1
# Kullanımı
sayilar = sayi_uret(1, 5)
print("Generator hazır!")
for sayi in sayilar:
print(sayi)
Çıktı:
Generator hazır!
1'dan başlıyorum!
1
2
3
4
5
Eğlenceli bir örnek daha - Sonsuz şeker makinesi:
def seker_makinesi():
sekerler = ["🍬", "🍭", "🍫"]
index = 0
while True:
yield sekerler[index]
index = (index + 1) % len(sekerler)
# Şeker makinemizi kullanalım
makine = seker_makinesi()
for _ in range(6):
print(next(makine), end=" ")
# Çıktı: 🍬 🍭 🍫 🍬 🍭 🍫
Generator’ların güzel özellikleri:
- Hafıza dostu:
# Büyük sayıların karesini almak
def kare_generator(n):
for i in range(n):
yield i * i
# Sadece istediğimiz sayının karesini üretir
kareler = kare_generator(1000000)
print(next(kareler)) # 0
print(next(kareler)) # 1
print(next(kareler)) # 4
- Sonsuz seriler oluşturabilme:
def fibonacci():
a, b = 0, 1
while True:
yield a
a, b = b, a + b
# Fibonacci sayılarını oluşturalım
fib = fibonacci()
for _ in range(6):
print(next(fib), end=" ")
# Çıktı: 0 1 1 2 3 5
- Duraklatılabilir ve devam ettirilebilir:
def hikaye_anlatici():
yield "Bir varmış..."
yield "Bir yokmuş..."
yield "Evvel zaman içinde..."
yield "Kalbur saman içinde..."
hikaye = hikaye_anlatici()
print(next(hikaye)) # "Bir varmış..."
print("Ara veriyoruz!")
print(next(hikaye)) # "Bir yokmuş..."
Generator’ları ne zaman kullanmalıyız?
- Çok büyük veri setleriyle çalışırken
- Sonsuz seriler oluştururken
- Bellek kullanımını optimize etmek istediğimizde
- Veriyi parça parça işlememiz gerektiğinde
İşte bu kadar! Generator’lar aslında sihirli bir fabrika gibi, sadece ihtiyacın olduğunda çalışır ve hafızanı çok verimli kullanmanı sağlar. 🌟
Hadi “Functions as first-class objects” konusunu eğlenceli bir şekilde öğrenelim! 🎪
İlk olarak şöyle düşün: Python’da fonksiyonlar sihirli oyuncaklar gibidir. Onları:
- Başka bir oyuncağa verebilirsin (değişkene atama)
- Başka bir oyuncak kutusuna koyabilirsin (liste, sözlük vb.)
- Başka bir oyuncak fabrikasına gönderebilirsin (fonksiyona parametre olarak)
- Yeni bir oyuncak fabrikasından geri alabilirsin (fonksiyondan dönüş değeri olarak)
Hadi örneklerle görelim:
- Fonksiyonu Değişkene Atama:
def selam_ver(isim):
return f"Merhaba {isim}!"
# Fonksiyonu bir değişkene atayabiliriz
selamlayici = selam_ver
print(selamlayici("Ali")) # Çıktı: "Merhaba Ali!"
- Fonksiyonları Liste/Sözlük İçinde Tutma:
def toplama(a, b): return a + b
def cikarma(a, b): return a - b
def carpma(a, b): return a * b
# Fonksiyonları listeye koyalım
matematik_kutusu = [toplama, cikarma, carpma]
# Listedeki fonksiyonları kullanma
for islem in matematik_kutusu:
print(islem(10, 5)) # Çıktı: 15, 5, 50
- Fonksiyonu Parametre Olarak Gönderme:
def sayi_uret(islem):
return islem(5, 3)
def topla(x, y):
return x + y
def carp(x, y):
return x * y
print(sayi_uret(topla)) # Çıktı: 8
print(sayi_uret(carp)) # Çıktı: 15
- Fonksiyondan Fonksiyon Döndürme:
def matematik_fabrikasi(islem):
def toplama(x, y):
return x + y
def carpma(x, y):
return x * y
if islem == "topla":
return toplama
else:
return carpma
# Fonksiyon üretelim
hesapla = matematik_fabrikasi("topla")
print(hesapla(4, 3)) # Çıktı: 7
- Dekoratörler (Süsleyiciler):
def sihirli_sus(fonksiyon):
def wrapper():
print("✨ Sihir başlıyor ✨")
fonksiyon()
print("✨ Sihir bitti ✨")
return wrapper
@sihirli_sus
def selam_ver():
print("Merhaba!")
selam_ver()
# Çıktı:
# ✨ Sihir başlıyor ✨
# Merhaba!
# ✨ Sihir bitti ✨
- Lambda Fonksiyonları (Küçük Sihirli Formüller):
# Normal fonksiyon
def kare_al(x):
return x * x
# Aynı işi yapan lambda fonksiyonu
kare = lambda x: x * x
print(kare(5)) # Çıktı: 25
- Pratik Bir Örnek - Oyun Puanları:
def puan_hesapla(seviye):
def kolay_mod(skor):
return skor * 1
def orta_mod(skor):
return skor * 2
def zor_mod(skor):
return skor * 3
if seviye == "kolay":
return kolay_mod
elif seviye == "orta":
return orta_mod
else:
return zor_mod
# Oyun modunu seçelim
oyun_modu = puan_hesapla("zor")
print(oyun_modu(100)) # Çıktı: 300
- Fonksiyonları Filtre Olarak Kullanma:
sayilar = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
# Çift sayıları bulma
def cift_mi(sayi):
return sayi % 2 == 0
cift_sayilar = list(filter(cift_mi, sayilar))
print(cift_sayilar) # Çıktı: [2, 4, 6, 8, 10]
Bu özellikler sayesinde Python’da:
- Daha esnek kod yazabilirsin
- Kodunu daha düzenli hale getirebilirsin
- Aynı kodu tekrar tekrar yazmaktan kurtulabilirsin
- Karmaşık problemleri daha basit parçalara bölebilirsin
İşte bu kadar! Python’da fonksiyonlar birer süper kahraman gibi - istediğin yere gönderebilir, istediğin şekilde kullanabilir ve hatta yeni süper kahramanlar yaratabilirsin! 🦸♂️✨
F-strings’i, sihirli bir not defteri gibi düşünelim! 📝 Hadi öğrenelim:
# Eski yöntem (sıkıcı):
isim = "Ali"
yas = 10
print("Merhaba, benim adım " + isim + " ve " + str(yas) + " yaşındayım.")
# f-string (eğlenceli!):
print(f"Merhaba, benim adım {isim} ve {yas} yaşındayım!")
F-strings ile yapabileceklerimiz:
- Basit Değişkenleri Kullanma 🎈
kedi = "Pamuk"
yas = 3
print(f"Benim kedimin adı {kedi} ve {yas} yaşında!")
- Hesaplama Yapma ✨
fiyat = 10
adet = 3
print(f"Toplam ödemeniz gereken: {fiyat * adet} TL")
- Sayıları Biçimlendirme 🔢
pi = 3.14159
print(f"Pi sayısı: {pi:.2f}") # İki basamak göster
para = 1234567
print(f"Param: {para:,} TL") # Binlik ayraç kullan
- Listeleri Kullanma 📋
meyveler = ["elma", "armut", "muz"]
print(f"En sevdiğim meyve: {meyveler[0]}")
- İfadeleri Kullanma 🎯
puan = 85
print(f"Sınav sonucun: {puan} - {'Geçtin!' if puan >= 70 else 'Kaldın!'}")
- Sözlükleri Kullanma 📚
ogrenci = {
"ad": "Ayşe",
"sinif": "4-A"
}
print(f"{ogrenci['ad']} {ogrenci['sinif']} sınıfında!")
- Eğlenceli Örnekler 🎨
# Karne notu hesaplama
matematik = 90
turkce = 85
fen = 95
print(f"""
🌟 KARNEM 🌟
-----------------
Matematik: {matematik}
Türkçe: {turkce}
Fen: {fen}
-----------------
Ortalama: {(matematik + turkce + fen) / 3:.1f}
""")
- Emoji ve Özel Karakterler 🎪
mutlu = True print(f"Bugün nasılım: {'😊' if mutlu else '😢'}") - Alıştırmalar 🎮
# Oyuncak mağazası
oyuncak = "Araba"
fiyat = 50
stok = 3
print(f"""
🎁 OYUNCAK MAĞAZASI 🎁
----------------------
Oyuncak: {oyuncak}
Fiyat: {fiyat} TL
Stok: {stok} adet
Toplam Değer: {fiyat * stok} TL
""")
- Küçük Püf Noktaları 💡
# Süslü parantez yazdırmak için iki tane kullan
print(f"Süslü parantez böyle yazılır: ")
# Uzun sayıları daha okunaklı yapma
buyuk_sayi = 1_000_000
print(f"Bir milyon = {buyuk_sayi:,}")
F-strings’in güzel yanları:
- Kolay okunur 👀
- Yazması eğlencelidir 🎨
- Hata yapma olasılığı azdır ✅
- Kodunuz daha düzenli görünür 📝
Ve işte bu kadar! F-strings ile metin yazmak, sihirli bir not defterine yazmak gibi - istediğin her şeyi süslü parantezler içine koyup kullanabilirsin! 🌈✨
Python öğrenmek için temel ve ileri düzey konuları şöyle sıralayabilirim:
- Temel Konular 🌱
# Değişkenler ve Veri Tipleri
isim = "Ali" # str
yas = 25 # int
boy = 1.78 # float
aktif = True # bool
# Operatörler
x = 5 + 3 # Aritmetik
y = x > 3 # Karşılaştırma
z = True and False # Mantıksal
- Veri Yapıları 📚
liste = [1, 2, 3]
demet = (1, 2, 3)
sozluk = {"a": 1, "b": 2}
kume = {1, 2, 3}
- Döngüler ve Koşullar 🔄
- if, elif, else
- for döngüleri
- while döngüleri
- break, continue, pass
- Hata Yönetimi ⚠️
try:
sayi = int("abc")
except ValueError:
print("Hata oluştu!")
finally:
print("İşlem tamamlandı")
- Dosya İşlemleri 📁
# Dosya okuma-yazma
with open("dosya.txt", "r") as f:
icerik = f.read()
- Modüller ve Paketler 📦
- import kullanımı
- pip ile paket yönetimi
- kendi modüllerimizi oluşturma
- OOP (Nesne Yönelimli Programlama) 🎯
class Araba:
def __init__(self, marka):
self.marka = marka
- Dekoratörler 🎨
@decorator
def fonksiyon():
pass
- Context Managers 🔑
with something() as s:
s.do_something()
- Async Programming ⚡
async def main():
await fonksiyon()
- Regular Expressions 🔍
import re
pattern = r"\d+"
- Database İşlemleri 💾
- SQLite
- PostgreSQL
- MongoDB
- Web Geliştirme 🌐
- Flask
- Django
- FastAPI
- Testing 🧪
import unittest
class TestClass(unittest.TestCase):
def test_something(self):
pass
- Data Science Araçları 📊
- NumPy
- Pandas
- Matplotlib
- Lambda Functions λ
square = lambda x: x**2 - İteratörler ve Jeneratörler 🔄
def generator():
yield 1
yield 2
- Threading ve Multiprocessing 🧵
import threading
import multiprocessing
- Python Design Patterns 🏗️
- Singleton
- Factory
- Observer
- Debugging Teknikleri 🐛
import pdb
pdb.set_trace()
- Virtual Environments 🌍
python -m venv myenv
source myenv/bin/activate
- Type Hints ✍️
def greet(name: str) -> str:
return f"Hello {name}"
- Memory Management 💡
- Garbage collection
- Memory profiling
- Security Best Practices 🔒
- Input validation
- Secure coding practices
- Performance Optimization ⚡
- Profiling
- Code optimization techniques
Her biri için pratik projeler yaparak öğrenmeyi pekiştirmek önemli! Örneğin:
- To-do list uygulaması
- Basit bir blog
- API servisi
- Veri analizi projesi
- Oyun (Örn: Taş-Kağıt-Makas)
- Dosya organizasyon scripti
- Web scraping uygulaması
- Chat uygulaması
Bu konuları sırayla öğrenmek ve her birini projelerle pekiştirmek, Python’da sağlam bir temel oluşturmana yardımcı olacaktır! 🚀
Hadi Python’da kullanışlı kütüphaneleri ve kod zamanlamasını eğlenceli bir şekilde öğrenelim! 🎮
- Faydalı Kütüphaneler 📚
Collections 🗂️
from collections import Counter, defaultdict, deque
# Counter - Sayaç gibi çalışır
renkler = ["kırmızı", "mavi", "kırmızı", "yeşil", "mavi", "kırmızı"]
renk_sayaci = Counter(renkler)
print(renk_sayaci) # Counter({'kırmızı': 3, 'mavi': 2, 'yeşil': 1})
# defaultdict - Varsayılan değerli sözlük
okul = defaultdict(list)
okul["4-A"].append("Ali") # Hiç hata vermez!
print(okul) # defaultdict(<class 'list'>, {'4-A': ['Ali']})
# deque - İki taraflı sıra
kuyruk = deque(["Ali", "Veli", "Ayşe"])
kuyruk.appendleft("Zeynep") # Başa ekle
kuyruk.append("Mehmet") # Sona ekle
print(kuyruk) # deque(['Zeynep', 'Ali', 'Veli', 'Ayşe', 'Mehmet'])
Random 🎲
import random
# Rastgele sayı üretme
print(random.randint(1, 6)) # Zar at!
# Listeden rastgele seçim
meyveler = ["elma", "armut", "muz", "kiraz"]
print(random.choice(meyveler)) # Rastgele meyve seç
# Listeyi karıştırma
kartlar = ["A", "K", "Q", "J"]
random.shuffle(kartlar)
print(kartlar) # Karıştırılmış liste
Math 📐
import math
# Matematiksel işlemler
print(math.pi) # Pi sayısı
print(math.sqrt(16)) # Karekök
print(math.ceil(3.1)) # Yukarı yuvarlama
print(math.floor(3.9)) # Aşağı yuvarlama
- Kod Zamanlaması ⏱️
time Modülü
import time
# Basit zamanlama
baslangic = time.time()
for i in range(1000000):
pass
bitis = time.time()
print(f"Geçen süre: {bitis - baslangic} saniye")
# Kod parçasını uyutma
print("3 saniyelik geri sayım!")
time.sleep(1)
print("2...")
time.sleep(1)
print("1...")
time.sleep(1)
print("Başla!")
timeit Modülü ⚡
import timeit
# Kod bloğunu zamanlama
kod = """
liste = []
for i in range(1000):
liste.append(i)
"""
sure = timeit.timeit(kod, number=1000)
print(f"Kodun çalışma süresi: {sure} saniye")
# Fonksiyon zamanlama
def listemi_olustur():
return list(range(1000))
def listemi_olustur2():
return [i for i in range(1000)]
sure1 = timeit.timeit(listemi_olustur)
sure2 = timeit.timeit(listemi_olustur2)
print(f"1. yöntem: {sure1}")
print(f"2. yöntem: {sure2}")
Dekoratör ile Zamanlama 🎯
import time
def zaman_olc(fonksiyon):
def wrapper(*args, **kwargs):
baslangic = time.time()
sonuc = fonksiyon(*args, **kwargs)
bitis = time.time()
print(f"{fonksiyon.__name__} fonksiyonu {bitis - baslangic} saniye sürdü")
return sonuc
return wrapper
@zaman_olc
def buyuk_liste_olustur():
return list(range(1000000))
buyuk_liste_olustur()
Pratik Örnekler 🎮
- Yarış Oyunu:
import time
def yaris():
print("Hazır...")
time.sleep(1)
print("Piştiii...")
time.sleep(1)
print("BAŞLA!")
baslangic = time.time()
input("ENTER'a bas!")
bitis = time.time()
print(f"Tepki süren: {bitis - baslangic:.3f} saniye!")
yaris()
- Performans Karşılaştırma:
import timeit
# İki farklı toplama yöntemi
def yontem1():
toplam = 0
for i in range(1000):
toplam += i
return toplam
def yontem2():
return sum(range(1000))
print("Yarış başlıyor!")
sure1 = timeit.timeit(yontem1, number=10000)
sure2 = timeit.timeit(yontem2, number=10000)
print(f"1. Yöntem: {sure1:.5f} saniye")
print(f"2. Yöntem: {sure2:.5f} saniye")
print(f"Kazanan: {'1. Yöntem' if sure1 < sure2 else '2. Yöntem'} 🏆")
Bu kütüphaneler ve zamanlama teknikleri sayesinde:
- Programlarının ne kadar hızlı çalıştığını ölçebilirsin
- Farklı çözüm yollarını karşılaştırabilirsin
- Kodunu daha verimli hale getirebilirsin
- Eğlenceli oyunlar ve uygulamalar yapabilirsin! 🚀
İşte bu kadar! Artık Python’un süper güçlü kütüphanelerini kullanabilir ve kodunun ne kadar hızlı çalıştığını ölçebilirsin! 🌟
Hadi Matplotlib ile grafikler çizmeyi öğrenelim! 📊 Matplotlib, Python’da harika resimler ve grafikler çizmemizi sağlayan sihirli bir araç gibidir.
import matplotlib.pyplot as plt
import numpy as np
# Basit Çizgi Grafiği
plt.figure(figsize=(10, 6))
x = np.array([1, 2, 3, 4, 5])
y = np.array([2, 4, 6, 8, 10])
plt.plot(x, y, 'b-o', label='Çizgi Grafiği')
plt.title('İlk Grafiğimiz')
plt.xlabel('X Ekseni')
plt.ylabel('Y Ekseni')
plt.legend()
plt.grid(True)
plt.show()
# Çubuk Grafiği
plt.figure(figsize=(10, 6))
meyveler = ['Elma', 'Armut', 'Muz', 'Çilek']
adetler = [30, 25, 15, 35]
plt.bar(meyveler, adetler, color=['red', 'green', 'yellow', 'pink'])
plt.title('Meyve Sayıları')
plt.xlabel('Meyveler')
plt.ylabel('Adet')
plt.show()
# Pasta Grafiği
plt.figure(figsize=(8, 8))
aktiviteler = ['Uyku', 'Okul', 'Oyun', 'Yemek']
saatler = [8, 6, 4, 2]
plt.pie(saatler, labels=aktiviteler, autopct='%1.1f%%',
colors=['lightblue', 'lightgreen', 'pink', 'orange'])
plt.title('Günlük Aktiviteler')
plt.show()
# Dağılım Grafiği
plt.figure(figsize=(10, 6))
x = np.random.randn(100)
y = np.random.randn(100)
plt.scatter(x, y, c='purple', alpha=0.5)
plt.title('Dağılım Grafiği')
plt.xlabel('X Değerleri')
plt.ylabel('Y Değerleri')
plt.show()
# Alt Grafikler
plt.figure(figsize=(12, 4))
# İlk alt grafik
plt.subplot(1, 3, 1)
plt.plot([1, 2, 3], [1, 2, 3], 'r-o')
plt.title('Grafik 1')
# İkinci alt grafik
plt.subplot(1, 3, 2)
plt.bar(['A', 'B', 'C'], [3, 2, 1])
plt.title('Grafik 2')
# Üçüncü alt grafik
plt.subplot(1, 3, 3)
plt.scatter([1, 2, 3], [3, 2, 1])
plt.title('Grafik 3')
plt.tight_layout()
plt.show()
Şimdi her bir grafik türünü daha detaylı açıklayalım:
- Çizgi Grafiği 📈
- En basit ve en çok kullanılan grafik türü
- Noktaları çizgilerle birleştirir
- Zaman içindeki değişimleri göstermek için harika!
- Örnek: Bir haftalık sıcaklık değişimi
- Çubuk Grafiği 📊
- Kategorileri karşılaştırmak için kullanılır
- Her kategori için bir çubuk çizer
- Örnek: Sınıftaki öğrencilerin en sevdikleri meyveler
- Pasta Grafiği 🥧
- Bütünün parçalarını gösterir
- Yüzdelik dilimleri göstermek için harika
- Örnek: Bir günde yaptığın aktivitelerin dağılımı
- Dağılım Grafiği 🎯
- İki değişken arasındaki ilişkiyi gösterir
- Her nokta bir veriyi temsil eder
- Örnek: Öğrencilerin boy ve kiloları
- Alt Grafikler 🎨
- Birden fazla grafiği yan yana koyabilirsin
- Her grafik farklı bir şey gösterebilir
- Örnek: Aynı verinin farklı gösterimleri
Grafikleri güzelleştirmek için kullanabileceğin bazı sihirli komutlar:
plt.title('Başlık') # Grafiğe başlık ekle
plt.xlabel('X Ekseni') # X eksenine isim ver
plt.ylabel('Y Ekseni') # Y eksenine isim ver
plt.grid(True) # Izgara çizgileri ekle
plt.legend() # Açıklama kutusu ekle
plt.savefig('grafik.png')# Grafiği kaydet
Eğlenceli bir örnek yapalım - Haftalık Harçlık Takibi:
gunler = ['Pazartesi', 'Salı', 'Çarşamba', 'Perşembe', 'Cuma']
harclik = [10, 8, 15, 5, 12]
plt.figure(figsize=(10, 6))
plt.plot(gunler, harclik, 'g-o', linewidth=2, markersize=10)
plt.title('Haftalık Harçlık Durumu')
plt.xlabel('Günler')
plt.ylabel('Harçlık (TL)')
plt.grid(True)
plt.show()
Matplotlib ile yapabileceklerin:
- Okul ödevlerin için harika grafikler çizebilirsin
- Bilimsel projelerin için verilerini görselleştirebilirsin
- Kendi hikayelerini grafiklerle anlatabilirsin
- Oyun skorlarını gösterebilirsin
- Ve çok daha fazlası!
Unutma:
- Her grafik farklı bir hikaye anlatır
- Renkler ve şekiller grafiğini daha anlaşılır yapar
- Başlıklar ve etiketler grafiğini daha profesyonel gösterir
İşte bu kadar! Artık verilerini renkli ve eğlenceli grafiklerle gösterebilirsin! 🎨✨
Tabii ki! Bu konuyu bir çocuğa anlatır gibi basit ve eğlenceli bir şekilde açıklayacağım. Hadi başlayalım!
1. Utilities Nedir?
“Utilities”, bilgisayar programlarının çalışmasını kolaylaştıran özel araçlardır. Tıpkı oyuncak kutusundaki aletlerin, oyun oynamayı daha eğlenceli hale getirmesi gibi, Utilities de programların daha iyi çalışmasını sağlar.
2. Display Nedir?
“Display”, bilgisayarın bize ne yaptığını göstermesidir. Örneğin, bir program çalışırken neler olduğunu görmek isteyebiliriz. İşte bu “Display” işleviyle sağlanır. Python’da bu işlevi kullanarak, programın her adımında neler olduğunu ekrana yazdırabiliriz.
3. self.display Nedir?
self.display, programın içindeki bir adımda ne olduğunu yazdırmak için kullanılan özel bir komuttur. Örneğin:
- Program bir sayı hesaplıyorsa, bu sayıyı ekrana yazdırabiliriz.
- Program bir döngüde çalışıyorsa, her adımda ne olduğunu görebiliriz.
Bu, tıpkı bir masal kitabındaki karakterlerin düşündüklerini okumak gibidir. Her şey açıkça görülür!
4. Level (Seviye) Nedir?
Programın ne kadar detaylı bilgi vereceğini kontrol etmek için “level” (seviye) kullanılır. Seviye, bilginin ne kadar derin olduğunu belirler. Örneğin:
- Seviye 0: Hiçbir şey gösterme. Sessiz kal!
- Seviye 1: Sadece önemli şeyler göster. Örneğin, bir problem çözüldüğünde sonucu göster.
- Seviye 2: Biraz daha fazla bilgi göster. Örneğin, bir döngüde değişen değerleri göster.
- Seviye 3: Daha fazla detay göster. Örneğin, her adımı adım adım izle.
- Seviye 4 ve üzeri: Çok fazla detay göster. Programın her küçük adımını görürsün.
Bu seviyeler, tıpkı bir teleskopun büyütme derecesi gibidir. Ne kadar büyütürsen, o kadar detay görürsün!
5. max_display_level Nedir?
max_display_level, programın en fazla ne kadar detay göstereceğini belirler. Örneğin:
- Eğer
max_display_level = 1ise, sadece önemli şeyler gösterilir. - Eğer
max_display_level = 3ise, daha fazla detay gösterilir.
Bu değeri değiştirebilirsin. Örneğin:
Classname.max_display_level = 3
Bu kod, sınıfın maksimum gösterim seviyesini 3 yapar. Artık daha fazla detay görürsün!
6. display.py Nedir?
display.py, bu işlevleri sağlayan özel bir dosyadır. İçinde Displayable adlı bir sınıf bulunur. Bu sınıf, programların “display” işlevini kullanmasını sağlar. Yani, programın ne yaptığını görmemizi kolaylaştırır.
7. Örnek: Nasıl Çalışır?
Şimdi, bir örnek yapalım. Diyelim ki, bir program yazdık ve her adımda ne olduğunu görmek istiyoruz. İşte böyle yaparız:
class Displayable(object):
max_display_level = 1 # Varsayılan seviye
def display(self, level, *args, **nargs):
if level <= self.max_display_level:
print(*args, **nargs)
# Örnek kullanım
class MyProgram(Displayable):
def run(self):
self.display(1, "Bu önemli bir mesaj!")
self.display(2, "Bu biraz daha fazla detay.")
self.display(3, "Bu çok fazla detay!")
program = MyProgram()
program.max_display_level = 2 # Seviyeyi 2'ye ayarla
program.run()
Bu programda:
- Seviye 1 ve 2 mesajları gösterilir.
- Seviye 3 mesajı gösterilmez, çünkü
max_display_level2 olarak ayarlandı.
8. Grafik Arayüz (GUI) ile Çalışmak
Eğer bir grafik arayüz (GUI) kullanmak isterseniz, display işlevini değiştirebilirsiniz. Örneğin, bir pencerede bilgileri göstermek için özel bir GUI oluşturabilirsiniz. Bu, tıpkı bir çizgi filmdeki karakterlerin konuşmalarını baloncuklarda göstermek gibidir!
9. Özetle…
- Utilities, programların çalışmasını kolaylaştıran araçlardır.
- Display, programın ne yaptığını gösterir.
- Seviye (Level), ne kadar detay istediğimizi belirler.
- max_display_level, programın en fazla ne kadar detay göstereceğini kontrol eder.
- display.py, bu işlevleri sağlayan özel bir dosyadır.
Umarım bu açıklama işine yarar! 😊 Eğer aklına başka sorular gelirse, sormaktan çekinme! 🚀
Tabii ki! “Argmax” kavramını bir çocuğa anlatır gibi basit ve eğlenceli bir şekilde açıklayacağım. Hadi başlayalım!
1. Argmax Nedir?
“Argmax”, bir grup şey arasından en iyisini veya en büyüğünü bulmamıza yardımcı olan özel bir araçtır. Tıpkı bir yarışta kimin en hızlı olduğunu bulmak gibi, Argmax da bir listedeki en büyük değeri bulur ve onun yerini söyler.
2. Bir Örnek ile Başlayalım
Diyelim ki, bir şeker kutun var ve her şekerin büyüklüğü farklı. Şekerlerin büyüklükleri şu şekilde:
- Şeker 1: 3 cm
- Şeker 2: 7 cm
- Şeker 3: 5 cm
Şimdi, en büyük şeker hangisi? Tabii ki, Şeker 2! Çünkü 7 cm, diğerlerinden daha büyük.
Peki, bu şeker kaçıncı sırada? İkinci sırada!
İşte Argmax tam olarak bunu yapar: En büyük değeri bulur ve onun yerini (sırasını) söyler.
3. Matematiksel Olarak Nasıl Çalışır?
Argmax’in yaptığı şey, bir listedeki en büyük değerin konumunu bulmaktır. İşte bir örnek:
liste = [3, 7, 5]
en_buyuk_index = liste.index(max(liste))
print(en_buyuk_index)
Bu kod:
- Listedeki en büyük değeri bulur (
max(liste)). - Bu değerin kaçıncı sırada olduğunu söyler (
index).
Sonuç: 1 (çünkü Python’da sıralama 0’dan başlar, yani ikinci eleman 1. indextedir).
4. Neden Argmax Kullanırız?
Argmax, özellikle bilgisayar biliminde ve matematikte çok kullanılır. Örneğin:
- Bir oyun yazıyorsun ve en iyi hamleyi bulmak istiyorsun.
- Bir yapay zeka modeli yazıyorsun ve modelin verdiği cevaplardan en güvenilir olanını seçmek istiyorsun.
Argmax, bu tür durumlarda bize yardımcı olur.
5. Gerçek Hayattan Bir Örnek
Diyelim ki, bir sınavda öğrencilerin notları şu şekilde:
- Ali: 85
- Ayşe: 92
- Mehmet: 78
En yüksek notu kim almış? Ayşe!
Peki, Ayşe kaçıncı sırada? İkinci sırada!
Argmax, bu durumda Ayşe’nin sırasını (2) bize söyler.
6. Python’da Argmax Nasıl Kullanılır?
Python’da numpy adlı bir kütüphane, Argmax için hazır bir fonksiyon sağlar. İşte nasıl kullanılır:
import numpy as np
notlar = [85, 92, 78]
en_yuksek_not_index = np.argmax(notlar)
print(en_yuksek_not_index)
Bu kod:
np.argmaxfonksiyonunu kullanarak en yüksek notun indexini bulur.- Sonuç: 1 (çünkü Ayşe’nin notu en yüksek ve o ikinci sırada).
7. Argmax Neden Önemli?
Argmax, birçok alanda kullanılır:
- Oyunlar: En iyi hamleyi bulmak için.
- Yapay Zeka: Modelin verdiği tahminlerden en güvenilir olanını seçmek için.
- Veri Analizi: Bir veri kümesindeki en büyük değeri bulmak için.
Tıpkı bir yarışta kimin birinci olduğunu bulmak gibi, Argmax de bizim için en iyi seçeneği bulur.
8. Özetle…
- Argmax, bir listedeki en büyük değerin yerini bulur.
- Tıpkı bir yarışta en hızlı koşucuyu bulmak gibi çalışır.
- Python’da
numpy.argmaxfonksiyonu ile kolayca kullanılabilir. - Argmax, oyunlar, yapay zeka ve veri analizi gibi alanlarda çok önemlidir.
Umarım bu açıklama işine yarar! 😊 Eğer aklına başka sorular gelirse, sormaktan çekinme! 🚀
Tabii ki! “Probability” (Olasılık) konusunu bir çocuğa anlatır gibi basit ve eğlenceli bir şekilde açıklayacağım. Hadi başlayalım!
1. Olasılık Nedir?
Olasılık, bir şeyin olma şansını ölçer. Tıpkı bir oyun oynarken ne olacağını tahmin etmek gibi! Örneğin:
- Bir zar attığında 6 gelme şansı nedir?
- Yağmur yağma ihtimali yüzde kaç?
Olasılık, bu tür sorulara cevap vermemizi sağlar.
2. Basit Bir Örnek: Zar Atma
Diyelim ki, bir zar attın. Zarın üzerinde 1’den 6’ya kadar sayılar var. Her sayının gelme şansı aynıdır. Peki, 3 gelme ihtimali nedir?
- Zarın 6 yüzü var.
- Her yüzün gelme şansı eşit.
- Yani, 3 gelme ihtimali 1/6‘dır.
Bu, tıpkı bir pastayı 6 eşit parçaya bölüp bir parçayı seçmek gibidir!
3. Olasılığı Nasıl Hesaplarız?
Olasılığı hesaplamak için şu formülü kullanırız:
Olasılık = İstenilen Durumların Sayısı / Tüm Olası Durumların Sayısı
Örneğin:
- Bir zar atıldığında çift sayı gelme ihtimali nedir?
- Çift sayılar: 2, 4, 6 (3 tane)
- Tüm sayılar: 1, 2, 3, 4, 5, 6 (6 tane)
- Olasılık = 3 / 6 = 1/2 (yani %50)
4. Gerçek Hayattan Örnekler
a) Yağmur Yağma İhtimali
Hava durumu raporunda “yarın %70 ihtimalle yağmur yağacak” deniyor. Bu, yarın yağmur yağma şansının 70 olduğunu, yağmama şansının ise 30 olduğunu söylüyor.
b) Kutudaki Renkli Toplar
Bir kutuda 5 kırmızı, 3 mavi ve 2 yeşil top var. Rastgele bir top çektiğinde kırmızı top çekme ihtimali nedir?
- Kırmızı toplar: 5
- Tüm toplar: 5 + 3 + 2 = 10
- Olasılık = 5 / 10 = 1/2 (yani %50)
5. Olasılık Türleri
Olasılık, birkaç farklı şekilde ifade edilebilir:
a) Kesin Olaylar
Bir şeyin kesinlikle olması. Örneğin:
- Güneşin doğması kesin bir olaydır. Olasılık = 1 (yani %100).
b) İmkansız Olaylar
Bir şeyin hiçbir zaman olmaması. Örneğin:
- Bir zarda 7 gelmesi imkansızdır. Olasılık = 0 (yani %0).
c) Rastgele Olaylar
Bir şeyin belirli bir şansla olması. Örneğin:
- Bir madeni para atıldığında yazı gelme ihtimali 1/2‘dir.
6. Olasılık Neden Önemli?
Olasılık, hayatımızın birçok alanında kullanılır:
- Hava Durumu: Yağmur yağma ihtimalini tahmin etmek.
- Oyunlar: Kazanma şansını hesaplamak.
- Sağlık: Bir hastalığın riskini değerlendirmek.
- Finans: Yatırım yaparken riskleri anlamak.
Tıpkı bir macera filmi izlerken ne olacağını tahmin etmeye çalışmak gibi, olasılık da bizim için geleceği anlamamıza yardımcı olur.
7. Python ile Olasılık Hesaplama
Python’da olasılık hesaplamak çok kolaydır. İşte bir örnek:
# Bir zar atıldığında 3 gelme ihtimali
toplam_durum = 6 # Zarın 6 yüzü var
istenilen_durum = 1 # Sadece 1 tane 3 var
olasilik = istenilen_durum / toplam_durum
print(f"3 gelme ihtimali: {olasilik:.2f} (%{olasilik * 100:.0f})")
Bu kod:
- Zarın 6 yüzü olduğunu ve sadece 1 tane 3 olduğunu bilir.
- Olasılığı hesaplar ve sonucu ekrana yazdırır.
Sonuç: 0.17 (yani %17)
8. Özetle…
- Olasılık, bir şeyin olma şansını ölçer.
- Zar atma, madeni para atma gibi oyunlarla kolayca anlaşılabilir.
- Formül: İstenilen Durumların Sayısı / Tüm Olası Durumların Sayısı.
- Gerçek hayatta hava durumu, sağlık, finans gibi alanlarda kullanılır.
- Python ile olasılık hesaplamak çok kolaydır.
Umarım bu açıklama işine yarar! 😊 Eğer aklına başka sorular gelirse, sormaktan çekinme! 🚀
Tabii ki! Bu konuyu bir çocuğa anlatır gibi basit ve eğlenceli bir şekilde açıklayacağım. Hadi başlayalım!
1. Olasılık Nedir?
Daha önce bahsettiğimiz gibi, olasılık bir şeyin olma şansını ölçer. Örneğin:
- Bir madeni para atıldığında yazı gelme ihtimali %50‘dir.
- Ya da bir zar atıldığında 6 gelme ihtimali 1/6‘dır.
Şimdi, bilgisayarlarla nasıl olasılık hesapları yapabileceğimize bakacağız.
2. flip(p) Fonksiyonu: Yazı-Tura Gibi Düşün!
flip(p) fonksiyonu, bir şeyin olma şansını belirlemek için kullanılır. İşte nasıl çalışır:
p, bir şeyin olma ihtimalidir. Örneğin,p = 0.7demek, bu şeyin %70 ihtimalle olacağı anlamına gelir.flip(p)fonksiyonu, rastgele bir sayı üretir ve bu sayıyıpile karşılaştırır:- Eğer üretilen sayı
p‘den küçükse, sonuç True (doğru) olur. - Eğer üretilen sayı
p‘den büyükse, sonuç False (yanlış) olur.
- Eğer üretilen sayı
Örnek:
import random
def flip(prob):
return random.random() < prob
# %70 ihtimalle True döner
sonuc = flip(0.7)
print(sonuc)
Bu kod:
- Rastgele bir sayı üretir (örneğin, 0.45).
- Eğer bu sayı
0.7‘den küçükse, sonuç True olur. - Eğer bu sayı
0.7‘den büyükse, sonuç False olur.
Tıpkı bir madeni para atmak gibi! Ama bu sefer paranın bir tarafının daha ağır olduğunu düşünebilirsin (örneğin, %70 yazı, %30 tura).
3. select_from_dist Fonksiyonu: Şanslı Çekiliş!
Şimdi daha ilginç bir şey yapalım! Diyelim ki, bir kutuda farklı renkte toplar var ve her rengin seçilme şansı farklı. İşte bunun için select_from_dist fonksiyonu kullanılır.
Nasıl Çalışır?
select_from_dist fonksiyonu, bir sözlük alır. Bu sözlükte:
- Her bir öğe (örneğin, top renkleri) ve onun seçilme olasılığı bulunur.
- Fonksiyon, bu olasılıklara göre rastgele bir öğe seçer.
Örnek:
import random
def select_from_dist(item_prob_dist):
ranreal = random.random() # 0 ile 1 arasında rastgele bir sayı
for (it, prob) in item_prob_dist.items():
if ranreal < prob:
return it
else:
ranreal -= prob
raise RuntimeError(f"{item_prob_dist} is not a probability distribution")
# Örnek kullanım
toplar = {"kırmızı": 0.5, "mavi": 0.3, "yeşil": 0.2}
secilen_top = select_from_dist(toplar)
print(secilen_top)
Bu kod:
- Rastgele bir sayı üretir (örneğin, 0.4).
- Bu sayıyı, her bir topun olasılığıyla karşılaştırır:
- Eğer sayı
0.5‘ten küçükse, kırmızı seçilir. - Eğer sayı
0.5ile0.8arasındaysa, mavi seçilir. - Eğer sayı
0.8ile1.0arasındaysa, yeşil seçilir.
- Eğer sayı
Tıpkı bir çekiliş yapmak gibi! Her rengin seçilme şansı, onun olasılığına bağlıdır.
4. Gerçek Hayattan Örnekler
a) Hediye Çekilişi
Diyelim ki, bir hediye çekilişi yapıyorsun ve her arkadaşının kazanma şansı farklı:
- Ali: %50
- Ayşe: %30
- Mehmet: %20
select_from_dist fonksiyonu, bu şanslara göre kimin kazanacağını seçer.
b) Oyunlar
Bir oyunda farklı ödül kazanma şansları olsun:
- Altın: %10
- Gümüş: %30
- Bronz: %60
Bu durumda da select_from_dist fonksiyonu, hangi ödülü kazandığını söyleyebilir.
5. Neden Bu Fonksiyonlar Önemli?
Bu fonksiyonlar, bilgisayarın rastgele seçimler yapmasını sağlar. Özellikle şu alanlarda çok kullanılır:
- Simülasyonlar: Örneğin, bir şehirdeki trafik akışını simüle etmek.
- Oyunlar: Kazanma şanslarını hesaplamak.
- Yapay Zeka: Modelin farklı seçenekler arasından seçim yapmasını sağlamak.
6. Özetle…
flip(p)fonksiyonu, bir şeyin belirli bir ihtimalle olup olmayacağını kontrol eder.select_from_distfonksiyonu, farklı şanslara sahip öğeler arasından rastgele birini seçer.- Bu fonksiyonlar, gerçek hayatta çekilişler, oyunlar ve simülasyonlar gibi birçok alanda kullanılır.
Umarım bu açıklama işine yarar! 😊 Eğer aklına başka sorular gelirse, sormaktan çekinme! 🚀
Tabii ki! Bu konuyu bir çocuğa anlatır gibi basit ve eğlenceli bir şekilde açıklayacağım. Hadi başlayalım!
1. Test Nedir?
Bilgisayar programları yazarken, programın doğru çalıştığından emin olmak için testler yaparız. Tıpkı bir oyuncak arabayı çalıştırıp tekerleklerinin döndüğünden emin olmak gibi, biz de programımızın her parçasını kontrol ederiz.
2. Unit Test (Birim Testi) Nedir?
“Unit Test”, programın küçük parçalarını tek tek test etmektir. Örneğin:
- Bir fonksiyonun doğru sonuç verip vermediğini kontrol ederiz.
- Eğer bir hata varsa, bunu hızlıca buluruz.
Örnek: argmax Fonksiyonunu Test Etmek
Diyelim ki, bir listedeki en büyük değerin yerini bulan bir fonksiyon yazdık (argmax). Bu fonksiyonu test etmek için şu adımları izleriz:
def test():
# argmax([1, 6, 55, 3, 55, 23]) -> En büyük değer 55, indexleri 2 ve 4
assert argmax([1, 6, 55, 3, 55, 23]) in [2, 4]
print("Test başarılı!")
Bu kod:
argmaxfonksiyonunun doğru çalışıp çalışmadığını kontrol eder.- Eğer sonuç yanlışsa, program hata verir.
- Eğer sonuç doğruysa, “Test başarılı!” yazar.
3. Test Kodlarını Ne Zaman Çalıştırırız?
Test kodları, programın ana dosyasında (__main__) çalıştırıldığında devreye girer. Yani, programı doğrudan çalıştırdığınızda testler çalışır, ama başka bir yerden çağrılırsa çalışmaz.
Örnek:
if __name__ == "__main__":
test()
Bu kod:
- Eğer bu dosya direkt çalıştırılırsa (
python utilities.py), testler çalışır. - Eğer bu dosya başka bir program tarafından kullanılırsa, testler çalışmaz.
Tıpkı bir oyuncak kutusunu açtığınızda içindekileri kontrol etmek gibi, programı çalıştırdığınızda testleri çalıştırabilirsiniz.
4. test_aipython(): Tüm Sistemi Test Etmek
test_aipython() fonksiyonu, tüm programın farklı bölümlerini test etmek için kullanılır. İşte nasıl çalışır:
a) Arama Algoritmalarını Test Etmek
Program, arama algoritmalarının (örneğin, A* veya DFS) doğru çalışıp çalışmadığını kontrol eder.
b) Kısıtlamalı Programlamayı Test Etmek
Kısıtlamalı programlama (CSP), bir problemdeki tüm koşulları sağlayan çözümleri bulmayı sağlar. Örneğin:
- Bir puzzle’ı çözmek için hangi taşların nereye konulacağını bulabiliriz.
c) Mantık ve Planlama Testleri
Program, mantıksal çıkarımların (örneğin, “Eğer yağmur yağıyorsa, şemsiye alırım”) ve planlama algoritmalarının doğru çalıştığını kontrol eder.
d) Öğrenme ve Belirsizlik Testleri
Yapay zeka modelleri, verilerden öğrenir ve tahminler yapar. Bu testler, modellerin doğru öğrendiğinden ve tahminlerinin güvenilir olduğundan emin olmamızı sağlar.
5. Sınır Durumlarını Test Etmek
Testlerde en önemli şey, “sınır durumlarını” da kontrol etmektir. Sınır durumları, programın beklenmedik veya zorlu durumlarda nasıl davrandığını gösterir.
Örnek:
- Bir liste boşsa, program hata veriyor mu?
- Bir sayı çok büyükse veya çok küçükse, program doğru çalışıyor mu?
Bu tür durumları test etmek, programın daha sağlam olmasını sağlar.
6. Gerçek Hayattan Örnekler
a) Oyunlar
Bir oyun yazdığınızda, karakterlerin hareketlerini test etmeniz gerekir:
- Karakter duvara çarparsa ne olacak?
- Karakter düşmanla çarpıştığında puan kaybediyor mu?
b) Hava Durumu Uygulaması
Hava durumu uygulaması yazarken:
- Yağmur ihtimali %0 ise, uygulama doğru uyarı veriyor mu?
- Sıcaklık -50 derece olduğunda, uygulama çöküyor mu?
7. Neden Test Önemli?
Testler, programın doğru çalıştığından emin olmamızı sağlar. Özellikle şu durumlarda çok önemlidir:
- Büyük projelerde, her parçanın diğerleriyle uyumlu çalıştığından emin olmak.
- Kullanıcıların programı kullandığında hata almamasını sağlamak.
- Gelecekte yeni özellikler eklediğimizde, eski özelliklerin bozulmadığından emin olmak.
8. Özetle…
- Test, programın doğru çalıştığından emin olmak için yapılır.
- Unit Test, küçük parçaları tek tek kontrol eder.
- test_aipython(), tüm sistemi kapsamlı bir şekilde test eder.
- Sınır durumları, programın zorlu durumlarda nasıl davrandığını kontrol eder.
- Testler, programın sağlam ve hatasız olmasını sağlar.
Umarım bu açıklama işine yarar! 😊 Eğer aklına başka sorular gelirse, sormaktan çekinme! 🚀
Tabii ki! Bu konuyu bir çocuğa anlatır gibi basit ve eğlenceli bir şekilde açıklayacağım. Hadi başlayalım!
1. Ajanlar (Agents) ve Çevre (Environment) Nedir?
Düşün ki, bir robot var ve bu robot bir odada hareket ediyor. Robot, çevresindeki şeyleri algılar (örneğin, duvarları görür veya sesleri işitir) ve buna göre hareket eder (örneğin, sola döner veya ileri gider). İşte bu robot bir ajandır, oda da onun çevresidir.
- Ajan: Bir şey yapmak için karar veren varlık. Örneğin, robot, bilgisayar programı veya hatta bir insan.
- Çevre: Ajanın içinde bulunduğu dünya. Örneğin, bir oda, bir oyun alanı veya bir bilgisayar simülasyonu.
2. Ajan ve Çevre Nasıl Çalışır?
Ajan ve çevre birbirleriyle iletişim kurar. İşte nasıl:
- Ajan, çevreden bir “algı” alır. Algı, çevrenin durumunu anlatan bilgilerdir. Örneğin:
- Robot, “önünde bir duvar var” bilgisini alır.
- Oyun karakteri, “sağında bir düşman var” bilgisini alır.
- Ajan, bu algıyı değerlendirir ve ne yapacağına karar verir. Örneğin:
- Robot, “duvara çarpmamak için sola dön” der.
- Oyun karakteri, “düşmandan kaçmak için geri çekil” der.
- Ajan, kararı uygular ve bir “eylem” gerçekleştirir. Örneğin:
- Robot sola döner.
- Oyun karakteri geri çekilir.
- Çevre, ajanın eylemini değerlendirir ve yeni bir algı gönderir. Örneğin:
- Robot sola döndükten sonra, “şimdi önün açık” bilgisini alır.
- Oyun karakteri geri çekildikten sonra, “düşman uzaklaştı” bilgisini alır.
Bu döngü sürekli devam eder. Tıpkı bir sohbet gibi, ajan ve çevre birbirleriyle konuşur!
3. Hiyerarşik Kontrol (Hierarchical Control) Nedir?
Bazen, bir ajanın birden fazla “katmanı” olabilir. Örneğin:
- Üst Katman: Büyük kararlar alır. Örneğin, “odayı temizle”.
- Alt Katman: Küçük kararlar alır. Örneğin, “soldaki masayı temizle”.
Üst katman, alt katmana talimatlar verir. Alt katman ise bu talimatları yerine getirir ve sonuçları üst katmana bildirir. Tıpkı bir okulda olduğu gibi:
- Müdür, öğretmenlere ne öğreteceklerini söyler.
- Öğretmenler, öğrencilerle çalışır ve sonuçları müdüre bildirir.
4. Simülasyon: Ajan ve Çevre Nasıl Test Edilir?
Ajan ve çevreyi test etmek için bir “simülasyon” kullanılır. Simülasyon, tıpkı bir oyun gibi, ajanın ve çevrenin nasıl etkileşime girdiğini gösterir.
Nasıl Çalışır?
- Başlangıç Durumu: Çevre, ajan için ilk algıyı gönderir. Örneğin:
- “Robot, önündeki duvarı gör.”
- “Oyun karakteri, sağındaki düşmanı gör.”
- Ajanın Kararı: Ajan, bu algıyı değerlendirir ve bir eylem seçer. Örneğin:
- Robot, “sola dön” der.
- Oyun karakteri, “geri çekil” der.
- Eylem Gerçekleştirilir: Çevre, ajanın eylemini değerlendirir ve yeni bir algı gönderir. Örneğin:
- Robot sola döndükten sonra, “şimdi önün açık” bilgisini alır.
- Oyun karakteri geri çekildikten sonra, “düşman uzaklaştı” bilgisini alır.
- Tekrarlanır: Bu süreç, belirli bir süre boyunca tekrarlanır. Örneğin, 10 adım boyunca ajan ve çevre birbirleriyle iletişim kurar.
5. Gerçek Hayattan Örnekler
a) Ev Temizleme Robotu
Bir ev temizleme robotu düşün:
- Algı: “Önünde bir engel var.”
- Karar: “Sağa dön.”
- Eylem: Sağa döner.
- Yeni Algı: “Şimdi önün açık.”
b) Oyun Karakteri
Bir video oyunundaki karakter düşün:
- Algı: “Sağında bir düşman var.”
- Karar: “Geri çekil.”
- Eylem: Geri çekilir.
- Yeni Algı: “Düşman uzaklaştı.”
6. Python’da Nasıl Yapılır?
Python’da bu süreç şu şekilde kodlanabilir:
class Agent:
def initial_action(self, percept):
# İlk eylemi seç
return self.select_action(percept)
def select_action(self, percept):
# Algıya göre eylem seç
raise NotImplementedError("Bu metodu uygulamanız gerekiyor!")
class Environment:
def initial_percept(self):
# İlk algıyı gönder
raise NotImplementedError("Bu metodu uygulamanız gerekiyor!")
def do(self, action):
# Eylemi değerlendir ve yeni algıyı gönder
raise NotImplementedError("Bu metodu uygulamanız gerekiyor!")
class Simulate:
def __init__(self, agent, environment):
self.agent = agent
self.env = environment
self.percept = self.env.initial_percept()
def go(self, n):
for i in range(n):
action = self.agent.select_action(self.percept)
print(f"Adım {i}: Eylem = {action}")
self.percept = self.env.do(action)
print(f"Yeni Algı = {self.percept}")
Bu kod:
- Agent: Ajanın nasıl karar alacağını tanımlar.
- Environment: Çevrenin nasıl tepki vereceğini tanımlar.
- Simulate: Ajan ve çevrenin nasıl etkileşime gireceğini simüle eder.
7. Neden Önemli?
Bu yapı, birçok alanda kullanılır:
- Robotik: Robotların çevreyi anlaması ve hareket etmesi.
- Oyunlar: Oyun karakterlerinin akıllıca karar alması.
- Yapay Zeka: Bilgisayarların gerçek dünyadaki problemleri çözmesi.
8. Özetle…
- Ajan, çevreden algılar alır ve eylemler gerçekleştirir.
- Çevre, ajanın eylemlerini değerlendirir ve yeni algılar gönderir.
- Hiyerarşik kontrol, büyük ve küçük kararların farklı katmanlar tarafından alınmasını sağlar.
- Simülasyon, ajan ve çevrenin nasıl etkileşime girdiğini test etmemizi sağlar.
Umarım bu açıklama işine yarar! 😊 Eğer aklına başka sorular gelirse, sormaktan çekinme! 🚀