← Kursa Dön
📄 Text · 12 min

İlk Programın: Hello World

Her programlama serüveni bir "Merhaba Dünya" ile başlar. Bu gelenek 1978'den beri süregelen, programlama dünyasının resmi olmayan "giriş töreni"dir. Ama biz sadece bir satır yazdırıp geçmeyeceğiz — print() fonksiyonunun tüm yeteneklerini keşfedecek, kullanıcıdan veri almayı öğrenecek ve ilk gerçek programımızı yazacağız.

Bu ders, Python'da en sık kullanacağın iki fonksiyon ile tanışma dersi: print() ve input().


print(), Python'da ekrana bir şey yazdırmak için kullanılan fonksiyondur. "Fonksiyon" kavramını ileride detaylı öğreneceksin ama şimdilik "bir iş yapan komut" olarak düşünebilirsin.

En Basit Kullanım

print("Merhaba Dünya!")

Bu satır, ekrana Merhaba Dünya! yazar. İşte bu kadar basit!

Tırnak içine ne yazarsan onu yazdırır:

print("Python öğreniyorum!")
print("Bu benim ilk programım.")
print("2024 yılında kodlamaya başladım.")

Çıktı:

Python öğreniyorum!
Bu benim ilk programım.
2024 yılında kodlamaya başladım.

Tek Tırnak vs Çift Tırnak

Python'da string (metin) oluşturmak için tek tırnak (') veya çift tırnak (") kullanabilirsin. İkisi de aynı işi yapar:

print("Merhaba!")    # Çift tırnak
print('Merhaba!')    # Tek tırnak — aynı sonuç

Peki ne zaman hangisini kullanırız? Metnin içinde tırnak varsa, diğer tırnağı kullanmak mantıklıdır:

print("Python'ı seviyorum!")     # İçinde tek tırnak var → dış çift tırnak
print('Ahmet "merhaba" dedi.')   # İçinde çift tırnak var → dış tek tırnak

Birden Fazla Değer Yazdırma

print() içine virgülle ayırarak birden fazla değer verebilirsin:

print("Adım:", "Ayşe")
print("Yaşım:", 25)
print("Boy:", 1.72, "metre")

Çıktı:

Adım: Ayşe
Yaşım: 25
Boy: 1.72 metre

Dikkat et: Virgülle ayırdığında Python araya otomatik olarak bir boşluk koyar.

sep Parametresi: Ayırıcı Değiştirme

Değerler arası boşluk istemiyorsan veya farklı bir ayırıcı istiyorsan, sep (separator — ayırıcı) parametresini kullanabilirsin:

# Varsayılan: boşluk
print("A", "B", "C")
# Çıktı: A B C

# Ayırıcıyı değiştir
print("A", "B", "C", sep="-")
# Çıktı: A-B-C

print("A", "B", "C", sep="***")
# Çıktı: A***B***C

print("A", "B", "C", sep="")
# Çıktı: ABC (boşluk yok)

Pratik bir kullanım:

# Tarih formatı
gun = 15
ay = 3
yil = 2024
print(gun, ay, yil, sep="/")
# Çıktı: 15/3/2024

# Dosya yolu
print("home", "kullanici", "belgeler", sep="/")
# Çıktı: home/kullanici/belgeler

end Parametresi: Satır Sonu Değiştirme

Normalde her print() çağrısından sonra bir yeni satır (newline) eklenir. Yani iki print() alt alta yazılır:

print("Birinci satır")
print("İkinci satır")

Çıktı:

Birinci satır
İkinci satır

end parametresiyle bu davranışı değiştirebilirsin:

print("Merhaba", end=" ")
print("Dünya!")
# Çıktı: Merhaba Dünya!  (aynı satırda)

print("Yükleniyor", end="...")
print("Tamam!")
# Çıktı: Yükleniyor...Tamam!

end parametresi özellikle ilerleme göstergesi (progress indicator) gibi durumlarda işe yarar:

# Geri sayım (tek satırda)
print("3", end="... ")
print("2", end="... ")
print("1", end="... ")
print("Başla!")
# Çıktı: 3... 2... 1... Başla!

Boş print()

Parametresiz print() çağrısı sadece boş bir satır yazdırır:

print("Birinci bölüm")
print()
print("İkinci bölüm")

Çıktı:

Birinci bölüm

İkinci bölüm

Bu, çıktıyı görsel olarak gruplandırmak için kullanışlıdır.

Sayılar ve Hesaplamalar

print() ile doğrudan matematiksel işlemler de yazdırabilirsin:

print(2 + 3)       # 5
print(10 * 4)      # 40
print(100 / 3)     # 33.333333333333336
print(2 ** 10)     # 1024 (2 üzeri 10)

String ile sayıyı karıştırmak istediğinde dikkatli ol:

# Bu hata verir!
# print("Sonuç: " + 42)   # TypeError!

# Doğru yollar:
print("Sonuç:", 42)           # Virgülle ayır
print("Sonuç: " + str(42))   # str() ile dönüştür
print(f"Sonuç: {42}")        # f-string kullan (önerilen)

Escape Karakterler

Bazen metin içinde özel karakterler kullanman gerekir. Mesela yeni bir satıra geçmek veya tab (sekme) eklemek isteyebilirsin. İşte burada escape karakterler (kaçış karakterleri) devreye girer.

Escape karakterler ters eğik çizgi (\) ile başlar.

Analoji: Escape karakterler, mesajlaşma uygulamalarındaki emoji kısayolları gibidir. :) yazarsın, uygulamada 😊 görünür. \n yazarsın, ekranda yeni satır oluşur.

