Değişkenler, veri türleri ve ifadeler

İlk bölümde Python programımız sabit metinler yazdırıyordu. Gerçek programlarda ise değerler değişir: bir ürünün fiyatı, öğrencinin yaşı, hava sıcaklığı veya kalan internet kotası her çalıştırmada farklı olabilir. Bu hafta programın veriyi nasıl tuttuğunu, nasıl dönüştürdüğünü ve bu verilerle nasıl hesaplama yaptığını öğreneceğiz.

Bu bölümde çok sayıda Python özelliği ezberlemeyeceksiniz. Bunun yerine bir değerin hangi veri türünde (type) olduğunu fark etmeyi, değişkenlere anlamlı adlar vermeyi ve bir ifadenin hangi sonucu vereceğini adım adım izlemeyi öğreneceksiniz. İfade, Python’ın hesaplayıp tek bir değere indirdiği yazımdır: 3 * 4 bir ifadedir ve değeri 12’dir.

Bu bölümün kapsamı

NoteSınavda sorulur
  • Atamada sağ tarafın önce hesaplanması ve değişkenin o anki değeri
  • int, float, str ve bool ayrımı
  • input() sonucunun metin olması ve dönüşümün neden gerektiği
  • /, // ve % sonuçları ile sonuç türleri
  • Karşılaştırma ve and / or / not sonuçları
  • = ile == farkı ve yerleşik adı gölgelemenin sonucu
  • float değerlerin yaklaşık tutulmasının çıktıdaki etkisi
  • Türkçe karakterli değişken adlarının kullanılabilirliği
  • Kayan noktalı gösterimin ikilik taban ayrıntısı
  • Kod hücrelerinde girdinin neden bir değişkenle verildiği

Bunlarla ileride yine karşılaşabilirsiniz, ama ezberlemeniz beklenmiyor.

"25" ile 25 aynı şey midir?

print("25") ile print(25) ekrana aynı şeyi yazar. Ama biriyle toplama yapabilirsiniz, öbürüyle yapamazsınız. Bu bölümdeki hataların çoğu bu ayrımdan çıkar: bir değerin ekranda nasıl göründüğü, türünü söylemez.

Değişken: bir değere verdiğimiz ad

Aşağıdaki programda urun_fiyati ve adet iki değişkendir:

urun_fiyati = 120
adet = 3
toplam = urun_fiyati * adet

print(toplam)

= işareti burada matematikteki “eşittir” anlamında kullanılmaz. Sağ taraftaki değer hesaplanır ve sol taraftaki değişken adına bağlanır. Bu işleme atama (assignment) denir.

Bir değişkeni daha sonra yeni bir değere bağlayabiliriz:

puan = 70
puan = 85
print(puan)

Çıktı 85 olur. İkinci atamadan sonra puan adı artık 85 değerini gösterir.

Bir değişkenin bir değere bağlanması ve daha sonra yeniden değer alması.

Değişken bağlama ve yeniden atama
Important= ile == aynı şey değildir

= bir değeri değişkene atar. == ise iki değerin eşit olup olmadığını karşılaştırır; sonuç True (doğru) ya da False (yanlış) olur.

Değişken adları nasıl seçilir?

Python’da değişken adlarında harf, rakam ve alt çizgi (_) kullanılabilir. Ancak ad rakamla başlayamaz.

Geçerli örnekler:

ogrenci_adi = "Deniz"
sinav1 = 72
toplam_tutar = 450.5

Geçersiz örnekler:

1sinav
toplam tutar
urun-fiyati

Anahtar sözcükler değişken adı olamaz

Python’ın kendine ayırdığı if, for, while, def, class, return, True gibi sözcüklere anahtar sözcük (keyword) denir. Bunlar değişken adı olamaz.

Örneğin şu satır geçerli Python değildir:

# for = 3

Anahtar sözcükleri ezberlemeniz beklenmiyor. VS Code bunların çoğunu farklı renkte gösterir; yanlış kullanırsanız Python SyntaxError verir. Dikkat etmeniz gereken, bu sözcükleri kendi değişkenlerinize ad olarak vermemek.

Yerleşik adları gölgelemeyin

