Algoritmalar ve Veri Yapıları Dersi - İnteraktif Konu Anlatımı
Fonksiyon, belirli bir görevi yerine getiren, yeniden kullanılabilir kod bloklarıdır. Fonksiyonlar sayesinde kodlarımızı daha organize, okunabilir ve bakımı kolay hale getiririz.
def fonksiyon_adi(parametre1, parametre2):
"""Docstring - fonksiyonun açıklaması"""
# Fonksiyon gövdesi
sonuc = parametre1 + parametre2
return sonuc
Fonksiyon tanımlama anahtar kelimesi
Fonksiyonun benzersiz adı
Fonksiyona gönderilen değişkenler
Fonksiyonun döndürdüğü değer
En basit haliyle, hiç parametre almayan ve değer döndürmeyen bir fonksiyon:
def selamla():
"""Bu fonksiyon basit bir selamlama yapar"""
print("Merhaba Dünya!")
print("Python öğreniyorum!")
# Fonksiyonu çağırma
selamla()
print("---")
selamla() # Birden fazla kez çağırabiliriz
Fonksiyonlara dışarıdan veri göndererek daha esnek hale getirebiliriz:
def selamla_kisi(isim):
"""Belirtilen kişiye selamlar"""
print(f"Merhaba {isim}!")
print(f"{isim}, nasılsın?")
# Farklı argümanlarla çağırma
selamla_kisi("Ahmet")
print("---")
selamla_kisi("Ayşe")
print("---")
selamla_kisi("Mehmet")
return anahtar kelimesi, fonksiyonun bir değer döndürmesini sağlar:
def topla(a, b):
"""İki sayıyı toplar ve sonucu döndürür"""
sonuc = a + b
return sonuc
def kare_al(sayi):
"""Bir sayının karesini döndürür"""
return sayi * sayi
# Return değerlerini kullanma
toplam = topla(15, 25)
print(f"Toplam: {toplam}")
kare = kare_al(7)
print(f"7'nin karesi: {kare}")
# Return değerini doğrudan kullanma
print(f"5 + 8 = {topla(5, 8)}")
print(f"12'nin karesi: {kare_al(12)}")
# Return değerini başka işlemlerde kullanma
sonuc = topla(10, 20) + kare_al(5)
print(f"10+20 + 5^2 = {sonuc}")
return olmadan bir fonksiyon None döndürür.
print() ile return farklıdır! print() sadece ekrana yazar,
return ise değeri fonksiyondan çıkartır.
FUNCTION min_bul(liste):
min ← liste[0]
FOR her eleman IN liste:
IF eleman < min:
min ← eleman
END IF
END FOR
RETURN min
END FUNCTION
// Kullanım
sayilar ← [45, 23, 67, 12, 89]
sonuc ← min_bul(sayilar)
PRINT sonuc
def min_bul(liste):
"""Listedeki minimum değeri bulur"""
if len(liste) == 0:
return None
min_deger = liste[0]
for eleman in liste:
if eleman < min_deger:
min_deger = eleman
return min_deger
# Test edelim
sayilar1 = [45, 23, 67, 12, 89, 34]
sayilar2 = [100, 50, 75, 25, 90]
sayilar3 = [-5, -10, -3, -20, -1]
print(f"Liste 1: {sayilar1}")
print(f"Minimum: {min_bul(sayilar1)}")
print()
print(f"Liste 2: {sayilar2}")
print(f"Minimum: {min_bul(sayilar2)}")
print()
print(f"Liste 3: {sayilar3}")
print(f"Minimum: {min_bul(sayilar3)}")
def ortalama_hesapla(liste):
"""Listedeki sayıların ortalamasını hesaplar"""
if len(liste) == 0:
return 0
toplam = 0
for sayi in liste:
toplam += sayi
ortalama = toplam / len(liste)
return ortalama
# Test
notlar1 = [85, 90, 78, 92, 88]
notlar2 = [60, 70, 65, 80, 75]
print(f"Notlar 1: {notlar1}")
print(f"Ortalama: {ortalama_hesapla(notlar1):.2f}")
print()
print(f"Notlar 2: {notlar2}")
print(f"Ortalama: {ortalama_hesapla(notlar2):.2f}")
def linear_search(liste, aranan):
"""
Listedeki bir elemanı arar ve indeksini döndürür.
Bulunamazsa -1 döndürür.
"""
for i in range(len(liste)):
if liste[i] == aranan:
return i # Bulundu, indeksini döndür
return -1 # Bulunamadı
# Test
isimler = ["Ali", "Ayşe", "Mehmet", "Fatma", "Ahmet"]
sayilar = [10, 25, 30, 45, 50, 75]
print(f"İsimler: {isimler}")
print(f"'Mehmet' aranıyor...")
indeks = linear_search(isimler, "Mehmet")
if indeks != -1:
print(f"Bulundu! İndeks: {indeks}")
else:
print("Bulunamadı!")
print()
print(f"'Zeynep' aranıyor...")
indeks = linear_search(isimler, "Zeynep")
if indeks != -1:
print(f"Bulundu! İndeks: {indeks}")
else:
print("Bulunamadı!")
print()
print(f"Sayılar: {sayilar}")
print(f"45 aranıyor: İndeks = {linear_search(sayilar, 45)}")
print(f"100 aranıyor: İndeks = {linear_search(sayilar, 100)}")
def asal_mi(sayi):
"""
Bir sayının asal olup olmadığını kontrol eder
Return: True (asal) veya False (asal değil)
"""
if sayi < 2:
return False
if sayi == 2:
return True
if sayi % 2 == 0:
return False
# 3'ten başlayarak sayının kareköküne kadar kontrol et
for i in range(3, int(sayi**0.5) + 1, 2):
if sayi % i == 0:
return False
return True
def asal_sayilari_listele(baslangic, bitis):
"""Verilen aralıktaki asal sayıları listeler"""
asal_liste = []
for sayi in range(baslangic, bitis + 1):
if asal_mi(sayi):
asal_liste.append(sayi)
return asal_liste
# Test
print("Asal mı kontrolleri:")
test_sayilar = [2, 3, 4, 5, 10, 17, 19, 20, 23, 25]
for sayi in test_sayilar:
sonuc = "ASAL" if asal_mi(sayi) else "ASAL DEĞİL"
print(f"{sayi}: {sonuc}")
print("\n1-50 arası asal sayılar:")
asallar = asal_sayilari_listele(1, 50)
print(asallar)
print(f"Toplam {len(asallar)} adet asal sayı var")
def sayi_degistir(x):
"""Sayıyı değiştirmeye çalışır"""
print(f"Fonksiyon içinde (önce): x = {x}")
x = x + 10
print(f"Fonksiyon içinde (sonra): x = {x}")
return x
# Ana program
sayi = 5
print(f"Fonksiyon öncesi: sayi = {sayi}")
sonuc = sayi_degistir(sayi)
print(f"Fonksiyon sonrası: sayi = {sayi}")
print(f"Return değeri: sonuc = {sonuc}")
print("\nGöründüğü gibi, orijinal 'sayi' değişmedi!")
def liste_degistir(liste):
"""Listeyi değiştirir"""
print(f"Fonksiyon içinde (önce): {liste}")
liste.append(99)
liste[0] = 999
print(f"Fonksiyon içinde (sonra): {liste}")
# Ana program
sayilar = [1, 2, 3, 4, 5]
print(f"Fonksiyon öncesi: {sayilar}")
liste_degistir(sayilar)
print(f"Fonksiyon sonrası: {sayilar}")
print("\n⚠️ DİKKAT: Orijinal liste değişti!")
def faktoriyel(n):
"""Recursive faktöriyel hesaplama"""
# Base case
if n == 0 or n == 1:
return 1
# Recursive case
return n * faktoriyel(n - 1)
# Test
print("Faktöriyel hesaplamaları:")
for i in range(1, 8):
print(f"{i}! = {faktoriyel(i)}")
def fibonacci(n):
"""
N. Fibonacci sayısını hesaplar
Fibonacci: 0, 1, 1, 2, 3, 5, 8, 13, 21, ...
"""
# Base cases
if n == 0:
return 0
if n == 1:
return 1
# Recursive case
return fibonacci(n - 1) + fibonacci(n - 2)
# İlk 10 Fibonacci sayısı
print("Fibonacci Serisi:")
for i in range(10):
print(f"F({i}) = {fibonacci(i)}")
Aşağıdaki kod alanını düzenleyebilir ve kendi kodlarınızı yazabilirsiniz: