4  Girdi ve Çıktı İşlemleri

Şimdiye kadar yazdığımız programlar hep aynı sayılarla çalıştı: bir dairenin alanını hesaplarken yarıçapı programın içine kendimiz yazdık. Gerçek bir program ise değerleri kullanıcıdan alır, onlarla hesap yapar ve sonucu okunaklı bir biçimde kullanıcıya gösterir. Bir programın dış dünyayla bu alışverişine girdi (input) ve çıktı (output) denir.

Bu bölümde klavyeden değer almayı, alınan metni sayıya çevirmeyi ve kullanıcının yanlış bir değer girmesi hâlinde programın çökmesini önlemeyi göreceğiz. Ardından print fonksiyonunun inceliklerini, sonuçları istediğimiz biçimde yazdırmanın yollarını ve Python’ın hata mesajlarını okumayı öğreneceğiz.

4.1 Kullanıcıdan Değer Almak

Python’da kullanıcıdan bir değer almanın en yaygın yolu input fonksiyonudur.

Tanım 4.1 (input Fonksiyonu) input(mesaj) fonksiyonu ekrana mesaj metnini yazar, kullanıcının bir şeyler yazıp Enter’a basmasını bekler ve yazılanı her zaman bir metin (str) olarak verir.

Yani input’un içine yazılan metin kullanıcıya bir soru ya da talimattır; fonksiyonun verdiği değer ise kullanıcının yanıtıdır. Bu yanıt bir değişkene atanarak saklanır. Aşağıdaki çıktıda Ulaş, kullanıcının klavyeden yazdığı değerdir.

Python
isim = input("Lütfen adınızı girin: ")
print("Merhaba, " + isim)
Çıktı
Lütfen adınızı girin: Ulaş
Merhaba, Ulaş

Programda iki metni + ile birleştirdik.

Tanım 4.2 (Metin Birleştirme) İki metin arasındaki + operatörü, ikinci metni birincinin sonuna ekleyerek yeni bir metin oluşturur; buna metin birleştirme (concatenation) denir. + operatörünün iki yanındaki değerler metinse birleştirme, sayıysa toplama yapılır; bir metin ile bir sayı + ile birleştirilemez.

Yani "Hız Sınırı " + "80" işlemi "Hız Sınırı 80" metnini verir; burada "80" bir sayı değil, iki karakterlik bir metindir. + metinlerin arasına kendiliğinden boşluk koymaz; boşluk isteniyorsa metinlerden birinin içine yazılmalıdır.

Python
birinci = "Hız Sınırı "
ikinci = "80"
print(birinci + ikinci)
print(birinci + ikinci + "!")
print(birinci + ikinci + "10")
Çıktı
Hız Sınırı 80
Hız Sınırı 80!
Hız Sınırı 8010

Son satırda "80" + "10" toplanmadı, yan yana yazıldı ve 8010 oluştu.

Sayı Olarak Değer Almak

input her zaman metin verdiği için, kullanıcının girdiği bir sayıyla hesap yapmadan önce onu sayıya çevirmek gerekir.

Python
a = input("Kenar uzunluğu: ")
alan = a * a
print("Karenin alanı =", alan)
Çıktı
Kenar uzunluğu: 5
TypeError: can't multiply sequence by non-int of type 'str'

Kullanıcı 5 yazdı ama a değişkeni 5 sayısını değil, "5" metnini tutuyor; iki metin çarpılamadığı için program TypeError hatasıyla durdu. Çözüm, input’un verdiği metni Değişkenler, Veri Tipleri ve Atama bölümündeki tip dönüşüm fonksiyonlarıyla (Tanım 2.8) sayıya çevirmektir. Bunun için input çağrısı doğrudan int ya da float içine yazılır:

Python
yas = int(input("Lütfen yaşınızı girin: "))
boy = float(input("Lütfen boyunuzu girin (örnek: 1.75): "))
print("Yaşınız:", yas)
print("Boyunuz:", boy)
print("Gelecek yıl", yas + 1, "yaşında olacaksınız.")
Çıktı
Lütfen yaşınızı girin: 19
Lütfen boyunuzu girin (örnek: 1.75): 1.56
Yaşınız: 19
Boyunuz: 1.56
Gelecek yıl 20 yaşında olacaksınız.

int(input(...)) yazımında önce içteki input çalışır ve bir metin verir; sonra dıştaki int bu metni tam sayıya çevirir. Ondalıklı sayı girilirken ayırıcı olarak virgül değil nokta kullanılmalıdır: 1,56 yazılırsa float onu okuyamaz.

Örnek 4.1 (İki Sayının Toplamı) Kullanıcıdan iki sayı alıp toplamlarını yazan bir program yazınız. Sayılar int’e çevrilmezse ne olur?

Çözüm

Önce dönüşüm yapmadan deneyelim. Kullanıcı 5 ve 6 girsin:

Python
A = input("1. sayıyı gir: ")
B = input("2. sayıyı gir: ")
T = A + B
print("Toplam =", T)
Çıktı
1. sayıyı gir: 5
2. sayıyı gir: 6
Toplam = 56

A ve B metin olduğundan + toplama değil birleştirme yaptı ve "5" ile "6" yan yana yazılıp 56 oluştu. Hata mesajı çıkmadığı için bu tür bir yanlışlık fark edilmeden geçebilir. Değerleri int’e çevirince toplama yapılır:

Python
A = int(input("1. sayıyı gir: "))
B = int(input("2. sayıyı gir: "))
T = A + B
print("Toplam =", T)
Çıktı
1. sayıyı gir: 5
2. sayıyı gir: 6
Toplam = 11

Ondalıklı sayılarla da çalışması isteniyorsa int yerine float kullanılır. \(\blacksquare\)

4.2 Hatalı Girdileri Yakalamak

Kullanıcı bir sayı yerine harf ya da boş bir değer girerse dönüşüm başarısız olur ve program durur.

Python
yas = int(input("Lütfen yaşınızı girin: "))
print("Yaşınız:", yas)
Çıktı
Lütfen yaşınızı girin: 45.5
ValueError: invalid literal for int() with base 10: '45.5'

45.5 bir tam sayı yazımı olmadığından int onu okuyamadı ve ValueError hatası oluştu. Programın böyle durumlarda çökmesi yerine kullanıcıyı uyarması için hatayı yakalamak gerekir.

Tanım 4.3 (try-except Yapısı) Hata çıkabilecek komutlar try: satırının altına, bir hata oluşursa çalışacak komutlar da except HataTuru: satırının altına girintili olarak yazılır. try bloğundaki komutlarda HataTuru türünde bir hata oluşursa Python o komutta durur, programı sonlandırmaz ve except bloğuna geçer; hata oluşmazsa except bloğu atlanır.

Yani try-except, “şunu dene; olmazsa şunu yap” demenin yoludur. Satır başındaki boşluklara girinti (indentation) denir ve Python hangi komutların try’a, hangilerinin except’e ait olduğunu bu girintilerden anlar. Girinti için genellikle dört boşluk kullanılır; Colab ve VS Code, iki noktayla biten bir satırdan sonra Enter’a basıldığında girintiyi kendiliğinden ekler.

Python
try:
    yas = int(input("Lütfen yaşınızı girin: "))
    print("Yaşınız:", yas)
except ValueError:
    print("Geçersiz giriş! Lütfen bir tam sayı girin.")
Çıktı
Lütfen yaşınızı girin: 45.5
Geçersiz giriş! Lütfen bir tam sayı girin.

Bir try bloğundan sonra farklı hata türleri için birden çok except bloğu yazılabilir. Aşağıdaki programda kullanıcı sıfır girerse sıfıra bölme hatası (ZeroDivisionError), sayı olmayan bir şey girerse ValueError yakalanır.

Python
try:
    sayi = int(input("Bir sayı girin: "))
    sonuc = 10 / sayi
    print("Sonuç:", sonuc)
except ZeroDivisionError:
    print("Hata: Bir sayıyı sıfıra bölemezsiniz!")
except ValueError:
    print("Hata: Lütfen geçerli bir tam sayı girin!")
Çıktı
Bir sayı girin: a
Hata: Lütfen geçerli bir tam sayı girin!

Aynı program kullanıcı 0 girdiğinde ise şöyle çalışır:

Python
try:
    sayi = int(input("Bir sayı girin: "))
    sonuc = 10 / sayi
    print("Sonuç:", sonuc)
except ZeroDivisionError:
    print("Hata: Bir sayıyı sıfıra bölemezsiniz!")
except ValueError:
    print("Hata: Lütfen geçerli bir tam sayı girin!")
Çıktı
Bir sayı girin: 0
Hata: Bir sayıyı sıfıra bölemezsiniz!

Kullanıcı yanlış girdikçe soruyu yeniden soran bir program için döngülere ihtiyaç var; bunu İç İçe Döngüler, while Döngüsü ve match-case bölümünde yapacağız.

eval Fonksiyonu

input ile alınan metni sayıya çevirmenin bir başka yolu eval fonksiyonudur.

Tanım 4.4 (eval Fonksiyonu) eval(metin) fonksiyonu, kendisine verilen metni bir Python ifadesi olarak hesaplar ve sonucunu verir.

Yani eval("5.6") 5.6 sayısını, eval("2 + 3") ise 5 sayısını verir. Kullanıcı tam sayı girerse int, ondalıklı sayı girerse float elde edilir; hangi tipte bir sayı geleceğini önceden bilmek gerekmez.

Python
a = eval(input("Kenar uzunluğu: "))
alan = a * a
print("Karenin alanı =", alan)
print(type(a))
Çıktı
Kenar uzunluğu: 5.6
Karenin alanı = 31.359999999999996
<class 'float'>

\(5{,}6^2 = 31{,}36\) olması gerekirken çıktıda görülen küçük fark, ondalıklı sayıların bilgisayarda yaklaşık saklanmasından kaynaklanır.

Uyarıeval tehlikelidir

eval kendisine verilen metni Python kodu olarak çalıştırır. Kullanıcı bir sayı yerine bilgisayardaki dosyaları silen bir komut yazarsa eval onu da çalıştırır. Bu yüzden kullanıcıdan gelen girdiyi eval ile değil, int ya da float ile çevirmek her zaman daha güvenlidir.

4.3 Ekrana Yazdırmak: print

Sonuçları ekrana yazmak için kullandığımız print fonksiyonu, ilk bakışta göründüğünden daha esnektir.

print’e virgülle ayrılmış birden çok değer verilebilir; bu değerler metin, sayı ya da ifade olabilir. print her değeri yazar, değerlerin arasına birer boşluk koyar ve en sonda yeni bir satıra geçer.

Python
isim = "Ahmet"
yas = 30
a = 5
b = 10
print("İsim:", isim)
print("Yaş:", yas)
print(a, "+", b, "=", a + b)
print("Merhaba" + "Arkadaşlar")
print("Merhaba", "Arkadaşlar")
Çıktı
İsim: Ahmet
Yaş: 30
5 + 10 = 15
MerhabaArkadaşlar
Merhaba Arkadaşlar

Son iki satırın farkına dikkat edin: + metinleri boşluksuz birleştirir, virgül ise print’in araya bir boşluk koymasını sağlar.

Tanım 4.5 (sep ve end Parametreleri) print fonksiyonunun sep parametresi yazılan değerlerin arasına konacak metni, end parametresi de yazdırmanın sonuna eklenecek metni belirler. Varsayılan olarak sep bir boşluk (" "), end ise yeni satır karakteri ("\n") olur.

Yani print("a", "b", sep="-") değerlerin arasına boşluk yerine - koyar ve a-b yazar. end değiştirildiğinde print yazdıktan sonra yeni satıra geçmez; bir sonraki print aynı satırdan devam eder.