Bazı adlara değer atamak Python’a göre geçerlidir, ama sorun çıkarır. Böyle bir ada değer atarsanız Python’ın hazır fonksiyonunu gölgelersiniz (shadow): ad artık sizin değerinizi gösterir ve sonraki satırlarda şaşırtıcı hatalar çıkar.

Örneğin:

print = 5
# print("Merhaba")   # TypeError: 'int' object is not callable

Özellikle şu adları kendi değişkenlerinize vermeyin:

print, input, list, str, int, float, sum

Bu adlar Python’ın yerleşik fonksiyon veya tür adlarıdır. Örneğin list = [1, 2] yazmak geçerli olsa bile daha sonra list(...) fonksiyonunu kullanmanızı engeller.

Tip

Yerleşik bir adın üzerine yanlışlıkla yazdıysanız aynı oturumda del print gibi bir komutla kendi atamanızı silebilirsiniz. Ama en güvenlisi, baştan anlamlı ve çakışmayan adlar seçmektir. Kod hücresinde eski atama hâlâ geçerliyse çalışma ortamını yeniden başlatmak da onu temizler.

Türkçe karakterli değişken adları

Python 3 değişken adlarında Türkçe harfleri de kabul eder (adlarda Unicode karakterlere izin verir). Bu yüzden şu kod çalışır:

öğrenci_adı = "Ayşe"

Yine de bu derste değişken ve fonksiyon adlarında çoğunlukla ASCII karakterleri kullanacağız. Kabaca söylersek bunlar ç, ğ, ı, ö, ş, ü olmadan İngiliz alfabesinin harfleri, rakamlar ve _ işaretidir:

ogrenci_adi = "Ayşe"

Türkçe harf kullanmak yanlış değil. Ama adlardaki ı ile i gibi gözle kolay karışan harfler, başka bir klavye düzeninde yazarken, kodda arama yaparken ve kodu bazı araçlarla paylaşırken gereksiz sorun çıkarabilir. Kullanıcıya gösterilen metinlerde ve veri değerlerinde Türkçe karakterleri normal biçimde kullanmaya devam edeceğiz.

Kod çalışsa bile anlamsız adlar okumayı zorlaştırır:

x = 249.90
y = 2
z = x * y

Aynı program şu biçimde daha kolay okunur:

birim_fiyat = 249.90
adet = 2
toplam_tutar = birim_fiyat * adet
Tip

Değişkenin adı “bu değer ne?” sorusunu cevaplamalı. Biraz uzun ama anlamlı bir ad, tek harfli bir addan çoğu zaman daha iyidir.

Temel veri türleri

Python’da her değerin bir türü vardır. Tür, değerin ne çeşit bir veri olduğunu ve onunla hangi işlemlerin yapılabileceğini belirler. Bu hafta dört temel tür üzerinde duracağız:

Python türü Ne tutar? Örnek
int tam sayı 42, -7, 0
float ondalıklı sayı 3.14, 19.5
str metin (string) "Samsun", "42"
bool mantıksal değer True, False

Aynı görünen değerler farklı türlerde olabilir:

sayi = 42
metin = "42"

print(type(sayi))
print(type(metin))

42 bir int, "42" ise bir str değeridir. Tırnak işaretleri değerin metin olduğunu belirtir.

type() ile türü inceleyin

Aşağıdaki hücreyi çalıştırın. Sonra değerleri değiştirip type() çıktısının nasıl değiştiğine bakın.

Tahmin et: atama sırası sonucu nasıl etkiler?

Aşağıdaki kodu çalıştırmadan önce iki print() çağrısının ne yazdıracağını tahmin edin:

toplam değişkeni hesaplandığı anda birim_fiyat değeri 120 idi. Daha sonra birim_fiyat değişse de toplam kendiliğinden yeniden hesaplanmaz.

Note

Kod izlerken her satırdan sonra “hangi değişken şimdi hangi değeri gösteriyor?” sorusunu sorun.

Aritmetik ifadeler

Python sayılarla temel matematik işlemlerini doğrudan yapabilir. İşlemi gösteren işaretlere operatör denir.

Yazım İşlem Örnek
+ toplama 8 + 2 → 10
- çıkarma 8 - 2 → 6
* çarpma 8 * 2 → 16
/ bölme 8 / 2 → 4.0
// tam bölme 17 // 5 → 3
% kalan 17 % 5 → 2
** üs alma 2 ** 3 → 8
Note/ işlemi neden 4.0 verdi?

