Python’a geçiş: çalışma modeli, türler ve temel ifadeler

Bu bölümde programlamayı sıfırdan öğrenmeyeceğiz. Değişken, ifade, girdi, çıktı ve veri türü gibi kavramları daha önce C ile gördünüz. Bu hafta C’de yazdığınız türden kısa bir programı Python’a çevireceğiz. Yazımın nerede değiştiğini ve iki dilin nerede farklı çalıştığını göreceğiz. Bölümün sonunda da dönem boyunca kullanacağımız Python’ı kendi bilgisayarınıza kuracaksınız.

Bu bölümün kapsamı

NoteSınavda sorulur
  • C’den Python’a geçerken değişen yazım kuralları: noktalı virgül, süslü parantez, : ve yorum satırı
  • Girintinin blok yapısının parçası olması
  • C’nin derlenmesi ile Python’ın yorumlanması: hatanın ne zaman ortaya çıktığı ve hız farkı
  • Tür bilgisinin değişken adında değil değerde durması
  • input() dönüşünün str olması ve açık tür dönüşümü
  • /, //, % ve ** operatörlerinin ayrımı
  • Negatif sayılarda // ve % davranışının C’den farkı
  • and, or, not ile karşılaştırma ifadeleri
  • f-string ile okunabilir çıktı
  • Python ve VS Code kurulumunun adımları
  • Windows’ta py / Microsoft Store yönlendirmesi ayrıntısı
  • float değerlerin ikili gösterim ayrıntıları
  • Bytecode ve __pycache__ ayrıntısı
  • Etkileşimli kabukta deneme yapmak

Kurulumu yapmanız gerekiyor, ama adımlarını ezberlemeniz beklenmiyor. Float ayrıntısı ise ileride karşınıza çıkacak.

Bu C programı Python’a çevrilince ne değişir?

Programlama Temelleri’nde buna benzer bir program yazmış olabilirsiniz. Program vize ve final notunu okuyor, ortalamayı hesaplıyor ve öğrencinin geçip geçmediğini yazıyor:

#include <stdio.h>

int main(void) {
    int midterm, final;
    scanf("%d", &midterm);
    scanf("%d", &final);

    // vize %40, final %60
    int average = (midterm * 4 + final * 6) / 10;

    if (average >= 50 && final >= 50) {
        printf("Geçti, ortalama: %d\n", average);
    } else {
        printf("Kaldı, ortalama: %d\n", average);
    }
    return 0;
}

Bu programı Python’a satır satır çevirdiğinizi düşünün. Hangi satırlar olduğu gibi kalır, hangileri değişir? Okumaya devam etmeden önce aklınıza gelen farkları bir kenara yazın.

Bazı farkları hemen görürsünüz, noktalı virgül bunlardan biri. Bazıları ise yazımda görünmez, ancak program çalışınca ortaya çıkar. Kullanıcı vize için 45, final için 64 yazdığında C programı Geçti, ortalama: 56 yazar. Python’a satır satır çevrilmiş hâli ise nasıl çevirdiğinize göre ya hata verir ya da 56 yerine başka bir sayı yazar.

Bölüm bu farkları sırayla anlatıyor. Sonunda programın Python hâlini birlikte yazacağız, siz de listenizi onunla karşılaştıracaksınız.

C’den gelince yazımda değişenler

Bir dilin yazım kurallarına söz dizimi (syntax) denir. Söz dizimine uymayan bir dosya hiç çalışmaz, Python ilk satırı bile çalıştırmadan SyntaxError verir. Açılıştaki programın yazımı Python’da şu yerlerde değişir:

C’de Python’da
#include <stdio.h> ve int main(void) { ... } Gerekmez. Python dosyayı ilk satırdan başlayarak çalıştırır.
Her deyimin sonunda ; Yazılmaz. Her satır bir deyimdir.
Bloğu { ve } sınırlar Blok, satır sonundaki : ile açılır ve girintili satırlardan oluşur.
if (average >= 50) if average >= 50: yazılır. Koşulun çevresinde parantez gerekmez.
} else { else: yazılır.
// vize %40, final %60 # vize %40, final %60. Yorum # ile başlar.

Açılıştaki if bloğu Python’da şöyle yazılır:

# vize %40, final %60
if average >= 50 and final >= 50:
    print("Geçti")
else:
    print("Kaldı")

&& yerine gelen and sözcüğünü “Temel operatörler” başlığında göreceğiz.

C alışkanlığıyla iki hata sık yapılır. Birincisi, satır sonuna ; koymaktır. Python buna hata vermez, ama Python kodunda bu alışkanlık yoktur, siz de yazmayın. İkincisi, yorumu // ile başlatmaktır. Python’da // yorum değil, bir bölme operatörüdür. // vize %40 satırı bu yüzden SyntaxError verir.

Girinti neden söz diziminin parçası?

Python’da {} ile blok sınırı çizmek yerine girinti kullanılır. Aşağıdaki kod hücresinde (sayfada Run Code düğmesi olan kod kutusu) score değeri 30:

İlk iki print koşul bloğundadır. Son satır blok dışındadır. C’de derleyici girintiye bakmaz, bloğu {} belirler. Python’da ise bloğun nerede başlayıp bittiğini girinti söyler.

Girinti bozulduğunda iki şey olabilir. İkisini de yukarıdaki hücrede deneyin:

  • İkinci print satırının girintisini silerseniz hata çıkmaz. Satır hata vermeden bloğun dışına çıkar ve koşul yanlışken de Tebrikler yazılır.
  • if satırının hemen altındaki satırın girintisini silerseniz Python IndentationError verir, çünkü if satırından sonra girintili bir blok bekler.

Birinci durum daha tehlikelidir, çünkü program hata vermeden yanlış çalışır. Bu bölümde aynı türden iki fark daha göreceksiniz: input() ile okunan değer ve bölme işlemleri.

WarningSekmeyle boşluğu karıştırmayın

Aynı blokta sekme (Tab) ve boşluk karışırsa Python TabError verebilir. VS Code, Python dosyasında Tab tuşuna bastığınızda dört boşluk koyar. Editörün otomatik girintisini kullanın ve her girinti düzeyi için dört boşluk yazın.

C derlenir, Python yorumlanır

Açılıştaki C programını çalıştırmadan önce derlersiniz. Derleyici (ör. gcc) bütün kaynak kodu baştan sona okur. Bir hata bulursa çalıştırılacak program hiç oluşmaz. Hata yoksa işlemcinin doğrudan çalıştırabildiği makine kodunu içeren bir dosya oluşturur, Windows’ta bu bir .exe dosyasıdır. Program bundan sonra derleyiciye gerek duymadan çalışır. C’ye bu yüzden derlenen dil denir.

Python’da böyle ayrı bir adım yoktur. python hesap.py yazdığınızda yorumlayıcı (interpreter) dosyayı okur ve satırları sırayla çalıştırır. Python’a bu yüzden yorumlanan dil denir. Bu farkın iki sonucu var.

Hata ne zaman çıkar? Aşağıdaki programın ikinci satırı hatalı:

print("Başladı")
toplam = "20" + 1
print(toplam)

Python ilk satırı çalıştırır ve Başladı yazar. Hata ancak ikinci satıra gelince TypeError olarak çıkar. C’de tür uyuşmazlıklarının çoğunu derleyici, program çalışmadan önce bildirir. Python’da ise bir satırdaki hatayı o satır çalışana kadar göremeyebilirsiniz. Hiç çalışmayan bir if dalındaki hata, program yüzlerce kez çalışsa da gizli kalabilir. Bu yüzden programınızı her dalı en az bir kez çalıştıracak girdilerle deneyin. Söz dizimi hataları bunun dışındadır: Python onları dosyayı çalıştırmaya başlamadan bulur. if satırının sonundaki : eksikse ilk satır bile çalışmaz.

Hız. C programı işlemcinin doğrudan anladığı koda çevrildiği için hızlı çalışır. Python’da yorumlayıcı her adımda işe karışır: değerin türüne bakar, + işaretinin o tür için ne demek olduğunu bulur, sonra işlemi yapar. Bu yüzden aynı döngü Python’da çoğu zaman C’dekinden kat kat yavaş çalışır. Buna karşılık Python’da derlemeyi beklemeden bir satırı değiştirip hemen deneyebilirsiniz. Ağır hesap yapan Python kütüphaneleri de asıl işi C ile yazılmış koda bırakır. Bu derste yazacağımız küçük programlarda hız farkını hissetmezsiniz.

Derlenir, ama C’deki gibi değil. Kullandığımız Python yorumlayıcısı (CPython) kodu çalıştırmadan önce bytecode denen bir ara koda çevirir. Bytecode işlemcinin anladığı makine kodu değildir, onu da yorumlayıcı adım adım çalıştırır. 4. haftada bir modülü import ile içe aktardığınızda klasörde beliren __pycache__ dizini bu kodu saklar. “Derlenen” ve “yorumlanan” aslında dilin değil, onu çalıştıran aracın özelliğidir. Günlük dilde yine de C’ye derlenen, Python’a yorumlanan dil denir.

Değişken bildirimi yok

Açılıştaki C programı int midterm, final; satırıyla iki değişken bildiriyor. C’de değişkenin türünü bildirim sırasında açıkça yazarız:

int age = 20;
double average = 78.5;

Python’da ayrı bir bildirim yoktur. Atama, adı bir değere bağlar; türü yazmayız:

age = 20
average = 78.5

Aynı ad sonra başka türde bir değere de bağlanabilir. Şemada age adı önce 20 sayısına, sonra "20" metnine bağlanıyor:

age = 20 satırından sonra age adı, değeri 20 ve türü int olan bir nesneyi gösterir. Sonra age adına 20 metni atanınca aynı ad, türü str olan başka bir nesneyi gösterir. Tür bilgisi adda değil nesnededir.

Adın değere bağlanması

Bu, Python’da türlerin olmadığı anlamına gelmez. 20 bir int, 78.5 bir float değeridir. Python bellekteki her değeri bir nesne olarak tutar. Şimdilik nesneyi, değerle birlikte türünü de taşıyan bir bellek parçası olarak düşünün. Nesne kavramını 6. haftada ayrıntılı göreceğiz.

Important“Tür yok” değil, “tür değerde”

Python’ın tür sistemi hem dinamik hem güçlüdür. Dinamik: tür bilgisi çalışma anında değerle gelir; aynı ad sonra farklı türde bir değere bağlanabilir. Güçlü: Python metni sayıya, sayıyı metne kendiliğinden çevirmez; "20" + 1 hata vermeden 21 olmaz, TypeError verir. Sayılar arasında ise çevirir: 1 + 2.5 işleminde 1 önce float olur ve sonuç 3.5 çıkar. Adın türü sabit olmadığı için bir adın o anda hangi türde değere bağlı olduğunu da siz takip edersiniz.

Türe type() ile bakın

Aşağıdaki Python kodunu çalıştırmadan önce her satırın ne yazdıracağını tahmin edin.

True ve False bool türündendir. C’de doğru ve yanlış için çoğunlukla 1 ve 0 kullanılır; Python’da bu iki değerin kendi türü vardır ve büyük harfle yazılır.

type() bir değerin o anki türünü gösterir. Bu derste “bu değer sandığım türde mi?” sorusunu sık sık type() ile yanıtlayacağız.

input() her zaman metin döndürür

C’de scanf() biçim belirteciyle doğrudan sayısal değişkene veri okuyabilirsiniz. Python’da input() kullanıcının yazdığını metin olarak döndürür.

input ile alınan metnin sayısal işlem öncesinde uygun türe dönüştürülmesini gösteren akış.

input() ve tür dönüşümü

Sayfadaki hücreler klavyeden girdi beklemez. Kullanıcının yazacağı değeri bu yüzden bir değişkene sabit olarak veriyoruz. Böylece hücrenin ne göstereceği tarayıcıda da PDF’de de önceden bellidir:

Yerel Python ortamında kullanıcıdan veri almak istediğimizde input() kullanabiliriz. Sayısal işlem yapmak istiyorsak açık dönüşüm gerekir:

age = int(input("Yaş: "))
price = float(input("Fiyat: "))

int() yalnızca tamsayı gibi yazılmış bir metni çevirebilir. Kullanıcı abc yazarsa program ValueError ile durur. int("3.5") de aynı hatayı verir, çünkü 3.5 bir tamsayı yazımı değildir. Bu hatada tür doğrudur (int() bir str alabilir); sorun metnin içeriğindedir.

Tahmin et

İlk sonuç neden 15 değil? Çünkü +, iki str değeri için metin birleştirme anlamına gelir.

Açılıştaki programda scanf("%d", &midterm) satırını midterm = input() diye çevirirseniz aynı tuzağa düşersiniz. Kullanıcı 45 yazınca midterm * 4 işlemi "45454545" metnini verir, çünkü * bir metni tekrarlar. Program hata vermeden ilerler ve ancak / 10 işlemine gelince TypeError verir. Doğru karşılık midterm = int(input()) satırıdır.

Temel operatörler

Amaç Python Örnek
toplama + a + b
çıkarma - a - b
çarpma * a * b
gerçek bölme / 7 / 2 → 3.5
taban bölme // 7 // 2 → 3
kalan % 7 % 2 → 1
üs ** 2 ** 3 → 8
eşitlik == score == 50
eşit değil != score != 50
küçük / büyük <, > age > 18
küçük-eşit / büyük-eşit <=, >= score >= 50
mantıksal ve and age >= 18 and active
mantıksal veya or admin or owner
mantıksal değil not not active

C’deki &&, || ve ! yerine Python’da okunabilir sözcükler kullanılır: and, or, not.

Bölmede de açılıştaki programı ilgilendiren bir fark var. C’de iki int bölününce sonuç yine int olur. Vize 45, final 64 iken 564 / 10 işlemi 56 verir. Python’da / her zaman float döndürür, aynı işlem 56.4 olur. C’deki tamsayı bölmesinin Python’daki karşılığı // operatörüdür.

Python karşılaştırmaları zincirleme yazmanıza da izin verir. 0 <= score <= 100 ifadesi 0 <= score and score <= 100 anlamına gelir. C’de aynı yazım derlenir ama başka bir şey hesaplar: önce 0 <= score sonucu 0 ya da 1 olur, sonra bu sonuç 100 ile karşılaştırılır.

Negatif sayılarda // ve %: C alışkanlığını taşımayın

Pozitif sayılarda // ve %, C’deki tamsayı bölmesi ve kalanla aynı sonucu verir. Negatif sayılarda ise iki dil ayrılır. C’de eksi yediyi ikiye bölen ve kalanı bulan şu iki satırı düşünün:

printf("%d\n", -7 / 2);
printf("%d\n", -7 % 2);

Python’daki karşılığı aşağıda. Çıktıya bakmadan önce iki dilin aynı sonucu verip vermediğini tahmin edin:

Python sonucu -4 ve 1 olur. Python’da // sonucu aşağıya doğru (floor) yuvarlar. C’de tamsayı bölmesi sıfıra doğru kırpılır (C99’dan beri standart gereği); bu yüzden C’de -7 / 2 ve -7 % 2 hesabı -3 ve -1 verir. Python’da bölüm ve kalan şu ilişkiyi korur:

a == (a // b) * b + (a % b)

-7 için kontrol edelim: (-4) * 2 + 1 işlemi -7 eder. Bölüm aşağı yuvarlandığı için kalan, bölenle aynı işareti alır.

Bu nedenle negatif değerli indeks, takvim, döngüsel sayaç veya koordinat hesabında C’deki sonucu varsaymayın; küçük bir örnekle doğrulayın.

Birleşik atamalar

Python’da da mevcut değeri güncelleyen kısa yazımlar kullanılır:

balance += 50
stock -= 1
price *= 0.90
average /= 2

Örneğin stock -= 1 yazmak, stock = stock - 1 yazmakla aynıdır. Sonraki haftalarda bir hesabın bakiyesini ya da bir ürünün stoğunu güncellerken bu yazımı sık göreceksiniz.

C’den gelirken iki farka dikkat edin:

  • Python’da ++ ve -- operatörü yoktur; stock++ bir söz dizimi hatası (SyntaxError) verir. Daha sinsi olanı ++stock: hata vermez ama hiçbir şeyi değiştirmez, çünkü Python onu iki kez art arda yazılmış + işareti olarak okur. Artırmak için stock += 1 yazın.
  • /= işleminin sonucu her zaman float olur. count = 7 iken count /= 2 sonucu 3.5 olur; C’deki gibi 3 değil.

f-string ile okunabilir çıktı

Değişkenleri metne yerleştirmenin en okunabilir yollarından biri f-string’dir:

Tırnağın önündeki f harfi sayesinde Python {...} içindeki ifadeleri hesaplar ve sonucu metnin o noktasına koyar. :.1f kısmı C’deki printf("%.1f") ile aynı işi yapar: değeri tek ondalık basamağa yuvarlayarak yazar. Böylece "Not: " + str(score) gibi, her değeri str() ile çevirip + ile eklediğimiz uzun satırlara gerek kalmaz.

Açılıştaki printf("Geçti, ortalama: %d\n", average) satırı Python’da print(f"Geçti, ortalama: {average}") olur. print() satır sonunu kendisi ekler, \n yazmanız gerekmez.

Açılıştaki programın Python hâli

Bölümün başındaki C programı Python’da şöyle yazılır:

midterm = int(input())
final = int(input())

# vize %40, final %60
average = (midterm * 4 + final * 6) // 10

if average >= 50 and final >= 50:
    print(f"Geçti, ortalama: {average}")
else:
    print(f"Kaldı, ortalama: {average}")

Vize 45, final 64 girildiğinde program C’deki gibi Geçti, ortalama: 56 yazar. Değişen yerler şunlar:

  • #include, main ve return 0 satırları yok. Python dosyayı ilk satırdan çalıştırır.
  • Noktalı virgül ve süslü parantez yok. if ve else satırları : ile biter, bloğu girinti belirler.
  • Yorum // ile değil # ile başlar.
  • int midterm, final; bildirimi yok. Tür, adın bağlandığı değerde durur.
  • scanf("%d", ...) yerine int(input()) yazılır, çünkü input() metin döndürür.
  • Ortalama // ile hesaplanır. / yazılırsa sonuç 56.4 olur.
  • && yerine and yazılır.
  • printf yerine f-string kullanılır.

Bölümün başında yazdığınız listeyle karşılaştırın. input() ve / farkları listenizde var mıydı? Bu ikisi yazımda görünmez, program ancak çalışınca ortaya çıkar.

Alıştırma: C kodunu Python’a çevir

Aşağıdaki C kodunun davranışını düşünün:

int first = 40;
int second = 60;
double average = (first + second) / 2.0;
printf("%.1f\n", average);

Python karşılığındaki boşluğu tamamlayın.

C’de 2.0 yazmanızın nedeni tamsayı bölmesinden kaçmaktı. Python’da / işleminin sonucu hangi türdür?

average = (first + second) / 2

Alıştırma: Tür hatasını bul

Aşağıdaki kod bilerek hatalı yazıldı:

Önce hata türünü tahmin edin. Ardından age değerini uygun biçimde dönüştürerek programın 21 yazdırmasını sağlayın.

Bu hata söz dizimi hatası değildir. Kodun yazımında bir sorun yok, ama str ile int doğrudan toplanamaz. Bu yüzden hata program çalışırken çıkar: TypeError. Düzeltmek için next_year = int(age) + 1 yazın.

Alıştırma: İfadeyi değiştir

Aşağıdaki program bir ürünün KDV dâhil tutarını hesaplıyor.

Şunları sırayla deneyin:

  1. Fiyatı 399.90 yapın.
  2. KDV oranını %10 yapın (vat_rate = 0.10).
  3. f-string’deki :.2f kısmını silip çalıştırın. Sonra :.2f kısmını geri koyun ve print(round(final_price, 2)) satırını ekleyin. İki çıktıyı karşılaştırın: :.2f yalnızca yazılışı biçimlendirir, round() ise yeni bir sayı döndürür.
  4. print(type(final_price)) satırını ekleyip sonucu inceleyin.

Çalışma ortamını hazırlayın

Bu bölümdeki kodları şimdiye kadar sayfadaki hücrelerde çalıştırdık. Hücreler Python’ı tarayıcıda çalıştırır, kısa denemeler için kurulum gerekmez. Ancak 4. haftadan itibaren birden fazla dosyayla, 13. haftada da Python paketleriyle çalışacağız. Bu yüzden bu derste çoğunlukla kendi bilgisayarınıza kurduğunuz Python’ı (yerel Python ortamını) kullanacağız.

Önce şu üç parçayı birbirinden ayırın:

  • Python yorumlayıcısı: .py dosyasını gerçekten çalıştırır.
  • Visual Studio Code (VS Code): kodu yazıp düzenlediğimiz editördür.
  • Microsoft Python eklentisi: VS Code bu eklentiyle Python kodunu tanır. Hangi Python yorumlayıcısıyla çalışacağınızı da buradan seçersiniz.

Python’ı kurun ve sürümü doğrulayın

Python’ı resmî python.org/downloads sayfasından kurun. İlerleyen haftalarda list[str] ve Product | None gibi yazımlar kullanacağız. Bunlar için Python 3.10 veya daha yeni bir sürüm gerekir. Desteği süren en yeni sürümü kurun.

Windows’ta Python 3.14’ten beri önerilen kurulum yolu Python install manager programıdır. Bu programı python.org indirme sayfasından indirebilirsiniz; Microsoft Store’daki Python Install Manager da aynı programdır. Bilgisayarda henüz Python yoksa ilk python ya da py komutu güncel sürümü kendisi indirir. Eski anlatımlarda geçen, Add Python to PATH seçenekli kurulum programı 3.14’ten beri önerilmiyor ve 3.16’dan sonra hiç yayımlanmayacak.

Kurulumdan sonra yeni bir terminal açın. Windows’ta Başlat menüsüne Terminal yazın (Windows 10’da PowerShell). VS Code içinden de Terminal > New Terminal menüsüyle açabilirsiniz. Ardından sürümü kontrol edin:

py --version

py komutu bulunamazsa:

python --version

macOS ve Linux’ta:

python3 --version

Ekranda Python 3.10 ya da daha yeni bir sürüm görmelisiniz.

WarningWindows’ta python Microsoft Store’u açıyorsa

Terminal gerçek bir Python yorumlayıcısı bulamıyor demektir. Install manager’ı kurduğunuzdan emin olun. Ardından Başlat menüsünde Uygulama yürütme diğer adlarını yönet sayfasını açıp Python (default) diğer adlarının açık olduğunu kontrol edin; açıksa bir kez kapatıp yeniden açın. Bu diğer adları kapatmayın; install manager python ve py komutlarını onlar üzerinden çalıştırır.

Etkileşimli kabukta deneyin

C’de küçük bir şeyi denemek için bile dosya yazıp derlemeniz gerekiyordu. Python’da buna gerek yok. Terminale py yazdığınızda (macOS ve Linux’ta python3) aynı pencerede >>> işareti belirir. Bu hâline etkileşimli kabuk (interactive shell) denir: yazdığınız her satırı Python hemen çalıştırır ve sonucunu altına yazar.

Bu bölümdeki iki farkı kabukta kendiniz görün:

>>> 7 / 2
3.5
>>> -7 // 2
-4
>>> type("45")
<class 'str'>
>>> exit()

>>> işaretini siz yazmazsınız. Python sıranın size geldiğini göstermek için onu kendisi koyar.

WarningKabukta sonuç kendiliğinden görünür, dosyada print() gerekir

Kabukta 7 / 2 yazınca altında 3.5 görünür. Aynı satırı hafta01.py dosyasına yazıp çalıştırırsanız ekranda hiçbir şey çıkmaz. Kabuk, yazdığınız işlemin sonucunu kendiliğinden gösterir. Dosyadaki programda ise C’deki gibi yalnızca yazdırdığınız görünür, burada printf yerine print() ile.

VS Code ve Python eklentisi

  1. code.visualstudio.com adresinden VS Code’u kurun.
  2. Sol taraftaki Extensions / Eklentiler bölümünde (Ctrl+Shift+X) Python aratıp yayıncısı Microsoft olan eklentiyi kurun.
  3. VS Code yorumlayıcıyı kendiliğinden bulamazsa Komut Paleti’ni (Ctrl+Shift+P) açıp Python: Select Interpreter komutuyla az önce doğruladığınız Python 3 sürümünü seçin.

Ders için bir klasör açıp hafta01.py oluşturun:

print("Merhaba, Python!")

Dosyayı kaydedin ve sağ üstteki Run Python File düğmesiyle çalıştırın. Terminalden çalıştırmak için Windows’ta py hafta01.py, macOS ve Linux’ta python3 hafta01.py yazın. Terminalin dosyanın bulunduğu klasörde açık olması gerekir. VS Code’un Terminal > New Terminal menüsüyle açılan terminal zaten açtığınız klasörde başlar.

TipKurulumda takılırsanız AI’dan yardım isteyebilirsiniz

Kurulum ve ortam sorunlarında AI (yapay zekâ) araçlarını kullanabilirsiniz. İşletim sisteminizi, yaptığınız adımı ve hata mesajını olduğu gibi verin. Örneğin: “Windows kullanıyorum, py --version şu hatayı veriyor: … Sırayla neleri kontrol etmeliyim?” Önerilen komutun ne yaptığını anlamadan uygulamayın; parola, erişim anahtarı veya kişisel bilgi paylaşmayın.

ImportantBu haftanın yerel ortam kontrolü

Gelecek haftaki derse kadar bilgisayarınızda hafta01.py dosyasını hem VS Code’dan hem terminalden en az bir kez çalıştırın. Böylece 4. ve 13. haftadaki çok dosyalı görevlerde ilk kez çalışma ortamıyla uğraşmak zorunda kalmazsınız.

Sıra sizde: Ölçüm dönüştürücü

Santimetre cinsinden bir uzunluğu metreye dönüştüren kısa bir program yazın. Örnek:

Girdi: 175
Çıktı: 1.75 metre

Sayfadaki hücrede sabit bir cm değeri kullanın. Kendi bilgisayarınızda aynı çözümü, değeri input() ile kullanıcıdan alacak biçimde genişletin ve çıktıyı f-string ile yazdırın.

Çözümünüz şu üç adımdan oluşsun:

  1. Değeri alma ya da örnek değeri belirleme
  2. Sayısal dönüşüm ve hesaplama
  3. Sonucu yazdırma

Başarı ölçütü: hafta01.py dosyanız en az iki farklı girdiyle doğru sonuç versin. Kullandığınız Python sürümünü dosyanın sonuna yorum satırı olarak yazın. Python’da yorum # ile başlar (C’deki // gibi):

# Python 3.14.0

Sınav provası

Önce kendi cevabınızı seçin; sonra cevap anahtarında her şıkkın neden doğru veya yanlış olduğunu okuyun. Çeldiriciler uydurma değil, bu konuda gerçekten yapılan hatalardır. Sınav maddeleri de bu mantıkla yazılır.

Madde 1. C’de int age = 20; yazarken Python’da yalnızca age = 20 yazmak neyi anlatır?

  • A. Tür yalnızca print() çağrısında belirlenir
  • B. Python age adını kendiliğinden int olarak bildirir ve başka tür atanamaz
  • C. Değerin bir türü vardır; tür bilgisi değişken adına değil, adın bağlandığı değere aittir
  • D. Python’da tür kavramı yoktur; bütün değerler aynı biçimde saklanır
  • E. Python bütün sayıları float olarak tutar, bu yüzden bildirim gerekmez

Madde 2. Aşağıdaki program ne yazdırır?

value = 20
value = "yirmi"
print(type(value))
  • A. <class 'int'>
  • B. Hata verir; bir ada farklı türde değer atanamaz
  • C. <class 'object'>
  • D. int, str
  • E. <class 'str'>

Madde 3. Aşağıdaki program ne yazdırır?

x = "10"
y = "5"
print(x + y)
  • A. 10 5
  • B. 105
  • C. "10" + "5"
  • D. 15
  • E. TypeError

Madde 4. age = input("Yaş: ") satırından sonra age + 1 yazılırsa ne olur?

  • A. input() çağrısı sayı için int, metin için str döndürür
  • B. TypeError oluşur; input() str döndürdüğü için önce int(age) gerekir
  • C. ValueError oluşur
  • D. Sonuç, girilen metnin sonuna 1 eklenmiş hâlidir
  • E. Kullanıcı sayı yazdıysa Python metni kendiliğinden sayıya çevirir

Madde 5. Aşağıdaki program ne yazdırır?

print(7 / 2)
print(7 // 2)
print(7 % 2)
  • A. 3.5, 4, 1
  • B. 3.5, 3.5, 1
  • C. 3.5, 3, 0.5
  • D. 3, 3, 1
  • E. 3.5, 3, 1

Madde 6. Aşağıdaki program ne yazdırır?

print(-7 // 2)
print(-7 % 2)
  • A. -3 ve -1
  • B. -3.5 ve 1
  • C. -4 ve -1
  • D. -4 ve 1
  • E. -3 ve 1

Madde 7. score = 87.456 iken print(f"Not: {score:.1f}") ne yazdırır?

  • A. Not: {score:.1f}
  • B. Not: 87
  • C. Not: 87.4
  • D. Not: 87.5
  • E. Not: 87.456

Madde 8. Aşağıdaki program score = 30 iken ne yazdırır?

if score >= 50:
    print("Geçti")
    print("Tebrikler")

print("Program bitti")
  • A. Hiçbir şey yazmaz
  • B. Geçti, Tebrikler ve Program bitti
  • C. Yalnızca Program bitti
  • D. Yalnızca Tebrikler
  • E. IndentationError verir

Madde 9. age = 20 ve active = False iken aşağıdaki program ne yazdırır?

print(age >= 18 and active)
print(age >= 18 or active)
print(not active)
  • A. False, True, True
  • B. False, False, True
  • C. True, True, False
  • D. Hata verir; and yerine && yazılmalıdır
  • E. True, False, True

Madde 10. Aşağıdaki program çalıştırılınca ne olur?

print("Başladı")
toplam = "20" + 1
print(toplam)
  • A. Başladı ve 201 yazılır
  • B. Başladı yazılır, ardından ikinci satırda TypeError çıkar
  • C. Başladı yazılır ve program hata vermeden biter
  • D. Hiçbir şey yazılmaz; Python tür hatasını program çalışmadan önce bulur
  • E. Başladı ve 21 yazılır

Madde 11. C’den gelen bir öğrenci şu programı yazdı. Program çalıştırılınca ne olur?

# vize ve final okunuyor
midterm = int(input());
final = int(input())
// ortalama hesaplanıyor
average = (midterm + final) // 2
  • A. Dördüncü satır yüzünden, hiç girdi istemeden SyntaxError verir
  • B. Program iki sayıyı okur, dördüncü satıra gelince hata verir
  • C. Program hatasız çalışır, dördüncü satır yorum olarak atlanır
  • D. Birinci satırdaki # yüzünden SyntaxError verir
  • E. İkinci satırın sonundaki ; yüzünden SyntaxError verir

Madde 1. Doğru: C. 20 bir int nesnesidir. age yalnızca o nesneye bağlanan addır; ad önceden bir türe bildirilmez.

  • A yanlış: Tür değerin kendisine aittir ve print() çağrılmasa da vardır.
  • B yanlış: Aynı ad sonradan age = "yirmi" ile bir str değere bağlanabilir; bildirim yoktur.
  • D yanlış: type(20) int verir. Tür vardır; ama tür bilgisi adda değil, değerin kendisinde durur.
  • E yanlış: type(20) int döndürür; int ve float ayrı türlerdir.

Madde 2. Doğru: E. Ad son atamayla str değere bağlanır; type() o anki değerin türünü verir.

  • A yanlış: İlk atamanın türü adda saklanmaz; ikinci atama bağı değiştirir.
  • B yanlış: Python’da ad bildirimi olmadığı için bu atama geçerlidir.
  • C yanlış: type() en genel türü değil, değerin kendi türünü verir.
  • D yanlış: Ad tek bir değere bağlıdır; türlerin listesi tutulmaz.

Madde 3. Doğru: B. İki str değer için + metin birleştirmedir; toplama değildir.

  • A yanlış: + araya boşluk koymaz. Boşluğu print(x, y) yazımındaki virgül koyar.
  • C yanlış: print() ifadenin değerini yazar, kodun kendisini değil.
  • D yanlış: Sayısal toplama için önce int(x) + int(y) yazmak gerekir.
  • E yanlış: Aynı türden iki str için + geçerlidir; hata farklı türler karışınca çıkar.

Madde 4. Doğru: B. str ile int toplanamaz. Sayısal işlem için açık dönüşüm yazılmalıdır.

  • A yanlış: Dönüş türü girilen içeriğe göre değişmez; her zaman strdir.
  • C yanlış: ValueError, içeriği uygun olmayan bir metni çevirmeye çalışınca çıkar; burada sorun türlerin uyuşmamasıdır.
  • D yanlış: Bu ancak age + "1" yazılsaydı olurdu; 1 bir inttir.
  • E yanlış: Böyle bir örtük dönüşüm yoktur; girdi her zaman metindir.

Madde 5. Doğru: E. / gerçek bölmedir ve float verir; // tabana yuvarlar; % kalanı verir.

  • A yanlış: // en yakına değil aşağıya yuvarlar.
  • B yanlış: // sonucu aşağı yuvarlar; burada 3 olur.
  • C yanlış: % tamsayılarda kalanı verir; ondalık artığı değil.
  • D yanlış: / tamsayı bölme değildir; sonucu 3.5’tir.

Madde 6. Doğru: D. Python // sonucunu aşağıya (floor) yuvarlar; kalan bölenin işaretini alır.

  • A yanlış: Bu C’nin sıfıra kırpan davranışıdır; Python’da geçerli değildir.
  • B yanlış: // gerçek bölme değildir; tamsayılarda tamsayı verir.
  • C yanlış: Python’da kalanın işareti bölenin işaretiyle aynıdır; burada bölen pozitiftir.
  • E yanlış: Bölüm ve kalan birlikte a == (a // b) * b + (a % b) ilişkisini korumalıdır; -3 bunu bozar.

Madde 7. Doğru: D. :.1f biçim belirteci değeri bir ondalık basamağa yuvarlayarak yazar.

  • A yanlış: Tırnağın önündeki f sayesinde Python süslü parantezin içini hesaplar.
  • B yanlış: .1f bir ondalık basamak bırakır; tamsayıya çevirmez.
  • C yanlış: Kesme değil yuvarlama yapılır; 87.456 → 87.5.
  • E yanlış: Biçim belirteci yok sayılmaz; basamak sayısını sınırlar.

Madde 8. Doğru: C. İlk iki print girintili olduğu için bloğun içindedir ve koşul yanlışken atlanır. Son satır blok dışındadır.

  • A yanlış: Son print bloğun dışındadır ve her durumda çalışır.
  • B yanlış: Koşul yanlıştır; blok içindeki satırlar çalışmaz.
  • D yanlış: Bloktaki iki satır aynı koşula bağlıdır; biri seçilip diğeri atlanmaz.
  • E yanlış: Girinti tutarlıdır; söz dizimi geçerlidir.

Madde 9. Doğru: A. and her iki yanın da doğru olmasını ister; or birinin doğru olmasını yeter sayar; not değeri tersine çevirir.

  • B yanlış: age >= 18 doğru olduğu için or sonucu doğrudur.
  • C yanlış: active yanlış olduğu için and sonucu yanlıştır ve not active doğrudur.
  • D yanlış: Python’da mantıksal operatörler and, or ve not sözcükleridir.
  • E yanlış: and ve or sonuçları ters yazılmış.

Madde 10. Doğru: B. Python satırları sırayla çalıştırır. Tür hatası ancak o satır çalışınca ortaya çıkar; ilk satır o ana kadar çalışmış olur.

  • A yanlış: Metin ile sayı + ile birleşmez. Birleştirmek için "20" + str(1) yazmak gerekir.
  • C yanlış: İkinci satır çalışır ve TypeError verir. Hata atlanmaz, program o satırda durur.
  • D yanlış: Bu, C derleyicisinden kalan bir beklentidir. Python çalıştırmadan önce yalnız yazım hatalarını arar, tür hatalarını aramaz.
  • E yanlış: Python metni sayıya kendiliğinden çevirmez; "20" + 1 hata verir.

Madde 11. Doğru: A. Python’da // yorum değil bölme operatörüdür; // ortalama hesaplanıyor satırı yazım kurallarına uymaz. Python söz dizimi hatalarını dosyayı çalıştırmaya başlamadan bulur, bu yüzden ilk input() bile çalışmaz. Yorum # ile başlar.

  • B yanlış: Satırların sırayla çalıştığını bilen öğrenci hatanın da sırası gelince çıkacağını düşünür. Tür hatası gibi çalışma anı hataları gerçekten o satıra gelince çıkar. Söz dizimi hatası ise dosya çalışmadan önce bulunur; program hiç girdi istemez.
  • C yanlış: // C’de yorum başlattığı için bu satır zararsız görünür. Python’da ise // yorum başlatmaz. Python’da yorum # ile başlar.
  • D yanlış: C’de # önişlemci satırlarını başlattığı için burada yabancı görünebilir. Oysa # Python’da yorum başlatır. Satırın geri kalanı yok sayılır.
  • E yanlış: C alışkanlığıyla yazılan ; göze batar. Python kodunda bu alışkanlık yoktur, ama yazım geçerlidir; satır sonundaki ; hata vermez. Hata dördüncü satırdan gelir.

Tek sayfa özet

  • Python’da satır sonunda ;, blok için {} yoktur. if ve else satırları : ile biter, bloğu girinti belirler. Yorum # ile başlar; // bir bölme operatörüdür.
  • C derlenir, Python yorumlanır. Python’da tür hatası ancak o satır çalışınca ortaya çıkar. Aynı döngü Python’da genellikle C’dekinden yavaştır.
  • Python’da tür bilgisi değişken adında değil değerdedir; type() o anki değerin türünü gösterir.
  • Aynı ad farklı türde bir değere yeniden bağlanabilir, ama Python metni sayıya kendiliğinden çevirmez: "20" + 1 bir TypeError verir.
  • input() her zaman str döndürür. Sayı gerekiyorsa int() ya da float() ile açıkça çevirin; çevrilemeyen metin ValueError verir.
  • / her zaman float verir. // aşağı yuvarlar, % kalanı verir, ** üs alır.
  • Negatif sayılarda // ve % C’den farklı sonuç verir: Python’da -7 // 2 sonucu -4, -7 % 2 sonucu 1.
  • Python’da ++ ve -- yoktur; x += 1 yazılır.
  • Mantıksal operatörler and, or, not sözcükleridir.
  • f-string değerleri metne yerleştirir; {score:.1f} değeri tek ondalıkla yazar.
  • Yanlış girinti bazen IndentationError verir, bazen hiç hata vermeden programın anlamını değiştirir.
  • Sayfadaki hücreler hızlı deneme içindir; çok dosyalı çalışmalarda yerel Python ve VS Code kullanılır.

Gelecek hafta koşulları ve döngüleri Python’da yazacağız. C’den farklı olarak bir metnin karakterleri üzerinde doğrudan dolaşmayı da göreceğiz.

Bu bölümün kazanımları

Bu bölümü bitiren öğrenci:

  • Python’da tür bilgisinin değişken adında değil değerde durduğunu açıklar.
  • input() çağrısının str döndürdüğünü bilir ve sayısal işlem için açık dönüşüm yapar.
  • /, //, % ve ** operatörlerini birbirinden ayırır.
  • Negatif sayılarda Python’ın // ve % davranışının C’den farkını açıklar.
  • f-string ile okunabilir çıktı yazdırır.
  • Girintinin yalnızca görünüş için olmadığını, bloğun sınırını belirlediğini açıklar.
  • and, or, not ile karşılaştırma ifadeleri kurar ve sonucunu tahmin eder.
  • C’nin derlenmesi ile Python’ın yorumlanması arasındaki farkı, hatanın ne zaman ortaya çıktığı ve hız üzerinden açıklar.
  • C’deki bir kod parçasının Python söz dizimine uygun karşılığını seçer: ; ve {} yerine : ve girinti, // yerine # ile yorum.
Back to top