Python
print("Python", "programlama", "dili")
print("Python", "programlama", "dili", sep="-")
print("Python", "programlama", "dili", sep="$")
print("Python", "programlama", "dili", sep="")
print("Merhaba", end=", ")
print("Dünya!")
print("Python kullanmayı biliyor musun", end="?")
Çıktı
Python programlama dili
Python-programlama-dili
Python$programlama$dili
Pythonprogramlamadili
Merhaba, Dünya!
Python kullanmayı biliyor musun?

İlk print("Merhaba", end=", ") satır sonunda yeni satıra geçmek yerine , yazdı; bu yüzden Dünya! aynı satıra geldi. sep yalnız birden çok değer yazdırılırken etkilidir: print("Python", sep="&&") tek bir değer olduğu için yalnız Python yazar.

4.4 Biçimli Yazdırma

Bir sonucu metnin içine yerleştirmek ya da ondalıklı bir sayının kaç basamağının yazılacağını belirlemek için biçimli yazdırma kullanılır; Python bunun için üç yol sunar.

f-string

En yeni ve en okunaklı yol f-string’dir.

Tanım 4.6 (f-string) Tırnağın önüne f harfi konarak yazılan metne f-string denir. Bir f-string’in içinde süslü parantez { } arasına yazılan her ifade hesaplanır ve değeri metnin o yerine yerleştirilir.

Yani f"{isim} {yas} yaşındadır." metninde {isim} ve {yas} yerine değişkenlerin değerleri yazılır. f unutulursa süslü parantezler olduğu gibi yazılır.

Python
isim = "Ali"
yas = 25
print("{isim} {yas} yaşındadır.")
print(f"{isim} {yas} yaşındadır.")
print(f"{isim} gelecek yıl {yas + 1} yaşında olacak.")
a = 5
b = 10
print(f"{a}+{b}=", a + b)
print(f"{a}+{b}={a + b}")
print(f"{a}+{b}=,a+b")
Çıktı
{isim} {yas} yaşındadır.
Ali 25 yaşındadır.
Ali gelecek yıl 26 yaşında olacak.
5+10= 15
5+10=15
5+10=,a+b

Son satırda a+b süslü parantez içinde olmadığı için hesaplanmadı ve metin olarak yazıldı.

Süslü parantezin içinde ifadeden sonra iki nokta ve bir biçim belirteci yazılabilir. En sık kullanılanı :.nf belirtecidir: değeri virgülden sonra n basamakla yazar.

Python
a = 10 / 3
b = 2.5 * 4.8
c = 7.123456
print(f"a = {a:.3f}")
print(f"b = {b:.3f}")
print(f"c = {c:.3f}")
print(f"a = {round(a, 3)}")
print(f"b = {round(b, 3)}")
Çıktı
a = 3.333
b = 12.000
c = 7.123
a = 3.333
b = 12.0

:.3f ile round(..., 3) arasındaki farka dikkat edin: round bir sayı verir ve sondaki sıfırlar yazılmaz (12.0); :.3f ise sayıyı her zaman tam üç basamakla yazar (12.000). Tablo gibi hizalı çıktılarda :.3f tercih edilir.

format Metodu

f-string’den önce yaygın olan yol, metnin format metodudur.

"... {} ... {} ...".format(d1, d2) yazımında metindeki her {} sırayla format’a verilen değerlerle doldurulur. Süslü parantezin içine sıra numarası yazılarak değerlerin sırası değiştirilebilir; sıra numaraları \(0\)’dan başlar. Biçim belirteci yine iki noktadan sonra yazılır.

Python
import math
isim = "Ali"
yas = 30
print("{}, {} yaşındadır.".format(isim, yas))
print("{}, {} yaşındadır.".format(yas, isim))
metin = "Girilen {}, {} ve {} sayılarının toplamı {}."
print(metin.format(5, 6, 9, 5 + 6 + 9))
print("PI = {0:.4f}".format(math.pi))
print("{1} {0} {2:.2f}".format(10, "Python", 20))
Çıktı
Ali, 30 yaşındadır.
30, Ali yaşındadır.
Girilen 5, 6 ve 9 sayılarının toplamı 20.
PI = 3.1416
Python 10 20.00