Python’da / ile bölmenin sonucu her zaman float olur. Bölme kalansız olsa bile bu değişmez:

print(10 / 5)       # 2.0
print(type(10 / 5)) # <class 'float'>

Sonucun tam sayı olması gerekiyorsa // operatörü kullanılır. 10 / 5 ile 10 // 5 aynı büyüklükte sonuç verir (2.0 ve 2), ama ikisi ayrı işlemlerdir ve sonuç türleri de farklıdır.

Birden fazla işlem varsa Python matematikteki işlem önceliğini uygular: çarpma ve bölme, toplama ve çıkarmadan önce yapılır. Parantez kullanırsanız hangi işlemin önce yapılacağı açıkça görünür ve kod daha kolay okunur:

ara_sinav = 70
final = 80

ortalama = (ara_sinav * 0.40) + (final * 0.60)
print(ortalama)

float sonuçlarda uzun ondalıklar

Bilgisayar sayıları ikili sistemde (yalnızca 0 ve 1 ile) saklar ve 0.1 gibi birçok ondalıklı sayıyı bu sistemde tam olarak tutamaz. Bu yüzden bazı hesapların sonucu, beklediğiniz değere çok yakın olsa da ekranda fazladan basamaklarla görünebilir:

print(0.1 + 0.2)

Çoğu bilgisayarda çıktı şudur:

0.30000000000000004

Python toplamayı “yanlış yapmıyor”. Bilgisayar float değerleri yaklaşık olarak tuttuğu için sonuç böyle çıkıyor. Bu fark özellikle para, ölçüm ve oran hesaplarında karşınıza çıkabilir.

Note

Bu hafta değerin nasıl hesaplandığıyla ilgileniyoruz. Para gibi değerleri ekranda 994.24 TL biçiminde göstermeyi 8. haftada f-string’lerle (metnin içine değer yerleştirmenin bir yolu) öğreneceğiz. Bir değerin nasıl hesaplandığı ile ekranda nasıl gösterildiği ayrı konulardır.

Noteİnteraktif alıştırmalarda geri bildirim

Bu sayfadaki alıştırmalarda ayrı bir Check düğmesi yok. Run Code düğmesi kodunuzu çalıştırır. Alıştırmanın bir kontrolü varsa kodunuz aynı anda kontrol edilir ve sonuç hücrenin altında görünür.

Alıştırma: dakikayı saat ve dakikaya ayırın

135 dakika, 2 saat 15 dakikadır. Aşağıdaki programı tamamlayın. // ile tam saat sayısını, % ile geriye kalan dakikayı bulabilirsiniz.

Kalanı bulmak için % kullanın: bir_deger % 60.

toplam_dakika = 135

saat = toplam_dakika // 60
dakika = toplam_dakika % 60

print(saat)
print(dakika)

input() ile kullanıcıdan veri alma

Geçen hafta girdi kavramını tanımış ama input() kullanmamıştık. Artık değişkenleri bildiğimiz için kullanıcıdan alınan değeri saklayabiliriz:

ad = input("Adınız: ")
print("Merhaba", ad)

input() parantez içindeki iletiyi ekrana yazar, kullanıcının klavyeden yazıp Enter’a bastığı değeri alır ve bu değeri metin (str) olarak verir.

Geçen haftadan hatırlayın: print() içine virgülle verilen birden fazla değer varsayılan olarak aralarında bir boşlukla yazdırılır. Bu nedenle print("Merhaba", ad) çıktısında metin ile ad arasına ayrıca boşluk karakteri eklememiz gerekmez.

WarningKod hücresinde input() çalışmaz

Bu sayfadaki hücreler Python’ı tarayıcının içinde çalıştırır (Pyodide ile, bir Web Worker’da). Bu ortamda klavyeden girdi okuma (standart girdi, stdin) terminaldeki gibi çalışmaz. Bu yüzden input() kullanan bir hücre OSError: [Errno 29] I/O error hatası verebilir. input()’u kitapta normal Python kodu olarak öğreneceğiz. Tarayıcıdaki alıştırmalarda ise kullanıcıdan gelen değeri bir değişkene yazarak simüle edeceğiz, yani taklit edeceğiz.

