flowchart LR
A["📦 Değişken"] --> B["3 Tip:<br/>str / int / float"]
B --> C["String araçları"]
B --> D["Sayı aritmetiği"]
C --> E["Tip dönüşümü"]
D --> E
E --> F["from math import *"]
F --> G["💡 İlk import"]
G --> H["➡️ ML kütüphane evreni"]
style A fill:#e3f2fd,stroke:#3776ab,stroke-width:2px
style G fill:#fff3e0,stroke:#f57c00,stroke-width:2px
style H fill:#fce4ec,stroke:#c2185b,stroke-width:3px
3 Değişkenler ve Veri Tipleri
str, int, float — Python’un ana sözlüğü
- Mosh’un videosu: Chapters 5-7 (Variables → Strings → Numbers) (≈33 dk)
- Bölüm aralığı: 15:14 — 48:31
- Kaynaklar: Python docs — strings · Python docs — math module
- Okuma süresi: ≈45 dk
3.1 Bu Derste Ne Var?
Ders 1’de print("Hello World") ile ekrana sabit metin bastık. Ama gerçek programlar sabitlerle değil, değişen verilerle çalışır — kullanıcının adı, bir dosyanın boyutu, bir modelin loss değeri. Bu dersin görevi: veriyi nasıl saklarız, etiketleriz, işleriz.
Dersin beş parçası:
- Neden değişken? — Mosh’un hikaye motivasyonu: bir karakterin adını elle 50 yerde değiştirme derdi.
- Atama syntax’ı. —
ad = "Deniz". Etiket-kutu zihinsel modeli. - String’lerle çalışma. — Escape (
\n,\"), birleştirme (+), methodlar (.upper,.lower,.replace,.index), indexing (s[0]),len(). - Sayılarla çalışma. — Integer, float, dört işlem, modulus (
%), parantezle sıra. - Tip dönüşümü +
mathmodülü. —str(),int(),float();from math import *. İlkimport!
- Değişken = etiketli kutu = tensor referansı.
x = torch.randn(10)yazarsanxbir 10-boyutlu rastgele tensor’a etiket asar. Mosh’uncharacter_name = "John"’ı zihinsel olarak aynı işlem. snake_case= Python standardı (PEP 8). PyTorch’talearning_rate,batch_size,hidden_dim— hepsi snake_case.CamelCasesadece sınıflar için (Ders 12).- Dynamic typing = Python tip’i runtime’da öğrenir. Esneklik avantaj; büyük ML kodlarında type hints (
x: torch.Tensor) ile dokümente edilir (PEP 484). - String indexing 0-based. Mosh
phrase[0]ilk karakter; numpy/PyTorch tensor indexing’iyle birebir aynı:x[0]. - String method’ları = pandas
Series.strailesi.phrase.upper()skalar;df["name"].str.upper()milyonlarca satırda. Aynı API, vektorlanmış. - Aritmetik = element-wise tensor op’ları.
3 + 4skalar;tensor([1,2]) + tensor([3,4]) = [4, 6]element-wise. Aynı sembol, broadcasting ile genişletilmiş. - Tip dönüşümü = ML preprocessing.
int("42")Mosh’un örneği; pandas’tadf["age"].astype(int)aynı işlem. from math import *= ilk kütüphane evreni. Mosh ilk kezimportgösteriyor. Bu satır → Ders 11’de göreceğipip install numpy→import numpy as np’ın ilkel hali.
3.2 Neden Değişken? — Mosh’un Hikaye Motivasyonu
Bu bölüm, Mosh’un en pedagojik anlatımlarından biri. Soyut bir tanımla başlamıyor; somut bir dert ile başlıyor: adı 50 yerde elle değiştirmek.
3.2.1 Hikaye Programı
Mosh dört satırlık bir program yazıyor:
print("Bir zamanlar george adinda bir adam vardi.")
print("O yetmis yasindaydi.")
print("George adini gercekten cok sevdi.")
print("Ama yetmis olmaktan hoslanmadi.")Problem: karakterin adını değiştirmek. Mesela George’u John’a çevirelim. ne yapacağız?
“buraya gitmiyorum ve söyleyeceğim tamam john bunu elle değiştirmek zorunda kalacağım” — Mosh (Türkçe dublaj), 16:59
Dublaj kırık ama anlam net: George’un geçtiği her satırı aç, elle değiştir. Dört satırda iki kez geçiyor — iki manuel düzeltme.
3.2.2 “Ya hikaye bin satır olsaydı?”
Mosh:
“bir değişken kullanabiliriz saklamak için karakterin adı ve karakterlerin yaşı. ve bu değişkeni kullandığımız zaman onu çok değiştirecek.” — Mosh (Türkçe dublaj), 18:18
Çözüm:
character_name = "George"
character_age = 70
print("Bir zamanlar " + character_name + " adinda bir adam vardi.")
print("O " + str(character_age) + " yasindaydi.")
print(character_name + " adini gercekten cok sevdi.")
print("Ama yetmis olmaktan hoslanmadi.")Karakter adı “John” yapılacaksa:
character_name = "John" # tek değiştirmeTüm program otomatik güncellenir.
Bu, tek-noktada-değişim (single source of truth) prensibinin ilk görünüşü. ML kodunda her gün karşılaşacaksın:
# Kötü:
model = nn.Linear(784, 128)
optimizer = torch.optim.SGD(model.parameters(), lr=0.001)
for epoch in range(100):
... # 0.001 dört yerde tekrar ediyor olsaydı...
# İyi:
LEARNING_RATE = 0.001
BATCH_SIZE = 64
HIDDEN_DIM = 128
model = nn.Linear(784, HIDDEN_DIM)
optimizer = torch.optim.SGD(model.parameters(), lr=LEARNING_RATE)LEARNING_RATE bir kez tanımlanır; 50 satırlık bir modelde beş-on yerde kullanılır. Değiştirmek istediğinde tek bir noktayı değiştirirsin — Mosh’un “karakter adı”yla aynı mantık.
3.3 Atama Syntax’ı
ad = "Deniz"Üç parça:
- Sol taraf (
ad) — değişkenin adı. =— atama operatörü. Matematik “eşittir” değil; “ata, sakla” anlamında.- Sağ taraf (
"Deniz") — değişkene konacak değer.
3.3.1 İsimlendirme — snake_case (PEP 8)
“farklı kelimeleri ayırmak istiyorsun bir alt çizgi ile” — Mosh (Türkçe dublaj), 19:14
Zorunlu (Python yorumlayıcısı reddeder):
- Harf veya
_ile başla; rakamla başlama (5x→ SyntaxError,x5→ OK). - Boşluk yok (
first name→ SyntaxError,first_name→ OK). - Anahtar kelime kullanma (
if,for,class,def,print,lambda→ reserved).
Sözleşme (PEP 8):
| Tür | Stil | Örnek |
|---|---|---|
| Değişken / Fonksiyon | snake_case |
character_name, learning_rate |
| Sabit | UPPER_SNAKE |
MAX_EPOCHS, PI |
| Sınıf (Ders 12) | PascalCase |
NeuralNetwork, BertModel |
| Tek harf | OK (sadece kısa scope) | i, n, x |
3.3.2 Üç Veri Tipi
ad = "Deniz" # string → tip(ad) → str
yas = 35 # integer → tip(yas) → int
boy = 1.78 # float → tip(boy) → floatPython’da tip beyan etmiyorsun — sadece atama yap, Python tipini otomatik çıkarır (dynamic typing).
- string (
str) — tırnak içinde metin. Karakterler dizisi. - integer (
int) — tam sayı. Python int sınırsız büyüyebilir. - float — ondalıklı sayı. IEEE 754 64-bit hassasiyet.
Dördüncü temel tip boolean (bool) — True / False. Ders 6’da gelecek.
3.4 String’lerle Çalışma
Ch 6 (Working With Strings) Ders 2’nin en uzun bölümü (~11 dk).
3.4.1 String Yaratma
print("Draft Academy") # cift tirnak
print('Draft Academy') # tek tirnak - ayni sonuc
phrase = "Draft Academy" # degiskene atadik
print(phrase) # Draft Academy3.4.2 Escape Karakterleri — \n, \", \\
İçinde tırnak olan bir string nasıl yazılır? Birden fazla satıra yayılan bir metin?
print("Ilk satir\nIkinci satir")Ilk satir
Ikinci satir
“buraya gelebilseydim, ve ters egik cizgi kurtarabilirim n… dizgeye yeni bir satir ekleyecegi” — Mosh (Türkçe dublaj), 28:12
(Dublajda “kurtarabilirim” = “kullanabilirim”. \n = backslash + n.)
print("Mosh dedi: \"piton harika\"") # Mosh dedi: "piton harika"
print("C:\\Users\\deniz") # C:\Users\denizML’de en sık görülen escape: path string’leri Windows yolları.
# Tehlikeli (Windows'ta yanlis okunur):
path = "C:\Users\deniz\data\train.csv" # \U, \d, \t = escape karmasasi
# Guvenli:
path = r"C:\Users\deniz\data\train.csv" # r"..." = raw string, hic escape yok
path = "C:/Users/deniz/data/train.csv" # forward slash - tum platformlardar"..." (raw string) ML kodunda regex pattern’ları ve dosya yolları için yaygın. pathlib.Path("C:/...") modern alternatif.
3.4.3 Birleştirme — + ve f-string
ad = "Deniz"
selamlama = "Merhaba " + ad + ", hos geldin!"
print(selamlama)
# Merhaba Deniz, hos geldin!Modern (Python 3.6+) — f-string:
ad = "Deniz"
yas = 35
print(f"Merhaba {ad}, sen {yas} yasindasin!")
# Merhaba Deniz, sen 35 yasindasin!Mosh f-string’i göstermez ama 2026’da yazdığın her satırda standardın.
3.4.4 String Methodları
phrase = "Draft Academy"
phrase.lower() # 'draft academy'
phrase.upper() # 'DRAFT ACADEMY'
phrase.isupper() # False
phrase.upper().isupper() # True - method chaining
phrase.replace("Draft", "Elephant") # 'Elephant Academy'
len(phrase) # 13pandas’ın Series.str ailesi Mosh’un öğrettiklerinin vektorlanmış hâli:
import pandas as pd
s = pd.Series(["Draft Academy", "Mosh Hamedani", "Python ROCKS"])
s.str.lower() # 3 satirin hepsi kucuk
s.str.upper().str.contains("PYTHON") # 3 boolean
s.str.replace("Python", "Java")
s.str.len()Aynı .upper(), aynı .replace(), aynı .len — sadece milyonlarca satırda. Mosh’un öğrettiği API direkt pandas’a aktarılıyor.
3.4.5 Indexing — s[0], Sıfır-Tabanlı
“Bir dizgede indeksler kullandigimiz zaman sifir ile basliyoruz” — Mosh (Türkçe dublaj), 34:11
phrase = "Draft Academy"
phrase[0] # 'D' (0. karakter = İLK karakter)
phrase[1] # 'r'
phrase[-1] # 'y' (sondan ilk)
phrase[-2] # 'm'
s[-1] = “son karakter” — Python’un en sevilen deyimi. ML kodunda tensor[-1] “son katmanın çıktısı” için sürekli.
3.4.6 Substring Arama ve Değiştirme
phrase.index("A") # 6 (bosluktan sonraki A)
phrase.index("Academy") # 6 (substring baslangici)
phrase.replace("Draft", "Elephant") # 'Elephant Academy'3.5 Sayılarla Çalışma — Aritmetik
print(3 + 4) # 7
print(10 - 3) # 7
print(3 * 4) # 12
print(10 / 3) # 3.3333333333333335 (TRUE bolme - hep float)
print(10 // 3) # 3 (TABAN bolme - tam sayi)
print(10 % 3) # 1 (MODULUS - kalan)
print(2 ** 3) # 8 (KUVVET)İki tür bölme:
/— true division: sonuç her zamanfloat.//— floor division: aşağı yuvarlar.
3.5.1 Modulus — Tek/Çift, Periyodik
print(8 % 2) # 0 (cift sayi)
print(7 % 2) # 1 (tek sayi)
print(epoch % 10 == 0) # her 10 epoch'ta True (ML log pattern)Mosh’un öğrettiği aritmetik operatörler tensor’da otomatik element-wise:
import torch
a = torch.tensor([1, 2, 3, 4])
b = torch.tensor([10, 20, 30, 40])
a + b # tensor([11, 22, 33, 44])
a * b # tensor([10, 40, 90, 160])
a ** 2 # tensor([1, 4, 9, 16])
b % 3 # tensor([1, 2, 0, 1])Aynı +, *, **, % sembolleri. Python’un operator overloading mekanizmasıyla NumPy/PyTorch/JAX bu sembolleri tensorlara genişletir.
3.6 Tip Dönüşümü
Mosh kritik bir problemi gösteriyor:
my_num = 5
print("Favori numaram " + my_num) # TypeError!
# can only concatenate str (not "int") to str+ operatörü str + int için tanımsız. Çözüm:
my_num = 5
print("Favori numaram " + str(my_num)) # str() ile cast
print(f"Favori numaram {my_num}") # modern: f-stringDiğer yön — string’i sayıya:
giris = "42"
sayi = int(giris) # 42 (int)
print(float("3.14")) # 3.14
print(int("3.14")) # ValueError - decimal yasak
print(int(float("3.14"))) # 3 (önce float, sonra int)Tip dönüşümü ML pipeline’ının en yaygın işlemlerinden biri:
import pandas as pd
import torch
# CSV'den okuma:
df = pd.read_csv("data.csv")
df["age"] = df["age"].astype(int) # str -> int kolon
df["score"] = df["score"].astype(float)
# Tensor tipi:
x = torch.tensor([1, 2, 3]) # int64 (default)
y = x.float() # float32
z = x.to(torch.float64) # float64ML için sık karşılaşılan typecast’ler:
- String → int (label encoding):
"kedi"→0,"kopek"→1. - int → float32 (NN input): tüm input’lar genelde float32.
- uint8 → float32 / 255 (image normalization): 0-255 piksel → 0-1.
3.7 İlk import — math Modülü
Mosh ilk import’u tanıtıyor:
“ozel matematik fonksiyonlari Python matematik denilen bir sey almak zorundayim” — Mosh (Türkçe dublaj), 46:03
from math import *
print(floor(3.7)) # 3
print(ceil(3.2)) # 4
print(sqrt(36)) # 6.0
print(pi) # 3.141592653589793
print(log(100, 10)) # 2.0from math import * neden tehlikeli?
Çakışma yaratır — örneğin math.log ve numpy.log farklı; iki from X import * yapan kodda hangi log aktif belirsiz.
Profesyonel pattern:
import math
import numpy as np
math.log(100) # 4.605... (skaler)
np.log(100) # 4.605... (vektorize)import math as m, import numpy as np — kısa aliaslarla namespace korunur.
3.8 Bu Dersin Özeti
- Değişken motivasyonu: Mosh’un “ad-yaş” hikayesi → tek-yerde-değiştir prensibi.
- Atama syntax’ı:
ad = "değer".=matematik eşittir değil. - İsimlendirme:
snake_case(PEP 8), sabitUPPER_SNAKE, sınıfPascalCase. - String araçları: escape, concat, methodlar,
len,[i], sıfır-tabanlı. - Aritmetik:
+,-,*,/,//,%,**. Parantezle sıra. - Tip dönüşümü:
str(5),int("42"),float("3.14")— ML preprocessing’in mikro hali. - İlk import:
from math import *→ ML evrenine açılan ilk kapı.
Bir değişken bir değeri bir isimle etiketler (ad = "Deniz"); Python üç temel tip (str, int, float) ile tüm temel verileri tutar; string’ler immutable ama metod-zengin (.upper, .replace, [i], len); aritmetik operatörleri (+ - * / // % **) skalardan tensora kadar aynı semboller; int() / str() / float() tip değiştirir; ve from math import * Python’un kütüphane evrenine açılan ilk kapıyı aralar.
3.9 Egzersizler
Egzersiz 1. Üç değişken tanımla — ad (string), doğum yılı (int), boy metre (float). Aşağıdaki çıktıyı üret:
Adim Deniz, 1985 dogumlu.
Bu yil 41 yasimi dolduruyorum.
Boyum 1.78 metre, yani 178 cm.
Egzersiz 2. Bir string ile üç dönüşüm yap (orijinal değişmesin):
mesaj = "Python ML icin essiz bir dildir"
mesaj_buyuk = ??? # Tum harfler buyuk
mesaj_js = ??? # "Python" yerine "JavaScript"
mesaj_uzunluk = ??? # Karakter sayisiEgzersiz 3. Bu kodu yaz, çalıştır, çıktıları kağıt üstünde önceden tahmin et:
isim = "Hamedani"
print(isim[0])
print(isim[3])
print(isim[-1])
print(isim[-2])
print(len(isim))
print(isim[len(isim) - 1])Egzersiz 4. (Aritmetik + modulus) Şu üç soruyu Python ile yanıtla:
- 100 saniye kaç dakika ve saniye? (Beklenen:
1 dakika 40 saniye) - 365 gün kaç hafta ve gün kalır? (Beklenen:
52 hafta 1 gun) - 50 sayısı çift mi? (Beklenen:
True)
İpucu: // ve %.
Egzersiz 5. (Builder eksen) Bu kod kullanıcıdan girdi alıyor (Ders 3 habercisi). Eksikleri doldur:
ad = input("Adin: ")
yas_str = input("Yasin: ")
yas_int = ??? # yas_str'i int'e cevir
yil = 2026 - yas_int
print(f"Merhaba {ad}! {yil} yilinda dogdun.")???’yi int(yas_str) ile doldur. Bu küçük örnek, Ders 3’ün ana fikrini gösteriyor: input() string döner; sayı işlemine girmeden önce int() veya float() ile dönüştürmek şart.
3.10 Sonraki Ders İçin Hazırlık
Ders 3: Girdi ve İlk Etkileşim
Mosh’un Ch 8-10 (Input, Calculator, Mad Libs). Program artık sadece basmakla yetinmeyecek — kullanıcıdan veri almaya başlayacak.
- Mosh’un Ch 8-10’unu izle (48:31 - 1:03:18, ~15 dk).
- Şu cümleyi içselleştir: “
input()her zaman string döner; sayı işlemine girmeden önceint()/float()ile çevir.”
Değişken = ile bir değeri bir isimle etiketler; üç temel Python tipi (str, int, float) ve aralarındaki dönüşüm (str(), int(), float()) ML preprocessing’in mikro hâli; string’in metod-zenginliği (.upper, .replace, len, [i]) pandas’ın Series.str ailesine birebir aktarılır; ve from math import * ile Python’un kütüphane evrenine ilk kapıyı araladın — bu satır, sonra göreceğin import numpy as np’nin ilkel halinden başka bir şey değil.