- 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ı.
151 lines
3.2 KiB
Markdown
151 lines
3.2 KiB
Markdown
---
|
|
baslik: dongu ... icinde ve aralıklar
|
|
bolum: Akış denetimi
|
|
ozet: Bir listenin, metnin ya da sayı aralığının her öğesi için tekrar etmek
|
|
---
|
|
|
|
Elinde bir şehir listesi var ve her birini yazdırmak istiyorsun. `dongu x icinde ...` döngüsü bir topluluğun her öğesi için bloğunu bir kez çalıştırır; sayaç tutmana gerek kalmaz.
|
|
|
|
## Liste üzerinde dönmek
|
|
|
|
Her turda `sehir` değişkeni sıradaki öğeyi alır.
|
|
|
|
```kbl
|
|
sehirler = ["Ankara", "İzmir", "Trabzon", "Van"]
|
|
dongu sehir icinde sehirler:
|
|
yazdir(f"• {sehir}")
|
|
```
|
|
```cikti
|
|
• Ankara
|
|
• İzmir
|
|
• Trabzon
|
|
• Van
|
|
```
|
|
|
|
Döngü değişkenine istediğin adı verebilirsin. Anlamlı bir ad seç: `dongu ogrenci icinde ogrenciler`.
|
|
|
|
## Sayı aralığı: a..b
|
|
|
|
`1..5` aralığı 1, 2, 3, 4, 5 demektir. **Üst sınır dahildir.**
|
|
|
|
```kbl
|
|
dongu i icinde 1..5:
|
|
yazdir(f"{i} x 3 = {i * 3}")
|
|
```
|
|
```cikti
|
|
1 x 3 = 3
|
|
2 x 3 = 6
|
|
3 x 3 = 9
|
|
4 x 3 = 12
|
|
5 x 3 = 15
|
|
```
|
|
|
|
Sınırlar değişken ya da hesap olabilir.
|
|
|
|
```kbl
|
|
n = 4
|
|
toplam = 0
|
|
dongu i icinde 1..n:
|
|
toplam += i * i
|
|
yazdir(f"1'den {n}'e kadar karelerin toplamı: {toplam}")
|
|
```
|
|
```cikti
|
|
1'den 4'e kadar karelerin toplamı: 30
|
|
```
|
|
|
|
## İndeksle dönmek
|
|
|
|
Sıra numarasına da ihtiyacın varsa `0..liste.uzunluk() - 1` aralığında dönersin.
|
|
|
|
```kbl
|
|
kazananlar = ["Elif", "Mert", "Zeynep"]
|
|
dongu i icinde 0..kazananlar.uzunluk() - 1:
|
|
yazdir(f"{i + 1}. {kazananlar[i]}")
|
|
```
|
|
```cikti
|
|
1. Elif
|
|
2. Mert
|
|
3. Zeynep
|
|
```
|
|
|
|
## Metin üzerinde dönmek
|
|
|
|
Bir metin üzerinde dönünce her turda bir karakter gelir.
|
|
|
|
```kbl
|
|
kelime = "Çalışkan öğrenciler"
|
|
unlu = 0
|
|
dongu harf icinde kelime.kucult():
|
|
eger "aeıioöuü".icerir(harf):
|
|
unlu += 1
|
|
yazdir(f"{unlu} ünlü harf var.")
|
|
```
|
|
```cikti
|
|
7 ünlü harf var.
|
|
```
|
|
|
|
## İç içe döngü
|
|
|
|
Dıştaki döngünün her turunda içteki döngü baştan sona çalışır. Çarpım tablosu buna klasik bir örnektir.
|
|
|
|
```kbl
|
|
dongu satir icinde 1..4:
|
|
cizgi = ""
|
|
dongu sutun icinde 1..4:
|
|
cizgi += f"{satir * sutun:4}"
|
|
yazdir(cizgi)
|
|
```
|
|
```cikti
|
|
1 2 3 4
|
|
2 4 6 8
|
|
3 6 9 12
|
|
4 8 12 16
|
|
```
|
|
|
|
> **Dikkat:** Aralık yalnız ileri sayar. `5..1` boş bir aralıktır, döngü hiç çalışmaz. Geri saymak için `iken` kullan.
|
|
|
|
```kbl
|
|
dongu i icinde 5..1:
|
|
yazdir(i)
|
|
yazdir("Döngü hiç çalışmadı.")
|
|
```
|
|
```cikti
|
|
Döngü hiç çalışmadı.
|
|
```
|
|
|
|
> **İpucu:** Döngü değişkenini değiştirmek listeyi değiştirmez. `dongu x icinde l: x = x * 2` yazınca `l` aynı kalır. Listeyi güncellemenin yolunu *Liste işlemleri* dersinde göreceksin.
|
|
|
|
## Alıştırma
|
|
|
|
```alistirma
|
|
`notlar` listesindeki notların toplamını ve ortalamasını bul. Ortalamayı 1 basamakla `Toplam: 404, ortalama: 80.8` biçiminde yazdır.
|
|
%%%
|
|
notlar = [72, 95, 88, 61, 88]
|
|
toplam = 0
|
|
# buraya yaz
|
|
%%%
|
|
notlar = [72, 95, 88, 61, 88]
|
|
toplam = 0
|
|
dongu n icinde notlar:
|
|
toplam += n
|
|
ortalama = toplam / notlar.uzunluk()
|
|
yazdir(f"Toplam: {toplam}, ortalama: {ortalama:.1f}")
|
|
%%%
|
|
Toplam: 404, ortalama: 80.8
|
|
```
|
|
|
|
```alistirma
|
|
1'den 5'e kadar her `n` için `n` tane yıldızdan oluşan bir satır yazdır (bir merdiven). `"*".tekrarla(n)` işini görür.
|
|
%%%
|
|
# buraya yaz
|
|
%%%
|
|
dongu n icinde 1..5:
|
|
yazdir("*".tekrarla(n))
|
|
%%%
|
|
*
|
|
**
|
|
***
|
|
****
|
|
*****
|
|
```
|