Tarayıcıda girdi akışını simüle edin

Aşağıdaki girdi_metni değişkenini, kullanıcının input() ile yazdığı değer gibi düşünün. Değeri kendi adınızla değiştirip hücreyi çalıştırın:

Gerçek bir .py dosyasında aynı akış şöyle yazılır:

ad = input("Adınız: ")
print("Merhaba", ad)

İki örnekte de fikir aynı: dışarıdan gelen metin bir değişkende saklanır ve programın sonraki adımlarında kullanılır.

Kullanıcı sayı yazsa bile neden toplama yapılamaz?

Aşağıdaki kod ilk bakışta doğru görünebilir:

yas = input("Yaşınız: ")
gelecek_yas = yas + 1

Fakat yas bir str, 1 ise bir int değeridir. Python bu iki farklı türü + ile doğrudan toplayamaz.

Önce metni sayıya çevirmemiz gerekir. Bir değeri başka bir türe çevirmeye tür dönüşümü (type conversion) denir:

yas = int(input("Yaşınız: "))
gelecek_yas = yas + 1
print(gelecek_yas)

Tarayıcıda aynı dönüşüm fikrini input() olmadan deneyebiliriz:

girdi_metni bir strdir; int(girdi_metni) ise bu metnin gösterdiği sayıyı int olarak verir.

input ile alınan metnin sayısal işleme uygun türe dönüştürülmesi.

Kullanıcı girdisinde tür dönüşümü

Ondalıklı değerler için float() kullanılır:

boy = float(input("Boyunuz (metre): "))
print(boy)
Warning

int("on dokuz") ya da float("abc") gibi dönüşümler başarısız olur. Bu hafta kullanıcının geçerli bir değer yazdığını varsayıyoruz. Geçersiz girdiyle nasıl başa çıkılacağını önce koşullarla, sonra istisnalarla (çalışma sırasında çıkan hataları yakalamanın bir yolu) öğreneceğiz.

İncele ve düzelt: tür uyuşmazlığı

Aşağıdaki program bilerek hatalı yazıldı. Program "19" metnini sayıya çevirip bir yıl sonraki yaşı hesaplamalı.

Kodu, 20 yazdıracak biçimde düzeltin.

int(yas_metni), "19" metnini 19 tam sayısına çevirir.

yas_metni = "19"
gelecek_yas = int(yas_metni) + 1
print(gelecek_yas)

Karşılaştırmalar bool verir

Karşılaştırma yaptığımızda sonuç sayı veya metin değil, True ya da False olur:

Sık kullanılan karşılaştırmalar:

Yazım Anlam
== eşit mi?
!= eşit değil mi?
< küçük mü?
> büyük mü?
<= küçük veya eşit mi?
>= büyük veya eşit mi?

Bu sonuçları gelecek hafta if ile programın hangi yolu izleyeceğine karar vermek için kullanacağız.

Mantıksal ifadeler: and, or, not

Karşılaştırmaları birleştirmek ya da sonucu tersine çevirmek için Python’ın and, or ve not anahtar sözcüklerini kullanırız.

yas = 20
ogrenci_mi = True

print(yas >= 18 and ogrenci_mi)
print(yas < 18 or ogrenci_mi)
print(not ogrenci_mi)
  • and: iki taraf da True ise True olur.
  • or: taraflardan en az biri True ise True olur.
  • not: sonucu tersine çevirir.

Şimdilik bu ifadelerin yalnızca sonucunu okuyacağız. Bu sonuçlara göre karar vermeyi gelecek hafta göreceğiz.

Alıştırma: üyelik koşulunu birleştirin

Bir spor merkezinde indirimden yararlanmak için kişinin en fazla 25 yaşında ve öğrenci olması gerekiyor. Aşağıdaki indirim_uygun değişkenini doğru mantıksal ifadeyle hesaplayın.

İfade şu iki parçayı birlikte kullanmalı: yas <= 25 ve ogrenci_mi.

yas = 22
ogrenci_mi = True

indirim_uygun = yas <= 25 and ogrenci_mi

print(indirim_uygun)

Değiştir: küçük bir alışveriş hesabı