Sık Kullanılan Escape Karakterler

# \n — Yeni satır (newline)
print("Birinci satır\nİkinci satır")
# Çıktı:
# Birinci satır
# İkinci satır

# \t — Tab (sekme)
print("İsim:\tAyşe")
print("Yaş:\t25")
# Çıktı:
# İsim:   Ayşe
# Yaş:    25

# \\ — Ters eğik çizgi kendisi
print("Dosya yolu: C:\\Users\\Ahmet")
# Çıktı: Dosya yolu: C:\Users\Ahmet

# \" — Çift tırnak
print("Ahmet \"merhaba\" dedi.")
# Çıktı: Ahmet "merhaba" dedi.

# \' — Tek tırnak
print('Python\'ı seviyorum!')
# Çıktı: Python'ı seviyorum!

Tüm Escape Karakterler Tablosu

KarakterAnlamı
\nYeni satır
\tTab (sekme)
\\Ters eğik çizgi
\"Çift tırnak
\'Tek tırnak
\rSatır başı (carriage return)
\0Null karakter
\aBip sesi (alarm)

Çok Satırlı Stringler

Üç tırnak (""" veya ''') ile çok satırlı metin yazabilirsin. Bu durumda \n kullanmana gerek kalmaz:

mesaj = """Bu birinci satır.
Bu ikinci satır.
Bu üçüncü satır."""

print(mesaj)

Çıktı:

Bu birinci satır.
Bu ikinci satır.
Bu üçüncü satır.

Raw String

Escape karakterlerin çalışmasını istemiyorsan, string'in başına r eklersin:

# Normal string
print("C:\new_folder\test")
# Çıktı: C:
#        ew_folder	est   (bozuk!)

# Raw string
print(r"C:\new_folder\test")
# Çıktı: C:\new_folder\test   (doğru!)

Raw string'ler özellikle dosya yolları ve düzenli ifadeler (regular expressions) için çok kullanışlıdır.


f-string: Modern String Formatlama

f-string (formatted string literal), Python 3.6 ile gelen ve string içine değişken yerleştirmenin en kolay yoludur. String'in başına f veya F eklenir.

Temel Kullanım

isim = "Ayşe"
yas = 25

# f-string ile
print(f"Merhaba, ben {isim}. {yas} yaşındayım.")
# Çıktı: Merhaba, ben Ayşe. 25 yaşındayım.

Süslü parantez {} içine değişken adı yazarsın. Python, çalışma zamanında değişkenin değerini oraya yerleştirir.

Hesaplama Yapabilirsin

f-string içinde sadece değişken değil, ifade (expression) de kullanabilirsin:

fiyat = 100
kdv_orani = 0.20

print(f"Fiyat: {fiyat} TL")
print(f"KDV: {fiyat * kdv_orani} TL")
print(f"Toplam: {fiyat + fiyat * kdv_orani} TL")

Çıktı:

Fiyat: 100 TL
KDV: 20.0 TL
Toplam: 120.0 TL

Fonksiyon Çağrısı

f-string içinde fonksiyon bile çağırabilirsin:

isim = "python"
print(f"Büyük harf: {isim.upper()}")
print(f"Karakter sayısı: {len(isim)}")

Çıktı:

Büyük harf: PYTHON
Karakter sayısı: 6

Formatlama Seçenekleri

f-string ile sayıları formatlamak çok kolay:

# Ondalık basamak kontrolü
pi = 3.14159265
print(f"Pi: {pi:.2f}")    # 2 ondalık: 3.14
print(f"Pi: {pi:.4f}")    # 4 ondalık: 3.1416

# Binlik ayırıcı
nufus = 84000000
print(f"Nüfus: {nufus:,}")    # 84,000,000
print(f"Nüfus: {nufus:_}")    # 84_000_000

# Yüzde gösterimi
oran = 0.856
print(f"Başarı oranı: {oran:.1%}")  # 85.6%

# Hizalama
for urun, fiyat in [("Elma", 5), ("Portakal", 7.5), ("Muz", 12)]:
    print(f"{urun:<10} {fiyat:>6.2f} TL")

Çıktı (hizalama örneği):

Elma         5.00 TL
Portakal     7.50 TL
Muz         12.00 TL

Eski Yöntemler (Karşılaştırma)

f-string'den önce string formatlama için farklı yöntemler kullanılıyordu. Bunları başkasının kodunda görebilirsin:

isim = "Ayşe"
yas = 25

# Yöntem 1: % operatörü (eski)
print("Merhaba, ben %s. %d yaşındayım." % (isim, yas))

# Yöntem 2: .format() metodu (eski)
print("Merhaba, ben {}. {} yaşındayım.".format(isim, yas))

# Yöntem 3: f-string (modern — BUNU KULLAN)
print(f"Merhaba, ben {isim}. {yas} yaşındayım.")

Üçü de aynı çıktıyı verir. Ama f-string en okunaklı ve en hızlı olanıdır. Her zaman f-string tercih et.

💡 İpucu: f-string Python 3.6 ve sonrasında çalışır. Python 3.6'dan önceki kodlarda .format() veya % operatörünü görebilirsin. Ama yeni kod yazarken her zaman f-string kullan — daha okunaklı ve daha hızlıdır.


input() Fonksiyonu: Kullanıcıdan Veri Alma

Şu ana kadar hep biz ekrana bir şeyler yazdırdık. Peki kullanıcı bize bir şey söylemek isterse? İşte input() fonksiyonu burada devreye girer.

Temel Kullanım

isim = input("Adınız nedir? ")
print(f"Merhaba {isim}!")

Çalışma sırası:

  1. Ekrana "Adınız nedir? " yazılır

  2. Program durur ve kullanıcının bir şey yazmasını bekler

  3. Kullanıcı yazıp Enter'a basınca, yazdığı metin isim değişkenine atanır

  4. print() ile selamlama yapılır

⚠️ input() Her Zaman String Döndürür!

Bu çok önemli bir kural: input() fonksiyonu her zaman string (metin) döndürür. Kullanıcı "25" yazsa bile, Python bunu sayı olarak değil metin olarak alır.

yas = input("Yaşınız: ")
print(type(yas))    # <class 'str'>  — Sayı değil, string!

# Bu hata verir:
# print(yas + 5)    # TypeError! String ile sayı toplanamaz

# Doğru yol: Dönüştür
yas = int(input("Yaşınız: "))
print(type(yas))    # <class 'int'> — Artık sayı!
print(yas + 5)      # Çalışır: 30

Analoji: input(), bir posta kutusu gibidir. İçine ne atılırsa atsın — sayı, harf, sembol — hepsini bir zarf (string) içinde verir. Zarfın içindekini kullanmak için zarfı açman (dönüştürmen) gerekir.

Tip Dönüşümleri

Kullanıcıdan aldığın veriyi uygun tipe dönüştürmen gerekir:

# Tam sayı (integer)
yas = int(input("Yaşınız: "))

# Ondalıklı sayı (float)
boy = float(input("Boyunuz (metre): "))

# String (zaten string, dönüşüm gerekmez)
isim = input("Adınız: ")

⚠️ Dikkat: Kullanıcı sayı yerine harf girerse (int("abc")) program hata verir (ValueError). İleride try/except ile bu hataları yakalamayı öğreneceğiz. Şimdilik doğru veri girileceğini varsayıyoruz.

Birden Fazla input()

Bir programda istediğin kadar input() kullanabilirsin:

ad = input("Adınız: ")
soyad = input("Soyadınız: ")
yas = int(input("Yaşınız: "))
sehir = input("Şehriniz: ")

print(f"\n--- Kayıt Bilgileri ---")
print(f"Ad Soyad: {ad} {soyad}")
print(f"Yaş: {yas}")
print(f"Şehir: {sehir}")

İlk Gerçek Program: Hesap Makinesi

Öğrendiklerini birleştirme zamanı! Kullanıcıdan iki sayı alıp dört işlem yapan basit bir hesap makinesi yazalım.

# basit_hesap_makinesi.py
print("=== Basit Hesap Makinesi ===")
print()

# Kullanıcıdan sayıları al
sayi1 = float(input("Birinci sayıyı girin: "))
sayi2 = float(input("İkinci sayıyı girin: "))

# Dört işlemi hesapla
toplam = sayi1 + sayi2
fark = sayi1 - sayi2
carpim = sayi1 * sayi2

# Sıfıra bölme kontrolü
if sayi2 != 0:
    bolum = sayi1 / sayi2
else:
    bolum = "Tanımsız (sıfıra bölünemez)"

# Sonuçları yazdır
print()
print(f"--- Sonuçlar ---")
print(f"{sayi1} + {sayi2} = {toplam}")
print(f"{sayi1} - {sayi2} = {fark}")
print(f"{sayi1} × {sayi2} = {carpim}")
print(f"{sayi1} ÷ {sayi2} = {bolum}")

Örnek çalıştırma:

=== Basit Hesap Makinesi ===

Birinci sayıyı girin: 15
İkinci sayıyı girin: 4

--- Sonuçlar ---
15.0 + 4.0 = 19.0
15.0 - 4.0 = 11.0
15.0 × 4.0 = 60.0
15.0 ÷ 4.0 = 3.75

Biraz Daha Gelişmiş: Kişisel Bilgi Kartı

# bilgi_karti.py
print("╔══════════════════════════╗")
print("║   Kişisel Bilgi Kartı   ║")
print("╚══════════════════════════╝")
print()

isim = input("👤 Adınız: ")
yas = int(input("🎂 Yaşınız: "))
meslek = input("💼 Mesleğiniz: ")
hobi = input("🎮 Hobiniz: ")

dogum_yili = 2024 - yas

print()
print("━" * 30)
print(f"  İsim    : {isim}")
print(f"  Yaş     : {yas}")
print(f"  Doğum   : ~{dogum_yili}")
print(f"  Meslek  : {meslek}")
print(f"  Hobi    : {hobi}")
print("━" * 30)
print(f"  {isim}, Python öğreniyor! 🐍")

Yorum Satırları (Comments)

Yorum satırları, kodu açıklamak için yazılan ve Python tarafından çalıştırılmayan metinlerdir. Yorumlar insanlar içindir — bilgisayar onları görmezden gelir.

Tek Satırlık Yorumlar: #

# Bu bir yorum satırıdır
print("Merhaba")  # Bu da satır sonu yorumu

# Aşağıdaki satır kullanıcıdan isim alır
isim = input("Adınız: ")

# TODO: Hata kontrolü eklenecek
# FIXME: Sıfıra bölme hatası düzeltilecek

# işaretinden sonra gelen her şey yorum olarak kabul edilir ve çalıştırılmaz.

Ne Zaman Yorum Yazmalı?

İyi yorum: Kodun neden öyle yazıldığını açıklar.

# KDV oranı 2024 mevzuatına göre %20
kdv_orani = 0.20

# API limiti aşılmasın diye 1 saniye bekliyoruz
import time
time.sleep(1)

Kötü yorum: Kodun ne yaptığını tekrar eder (zaten koddan anlaşılıyor):

# x'e 5 ata
x = 5  # Bunu yazmaya gerek yok!

# listeye eleman ekle
liste.append(eleman)  # Bunu da yazmaya gerek yok!

Docstring: Belgeleme Metinleri

Üç tırnak (""") ile yazılan özel yorumlara docstring denir. Fonksiyonları, sınıfları ve modülleri belgelemek için kullanılır:

def kare_al(sayi):
    """Verilen sayının karesini hesaplar ve döndürür.

    Args:
        sayi: Karesi alınacak sayı.

    Returns:
        Sayının karesi.
    """
    return sayi ** 2

Docstring'ler Python tarafından çalıştırılmaz ama help() fonksiyonu ile erişilebilir:

>>> help(kare_al)
Help on function kare_al:

kare_al(sayi)
    Verilen sayının karesini hesaplar ve döndürür.
    ...

Kodu Geçici Olarak Devre Dışı Bırakma

Yorumlar, bir kod satırını geçici olarak devre dışı bırakmak için de kullanılır:

isim = input("Adınız: ")
# yas = int(input("Yaşınız: "))  # Şimdilik yaş sormuyoruz
print(f"Merhaba {isim}!")

VS Code'da bir satırı hızlıca yorum yapma/kaldırma kısayolu: Ctrl + / (veya Cmd + / macOS'ta). Birden fazla satırı seçip bu kısayolu kullanabilirsin.


Python'da Her Şey Bir Nesne (İlk Tadımlık)

Bu kavramı şu an tamamen anlamana gerek yok. Ama Python'ın temel felsefesini anlamak için erken bir tadımlık yapalım.

Python'da her şey bir nesnedir (object). Sayılar, metinler, listeler, fonksiyonlar — hepsi birer nesne.

