- dersler/: 29 kısa ders (açıklama, çalıştırılabilir örnek, alıştırma). Her örneğin ve alıştırma çözümünün çıktısı Online IDE'nin hazırlık adımında gerçekten koşulup dosyadakiyle karşılaştırılır; biçim dersler/BICIM.md. - temeller/: tek konulu 12 başlangıç programı. - web/anket, web/kisalt, web/pano: port PORT ortam değişkeninden okunur (Online IDE önizlemesi 8080 verir), yoksa eski sabit port. - README: öğrenme bölümü, Online IDE bağlantısı.
4.7 KiB
baslik, bolum, ozet
| baslik | bolum | ozet |
|---|---|---|
| Yapılar | Kendi türlerin | yapi ile ilgili verileri tek bir türde toplamak |
Bir kitabın adı, yazarı, sayfa sayısı ve yılı birbirine aittir. Bunları dört ayrı değişkende ya da dört ayrı listede tutmak çabuk karışır. yapi ile kendi türünü tanımlar, bu bilgileri tek bir değerde toplarsın.
Yapı tanımlamak
Yapının her alanına bir varsayılan değer verirsin; alanın türü bu değerden anlaşılır.
yapi Kitap:
ad = ""
yazar = ""
sayfa = 0
yil = 0
k = Kitap("Kuyucaklı Yusuf", "Sabahattin Ali", 232, 1937)
yazdir(k.ad)
yazdir(k.sayfa)
yazdir(k)
Kuyucaklı Yusuf
232
Kitap(ad: Kuyucaklı Yusuf, yazar: Sabahattin Ali, sayfa: 232, yil: 1937)
Kitap(...) yeni bir nesne oluşturur; değerler alanların tanım sırasıyla verilir. Alanlara nesne.alan diye ulaşırsın.
Nesne oluşturmanın yolları
Boş bir nesne oluşturup alanları sonra da doldurabilir, ya da yalnız bazı alanları adıyla verebilirsin. Verilmeyen alanlar varsayılan değerinde kalır.
yapi Kitap:
ad = ""
yazar = ""
sayfa = 0
k1 = Kitap()
k1.ad = "Çalıkuşu"
k1.sayfa = 544
yazdir(k1)
k2 = Kitap(ad="İnce Memed", yazar="Yaşar Kemal")
yazdir(k2)
Kitap(ad: Çalıkuşu, yazar: , sayfa: 544)
Kitap(ad: İnce Memed, yazar: Yaşar Kemal, sayfa: 0)
Metotlar
Yapının içine fonksiyon yazabilirsin; bunlara metot denir. Yapı metotları alanlara doğrudan adıyla ulaşır.
yapi Urun:
ad = ""
fiyat = 0.0
adet = 0
fonksiyon tutar() -> ondalik:
don fiyat * adet
fonksiyon etiket() -> metin:
don f"{ad} x{adet}: {tutar():.2f} TL"
u = Urun("Defter", 24.5, 3)
yazdir(u.tutar())
yazdir(u.etiket())
u.adet = 5
yazdir(u.etiket())
73.5
Defter x3: 73.50 TL
Defter x5: 122.50 TL
Nesne listesi
Yapılar listelerde tutulabilir. Böylece bir tabloyu çok rahat işlersin.
yapi Ogrenci:
ad = ""
puan = 0
sinif_listesi = [Ogrenci("Ayşe", 88), Ogrenci("Mehmet", 64), Ogrenci("Elif", 92)]
sinif_listesi.ekle(Ogrenci("Can", 47))
en_iyi = sinif_listesi[0]
dongu o icinde sinif_listesi:
durum = "geçti" eger o.puan >= 50 degilse "kaldı"
yazdir(f"{o.ad:<8}{o.puan:>4} {durum}")
eger o.puan > en_iyi.puan:
en_iyi = o
yazdir(f"En yüksek puan: {en_iyi.ad} ({en_iyi.puan})")
Ayşe 88 geçti
Mehmet 64 geçti
Elif 92 geçti
Can 47 kaldı
En yüksek puan: Elif (92)
Karşılaştırmak
İki yapı nesnesi, bütün alanları eşitse eşittir.
yapi Nokta:
x = 0
y = 0
a = Nokta(3, 4)
b = Nokta(3, 4)
c = Nokta(0, 4)
yazdir(a == b)
yazdir(a == c)
doğru
yanlış
Atama bir kopya oluşturur
Bir yapı nesnesini başka bir değişkene atamak kopyasını oluşturur. Kopyayı değiştirmek aslını etkilemez.
yapi Nokta:
x = 0
y = 0
a = Nokta(1, 2)
b = a
b.x = 99
yazdir(a.x)
yazdir(b.x)
1
99
Dikkat: Aynı kural fonksiyonlar için de geçerli: bir fonksiyona yapı verirsen fonksiyon kopyasını değiştirir. Nesnenin kendisini değiştirmek istiyorsan işi yapının metodu olarak yaz (bir sonraki ders), ya da değiştirilmiş nesneyi döndürüp yeniden ata.
İpucu: Tür adlarını büyük harfle başlat (
Kitap,Ogrenci); değişken adlarını küçük harfle.Hata,Liste,Metingibi bazı adlar dilin kendi türlerine ayrılmıştır, onları seçme.
Alıştırma
`Dikdortgen` adında, `en` ve `boy` alanları (varsayılan 0) ile `alan()` ve `cevre()` metotları olan bir yapı tanımla. `Dikdortgen(6, 4)` için alanı ve çevreyi aynı satırda yazdır.
%%%
# buraya yaz
d = Dikdortgen(6, 4)
yazdir(d.alan(), d.cevre())
%%%
yapi Dikdortgen:
en = 0
boy = 0
fonksiyon alan() -> sayi:
don en * boy
fonksiyon cevre() -> sayi:
don 2 * (en + boy)
d = Dikdortgen(6, 4)
yazdir(d.alan(), d.cevre())
%%%
24 20
Verilen `Film` yapısıyla bir liste oluşturulmuş. 1990'dan sonra çıkan filmlerin adlarını ve hepsinin toplam süresini yazdır.
%%%
yapi Film:
ad = ""
yil = 0
sure = 0
filmler = [Film("Eşkıya", 1996, 128), Film("Selvi Boylum Al Yazmalım", 1977, 90), Film("Kış Uykusu", 2014, 196)]
toplam_sure = 0
# buraya yaz
%%%
yapi Film:
ad = ""
yil = 0
sure = 0
filmler = [Film("Eşkıya", 1996, 128), Film("Selvi Boylum Al Yazmalım", 1977, 90), Film("Kış Uykusu", 2014, 196)]
toplam_sure = 0
dongu f icinde filmler:
eger f.yil > 1990:
yazdir(f.ad)
toplam_sure += f.sure
yazdir(f"Toplam süre: {toplam_sure} dakika")
%%%
Eşkıya
Kış Uykusu
Toplam süre: 414 dakika