Aşağıdaki program aynı üründen iki adet alındığında kargoyla birlikte ödenecek tutarı hesaplıyor:

Şunları sırayla deneyin:

  1. adet değerini 3 yapın ve sonucu tahmin edin.
  2. Kargoyu ücretsiz yapmak için kargo değerini değiştirin.
  3. odenecek hesabına 20 TL sabit indirim ekleyin.
  4. Kodu çalıştırmadan önce her değişiklikte beklediğiniz sonucu not edin.

Bu alıştırmada yeni bir yazım yok; bir değeri değiştirince sonraki ifadelerin sonucunun nasıl değiştiğini izleyeceksiniz.

Üret: yolculuk yakıt maliyeti

Bir araç 100 kilometrede ortalama 6.5 litre yakıt tüketiyor. Yolculuk mesafesi 320 km ve yakıtın litre fiyatı 47.80 TL olsun.

Aşağıdaki başlangıç değerleriyle iki şeyi hesaplayan bir program yazın:

  • Yolculukta harcanacak yakıt (litre)
  • Toplam yakıt maliyeti (TL)

Programınız şu koşulları sağlamalı (kabul kriterleri):

  • Tüketilen yakıt mesafe_km / 100 * tuketim_100_km formülüyle hesaplanmalı.
  • Toplam maliyet, tüketilen litre ile litre fiyatının çarpımı olmalı.
  • İki sonuç da print() ile yazdırılmalı.
Warning

Bu değerlerle toplam_maliyet matematiksel olarak 994.24 TL’dir. Ancak Python sürümüne ve işlemlerin sırasına bağlı olarak ekranda 994.2400000000001 gibi çok yakın bir float değeri görebilirsiniz. Bu, formülünüzün yanlış olduğunu göstermez. Önce hesabın doğru olduğunu kontrol edin; sonucu kullanıcıya iki ondalık basamakla göstermeyi 8. haftada öğreneceğiz.

Önce mesafe_km / 100 * tuketim_100_km ile tüketilen litreyi bulun. Sonra bu değeri litre_fiyati ile çarpın.

mesafe_km = 320
tuketim_100_km = 6.5
litre_fiyati = 47.80

tuketilen_yakit = mesafe_km / 100 * tuketim_100_km
toplam_maliyet = tuketilen_yakit * litre_fiyati

print("Tüketilen yakıt:", tuketilen_yakit)
print("Toplam maliyet:", toplam_maliyet)

Yerel Python ortamında kısa input() uygulaması

Kendi bilgisayarınızdaki (yerel) Python yorumlayıcısı, terminalde çalışırken input() ile klavyeden girdi okuyabilir. Bir .py dosyasında aşağıdaki küçük programı deneyin:

ad = input("Adınız: ")
yas = int(input("Yaşınız: "))

print("Merhaba", ad)
print("Gelecek yıl yaşınız:", yas + 1)

Programı en az iki farklı ad ve yaş değeriyle çalıştırın. Ardından int() dönüşümünü kaldırıp ne olduğuna bakın.

Sınav provası

Önce kendi cevabınızı seçin, sonra cevap anahtarında her şıkkın neden doğru ya da yanlış olduğunu okuyun. Yanlış şıklar rastgele yazılmadı; bu konuda öğrencilerin gerçekten yaptığı hatalardan seçildi. Sınav soruları da aynı yolla hazırlanır.

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

a = 10
b = a + 5
a = 20
print(a)
print(b)
  • A. 10 ve 25
  • B. 20 ve 15
  • C. 20 ve 20
  • D. 10 ve 15
  • E. 20 ve 25

Madde 2. "25" ile 25 arasındaki temel fark nedir?

  • A. İkisi de sayıdır; tırnak yalnızca okunabilirlik içindir
  • B. İlki daha büyük bir sayıdır
  • C. İlki float, ikincisi inttir
  • D. İkisi de aynıdır; Python tırnağı yok sayar
  • E. İlki metin (str), ikincisi tam sayıdır (int)

Madde 3. yas = input("Yaşınız: ") satırından sonra yas + 1 işlemi neden hata verir?

  • A. yas değişkeni boş kaldığı için
  • B. input() çağrısına bir mesaj verildiği için sonuç bozulur
  • C. input() yalnızca harf kabul eder, rakam kabul etmez
  • D. input() girilen değeri her zaman metin olarak verir
  • E. Sayıya 1 eklemek için += 1 yazmak gerekir

