4  Girdi ve İlk Etkileşim

input() + Calculator + Mad Libs — LLM prompt template’in atası

NotBölüm bilgisi

4.1 Bu Derste Ne Var?

Ders 1’de ekrana basmayı, Ders 2’de veri saklamayı öğrendik. Bu derste üçüncü temel etkileşim türü geliyor: kullanıcıdan veri alma. input() fonksiyonu Python’ın klavyeden okuma şekli; basit ama güçlü — tüm interaktif programların başlangıç noktası.

flowchart LR
    A["🎤 input()"] --> B["⚠️ Her zaman string döner"]
    B --> C["int() / float() ile dönüştür"]
    C --> D["Calculator projesi"]
    A --> E["Çoklu input"]
    E --> F["Mad Libs projesi"]
    F --> G["💎 Prompt Template'in atası<br/>(LangChain, OpenAI, Anthropic)"]

    style A fill:#e3f2fd,stroke:#3776ab,stroke-width:2px
    style B fill:#fff3e0,stroke:#f57c00,stroke-width:2px
    style G fill:#fce4ec,stroke:#c2185b,stroke-width:3px
Şekil 4.1: Ders 3’ün akış haritası — input’tan Mad Libs’e

Dersin üç parçası (Mosh’un üç chapter’ı):

  1. input() fonksiyonu — klavyeden veri çekme.
  2. Hesap makinesi (proje 1).Kritik bug avı: input() her zaman string döner.
  3. Mad Libs oyunu (proje 2). — String birleştirmenin uygulamalı hâli.
İpucuBuilder Notu — Bu Dersin ML Köprüleri
  • input() = ML data ingestion’ın ilkel hali. PyTorch’ta dataloader = DataLoader(dataset, batch_size=64) yaparak da veri “alıyorsun” — sadece klavye yerine dosyadan/veritabanından/network’ten. Mantik ayni: bir kaynaktan veri çek, değişkende sakla, kodda kullan.
  • String-by-default = veri parse zorunluluğu. input() her şeyi string döner; CSV de öyle, JSON de bazen öyle. ML pipeline’ında parsing (str → int/float/datetime) çıkış noktası.
  • Calculator bug = ML scaler bug analojisi. "5" + "8" = "58" bug’ı, ML’de yaygın learning_rate = "0.001" (JSON’dan string okundu) → optimizer.step() kırılır tipi bug’la birebir eşlenir.
  • Mad Libs = prompt template! Kullanıcıdan kelime al → şablon string’e yerleştir. Bu LLM çağının prompt template’i: "Sen bir {role} olarak {task} yap." LangChain PromptTemplate, OpenAI/Anthropic API’ların messages — hepsi Mosh’un mad libs’inin sofistike halleri.
  • Çoklu input = batch processing’in atası. Mosh üç ayrı input() çağırısı yapıyor; ML’de bir DataLoader bir epoch’ta yüzlerce batch verisi çeker.
  • F-string’in gücü burada çıkar. Mosh + ile birleştirme gösteriyor; modern Python — ve tüm ML logları — f-string kullanır: print(f"Epoch {epoch}, loss={loss:.4f}").

4.2 input() Fonksiyonu

“kullanıcıdan giriş. bu yüzden temel olarak bir kullanıcının izin vermesine izin veriyoruz programimiza bilgi girişi yapın.” — Mosh (Türkçe dublaj), 48:31

4.2.1 Sentaks

name = input("Adin: ")
print("Merhaba " + name + "!")

Konsolda:

Adin: Deniz
Merhaba Deniz!

Akış:

  1. Program input(...) satırına gelince durur.
  2. Ekrana prompt’u (parantezdeki string) basar.
  3. Kullanıcı yazıp Enter’a basar.
  4. Yazılanlar string olarak değişkene atanır.
  5. Program devam eder.

4.2.2 Çoklu Girdi

name = input("Adin: ")
age = input("Yasin: ")
print("Merhaba " + name + "! Sen " + age + " yasindasin.")
Adin: Deniz
Yasin: 35
Merhaba Deniz! Sen 35 yasindasin.

4.2.3 ⚠️ Kritik Detay — Her Zaman String

Bu cümle, Ders 3’ün tek en önemli cümlesidir:

Önemliinput() dönüş tipi her zaman str’dir

Kullanıcı 35 yazsa bile age değişkeninde saklı olan "35" (string), 35 (int) değil. Sayı işlemi yapmadan önce int() veya float() ile dönüştürmek zorunlu.

4.3 Proje 1 — Basit Hesap Makinesi (Bug Avı)

4.3.1 İlk Deneme — BUG

num1 = input("Birinci sayi: ")
num2 = input("Ikinci sayi: ")
result = num1 + num2
print(result)

Çalıştır:

Birinci sayi: 5
Ikinci sayi: 8
58

5 + 8 = 58? Hayır — Python toplamayı yapmadı, stringleri birleştirdi. "5" + "8" = "58" (Ders 2 §3.4: + string’ler için concatenation).