Bu Ne Demek?

Her nesnenin üç temel özelliği vardır:

  1. Kimlik (identity): Bellekteki adresi — id() ile görebilirsin

  2. Tip (type): Ne tür bir veri olduğu — type() ile görebilirsin

  3. Değer (value): İçinde sakladığı veri

x = 42

print(type(x))    # <class 'int'>
print(id(x))      # 140234866357040 (bellekteki adres)
print(x)           # 42 (değer)

Metotlar: Nesnelerin Yetenekleri

Her nesne tipinin kendine özgü metotları (fonksiyonları) vardır. Bunlara nokta (.) ile erişirsin:

# String nesnesi ve metotları
isim = "python"
print(isim.upper())      # PYTHON
print(isim.capitalize()) # Python
print(isim.count("p"))   # 1
print(isim.replace("p", "P"))  # Python

# Sayı nesnesi ve metotları
sayi = 42
print(sayi.bit_length())  # 6 (ikili sistemde kaç bit)

# Float nesnesi
pi = 3.14
print(pi.is_integer())    # False
sayi2 = 4.0
print(sayi2.is_integer()) # True

Neden Önemli?

"Her şey bir nesne" konsepti, Python'ı çok tutarlı ve güçlü yapar. İleride nesne yönelimli programlama (OOP) konusuna geldiğimizde bu kavramı derinlemesine işleyeceğiz.