İkinci satırda değerlerin sırası karıştırıldığı için anlamsız bir cümle çıktı: format değerleri adlarına göre değil, sırasına göre yerleştirir. Son satırda {1} ikinci değeri ("Python"), {0} birinci değeri (10), {2:.2f} üçüncü değeri iki basamakla (20.00) yazdı.

Yüzde İşaretiyle Biçimlendirme

Python’ın en eski biçimlendirme yolu, C dilinden gelen % yazımıdır; eski kodlarda hâlâ sık görülür.

Metnin içinde %d bir tam sayının, %f bir ondalıklı sayının, %s bir metnin yerini tutar; değerler metinden sonra % işaretiyle ve parantez içinde sırayla verilir. %.2f yazımı ondalıklı sayıyı iki basamakla yazar; yalnız %f yazılırsa altı basamak kullanılır.

Python
isim = "Ali"
yas = 30
print("%s %d yaşındadır." % (isim, yas))
print("%d yaşında olan %s okula geldi." % (yas, isim))
print("%d ile %d sayılarının toplamı %f" % (5, 3, 5 + 3))
print("Ortalama: %.2f" % (17 / 3))
Çıktı
Ali 30 yaşındadır.
30 yaşında olan Ali okula geldi.
5 ile 3 sayılarının toplamı 8.000000
Ortalama: 5.67

Bu üç yol aynı işi yapar. Yeni kod yazarken en okunaklı olan f-string önerilir.

4.5 Kaçış Karakterleri

Bir metnin içine yeni satır ya da sekme gibi klavyeden doğrudan yazılamayan karakterler koymak için ters eğik çizgi kullanılır.

Tanım 4.7 (Kaçış Karakteri) Metin içinde ters eğik çizgiyle (\) başlayan ve tek bir özel karakteri temsil eden ikiliye kaçış karakteri (escape character) denir. En sık kullanılanlar şunlardır:

Yazım Anlamı
\n yeni satır
\t sekme (tab) boşluğu
\\ ters eğik çizginin kendisi
\' tek tırnak
\" çift tırnak

Yani "Can\nEvi" metni ekrana iki satır olarak yazılır. Ters eğik çizginin kendisini yazdırmak için onu iki kez yazmak gerekir, çünkü tek bir \ sonraki karakterle birlikte bir kaçış karakteri olarak okunur.

Python
print("Matematik\nİstatistik")
print("Matematik\tİstatistik")
print("Matematik \\ İstatistik")
print("p", "i", "t", "o", "n", sep="\n")
Çıktı
Matematik
İstatistik
Matematik   İstatistik
Matematik \ İstatistik
p
i
t
o
n

Tırnaklar için kural şudur: metin çift tırnakla yazılmışsa içinde tek tırnak serbestçe kullanılabilir, tek tırnakla yazılmışsa çift tırnak serbestçe kullanılabilir. Metni açan tırnakla aynı türden bir tırnak metnin içinde kullanılacaksa önüne \ konur; yoksa Python metnin orada bittiğini sanır.