“kullanicidan girdi aldigimizda varsayilan olarak. Python sadece donusturmek icin gidiyor bir dize icine” — Mosh (Türkçe dublaj), 54:49

4.3.2 Çözüm — int() veya float()

num1 = int(input("Birinci sayi: "))   # input() -> str, int(str) -> int
num2 = int(input("Ikinci sayi: "))
result = num1 + num2
print(result)
# 13

int(input(...)) Python’da bir kalıp — her interaktif sayı girdisinde göreceksin.

4.3.3 İkinci Bug — Ondalıklı Sayılar

Birinci sayi: 4.3
Ikinci sayi: 5.5
ValueError: invalid literal for int() with base 10: '4.3'

int("4.3") hata atar — int ondalık nokta kabul etmez.

“kullanabilecegimiz baska bir fonksiyon var yerine n samandira diyebiliriz” — Mosh (Türkçe dublaj), 57:08

(Dublajdaki “şamandıra” = float.)

num1 = float(input("Birinci sayi: "))
num2 = float(input("Ikinci sayi: "))
result = num1 + num2
print(result)
# 9.8

float() hem "5" (5.0) hem "4.3" (4.3) için çalışır. Pratik: bilmiyorsan float() kullan.

4.3.4 Tradeoff

Tip Davranış Ne zaman?
int(input(...)) Sadece tam sayı kabul; ondalık → ValueError Tekrar sayısı, indeks, label
float(input(...)) Hem tam hem ondalık; sonuç hep float Para, ölçü, ML loss değeri

4.3.5 Calculator Bug = ML Scaler Bug

UyarıBuilder Notu — JSON Config Tuzağı

Mosh’un "5" + "8" = "58" bug’ı ML kodunda çok yaygın hâle bürünür. Senaryo: bir JSON config dosyasından hyperparameter okuyorsun.

{
    "learning_rate": "0.001",    // tirnak icinde - STRING!
    "batch_size": "64",
    "epochs": "100"
}
import json
with open("config.json") as f:
    cfg = json.load(f)

print(type(cfg["learning_rate"]))   # <class 'str'>  ← BUG!

# Optimizer kuralsiz reddediyor:
optimizer = torch.optim.SGD(model.parameters(), lr=cfg["learning_rate"])
# TypeError: ... must be float, not str

Çözüm tipi aynı Mosh’unki:

cfg["learning_rate"] = float(cfg["learning_rate"])
cfg["batch_size"] = int(cfg["batch_size"])

Veya daha güvenli — JSON’da tipleri string olarak yazma, doğrudan sayı:

{
    "learning_rate": 0.001,
    "batch_size": 64
}

ML mühendisinin haftada en az bir kez düştüğü tuzak.

4.4 Proje 2 — Mad Libs Oyunu

“deli bir libs oyun temelde sadece rastgele sozlerin bir demet girebileceginiz bir oyundur Bilirsin fiil isimleri” — Mosh (Türkçe dublaj), 58:35

Klasik çocuk oyunu: hikaye şablonunda boşluklar var, oyuncu kelime önerir, hikaye ortaya çıkar.

4.4.1 Mosh’un Şiir Şablonu

Roses are red,
Violets are blue,
I love you.

Üç boşluk: rengi, çoğul ismi, ünlü ismi.

4.4.2 Kod

color = input("Bir renk soyle: ")
plural_noun = input("Bir cogul isim soyle: ")
celebrity = input("Bir unlu soyle: ")

print("Guller " + color + ",")
print(plural_noun + " mavi,")
print(celebrity + "'i seviyorum.")

Çalıştır:

Bir renk soyle: mor
Bir cogul isim soyle: mikrodalgalar
Bir unlu soyle: Tom Hanks
Guller mor,
mikrodalgalar mavi,
Tom Hanks'i seviyorum.

4.4.3 Modern — f-string ile

color = input("Bir renk soyle: ")
plural_noun = input("Bir cogul isim soyle: ")
celebrity = input("Bir unlu soyle: ")

print(f"Guller {color},")
print(f"{plural_noun} mavi,")
print(f"{celebrity}'i seviyorum.")

Aynı çıktı, çok daha temiz kod. f-string Python 3.6+ standardı.

4.4.4 Mad Libs = LLM Prompt Template

ÖnemliBuilder Notu — Mosh’un En Derin Habercisi

Mad Libs aslında modern LLM uygulamalarının temel mekanizmasının çocuk oyunu hâlidir: prompt template.

# Mad Libs (Mosh):
ad = input("Adin: ")
print(f"Merhaba {ad}!")

# LangChain (modern LLM):
from langchain.prompts import PromptTemplate

template = PromptTemplate(
    input_variables=["role", "task", "tone"],
    template="""
Sen bir {role} olarak yazıyorsun.
Görev: {task}
Üslup: {tone}
Yanıtın 200 kelimeyi geçmesin.
"""
)

