Yazar: Hatice Özbolat

  • Algoritma Nedir? Günlük Hayattan Örneklerle

    Algoritma Nedir? Günlük Hayattan Örneklerle

    “Algoritma” kelimesini sosyal medya haberlerinden duymuşsundur: “Instagram algoritması değişti”, “algoritma bunu öne çıkarıyor”. Kulağa gizemli geliyor ama aslında her gün kullandığın bir şey: bir işi yapmak için sırası belli, açık adımlar.

    Kısa tanım

    Algoritma, bir problemi çözmek ya da bir işi tamamlamak için izlenen, sırası belli ve sonunda biten adımlar dizisidir. Bilgisayar programları algoritmaların bir programlama diliyle yazılmış hâlidir.

    Bir yemek tarifi gibi

    Bir çay demleme tarifini düşün:

    1. Çaydanlığa su koy ve kaynat.
    2. Demliğe iki tatlı kaşığı çay koy.
    3. Kaynayan suyu demliğe dök.
    4. Demliği çaydanlığın üstüne koy, 10-15 dakika demlenmeye bırak.

    Bu bir algoritma. Adımların sırası önemli (suyu kaynatmadan demliğe dökemezsin), her adım açık ve sonunda bitiyor. Bilgisayar için yazılan bir algoritmanın tek farkı, adımların çok daha kesin olması gerektiği: “biraz çay koy” bir insana yeter, bilgisayara yetmez.

    İyi bir algoritmanın özellikleri

    • Açık: Her adım tek bir şekilde anlaşılır.
    • Sıralı: Hangi adımın önce geldiği bellidir.
    • Sonlu: Bir noktada biter; sonsuza kadar dönmez.
    • Doğru: Her olası girdi için istenen sonucu verir.
    • Verimli: İşi gereksiz adımlarla uzatmaz.

    Python’da küçük bir algoritma: en yüksek not

    Bir listedeki en yüksek notu bulmak için adımları önce Türkçe yazalım:

    1. İlk notu “şimdiye kadarki en yüksek” kabul et.
    2. Geri kalan her notu tek tek kontrol et.
    3. Daha büyük bir not görürsen “en yüksek”i onunla değiştir.
    4. Liste bitince elindeki “en yüksek” cevaptır.

    Aynı adımlar Python’da:

    notlar = [70, 85, 40, 90, 65]
    en_yuksek = notlar[0] # 1. adım
    for n in notlar: # 2. adım
    if n > en_yuksek: # 3. adım
    en_yuksek = n
    print(en_yuksek) # 4. adım: 90

    Python’da bu iş için hazır bir fonksiyon var: max(notlar). Ama hazır fonksiyonun arkasında da tam olarak bu adımları izleyen bir algoritma çalışıyor. Buradaki for ve if‘i Python Dersi 5 ve 6’da anlattım.

    Aynı iş, farklı algoritmalar: sayı tahmin oyunu

    Bir arkadaşın 1 ile 100 arasında bir sayı tuttu. Her tahmininde sana sadece “daha büyük” ya da “daha küçük” diyor. Nasıl tahmin edersin?

    Birinci yol: sırayla dene. 1 mi? 2 mi? 3 mü? Sayı 73’se 73 tahmin yaparsın. Buna doğrusal arama deniyor.

    İkinci yol: her seferinde ikiye böl. Önce 50 de. “Daha büyük” derse 51 ile 100 arasının ortasını (75) söyle. “Daha küçük” derse 51 ile 74’ün ortasını söyle. Her tahmin, kalan aralığı yarıya indiriyor. Buna ikili arama (binary search) deniyor.

    Bu iki yöntem Python’da yazılıp tahminler sayıldığında sonuç şöyle:

    AralıkTutulan sayıSırayla denemeİkiye bölme
    1 – 1007373 tahmin6 tahmin
    1 – 1.000.000999.999999.999 tahmin19 tahmin

    Aralık 10.000 kat büyüdü, ikili aramanın tahmin sayısı 6’dan sadece 19’a çıktı. Bir milyonluk aralıkta bile 20 tahmin her zaman yetiyor. Algoritma seçimi işte bu yüzden önemli: ikisi de doğru cevabı buluyor, ama biri saniyede, diğeri saatlerce sonra.

    Tek bir şartı var: ikili arama ancak sıralı bir listede çalışır. Telefon rehberinde bir ismi bulurken ortadan açıp “daha ileride mi, geride mi?” diye bakman da aynı fikir; rehber alfabetik olduğu için işe yarıyor.

    Günlük hayattaki algoritmalar

    • Harita uygulamaları iki nokta arasındaki en kısa ya da en hızlı yolu bir algoritmayla hesaplıyor.
    • Sosyal medya akışı hangi gönderiyi önce göstereceğine bir sıralama algoritmasıyla karar veriyor. “Algoritma değişti” denince kast edilen bu sıralama kuralları.
    • Öneri sistemleri (Netflix, Spotify, YouTube), geçmişte izlediklerine ya da dinlediklerine bakarak sana ne önereceğini seçiyor.
    • Arama motorları milyonlarca sayfa arasından aramana en uygun olanları sıralıyor.

    Bir cümlede

    Algoritma, bir işi yapmanın sırası belli, açık adımlarıdır; aynı bilgisayarda bir işin saniyeler mi saatler mi süreceğini çoğu zaman seçilen algoritma belirler.

  • Döngüler: for ve while (Python Dersi 6)

    Döngüler: for ve while (Python Dersi 6)

    Geçen iki derste not ortalaması hesaplayan bir program yazdık. Ama üç not için üç ayrı input satırı yazmak zorunda kaldık. 30 öğrencinin notunu girmek isteseydin 30 satır mı yazacaktın? Bu derste bilgisayarın en sevdiği işi öğreniyoruz: aynı şeyi sıkılmadan tekrar tekrar yapmak. Buna döngü deniyor.

    Bu dersin kodları ve alıştırmaları hazır bir not defterinde: Colab’da Aç.

    Döngü ne demek?

    Günlük hayatta döngülerle doluyuz: “Sepetteki her elmayı yıka”, “çay demlenene kadar bekle”. İlki bir listedeki her eleman için bir iş yapmak, ikincisi bir koşul sağlanıncaya kadar beklemek. Python’da bunların karşılığı iki ayrı döngü:

    • for: “Elimdeki her şey için bunu yap.” Kaç kez döneceği baştan bellidir.
    • while: “Bu koşul doğru olduğu sürece bunu yap.” Ne zaman duracağı koşula bağlıdır.

    for: her biri için

    notlar = [70, 85, 90]
    for n in notlar:
    print(n)
    # 70
    # 85
    # 90

    notlar bir liste: köşeli parantez içinde virgülle sıralanmış değerler. Listeleri bir sonraki derste ayrıntılı göreceğiz; şimdilik “birden fazla değeri bir arada tutan kutu” diye düşün.

    for n in notlar: satırını şöyle oku: “notlar içindeki her değer için, o değere n de ve alttaki işi yap.” Döngü ilk turda n‘e 70, ikinci turda 85, üçüncü turda 90 verir. 5. derste olduğu gibi iki nokta ve girinti burada da kural.

    for sadece listeyle değil, metinle de çalışır. Bir metni harf harf gezer:

    for harf in "Python":
    print(harf, end=" ")
    # P y t h o n

    range: sayı üretmek

    Bazen elinde bir liste olmaz; sadece “bunu 5 kez yap” demek istersin. range bunun için sayı üretir:

    for i in range(5):
    print(i, end=" ")
    # 0 1 2 3 4

    Dikkat: range(5) 0’dan başlar ve 5’i dahil etmez. 0, 1, 2, 3, 4 toplam beş sayı eder. Farklı bir aralık istersen başlangıç ve bitiş verebilirsin:

    YazımÜrettiği sayılar
    range(5)0, 1, 2, 3, 4
    range(1, 6)1, 2, 3, 4, 5
    range(0, 10, 2)0, 2, 4, 6, 8 (ikişer ikişer)

    Bir çarpım tablosu yazdırmak artık üç satır:

    for i in range(1, 11):
    print(f"7 x {i} = {7 * i}")
    # 7 x 1 = 7
    # 7 x 2 = 14
    # ...
    # 7 x 10 = 70

    Biriktirmek: döngüde toplam almak

    Döngülerin en sık kullanımı, bir değeri tur tur biriktirmek. Döngüden önce boş bir “kumbara” açarsın, her turda içine ekler, sonunda toplamı alırsın:

    notlar = [70, 85, 90]
    toplam = 0 # kumbara boş başlar
    for n in notlar:
    toplam += n # toplam = toplam + n demek
    print("Toplam:", toplam) # 245
    print("Ortalama:", toplam / len(notlar)) # 81.666...

    toplam += n yazımı, 3. dersteki puan = puan + 5 satırının kısa hâli. len(notlar) listede kaç değer olduğunu verir.

    while: koşul doğru olduğu sürece

    sayac = 3
    while sayac > 0:
    print(sayac)
    sayac -= 1 # her turda bir azalt
    print("Kalkış!")
    # 3
    # 2
    # 1
    # Kalkış!

    while her turdan önce koşula bakar: sayac > 0 doğru mu? Doğruysa içerideki satırları çalıştırır, sonra tekrar bakar. Koşul yanlış olduğu an döngüden çıkar.

    while‘ın içinde koşulu bir gün yanlış yapacak bir şey olmalı. Burada bu işi sayac -= 1 yapıyor. O satırı unutursan sayac hep 3 kalır ve döngü hiç bitmez.

    break ve continue: döngüyü yönlendirmek

    • break: Döngüyü o anda tamamen bitirir.
    • continue: O turun geri kalanını atlayıp bir sonraki tura geçer.
    notlar = [70, 85, 40, 90]
    # İlk kalanı bulunca dur
    for n in notlar:
    if n < 50:
    print("Kalan var:", n)
    break
    # Kalan var: 40
    # Kalanları atla, geçenleri yaz
    for n in notlar:
    if n < 50:
    continue
    print("Geçti:", n)
    # Geçti: 70
    # Geçti: 85
    # Geçti: 90

    Mini program: istediğin kadar not

    Şimdi baştaki soruya dönelim. Program önce kaç not girileceğini sorsun, sonra o kadar notu döngüyle alsın:

    adet = int(input("Kaç not gireceksin? "))
    toplam = 0
    for i in range(1, adet + 1):
    not_ = float(input(f"{i}. not: "))
    toplam += not_
    ortalama = toplam / adet
    print(f"Ortalaman: {ortalama:.1f}")
    if ortalama >= 50:
    print("Geçtin!")
    else:
    print("Kaldın.")

    Örnek çalışma:

    Kaç not gireceksin? 3
    1. not: 70
    2. not: 85
    3. not: 90
    Ortalaman: 81.7
    Geçtin!

    Üç not da girsen otuz not da girsen kod aynı. 4. dersin input‘u, 5. dersin if‘i ve bu dersin döngüsü artık birlikte çalışıyor. Değişkene not_ dedik, çünkü not Python’da özel bir kelime (5. derste gördüğümüz not), değişken adı olarak kullanılamıyor.

    Sık karşılaşılan hatalar

    Bitmeyen döngü. while içindeki koşulu değiştirmeyi unutursan döngü sonsuza kadar döner. Colab’da hücrenin solundaki dönen simge durmaz; durdurmak için o simgeye tekrar tıkla ya da üst menüden Çalışma zamanı > Yürütmeyi durdur‘u seç.

    range’in son sayıyı dahil etmediğini unutmak. 1’den 10’a kadar saymak için range(1, 10) yazarsan 10 gelmez. Doğrusu range(1, 11).

    Kumbarayı döngünün içinde açmak. toplam = 0 satırını döngünün içine koyarsan her turda sıfırlanır ve sonunda sadece son değeri görürsün. Biriktirme değişkeni her zaman döngüden önce tanımlanır.

    Bu derste öğrendiklerin

    • for bir listeyi, metni ya da range‘in ürettiği sayıları tek tek gezer.
    • range(baş, son) başı dahil eder, sonu dahil etmez.
    • Biriktirme: döngüden önce toplam = 0, içinde toplam += değer.
    • while koşul doğru olduğu sürece döner; koşulu bir gün yanlış yapacak satırı unutma.
    • break döngüyü bitirir, continue o turu atlar.

    Alıştırmalar

    1. 1’den 100’e kadar olan sayıların toplamını döngüyle hesapla.
    2. Kullanıcıdan bir sayı al ve o sayının çarpım tablosunu (1’den 10’a kadar) yazdır.
    3. 1’den 20’ye kadar olan sayılardan sadece çift olanları yazdır. İki farklı yolla dene: continue ile ve range‘in adım değeriyle.
    4. Sayı tahmin oyunu: program 7 sayısını tutsun. Kullanıcı bilene kadar tahmin istesin, her yanlış tahminde “Daha büyük” ya da “Daha küçük” desin. Bilince kaç denemede bildiğini yazsın. İpucu: while True: ve break.

    Cevaplar

    1. toplam = 0, for i in range(1, 101): toplam += i, print(toplam) sonucu 5050.
    2. sayi = int(input("Bir sayı: ")), sonra for i in range(1, 11): print(f"{sayi} x {i} = {sayi * i}").
    3. for i in range(1, 21): içinde if i % 2 != 0: continue ve print(i). Ya da tek satırla for i in range(2, 21, 2): print(i).
    4. gizli = 7, deneme = 0, sonra while True: içinde tahmin = int(input("Tahminin: ")), deneme += 1; if tahmin == gizli: ise print(f"Bildin! {deneme} denemede.") ve break; elif tahmin < gizli: ise “Daha büyük”, else: ise “Daha küçük”. while True kendi kendine hiç bitmez; döngüden çıkmanın tek yolu break.

    Sıradaki ders

    Bu derste listeleri “birden fazla değeri tutan kutu” diye geçtik. Bir sonraki derste listeleri ayrıntılı öğreneceğiz: eleman eklemek, silmek, sıralamak ve listenin belirli bir parçasını almak.

  • Değişim Günlüğü, 1. Gün: Bugün başlıyorum


    Dün akşam Instagram’da amaçsızca gezinirken Beyza Casim’in yeni başladığı bir seriye denk geldim: “Transurfing ile değişim”. Bu kelimeyi ilk kez duyuyordum. Son zamanlarda nöroplastisite üzerine okuyup duruyordum, o yüzden yeni bir kavram görünce merakım hemen kabardı ve araştırmaya başladım.

    Kısaca anlatayım. Transurfing, tam adıyla Reality Transurfing, Rus yazar Vadim Zeland’ın geliştirdiği bir kişisel gelişim öğretisi. Zeland kendini fizikçi olarak tanıtıyor. Öğretinin temel fikri şu: Dış dünyayı zorla değiştirmeye uğraşmak yerine, odağını ve seçimlerini değiştirerek istediğin “yaşam çizgisine” geçebilirsin. Okurken aklıma hemen Rezonans kitabı geldi. Orada da benzer bir temadan bahsediliyordu. Ama dürüst olayım, o kitabı okurken bir türlü kafama oturmayan bir nokta vardı. Fikir güzeldi ama “nasıl” sorusunun cevabı havada kalıyordu.

    İşte tam burada nöroplastisite devreye giriyor. Nöroplastisite, yani beynin esnekliği, beynin hayat boyu yeni deneyimlere, öğrenmeye, çevre koşullarına, hatta hasarlara uyum sağlayarak kendini yeniden düzenleyebilmesi ve yeni sinir bağlantıları kurabilmesi demek. Bu kavramı ilk kez bir olimpiyat sporcusunun anlattıklarından duymuştum, o günden beri aklımda. Bana sorarsan, “istediğin hayata geçmek” fikrini bu bilimsel zeminle düşünmek çok daha mantıklı. Her gün tekrarladığın düşünce ve davranış beyninde iz bırakıyor, iz derinleştikçe yol kolaylaşıyor. Yani mesele sihirli bir hat değiştirme değil. Mesele her gün aynı yöne küçük bir adım atabilmek.

    Beyza’nın 38 günlük değişim yolculuğunda beni asıl çeken şey, kendi inancıma ve doğrularıma da uymasıydı. Kimse bana yabancı olduğum bir şeyi yapmamı söylemiyor. Zaten içimde olan şeyleri düzenli hâle getirmemi istiyor. Onlar 38 günü neredeyse bitirmek üzere, ben ise bugün başlamaya karar verdim. Geç kalmış sayılmam, değil mi? Herkesin başlangıç günü kendine.

    Kurallar basit: üç temel görev ve her gün bir yeni görev.

    Temel görevler:

    1. Şükür defteri: Her gün şükredecek üç şey bulup yazmak.
    2. Bin kere estağfurullah çekmek.
    3. Sabah uyanınca “Bana hayatın daha kolay olabileceğine dair bir kanıt göster” demek ve gün içinde o kanıtı aramak, bulunca fark etmek.

    Bir de somut bir hedef koymak gerekiyor: kilo vermek, bir dilde belirli bir seviyeye gelmek gibi ölçülebilir bir şey. Benim hedefim: Kilo Vermek (60 kg olmak)

    Üçüncü görev en çok hoşuma gideni. Çünkü aslında beyne “bunu ara” komutu vermek gibi. Kırmızı bir araba almaya karar verince sokakta her yerde kırmızı araba görmeye başlarsın ya, onun gibi. Dikkat neye yönelirse onu buluyor. Belki de nöroplastisiteyle Transurfing’in buluştuğu nokta tam burası.

    İlk günün görevi: 70 gün sonraki kendimden bugünkü bana bir mektup yazmak.

    Yani 70 gün sonra olmak istediğim kişinin gözünden, şu an burada oturan bana seslenmek. İtiraf edeyim, kâğıdı önüme koyunca bir süre ne yazacağımı bilemedim. Kendine yazmak kolay sanılıyor ama değil. İnsan kendine karşı ya fazla sert ya fazla yumuşak oluyor. Ama yazdım.

    Bundan sonra burada ne olacak?

    Bu değişimi gün gün buraya yazmak istiyorum. Sadece güzel giden günleri değil, zorlandığım, bıraktığım, tekrar başladığım günleri de. Öğrendiğim her yeni bilgiyi, kafama takılan her soruyu, beni zorlayan her şeyi paylaşacağım. Belki biri okur, “ben de başlayayım” der. Belki de sadece ben okurum, o da yeter.

    Bu arada şu sıralar Saadet Şen’in Kaybolduysan Doğru Yerdesin kitabını okuyorum ve çok güzel ilerliyor. Bir sonraki yazım onun üzerine olacak.

    Yarın görüşmek üzere. 1. gün tamam. 🌱

  • İyi Prompt Nasıl Yazılır? Örneklerle Anlatım

    İyi Prompt Nasıl Yazılır? Örneklerle Anlatım

    Aynı yapay zekâ aracına iki kişi aynı konuyu soruyor; biri işine yarayan bir cevap alıyor, diğeri genel geçer birkaç paragraf. Farkı çoğu zaman araç değil, soru yaratıyor. Yapay zekâya yazdığın bu mesaja prompt deniyor. Bu yazıda iyi bir promptın parçalarını örneklerle anlatıyorum. ChatGPT, Gemini ya da Claude fark etmez; ilkeler hepsinde aynı.

    Önce bir karşılaştırma

    Zayıf prompt:

    Bana CV yaz.

    Araç bu mesajdan senin kim olduğunu, hangi işe başvurduğunu ya da ne kadar deneyimin olduğunu bilemez. Sonuç, şablon bir CV olur.

    Güçlü prompt:

    İşletme bölümünden yeni mezun oldum ve pazarlama asistanı pozisyonlarına başvurmak istiyorum. Aşağıdaki bilgileri kullanarak tek sayfalık bir CV taslağı hazırla. Bölümler: özet (en fazla 3 cümle), beceriler, projeler, eğitim. Projeleri “ne yaptım, hangi araçla, sonuç ne oldu” yapısında yaz. Abartılı sıfatlar kullanma. Bilgiler: [buraya kendi bilgilerin]

    Farkı görüyorsun: ikinci prompt kim olduğunu, ne istediğini, çıktının neye benzemesi gerektiğini ve neyden kaçınması gerektiğini söylüyor.

    İyi bir promptın altı parçası

    Her promptın bunların hepsine ihtiyacı yok. Ama cevap beğenmediğin bir şey olduğunda, eksik olan genellikle bunlardan biri.

    1. Bağlam: kimsin, durum ne?

    Yapay zekâ seni tanımıyor. Seviyeni, amacını ve durumunu bir iki cümleyle anlat.

    Python’a yeni başladım, şu ana kadar sadece değişkenleri ve if-else’i öğrendim.

    Bu tek cümle, cevabın seviyesini tamamen değiştirir.

    2. Görev: tam olarak ne istiyorsun?

    “Bana yardım et” yerine net bir fiil kullan: özetle, karşılaştır, açıkla, düzelt, listele, yeniden yaz.

    Bu kodun neden hata verdiğini açıkla ve düzeltilmiş hâlini yaz.

    3. Format: çıktı neye benzemeli?

    Uzunluk, yapı, dil. “Madde madde”, “tablo hâlinde”, “en fazla 100 kelime”, “önce kısa cevap, sonra açıklama” gibi.

    Cevabı üç sütunlu bir tablo olarak ver: kavram, kısa tanım, günlük hayattan örnek.

    4. Örnek: göster, anlatma

    Ne istediğini tarif etmek zor olabilir; bir örnek vermek çoğu zaman daha hızlıdır.

    Şu tarzda 5 Instagram açıklaması yaz: “Python neden 80 değil de 80.0 yazıyor? İlk dersten beri bekleyen o sorunun cevabı bu derste.”

    5. Kısıtlar: neyi istemiyorsun?

    Ne istemediğini söylemek de en az ne istediğini söylemek kadar önemli.

    Teknik terim kullanma; kullandığın her terimi parantez içinde açıkla. Uydurma istatistik verme.

    6. Adım adım düşünmesini iste

    Hesap, mantık ya da plan gerektiren işlerde modelden sonucu hemen vermesi yerine adımları göstermesini istemek, hataları görmeni kolaylaştırır.

    Adım adım hesapla ve her adımı göster.

    Kopyalayıp kullanabileceğin bir şablon

    Bağlam: [Kimsin, seviyen, durumun]
    Görev: [Ne yapmasını istiyorsun, net bir fiille]
    Format: [Uzunluk, yapı, dil]
    Örnek: [Varsa, beğendiğin bir örnek]
    Kısıtlar: [Neyi istemiyorsun]

    Her seferinde bu kadar resmi olman gerekmiyor; ama ilk denemede beğenmediğin bir cevap aldığında bu listeye bakıp neyin eksik olduğunu bulabilirsin.

    Sık yapılan hatalar

    Tek seferde mükemmel cevap beklemek. Prompt yazmak bir konuşma. İlk cevabı aldıktan sonra “daha kısa yap”, “ikinci maddeyi aç”, “daha samimi bir dil kullan” diyerek düzeltebilirsin.

    Bir prompt’a her şeyi sıkıştırmak. CV, ön yazı ve mülakat hazırlığını tek mesajda istemek yerine her birini ayrı iste. Daha odaklı cevaplar alırsın.

    Cevabı kontrol etmemek. Yapay zekâ kendinden emin bir dille yanlış bilgi verebilir. Özellikle sayı, tarih, kaynak ve kodda cevabı doğrula. Bunun neden olduğunu LLM Nedir? yazısında anlattım.

    Kişisel ya da gizli bilgi paylaşmak. İş yerine ait belgeler, şifreler, başkalarının kişisel bilgileri prompt’a girmez. Örnek vermen gerekiyorsa gerçek veriyi uydurma bir örnekle değiştir.

    Bir cümlede

    İyi bir prompt, yapay zekâya kim olduğunu, ne istediğini ve sonucun neye benzemesi gerektiğini söyleyen bir prompt’tur; gerisi konuşarak düzelir.

  • Kod Kartı: enumerate: Sayaç Tutmayı Bırak

    Kod Kartı: enumerate: Sayaç Tutmayı Bırak

    Bir listeyi döngüyle gezerken elemanların sıra numarasına da ihtiyaç duyuyorsan, ayrı bir sayaç değişkeni tutmana gerek yok. enumerate her elemanı numarasıyla birlikte verir.

    Kod

    urunler = ["Kalem", "Defter", "Silgi"]
    for sira, urun in enumerate(urunler, start=1):
    print(f"{sira}. {urun}")
    # 1. Kalem
    # 2. Defter
    # 3. Silgi

    Bu satır nasıl çalışıyor?

    enumerate(urunler) listedeki her elemanı bir sıra numarasıyla eşleştirir: (0, "Kalem"), (1, "Defter"), (2, "Silgi"). for sira, urun in ... yazınca bu çiftler, takas kod kartında gördüğümüz paket açma mantığıyla iki değişkene dağıtılır.

    Python saymaya 0’dan başlar. start=1 yazarak numaraların 1’den başlamasını sağladık; ekrana yazdırılacak listeler için genelde bunu istersin.

    enumerate olmadan aynı iş şöyle yapılır:

    sira = 0
    for urun in urunler:
    sira += 1
    print(f"{sira}. {urun}")

    Çalışır, ama sayacı artırmayı unutmak ya da yanlış yerde artırmak çok kolay. enumerate bu sorumluluğu senden alıyor.

    Bir örnek daha: hangi sıradaki eleman?

    Numara, bir elemanın listede nerede olduğunu söylemek istediğinde de işe yarar:

    notlar = [70, 85, 40, 90]
    for sira, puan in enumerate(notlar, start=1):
    if puan < 50:
    print(f"{sira}. öğrenci kaldı ({puan})")
    # 3. öğrenci kaldı (40)

    Buradaki if‘i Python Dersi 5’te gördük; for döngüsünü ise Python Dersi 6’da ayrıntılı işleyeceğiz.

    Dikkat

    for satırında iki değişken yazmayı unutursan hata almazsın ama çıktı beklemediğin gibi olur:

    for eleman in enumerate(urunler):
    print(eleman)
    # (0, 'Kalem')
    # (1, 'Defter')
    # (2, 'Silgi')

    eleman her seferinde numara ve değerden oluşan bir demet (tuple). Numarayı ve değeri ayrı ayrı kullanmak istiyorsan for sira, urun in ... şeklinde iki isim ver.

  • Büyük Dil Modeli (LLM) Nedir?

    Büyük Dil Modeli (LLM) Nedir?

    ChatGPT, Gemini ya da Claude ile konuştuğunda aslında bir büyük dil modeli ile konuşuyorsun. İngilizcesi large language model, kısaca LLM. Bu yazıda LLM’in ne olduğunu, nasıl çalıştığını ve neden bazen kendinden emin bir şekilde yanlış söylediğini sade bir dille anlatıyorum.

    Kısa tanım

    Bir büyük dil modeli, çok büyük miktarda metin üzerinde eğitilmiş ve bir metnin devamında hangi kelimenin geleceğini tahmin etmeyi öğrenmiş bir yapay zekâ modelidir. Ne kadar akıllı görünürse görünsün, temelde yaptığı şey bu: “Buraya kadar yazılana göre sıradaki kelime ne olmalı?”

    Telefonundaki klavyeyi düşün

    Telefonda mesaj yazarken klavyenin üstünde üç kelime önerisi çıkar. “Günaydın” yazınca “nasılsın” önerir, çünkü daha önce yazdıklarından bu ikisinin sık sık peş peşe geldiğini öğrenmiştir. Bir LLM bu fikrin çok, çok daha büyük bir versiyonu.

    Bu fikri birkaç satır Python ile deneyebiliriz. Aşağıdaki minik “dil modeli” beş cümle okuyor ve her kelimeden sonra hangi kelimenin kaç kez geldiğini sayıyor:

    from collections import Counter, defaultdict
    metin = """bugün hava çok güzel
    bugün hava biraz soğuk
    bugün okula gittim
    yarın hava çok sıcak olacak
    hava çok güzel olunca parka gideriz"""
    # Her kelimeden sonra hangi kelimenin kaç kez geldiğini say
    sonraki = defaultdict(Counter)
    for satir in metin.splitlines():
    kelimeler = satir.split()
    for once, sonra in zip(kelimeler, kelimeler[1:]):
    sonraki[once][sonra] += 1
    def tahmin_et(kelime):
    toplam = sum(sonraki[kelime].values())
    return {k: f"%{100 * s / toplam:.0f}" for k, s in sonraki[kelime].most_common()}
    print("bugün →", tahmin_et("bugün")) # {'hava': '%67', 'okula': '%33'}
    print("hava →", tahmin_et("hava")) # {'çok': '%75', 'biraz': '%25'}

    Modelimiz “bugün” kelimesinden sonra %67 ihtimalle “hava” geleceğini öğrendi. Her seferinde en olası kelimeyi seçersek sıfırdan bir cümle bile üretebiliyor: bugün hava çok güzel.

    Bu modeli gerçek bir LLM’den ayıran iki şey var:

    1. Sadece bir önceki kelimeye bakıyor. Gerçek bir LLM, yazılan metnin tamamına bakıyor ve hangi kelimenin hangisiyle ilgili olduğunu tartıyor. Bunu sağlayan “dikkat” mekanizmasını, Attention Is All You Need yazısında anlattım.
    2. Beş cümle okudu. Gerçek bir LLM kitaplar, makaleler ve web sayfalarından oluşan devasa bir metin yığını okuyor.

    “Büyük” ne demek?

    Bir modelin büyüklüğü genellikle parametre sayısıyla ölçülür. Parametreleri, modelin eğitim sırasında ayarladığı milyonlarca düğme gibi düşünebilirsin; bizim minik modelimizde bunların karşılığı “hangi kelimeden sonra ne geliyor” sayacıydı. Örneğin 2020’de tanıtılan GPT-3’ün 175 milyar parametresi vardı. Bugünün modelleri daha da büyük, ama şirketler sayıları artık her zaman açıklamıyor.

    Nasıl eğitiliyor?

    Kabaca iki aşamada:

    1. Ön eğitim (pre-training): Model devasa bir metin yığını üzerinde, cümlelerin devamını tahmin ederek eğitilir. Tahmin yanlışsa düğmeler biraz düzeltilir. Bu, milyarlarca kez tekrarlanır. GPT’deki “P” harfi buradan geliyor: pre-trained.
    2. İnce ayar (fine-tuning): Sadece metnin devamını tahmin eden bir model sohbet etmeyi bilmez. Bu aşamada model, insanların yazdığı örnek soru-cevaplarla ve insanların hangi cevabı daha iyi bulduğuna dair geri bildirimlerle eğitilir. Bu yöntemlerden birinin adı RLHF, yani insan geri bildirimiyle pekiştirmeli öğrenme.

    LLM’ler neden bazen uyduruyor?

    Model “doğru olanı” değil, “en olası görüneni” üretmek üzere eğitildi. Bir soruya cevap verirken, gerçekten var olmayan bir kitap adı ya da tarih, dil açısından çok “olası” görünebilir. Buna halüsinasyon deniyor ve ayrı bir yazının konusu. Şimdilik akılda tutman gereken: bir LLM’in verdiği bilgiyi, özellikle sayı, tarih ve kaynaklarda, mutlaka kontrol et.

    Bilinen örnekler

    • ChatGPT (OpenAI): GPT serisi modelleri kullanıyor.
    • Gemini (Google)
    • Claude (Anthropic)
    • Llama (Meta): Açık ağırlıklı modeller; kendi bilgisayarında ya da sunucunda çalıştırabiliyorsun.

    Bir cümlede

    Bir büyük dil modeli, devasa miktarda metinden “bir metnin devamında ne gelir?” sorusunu cevaplamayı öğrenmiş ve bu basit yeteneği sohbet, özetleme, çeviri ve kod yazmaya kadar genişletmiş bir modeldir.

  • Koşullar: if, elif, else (Python Dersi 5)

    Koşullar: if, elif, else (Python Dersi 5)

    Geçen derste adını ve notlarını sorup ortalamasını hesaplayan bir program yazdık. Ama program sadece sayıyı söylüyordu; “geçtin” ya da “kaldın” diyemiyordu. Bu derste programımıza karar vermeyi öğretiyoruz. Bunu her gün kendin de yapıyorsun: “yağmur yağıyorsa şemsiye al, yağmıyorsa alma”. Python’da bu cümlenin karşılığı if ve else.

    Bu dersin kodları ve alıştırmaları hazır bir not defterinde: Colab’da Aç.

    Karşılaştırma: doğru mu, yanlış mı?

    Karar verebilmek için önce bir soru sormak gerekiyor: “ortalama 50’den büyük mü?” Python’da bu soruları karşılaştırma işaretleriyle soruyoruz. Cevap her zaman 3. derste gördüğümüz bool tipinde: True (doğru) ya da False (yanlış).

    İşaretAnlamıÖrnekSonuç
    ==eşit mi?5 == 3False
    !=eşit değil mi?10 != 7True
    >büyük mü?5 > 3True
    <küçük mü?5 < 3False
    >=büyük ya da eşit mi?7 >= 7True
    <=küçük ya da eşit mi?7 <= 6False

    Dikkat: eşit mi diye sormak için iki eşittir kullanılır. Tek eşittir (=) 3. derste gördüğümüz gibi bir değişkene değer atamak demek. Metinleri de karşılaştırabilirsin: "elma" == "elma" sonucu True.

    if: bir koşul doğruysa

    ortalama = 81.7
    if ortalama >= 50:
    print("Geçtin!")

    Bunu Python’a çevirirsek: “Eğer ortalama 50’ye eşit ya da büyükse, Geçtin yaz.” İki şeye dikkat:

    • Koşulun sonunda iki nokta (:) var. Python’a “şimdi bu koşul doğruysa yapılacakları sıralayacağım” der.
    • print satırı içeriden başlıyor. Buna girinti denir ve Python’da süs değil, kuralın kendisi. Koşula ait satırları girintiden anlıyor. Colab iki noktadan sonra Enter’a basınca girintiyi kendisi ekler; genellikle 4 boşluk.

    Koşul yanlışsa girintili satırlar hiç çalışmaz ve program bir alttaki girintisiz satırdan devam eder.

    else: değilse

    ortalama = 42
    if ortalama >= 50:
    print("Geçtin!")
    else:
    print("Kaldın.")

    else “yukarıdaki koşul doğru değilse” demek. Kendi koşulu yoktur, sadece iki nokta alır. if ile else aynı hizada durmalı.

    elif: birden fazla seçenek

    Hayat her zaman iki seçenekli değil. Ortalamayı harf notuna çevirmek istediğini düşün:

    ortalama = 81.7
    if ortalama >= 85:
    harf = "A"
    elif ortalama >= 70:
    harf = "B"
    elif ortalama >= 50:
    harf = "C"
    else:
    harf = "F"
    print(f"Harf notun: {harf}") # Harf notun: B

    elif “else if” kısaltması: “önceki koşul yanlışsa, şuna bak”. Python koşulları yukarıdan aşağı tek tek kontrol eder ve ilk doğru olanı çalıştırıp durur. 81,7 için ilk koşul (85 ve üzeri) yanlış, ikincisi (70 ve üzeri) doğru; Python “B” der ve gerisine hiç bakmaz.

    Bu yüzden sıra önemli. Koşulları ters sıraya koyarsan ne olur?

    ortalama = 92
    if ortalama >= 50: # 92 ≥ 50 doğru, burada durur
    harf = "C"
    elif ortalama >= 70:
    harf = "B"
    elif ortalama >= 85:
    harf = "A"
    print(harf) # C ← 92 alan öğrenci C aldı!

    Program hata vermiyor ama yanlış sonuç üretiyor. Aralık kontrol ederken en dar koşuldan (en yüksek not) başla.

    and, or, not: koşulları birleştirmek

    Bazen bir karar için birden fazla şeye bakarsın. “Hava sıcaksa ve yağmur yağmıyorsa pikniğe gideriz.”

    sicaklik = 28
    yagmur = False
    if sicaklik > 25 and not yagmur:
    print("Piknik zamanı!")
    • and (ve): iki koşul da doğruysa doğru.
    • or (veya): koşullardan en az biri doğruysa doğru.
    • not (değil): doğruyu yanlış, yanlışı doğru yapar. not yagmur, “yağmur yok” demek.

    Mini program: not değerlendirici

    Geçen dersin ortalama hesaplayıcısına karar verme yeteneği ekleyelim:

    isim = input("Adın: ")
    not1 = float(input("1. sınav: "))
    not2 = float(input("2. sınav: "))
    not3 = float(input("3. sınav: "))
    ortalama = (not1 + not2 + not3) / 3
    if ortalama >= 85:
    harf = "A"
    elif ortalama >= 70:
    harf = "B"
    elif ortalama >= 50:
    harf = "C"
    else:
    harf = "F"
    print(f"{isim}, ortalaman {ortalama:.1f}, harf notun {harf}.")
    if harf == "F":
    print("Bu dönem olmadı, bütünlemede görüşürüz.")
    else:
    print("Tebrikler, dersi geçtin!")

    Sık karşılaşılan hatalar

    Tek eşittir kullanmak. if ortalama = 50: yazarsan Python çok yardımsever bir mesaj verir:

    SyntaxError: invalid syntax. Maybe you meant '==' or ':=' instead of '='?

    “Yoksa == mi demek istedin?” diye soruyor. Evet, onu demek istedin.

    İki noktayı unutmak. if ortalama >= 50 yazıp Enter’a basarsan:

    SyntaxError: expected ':'

    Girintiyi unutmak. Koşuldan sonraki satırı içeriden başlatmazsan:

    IndentationError: expected an indented block after 'if' statement on line 1

    Hata mesajı, koşulun hangi satırda olduğunu da söylüyor. Bu üç hatayı ilk haftalarda çok göreceksin; mesajı okumaya alışırsan çözümü genelde mesajın kendisinde bulursun.

    Bu derste öğrendiklerin

    • Karşılaştırmalar (==, !=, >, <, >=, <=) True ya da False verir.
    • if koşul doğruysa girintili satırları çalıştırır; else değilse ne yapılacağını söyler.
    • elif ile birden fazla seçenek sıralanır; ilk doğru olan çalışır, o yüzden sıra önemli.
    • and, or ve not ile koşulları birleştirirsin.
    • Python’da girinti kuralın kendisi; koşula ait satırları girintiden anlar.

    Alıştırmalar

    1. Kullanıcıdan bir sayı al. Sayı çiftse “Çift”, tekse “Tek” yazdır. İpucu: 3. derste gördüğümüz % (kalan) işlemini kullan.
    2. Kullanıcıdan bir sayı al; pozitif, negatif ya da sıfır olduğunu yazdır.
    3. Bir yılın artık yıl olup olmadığını bul. Kural: 4’e bölünüyorsa artık yıldır; ama 100’e bölünüyorsa değildir; ama 400’e de bölünüyorsa yine artık yıldır. 2024, 2026, 1900 ve 2000 ile dene.
    4. Aşağıdaki kodda 92 alan öğrenci neden “C” alıyor? Düzelt.
    ortalama = 92
    if ortalama >= 50:
    harf = "C"
    elif ortalama >= 70:
    harf = "B"
    else:
    harf = "A"
    print(harf)

    Cevaplar

    1. sayi = int(input("Bir sayı: ")), sonra if sayi % 2 == 0: ise “Çift”, else: ise “Tek”. 2’ye bölümünden kalan 0 olan sayılar çifttir.
    2. if sayi > 0: “pozitif”, elif sayi < 0: “negatif”, else: “sıfır”.
    3. if (yil % 4 == 0 and yil % 100 != 0) or yil % 400 == 0: ise artık yıl. Sonuçlar: 2024 evet, 2026 hayır, 1900 hayır, 2000 evet.
    4. Koşullar yanlış sırada: 92 ≥ 50 ilk koşulda doğru olduğu için Python “C” deyip duruyor. En yüksekten başla: if ortalama >= 85: "A", elif ortalama >= 70: "B", elif ortalama >= 50: "C", else: "F".

    Sıradaki ders

    Bir sonraki derste döngüleri öğreneceğiz: for ve while ile bir işi defalarca tekrarlamak. Böylece üç not için üç ayrı input satırı yazmak yerine “10 not al” diyebileceğiz.