Madde 4. 17 // 5 ve 17 % 5 işlemlerinin sonuçları sırasıyla nedir?

  • A. 3 ve 2
  • B. 4 ve 1
  • C. 2 ve 3
  • D. 3.4 ve 2
  • E. 3 ve 3.4

Madde 5. 10 / 5 işlemi neden 2 değil 2.0 sonucunu verir?

  • A. print() sayıları her zaman ondalıklı gösterir
  • B. Bölme sonucunda küçük bir yuvarlama hatası oluşmuştur
  • C. / işlemi kalansız bölmede bile her zaman float verir
  • D. Bölünen bölenden büyük olduğu için
  • E. 10 ve 5 değerleri aslında float olarak saklanır

Madde 6. 20 >= 18 and True ifadesinin sonucu nedir?

  • A. None
  • B. True
  • C. 20
  • D. False
  • E. Hata verir; sayı karşılaştırması True ile birleştirilemez

Madde 7. = ile == arasındaki fark nedir?

  • A. İkisi de eşitlik sınar; == yalnızca daha okunaklıdır
  • B. == yalnızca if içinde, = yalnızca fonksiyon içinde kullanılır
  • C. == atama yapar, = karşılaştırır
  • D. = değişkene değer atar, == iki değeri karşılaştırır
  • E. = sayılarda, == metinlerde kullanılır

Madde 8. Aşağıdaki program neden ikinci satırda hata verir?

print = 5
print("Merhaba")
  • A. print adı artık 5 sayısına bağlıdır, sayı çağrılamaz
  • B. print bir anahtar sözcüktür ve atamada kullanılamaz
  • C. 5 sayısı metinle birlikte kullanılamaz
  • D. İkinci satırda tırnak yanlış kullanılmıştır
  • E. Hata vermez; Python eski print fonksiyonunu kendiliğinden geri getirir

Madde 9. print(0.1 + 0.2) çıktısı 0.30000000000000004 görünüyor. Bu ne anlama gelir?

  • A. Toplama işlemi yanlış yazılmıştır
  • B. Sayılar metin olarak toplanmıştır
  • C. print() uzun sayıları yazdırırken çıktıyı bozmuştur
  • D. Python’da bir hesaplama hatası vardır ve sürüm güncellenmelidir
  • E. float bazı ondalık sayıları tam değil, yaklaşık tutar

Madde 1. Doğru: B. b hesaplandığı anda a hâlâ 10’du, yani b 15 oldu. Sonradan anın değişmesi byi etkilemez.

  • A yanlış: Ne a eski değerinde kalır ne de b yeniden hesaplanır.
  • C yanlış: b ayrı bir değişkendir ve anın yeni değerini almaz.
  • D yanlış: Son atama ayı 20 yaptı; print(a) güncel değeri yazar.
  • E yanlış: b ile a arasında kalıcı bir bağ kurulmaz; b yalnızca hesaplandığı andaki sonucu tutar.

Madde 2. Doğru: E. Tırnak değeri metne çevirir. Metinle aritmetik işlem yapılamaz: "25" + 1 hata verirken 25 + 1 sonucu 26 olur.

  • A yanlış: Ekranda ikisi de 25 diye göründüğü için akla yatkındır. Ama tırnak süs değildir; değerin türünü belirler.
  • B yanlış: Tırnak sayıya bir şey ekliyormuş gibi görünebilir. Ama metin bir sayı büyüklüğü taşımaz; "25" > 25 karşılaştırması hata bile verir.
  • C yanlış: İki değerin farklı türde olduğunu doğru sezer ama türü yanlış adlandırır. "25" bir strdir; float olması için tırnaksız ve ondalıklı (25.0) yazılması gerekirdi.
  • D yanlış: print("25") ile print(25) ekranda aynı çıktıyı verdiği için böyle düşünülebilir. Ama Python tırnağı yok saymaz; type("25") ile type(25) farklı sonuç verir.