Şimdilik bilmen gereken: Python'da her değerin bir tipi var ve her tipin kendi yetenekleri (metotları) var. Bu yeteneklere nokta (.) ile erişirsin.

Analoji: Her nesneyi bir İsviçre çakısı gibi düşün. Bir string nesnesi "metin İsviçre çakısı" — büyük harfe çevirme, bölme, değiştirme gibi araçları var. Bir sayı nesnesi ise "matematik İsviçre çakısı" — farklı araçları var.


Pratik Örnekler

Derste öğrendiklerini pekiştirmek için birkaç pratik örnek:

Örnek 1: Sıcaklık Dönüştürücü

# sicaklik.py
print("🌡️ Sıcaklık Dönüştürücü")
print()

celsius = float(input("Celsius değerini girin: "))
fahrenheit = (celsius * 9/5) + 32

print(f"{celsius}°C = {fahrenheit:.1f}°F")

# Ters dönüşüm de yapalım
print()
fahrenheit2 = float(input("Fahrenheit değerini girin: "))
celsius2 = (fahrenheit2 - 32) * 5/9

print(f"{fahrenheit2}°F = {celsius2:.1f}°C")

Örnek 2: Basit Mad Libs Oyunu

# mad_libs.py
print("📝 Mad Libs Oyunu!")
print("Aşağıdaki kelimeleri girin:\n")