prompt = template.format(
    role="ML mühendisi",
    task="self-attention mekanizmasını açıkla",
    tone="öğretici"
)

response = llm.invoke(prompt)

Mekanizma birebir aynı. OpenAI / Anthropic API:

messages = [{"role": "user", "content": f"{user_question}"}]

{user_question} f-string slot — Mad Libs’in {ad} slot’unun aynısı.

Mosh’un Mad Libs oyunu, LLM uygulamasının ata-formudur. Bunu içselleştirirsen, LangChain veya openai SDK öğrenirken “ben bunu daha önce gördüm” deyip hızla geçeceksin.

Şekil 4.2: Mad Libs ↔︎ Prompt Template paraleli — aynı mekanizma, farklı ölçek

4.5 Bu Dersin Özeti

  1. input(prompt) — klavyeden bir satır oku, string döndür.
  2. input() her zaman string döner — kullanıcı 35 yazsa bile "35" saklı.
  3. Tip dönüşümü zorunlu: int(input(...)) veya float(input(...)).
  4. int katı, float esnek: int("4.3") ValueError, float("4.3") çalışır.
  5. Calculator pattern’ı: iki sayı al → işlem → sonuç. ML scaler bug’ın ata-formu.
  6. Mad Libs pattern’ı: çoklu input + string template. LLM prompt template’inin atası.
  7. f-string > + — modern Python, modern ML kodu.
ÖnemliTek Bir Cümle

input() Python’ın klavyeden veri alma şeklidir ve her zaman string döner; sayı işlemi yapmadan önce int(...) veya float(...) ile dönüştürmek zorunludur — bu küçük dönüşüm, ML pipeline’larında her gün yaptığın preprocessing’in mikro hâlidir; Mad Libs ise basit string template’inin ardındaki mekanizmayla aslında LangChain / LLM prompt template’lerinin atasıdır.

4.6 Egzersizler

Egzersiz 1. Doğum yılını sor, 2026’da kaç yaşında olacağını söyle. f-string kullan.

Dogum yilin: 1990
2026'da 36 yasinda olacaksin.

Egzersiz 2. Calculator’u dört işleme genişlet (if/elif/else Ders 6’da; şimdilik kopyala):

num1 = float(input("Birinci sayi: "))
op = input("Islem (+, -, *, /): ")
num2 = float(input("Ikinci sayi: "))

if op == "+":
    print(num1 + num2)
elif op == "-":
    print(num1 - num2)
elif op == "*":
    print(num1 * num2)
elif op == "/":
    print(num1 / num2)

0 ile böl, ne olur? (ZeroDivisionError — Ders 10 habercisi.)

Egzersiz 3. Kendi Mad Libs’ini yarat — en az beş input, en az dört satırlık şablon. f-string kullan.

Egzersiz 4. Aşağıdaki kodun çıktısını önceden tahmin et (girdiler: Deniz, 35):

ad = input("Adin: ")
yas = input("Yasin: ")
print("Ad turu: " + str(type(ad)))
print("Yas turu: " + str(type(yas)))
print("Ad + Yas = " + ad + yas)
print("len(ad) = " + str(len(ad)))
print("ad[0] = " + ad[0])

print(ad + 5)    # HATA verecek - neden?

Son satırı düzelt.

Egzersiz 5. (Builder eksen) Mini LLM prompt builder — kullanıcıdan üç girdi al, prompt template’e yerleştir, ekrana bas:

role = input("Rol (ornegin: Python ogretmeni): ")
topic = input("Konu: ")
audience = input("Hedef kitle: ")

prompt = f"""Sen bir {role} olarak yaziyorsun.
Konu: {topic}
Hedef kitle: {audience}
Yanitin 200 kelimeyi gecmesin."""

print("--- GENERATED PROMPT ---")
print(prompt)

Bu egzersizin asıl noktası: Mad Libs’in kendisini bir LLM prompt’a dönüştürdün. Bu zihinsel sıçramayı yaşamak Ders 3’ün en derin kazancı.

4.7 Sonraki Ders İçin Hazırlık

Ders 4: Listeler ve Tuple’lar

Şimdiye kadar tek veri ile çalıştık. Ders 4’te bir grup veriyi tek bir yapıda saklamayı öğreneceğiz.

  • Mosh’un Ch 11-13’ünü izle (1:03:18 - 1:24:21, ~21 dk).
  • Şu cümleyi içselleştir: “Liste birden fazla değeri tek bir değişkende saklar — sıralı, indekslenebilir, değişebilir.”
İpucuBu dersten tek bir şey alıp gideceksen

input() Python’ın klavyeden veri alma şeklidir ve her zaman string döner — sayı işlemine girmeden önce int() veya float() ile dönüştürmek zorunlu; Mosh’un Calculator bug avı = ML’de her gün karşılaştığın “JSON’dan string okudum” bug’ın aynısı; Mad Libs’in masum hâli = modern LangChain PromptTemplate’in ata-formu.