Python
print("Bursa'nın iskenderi meşhurdur.")
print('Bursa\'nın iskenderi meşhurdur.')
print('Merhaba, "Python" kullanıyorum.')
print("Merhaba, \"Python\" kullanıyorum.")
Çıktı
Bursa'nın iskenderi meşhurdur.
Bursa'nın iskenderi meşhurdur.
Merhaba, "Python" kullanıyorum.
Merhaba, "Python" kullanıyorum.
Python
print('Bursa'nın iskenderi meşhurdur.')
Çıktı
SyntaxError: unterminated string literal (detected at line 1)

Bu satırda metin 'Bursa' ile bitmiş sayılır; Python ardından gelen nın iskenderi meşhurdur.' kısmını anlamlandıramaz ve yazım hatası verir.

4.6 Hata Türleri

Python bir hatayla karşılaştığında programı durdurur ve hatanın türünü ve nedenini söyleyen bir mesaj yazar; bu mesajı okuyabilmek, hatayı bulmanın en kısa yoludur.

Colab ve IDLE hata mesajında hatanın bulunduğu satırı da gösterir ve yazım hatalarında hatalı yerin altına ^ işareti koyar. Mesajın son satırı hatanın türünü ve kısa bir açıklamasını içerir. Sık karşılaşılan hata türleri şunlardır:

Hata türü Ne zaman oluşur
SyntaxError kod Python’ın yazım kurallarına uymuyor: kapanmamış parantez ya da tırnak, eksik iki nokta
IndentationError girintiler kurala uymuyor
NameError tanımlanmamış bir ad kullanılıyor
TypeError bir işlem uygun olmayan tipte bir değere uygulanıyor: metin ile sayıyı toplamak
ValueError tipi doğru ama değeri uygunsuz bir argüman veriliyor: int("abc")
ZeroDivisionError bir sayı sıfıra bölünüyor
IndexError bir listede ya da metinde var olmayan bir sıra numarasına erişiliyor
KeyError bir sözlükte var olmayan bir anahtar kullanılıyor
AttributeError bir değerin sahip olmadığı bir özelliği ya da metodu kullanılıyor
ModuleNotFoundError import edilen modül bulunamıyor; ImportError türünün özel bir hâlidir

Listeleri ve sözlükleri ilerideki bölümlerde göreceğiz. Aşağıdaki kısa programlar bu hatalardan bazılarını gösteriyor:

Python
print(sayi)
Çıktı
NameError: name 'sayi' is not defined
Python
print(10 / 0)
Çıktı
ZeroDivisionError: division by zero
Python
print(int("abc"))
Çıktı
ValueError: invalid literal for int() with base 10: 'abc'
Python
sayi = 5
    print(sayi)
Çıktı
IndentationError: unexpected indent
Python
import matematik
Çıktı
ModuleNotFoundError: No module named 'matematik'
Python
isim = "Ali"
print(isim[3])
Çıktı
IndexError: string index out of range

Son örnekte isim[3], "Ali" metninin dördüncü karakterini ister; metinde üç karakter olduğu için IndexError oluştu. Sıra numaralarının neden \(0\)’dan başladığını listelerle birlikte göreceğiz.

İpucuHata ayıklamak üç adımda
  1. Hata mesajının son satırını okuyun: hata türü sorunun ne olduğunu söyler.
  2. Mesajda gösterilen satıra gidin; yazım hatalarında ^ işaretinin hemen önüne de bakın.
  3. Neden hâlâ belli değilse, hatadan önceki satırlara print ekleyerek değişkenlerin o andaki değerlerini ve tiplerini yazdırın.

Örnek 4.2 (Bir Hatayı Adım Adım Bulmak) Aşağıdaki program kullanıcıdan bir doğum yılı alıp yaşı hesaplamak istiyor ama hata veriyor. Hatayı bulunuz ve düzeltiniz.

Python
dogum_yili = input("Doğum yılınız: ")
yas = 2026 - dogum_yili
print("Yaşınız:", yas)
Çözüm

Birinci adım. Programı çalıştırıp mesajın son satırını okuyalım:

Python
dogum_yili = input("Doğum yılınız: ")
yas = 2026 - dogum_yili
print("Yaşınız:", yas)
Çıktı
Doğum yılınız: 2004
TypeError: unsupported operand type(s) for -: 'int' and 'str'

Mesaj, bir int ile bir str arasında - işleminin yapılamadığını söylüyor.

İkinci adım. Mesajda gösterilen satır yas = 2026 - dogum_yili satırıdır. Bu satırda 2026 bir int olduğuna göre str olan dogum_yili olmalıdır.

Üçüncü adım. Tahminimizi print(type(dogum_yili)) ekleyerek doğrulayabiliriz; input her zaman metin verdiği için <class 'str'> yazılır. Düzeltme, değeri int’e çevirmektir:

Python
dogum_yili = int(input("Doğum yılınız: "))
yas = 2026 - dogum_yili
print("Yaşınız:", yas)
Çıktı
Doğum yılınız: 2004
Yaşınız: 22

\(\blacksquare\)

4.7 İletişim Pencereleri

Bu derste girdi ve çıktı için hep metin satırlarını kullanıyoruz; Python’da düğmeli ve kutulu pencerelerle çalışmak da mümkündür.

Python kurulumuyla birlikte gelen tkinter modülüyle pencereler, düğmeler ve giriş kutuları oluşturulabilir; turtle modülü de bir pencerede çizim yapmayı sağlar. easygui gibi kurulumla gelmeyen ve ayrıca yüklenen paketler de vardır. Bu modüller bir ekran penceresi açmaya ihtiyaç duyduğundan Colab’da doğrudan çalışmaz; IDLE ya da VS Code ile kendi bilgisayarımızda kullanılabilirler. Matematiksel hesap yapan programlarda pek tercih edilmezler.

4.8 Alıştırmalar

Girdi alan alıştırmalarda çıktıdaki kullanıcı girdileri örnek olarak seçilmiştir; farklı değerlerle de deneyin.

Alıştırma 4.1 (Santigrattan Fahrenhayta) Kullanıcıdan santigrat cinsinden bir sıcaklık alıp \(F = \frac{9}{5}C + 32\) formülüyle fahrenhayta çeviren bir program yazınız. Kullanıcı \(36{,}6\) girdiğinde ne yazılır?

Çözüm

Sıcaklık ondalıklı olabileceğinden float ile çeviririz. \(C = 36{,}6\) için \[F = 1{,}8 \cdot 36{,}6 + 32 = 65{,}88 + 32 = 97{,}88\]’dir. Sonucu f-string ile iki basamakla yazdıralım:

Python
c = float(input("Sıcaklık (°C): "))
f = 9 / 5 * c + 32
print(f"{c} °C = {f:.2f} °F")
Çıktı
Sıcaklık (°C): 36.6
36.6 °C = 97.88 °F

\(\blacksquare\)

Alıştırma 4.2 (Dairenin Alanı ve Çevresi) Kullanıcıdan bir yarıçap alıp dairenin alanını ve çevresini virgülden sonra üç basamakla yazan bir program yazınız. Kullanıcı \(2{,}5\) girdiğinde ne yazılır?

Çözüm

Alan \(\pi r^2\), çevre \(2\pi r\)’dir. \(r = 2{,}5\) için alan \(6{,}25\pi \approx 19{,}635\), çevre \(5\pi \approx 15{,}708\)’dir. \(\pi\) için math.pi kullanırız:

Python
import math
r = float(input("Yarıçap: "))
alan = math.pi * r ** 2
cevre = 2 * math.pi * r
print(f"Alan: {alan:.3f}")
print(f"Çevre: {cevre:.3f}")
Çıktı
Yarıçap: 2.5
Alan: 19.635
Çevre: 15.708

\(\blacksquare\)

Alıştırma 4.3 (Tarihi Noktalarla Yazmak) gun = 4, ay = 11 ve yil = 2026 değişkenlerini kullanarak ekrana 4.11.2026 yazdırınız: önce sep ile, sonra bir f-string ile.

Çözüm

print’e üç değer verip ayırıcı olarak nokta seçersek değerler aralarında nokta ile yazılır. f-string’de ise noktaları metnin içine kendimiz yazarız:

Python
gun = 4
ay = 11
yil = 2026
print(gun, ay, yil, sep=".")
print(f"{gun}.{ay}.{yil}")
Çıktı
4.11.2026
4.11.2026

\(\blacksquare\)

Alıştırma 4.4 (Kaçış Karakterlerinin Çıktısı) Aşağıdaki programın çıktısını bulunuz.

Python
print("ab\'c")
print("ab\"c")
print("ab\\c")
print("a\tb\nc")
Çözüm

\' tek tırnağı, \" çift tırnağı, \\ ters eğik çizgiyi temsil eder; bu yüzden ilk üç satırda ab'c, ab"c ve ab\c yazılır. Dördüncü satırda a ile b arasına bir sekme boşluğu girer, \n ise c’yi bir alt satıra geçirir.

Python
print("ab\'c")
print("ab\"c")
print("ab\\c")
print("a\tb\nc")
Çıktı
ab'c
ab"c
ab\c
a   b
c

\(\blacksquare\)

Alıştırma 4.5 (Güvenli Bölme) Kullanıcıdan iki sayı alıp birinciyi ikinciye bölen bir program yazınız. Kullanıcı sayı olmayan bir değer girerse ya da ikinci sayı sıfırsa program çökmeden uygun bir mesaj yazmalıdır. Kullanıcı 7 ve 0 girdiğinde ne yazılır?

Çözüm

İki hata türü olabilir: dönüşüm başarısız olursa ValueError, bölen sıfırsa ZeroDivisionError. İkisi için ayrı except blokları yazarız:

Python
try:
    a = float(input("Bölünen: "))
    b = float(input("Bölen: "))
    print(f"{a} / {b} = {a / b}")
except ValueError:
    print("Lütfen geçerli bir sayı girin.")
except ZeroDivisionError:
    print("Bölen sıfır olamaz.")
Çıktı
Bölünen: 7
Bölen: 0
Bölen sıfır olamaz.

b sıfır olduğu için a / b işleminde ZeroDivisionError oluştu; print çalışmadan ikinci except bloğuna geçildi. \(\blacksquare\)

Alıştırma 4.6 (format ile Sıra Numaraları) Aşağıdaki programın çıktısını bulunuz.

Python
print("{2}-{0}-{1}".format("a", "b", "c"))
print("{0}{0}{1}".format("ha", "!"))
print("{:.1f} ve {:.3f}".format(2 / 3, 2 / 3))
Çözüm

{2} üçüncü değeri, {0} birinciyi, {1} ikinciyi gösterir; birinci satırda c-a-b yazılır. İkinci satırda birinci değer iki kez kullanılır ve haha! yazılır. Üçüncü satırda \(2/3 = 0{,}666\ldots\) önce bir, sonra üç basamakla yuvarlanarak yazılır: 0.7 ve 0.667.

Python
print("{2}-{0}-{1}".format("a", "b", "c"))
print("{0}{0}{1}".format("ha", "!"))
print("{:.1f} ve {:.3f}".format(2 / 3, 2 / 3))
Çıktı
c-a-b
haha!
0.7 ve 0.667

\(\blacksquare\)

Alıştırma 4.7 (Kullanıcı Bilgi Kartı) Kullanıcıdan adını, yaşını ve boyunu alıp bunları başlıklı bir bilgi kartı olarak yazan bir program yazınız. Boy, virgülden sonra iki basamakla yazılsın.

Çözüm

Ad metin olarak kalır, yaş int’e, boy float’a çevrilir. Kartın başlığından önce bir boş satır bırakmak için metnin başına \n koyarız:

Python
isim = input("Adınızı girin: ")
yas = int(input("Yaşınızı girin: "))
boy = float(input("Boyunuzu girin (örnek: 1.75): "))
print("\nKullanıcı Bilgileri")
print("Ad  :", isim)
print("Yaş :", yas)
print(f"Boy : {boy:.2f} m")
Çıktı
Adınızı girin: Zeynep
Yaşınızı girin: 19
Boyunuzu girin (örnek: 1.75): 1.68

Kullanıcı Bilgileri
Ad  : Zeynep
Yaş : 19
Boy : 1.68 m

\(\blacksquare\)

Artık programlarımız kullanıcıdan değer alıp sonuçları düzenli bir biçimde gösterebiliyor ve hatalı girdilere karşı kendini koruyabiliyor. Ama her girdiye hep aynı şekilde davranıyorlar. Bir sonraki bölüm Karşılaştırma, Mantık Operatörleri ve Koşullu İfadeler, programın bir koşula göre farklı yollardan ilerlemesini sağlayan karar yapılarını ele alıyor.