Madde 3. Doğru: D. Kullanıcı 18 yazsa bile değişkende "18" durur. Metinle sayı toplanamaz; toplama için önce int(yas) ile dönüştürmek gerekir.

  • A yanlış: Hata görünce değişkenin hiç değer almadığı düşünülebilir. Ama kullanıcı bir değer girdiyse değişken boş değildir; sorun değerin türü.
  • B yanlış: Mesajın girilen sayıyla birleştiği sanılabilir. Ama parantez içindeki mesaj yalnızca ekranda görünür; dönen değerin türünü değiştirmez.
  • C yanlış: Sonucun metin olduğunu duyan öğrenci bunu “yalnızca harf alır” diye anlayabilir. Ama input() rakam da kabul eder; yalnızca sonucu metin olarak verir.
  • E yanlış: Sayaçların çoğu zaman += 1 ile artırıldığını gören öğrenciye akla yatkın gelir. Ama += 1 da aynı hatayı verir; yazım biçimi türü değiştirmez.

Madde 4. Doğru: A. // tam bölüm sonucunu, % kalanı verir: 17 = 5 × 3 + 2.

  • B yanlış: 5 × 4 = 20 olur ve 17’yi aşar; bölüm 4 olamaz.
  • C yanlış: İki işlemin sonucu ters yazılmış; bölüm 3, kalan 2’dir.
  • D yanlış: // ondalık sonuç vermez; aşağı yuvarlanmış tam bölümü verir.
  • E yanlış: % kalanı verir; ondalık bölüm sonucunu değil.

