Dersler ve Temeller; web örnekleri PORT ortam değişkenini okur
- 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ı.
This commit is contained in:
@@ -0,0 +1,176 @@
|
||||
---
|
||||
baslik: Sözlükler
|
||||
bolum: Veri yapıları
|
||||
ozet: Anahtar-değer çiftleri, ekleme, sorgulama, gezme ve sayım
|
||||
---
|
||||
|
||||
Listede bir öğeye sıra numarasıyla ulaşırsın. Ama "Ankara'nın plakası kaç?" sorusunda sıra numarası işe yaramaz. Sözlük, her değeri bir **anahtarla** eşleştirir: `plaka["Ankara"]` gibi.
|
||||
|
||||
## Sözlük oluşturmak
|
||||
|
||||
Süslü parantez içine `anahtar: değer` çiftlerini virgülle ayırarak yazarsın.
|
||||
|
||||
```kbl
|
||||
plaka = {"İstanbul": 34, "Ankara": 6, "İzmir": 35}
|
||||
yazdir(plaka["Ankara"])
|
||||
yazdir(plaka.uzunluk())
|
||||
```
|
||||
```cikti
|
||||
6
|
||||
3
|
||||
```
|
||||
|
||||
## Ekleme ve güncelleme
|
||||
|
||||
Olmayan bir anahtara değer atamak yeni çift ekler; var olan bir anahtara atamak değeri değiştirir.
|
||||
|
||||
```kbl
|
||||
stok = {"elma": 40, "armut": 25}
|
||||
stok["kiraz"] = 12
|
||||
stok["elma"] = stok["elma"] - 5
|
||||
yazdir(stok["elma"])
|
||||
yazdir(stok["kiraz"])
|
||||
```
|
||||
```cikti
|
||||
35
|
||||
12
|
||||
```
|
||||
|
||||
## Anahtar var mı?
|
||||
|
||||
Sözlükte olmayan bir anahtarı okumak programı hatayla durdurur. Emin değilsen önce `var_mi()` ile sor.
|
||||
|
||||
```kbl
|
||||
plaka = {"İstanbul": 34, "Ankara": 6}
|
||||
dongu sehir icinde ["Ankara", "Konya"]:
|
||||
eger plaka.var_mi(sehir):
|
||||
yazdir(f"{sehir}: {plaka[sehir]}")
|
||||
degilse:
|
||||
yazdir(f"{sehir}: kayıtlı değil")
|
||||
```
|
||||
```cikti
|
||||
Ankara: 6
|
||||
Konya: kayıtlı değil
|
||||
```
|
||||
|
||||
## Silmek
|
||||
|
||||
Sözlükte `sil()` **anahtara** göre siler (listede konuma göre silerdi).
|
||||
|
||||
```kbl
|
||||
stok = {"elma": 40, "armut": 25, "kiraz": 12}
|
||||
stok.sil("armut")
|
||||
yazdir(stok.uzunluk())
|
||||
yazdir(stok.var_mi("armut"))
|
||||
```
|
||||
```cikti
|
||||
2
|
||||
yanlış
|
||||
```
|
||||
|
||||
## Sözlükte gezmek
|
||||
|
||||
`anahtarlar()` bütün anahtarları bir liste olarak verir. Her anahtar için değeri `sozluk[anahtar]` ile okursun.
|
||||
|
||||
```kbl
|
||||
fiyat = {"ekmek": 12.5, "süt": 34.9, "peynir": 149.0}
|
||||
anahtarlar = fiyat.anahtarlar()
|
||||
anahtarlar.sirala()
|
||||
dongu urun icinde anahtarlar:
|
||||
yazdir(f"{urun:<8}{fiyat[urun]:>8.2f} TL")
|
||||
```
|
||||
```cikti
|
||||
ekmek 12.50 TL
|
||||
peynir 149.00 TL
|
||||
süt 34.90 TL
|
||||
```
|
||||
|
||||
> **Dikkat:** `anahtarlar()` listesi ekleme sırasında gelmez. Belli bir sırada gezmek istiyorsan yukarıdaki gibi önce `sirala()` ile sırala.
|
||||
|
||||
## Sayım: en sık kullanılan sözlük işi
|
||||
|
||||
Bir metinde hangi kelimenin kaç kez geçtiğini sayalım. Her kelime için: daha önce gördüysek sayısını artırırız, görmediysek 1 ile başlatırız.
|
||||
|
||||
```kbl
|
||||
cumle = "bir elma bir armut iki elma bir kiraz"
|
||||
sayim = {}
|
||||
dongu kelime icinde cumle.bol(" "):
|
||||
eger sayim.var_mi(kelime):
|
||||
sayim[kelime] = sayim[kelime] + 1
|
||||
degilse:
|
||||
sayim[kelime] = 1
|
||||
kelimeler = sayim.anahtarlar()
|
||||
kelimeler.sirala()
|
||||
dongu k icinde kelimeler:
|
||||
yazdir(f"{k}: {sayim[k]}")
|
||||
```
|
||||
```cikti
|
||||
armut: 1
|
||||
bir: 3
|
||||
elma: 2
|
||||
iki: 1
|
||||
kiraz: 1
|
||||
```
|
||||
|
||||
## Değerleri toplamak
|
||||
|
||||
Bir sözlükteki sayıların toplamını anahtarlar üzerinden dönerek bulursun.
|
||||
|
||||
```kbl
|
||||
notlar = {"Ayşe": 88, "Mehmet": 64, "Elif": 92}
|
||||
toplam = 0
|
||||
dongu ad icinde notlar.anahtarlar():
|
||||
toplam += notlar[ad]
|
||||
yazdir(f"Ortalama: {toplam / notlar.uzunluk():.1f}")
|
||||
```
|
||||
```cikti
|
||||
Ortalama: 81.3
|
||||
```
|
||||
|
||||
> **İpucu:** Bir sözlüğün bütün değerleri aynı türde olsun: hepsi sayı ya da hepsi metin. Öğrencinin adını, notunu ve şehrini birlikte tutmak istiyorsan *Yapılar* dersindeki `yapi` daha uygun bir araçtır.
|
||||
|
||||
## Alıştırma
|
||||
|
||||
```alistirma
|
||||
`telefon` sözlüğüne `"Can": "0532 111 22 33"` kaydını ekle. Sonra `"Can"` ve `"Deniz"` için ya numarayı ya da `Deniz: bulunamadı` yazdır.
|
||||
%%%
|
||||
telefon = {"Ayşe": "0555 123 45 67"}
|
||||
# buraya yaz
|
||||
%%%
|
||||
telefon = {"Ayşe": "0555 123 45 67"}
|
||||
telefon["Can"] = "0532 111 22 33"
|
||||
dongu ad icinde ["Can", "Deniz"]:
|
||||
eger telefon.var_mi(ad):
|
||||
yazdir(f"{ad}: {telefon[ad]}")
|
||||
degilse:
|
||||
yazdir(f"{ad}: bulunamadı")
|
||||
%%%
|
||||
Can: 0532 111 22 33
|
||||
Deniz: bulunamadı
|
||||
```
|
||||
|
||||
```alistirma
|
||||
`metin_` içindeki her harfin kaç kez geçtiğini say (boşlukları atla). Harfleri sıralayıp `a 3` biçiminde, her biri ayrı satırda yazdır.
|
||||
%%%
|
||||
metin_ = "kar kara"
|
||||
sayim = {}
|
||||
# buraya yaz
|
||||
%%%
|
||||
metin_ = "kar kara"
|
||||
sayim = {}
|
||||
dongu h icinde metin_:
|
||||
eger h == " ":
|
||||
devam
|
||||
eger sayim.var_mi(h):
|
||||
sayim[h] = sayim[h] + 1
|
||||
degilse:
|
||||
sayim[h] = 1
|
||||
harfler = sayim.anahtarlar()
|
||||
harfler.sirala()
|
||||
dongu h icinde harfler:
|
||||
yazdir(f"{h} {sayim[h]}")
|
||||
%%%
|
||||
a 3
|
||||
k 2
|
||||
r 2
|
||||
```
|
||||
Reference in New Issue
Block a user