isim = input("Bir isim: ")
hayvan = input("Bir hayvan: ")
yiyecek = input("Bir yiyecek: ")
sayi = input("Bir sayı: ")
sifat = input("Bir sıfat: ")

hikaye = f"""
Bir zamanlar {isim} adında biri varmış.
Bir gün {sifat} bir {hayvan} ile karşılaşmış.
{hayvan}, {sayi} tane {yiyecek} istemiş.
{isim} şaşkınlıkla "Olur!" demiş.
Ve mutlu bir şekilde {yiyecek} yemişler.
"""

print(hikaye)

Örnek 3: Basit Fatura Hesaplayıcı

# fatura.py
print("🧾 Restoran Fatura Hesaplayıcı")
print("=" * 35)

yemek = float(input("Yemek tutarı (TL): "))
icecek = float(input("İçecek tutarı (TL): "))
kisi_sayisi = int(input("Kaç kişisiniz: "))

ara_toplam = yemek + icecek
kdv = ara_toplam * 0.10
servis = ara_toplam * 0.15
toplam = ara_toplam + kdv + servis
kisi_basi = toplam / kisi_sayisi

print()
print("=" * 35)
print(f"  Ara Toplam  : {ara_toplam:>10.2f} TL")
print(f"  KDV (%10)   : {kdv:>10.2f} TL")
print(f"  Servis (%15): {servis:>10.2f} TL")
print(f"  ─────────────────────────")
print(f"  TOPLAM      : {toplam:>10.2f} TL")
print(f"  Kişi başı   : {kisi_basi:>10.2f} TL")
print("=" * 35)

Yaygın Hatalar ve Çözümleri

SyntaxError: Tırnak Eşleşmesi

# HATALI
print("Merhaba Dünya!)    # Kapanış tırnağı eksik
print('Python"ı seviyorum')  # Tırnak tipi uyumsuz

# DOĞRU
print("Merhaba Dünya!")
print("Python'ı seviyorum")

TypeError: String ile Sayı Birleştirme

# HATALI
yas = 25
print("Yaşım: " + yas)     # TypeError!

# DOĞRU
print("Yaşım:", yas)        # Virgülle
print("Yaşım: " + str(yas)) # str() ile dönüştür
print(f"Yaşım: {yas}")      # f-string (en iyi yol)

ValueError: Yanlış Tip Dönüşümü

# HATALI
sayi = int("abc")           # ValueError!
sayi = int("3.14")          # ValueError! (float string'i int'e çevrilemez)

# DOĞRU
sayi = int("42")            # 42
sayi = float("3.14")        # 3.14
sayi = int(float("3.14"))   # 3 (önce float, sonra int)

NameError: Tanımlanmamış Değişken

# HATALI
print(mesaj)                # NameError! mesaj tanımlı değil

# DOĞRU
mesaj = "Merhaba"
print(mesaj)

Özet

  • 📢 print() fonksiyonu ekrana çıktı verir. sep ile ayırıcıyı, end ile satır sonunu değiştirebilirsin.

  • 🔤 Escape karakterler (\n, \t, \\, \") metin içinde özel karakterler kullanmanı sağlar.

  • f-string (f"...") değişkenleri ve ifadeleri string içine yerleştirmenin en modern ve okunaklı yoludur. Her zaman bunu tercih et.

  • 📥 input() kullanıcıdan veri alır ve her zaman string döndürür. Sayı olarak kullanmak için int() veya float() ile dönüştür.

  • 💬 Yorum satırları (#) kodu açıklamak içindir; Python bunları çalıştırmaz. Docstring ("""...""") ise belgeleme için kullanılır.

  • 🧩 Python'da her şey bir nesnedir — her değerin bir tipi ve ona ait metotları vardır.


*Bir sonraki derste Python'ın söz dizimi kurallarını öğreneceksin: girintileme, anahtar kelimeler, isimlendirme kuralları ve dinamik tipleme. Temeli sağlam atıyoruz!* 📐