Madde 5. Doğru: C. Python 3’te / normal bölmedir ve sonucu daima floattur. Tam sayı sonucu için // kullanılır.

  • A yanlış: print(10 // 5) çıktısı 2’dir; belirleyici olan gösterim değil, değerin türüdür.
  • B yanlış: Yuvarlama sorunu yok; sonuç tam 2’dir, yalnızca float türünde yazılır.
  • D yanlış: Büyüklük ilişkisinin sonucun türüyle ilgisi yoktur; 5 / 10 da float verir.
  • E yanlış: İkisi de inttir; float olan yalnızca bölme sonucudur.

Madde 6. Doğru: B. 20 >= 18 zaten Truedur; and iki taraf da doğru olduğunda True verir.

  • A yanlış: Karşılaştırma ve mantıksal işlemler None vermez.
  • C yanlış: Karşılaştırma sonucu bir sayı değil, bool değeridir.
  • D yanlış: İki taraf da doğru olduğu için and sonucu yanlış olamaz.
  • E yanlış: 20 >= 18 ifadesinin sonucu zaten bir bool olduğu için and ile birleşmesinde sorun yok.

Madde 7. Doğru: D. = sağdaki değeri soldaki ada bağlar. == iki değerin eşit olup olmadığını sınar ve True ya da False verir. Koşullarda kullanılması gereken ==dir.

  • A yanlış: Matematikte eşitlik tek = ile yazıldığı için ikisinin aynı işi yaptığı sanılabilir. Ama = sınamaz, atar. if x = 5: yazımı hata verir.
  • B yanlış: == en sık if satırlarında göründüğü için akla gelir. Ama iki işaret kullanım yeriyle değil, yaptıkları işle ayrılır; esit = x == 5 satırında ikisi birlikte bulunur.
  • C yanlış: İki işaretin ayrı işleri olduğunu bilen ama hangisinin hangisi olduğunu karıştıran öğrenci bunu seçer. Görevler ters yazılmış.
  • E yanlış: İki işaretin farklı yerlerde kullanıldığını fark eden öğrenci ayrımı türe bağlayabilir. Ama türle ilgisi yoktur; ikisi de her türle çalışır ve farklı işler yapar.

Madde 8. Doğru: A. İlk satır print adını 5 sayısına bağladı. Python yerleşik adlara atama yapmanızı engellemez; atama yapılırsa asıl fonksiyon gölgelenir. İkinci satır bir sayıyı fonksiyon gibi çağırmaya çalıştığı için hata verir.

  • B yanlış: print her programda göründüğü ve düzenleyicide renkli yazıldığı için anahtar sözcük sanılır. Ama print yerleşik bir addır; atama söz dizimi hatası vermez, hata ikinci satırda çıkar.
  • C yanlış: Sayıyla metnin toplanamadığını öğrenen öğrenci aynı hatayı burada arar. Ama burada sayıyla metin birleştirilmiyor; hata print adının artık sayı olmasından çıkıyor.
  • D yanlış: Hata ikinci satırda bildirildiği için sorun o satırın yazımında aranır. Ama tırnaklar doğru; sorun ilk satırdaki atamadır.
  • E yanlış: Yerleşik bir fonksiyonun bozulamayacağı düşünülebilir. Ama böyle bir geri alma yoktur; ad, yeniden atanana ya da program bitene kadar sayı kalır.

Madde 9. Doğru: E. Ondalık sayıların ikilik tabanda tam karşılığı olmayabilir. Bu Python’a özgü bir kusur değil; bilgisayarlar float sayıları böyle saklar. Kodda hata yoktur, bu beklenen davranıştır.

  • A yanlış: Beklenmedik bir sonuç görünce ilk şüphe kodun yazımına gider. Ama yazımda sorun yok; fark değerlerin saklanma biçiminden geliyor.
  • B yanlış: Tuhaf çıktıların nedeni çoğu zaman metin birleştirme olduğu için akla gelir. Ama metin toplansaydı sonuç 0.10.2 gibi birleşmiş bir metin olurdu.
  • C yanlış: Fazla basamaklar ekranda göründüğü için sorun yazdırmada aranır. Ama print() yalnızca değeri gösterir, değeri değiştirmez. Aynı fark 0.1 + 0.2 == 0.3 karşılaştırmasının False vermesinde de görülür.
  • D yanlış: Sonuç matematikte bildiğimiz 0.3 olmadığı için Python’ın yanlış hesapladığı sanılır. Ama aynı davranış öteki dillerde de görülür; güncelleme bunu değiştirmez.

Tek sayfa özet

Bu hafta programlarımız yalnızca sabit metin yazdırmakla kalmadı; veri tutmaya ve hesap yapmaya başladı.

  • Değişken, bir değere verdiğimiz addır.
  • Atama sırasında sağ taraf hesaplanır ve sonuç sol taraftaki değişken adına bağlanır.
  • Python anahtar sözcükleri değişken adı olamaz; print, input, list, str gibi yerleşik adları değişken adı yapmak ise hazır fonksiyonları gölgeleyebilir.
  • Python 3 Türkçe harfli adlara izin verse de bu derste adlarda çoğunlukla ASCII harfler kullanacağız; böylece kod her klavyede ve her araçta sorunsuz okunur ve yazılır.
  • int, float, str ve bool farklı veri türleridir.
  • / ile bölmenin sonucu, bölme kalansız olsa bile floattur.
  • float değerler bazı ondalıklı sayıları yaklaşık tuttuğu için sonuçta küçük gösterim farkları görülebilir.
  • input() kullanıcı girdisini metin (str) olarak verir.
  • Kod hücrelerinde input() terminaldeki gibi çalışmadığı için alıştırmalarda girdiyi bir değişkenle veriyoruz.
  • Girdiyle hesap yapmak için önce int() ya da float() ile tür dönüşümü yapmak gerekir.
  • Aritmetik bir ifade hesaplanıp tek bir değere iner; işlem önceliği sonucu etkiler.
  • Karşılaştırmanın sonucu True ya da False olur.
  • and ve or mantıksal sonuçları birleştirir, not sonucu tersine çevirir.
  • Kod izlerken her satırdan sonra hangi değişkenin hangi değeri gösterdiğine bakın.

Bir sonraki bölümde sonucu True ya da False olan bu ifadeleri kullanarak programın hangi durumda hangi kodu çalıştıracağına karar vereceğiz.

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

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

  • Atamada sağ tarafın önce hesaplandığını bilir ve değişkenin o anki değerini izler.
  • int, float, str ve bool türlerini birbirinden ayırır.
  • input() sonucunun metin olduğunu ve sayısal işlem için dönüşüm gerektiğini açıklar.
  • /, // ve % işlemlerinin sonucunu ve sonuç türünü tahmin eder.
  • Karşılaştırma ve mantıksal ifadelerin True / False sonucunu belirler.
  • = ile == arasındaki farkı ayırır ve yerleşik adları gölgelemenin sonucunu açıklar.
  • float değerlerin yaklaşık tutulmasının çıktıdaki sonucunu yorumlar.
Back to top