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
4 Girdi ve İlk Etkileşim
input() + Calculator + Mad Libs — LLM prompt template’in atası
- Mosh’un videosu: Chapters 8-10 (Input → Calculator → Mad Libs) (≈15 dk)
- Bölüm aralığı: 48:31 — 1:03:18
- Kaynaklar: Python docs — input() · PEP 498 — f-strings
- Okuma süresi: ≈30 dk
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ı.
Dersin üç parçası (Mosh’un üç chapter’ı):
input()fonksiyonu — klavyeden veri çekme.- Hesap makinesi (proje 1). — Kritik bug avı:
input()her zaman string döner. - Mad Libs oyunu (proje 2). — String birleştirmenin uygulamalı hâli.
input()= ML data ingestion’ın ilkel hali. PyTorch’tadataloader = 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ınlearning_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."LangChainPromptTemplate, OpenAI/Anthropic API’larınmessages— 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ış:
- Program
input(...)satırına gelince durur. - Ekrana prompt’u (parantezdeki string) basar.
- Kullanıcı yazıp Enter’a basar.
- Yazılanlar string olarak değişkene atanır.
- 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:
input() 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)
# 13int(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.8float() 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
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
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.
4.5 Bu Dersin Özeti
input(prompt)— klavyeden bir satır oku, string döndür.input()her zaman string döner — kullanıcı35yazsa bile"35"saklı.- Tip dönüşümü zorunlu:
int(input(...))veyafloat(input(...)). intkatı,floatesnek:int("4.3")ValueError,float("4.3")çalışır.- Calculator pattern’ı: iki sayı al → işlem → sonuç. ML scaler bug’ın ata-formu.
- Mad Libs pattern’ı: çoklu input + string template. LLM prompt template’inin atası.
- f-string >
+— modern Python, modern ML kodu.
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.”
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.