- 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 |
|---|---|---|
| Parametreler ve dönüş değeri | Fonksiyonlar | Tür belirtmek, varsayılan değer, adlı argüman, birden çok değer döndürmek |
Fonksiyonlar büyüdükçe "bu parametreye ne vermeliyim?" sorusu önem kazanır. Türleri yazmak, varsayılan değer vermek ve adlı argüman kullanmak fonksiyonunu hem güvenli hem rahat kullanılır yapar.
Türleri yazmak
Parametrenin türünü ad: tur, dönüş türünü -> tur ile yazarsın. Zorunlu değil ama yazarsan derleyici denetler.
fonksiyon dikdortgen_alani(en: sayi, boy: sayi) -> sayi:
don en * boy
fonksiyon ortalama(a: ondalik, b: ondalik) -> ondalik:
don (a + b) / 2.0
yazdir(dikdortgen_alani(3, 4))
yazdir(ortalama(72.0, 85.0))
12
78.5
Yanlış türde değer verirsen program çalışmadan uyarılırsın:
fonksiyon kare(x: sayi) -> sayi:
don x * x
yazdir(kare("üç")) # hata: 'x' parametresi 'sayi' bekler, 'metin' verildi
Varsayılan değer
Bir parametreye = değer ile varsayılan verirsen, çağıran o değeri yazmadığında varsayılan kullanılır. Varsayılanlı parametreler en sona yazılır.
fonksiyon kdvli_fiyat(fiyat: ondalik, oran: sayi = 20) -> ondalik:
don fiyat * (1.0 + ondalik(oran) / 100.0)
yazdir(f"{kdvli_fiyat(100.0):.2f}")
yazdir(f"{kdvli_fiyat(100.0, 10):.2f}")
120.00
110.00
Adlı argüman
Çağırırken parametrenin adını yazarsan kod daha okunur olur, sıra karışmaz.
fonksiyon selamla(ad: metin, unvan: metin = "") -> metin:
eger unvan.bos_mu():
don f"Merhaba {ad}"
don f"Merhaba {unvan} {ad}"
yazdir(selamla("Ayşe"))
yazdir(selamla("Kaya", "Dr."))
yazdir(selamla(ad="Can", unvan="Av."))
Merhaba Ayşe
Merhaba Dr. Kaya
Merhaba Av. Can
Mantık döndüren fonksiyon
Adı _mi ile biten, dogru/yanlis döndüren fonksiyonlar eger içinde çok doğal okunur.
fonksiyon asal_mi(n: sayi) -> mantik:
eger n < 2:
don yanlis
bolen = 2
iken bolen * bolen <= n:
eger n % bolen == 0:
don yanlis
bolen += 1
don dogru
dongu aday icinde [2, 9, 17, 21]:
eger asal_mi(aday):
yazdir(f"{aday} asaldır")
degilse:
yazdir(f"{aday} asal değildir")
2 asaldır
9 asal değildir
17 asaldır
21 asal değildir
Liste döndürmek
Fonksiyon bir liste de döndürebilir.
fonksiyon bolenler(n: sayi) -> liste<sayi>:
bulunan = []
dongu i icinde 1..n:
eger n % i == 0:
bulunan.ekle(i)
don bulunan
yazdir(bolenler(36))
[1, 2, 3, 4, 6, 9, 12, 18, 36]
Birden çok değer döndürmek
don a, b iki değer döndürür; çağıran taraf x, y = ... ile ikisini birden alır.
fonksiyon bol_ve_kalan(a: sayi, b: sayi):
don a // b, a % b
bolum, kalan = bol_ve_kalan(17, 5)
yazdir(f"17 = 5 x {bolum} + {kalan}")
17 = 5 x 3 + 2
Fonksiyona verilen liste kopyalanır
Fonksiyona bir liste verdiğinde fonksiyon onun kopyasıyla çalışır. İçeride yapılan değişiklik dışarıdaki listeyi etkilemez. Değişikliği görmek istiyorsan sonucu döndürüp yeniden atarsın.
fonksiyon sifir_ekle(l: liste<sayi>) -> liste<sayi>:
l.ekle(0)
don l
sayilar = [5, 6]
yeni = sifir_ekle(sayilar)
yazdir(sayilar)
yazdir(yeni)
sayilar = sifir_ekle(sayilar)
yazdir(sayilar)
[5, 6]
[5, 6, 0]
[5, 6, 0]
Dikkat: Bir fonksiyonun bütün
dondalları aynı türü döndürmeli. Bir daldadon 0, başka daldadon toplam / adet(ondalık) yazarsan derleme hatası alırsın; o daldadon 0.0yaz.
Alıştırma
`indirimli(fiyat: ondalik, yuzde: sayi = 10) -> ondalik` fonksiyonunu yaz: fiyattan yüzde kadar indirim düşsün. `indirimli(200.0)` ve `indirimli(200.0, 25)` sonuçlarını 2 basamakla yazdır.
%%%
# buraya yaz
yazdir(f"{indirimli(200.0):.2f}")
yazdir(f"{indirimli(200.0, 25):.2f}")
%%%
fonksiyon indirimli(fiyat: ondalik, yuzde: sayi = 10) -> ondalik:
don fiyat - fiyat * ondalik(yuzde) / 100.0
yazdir(f"{indirimli(200.0):.2f}")
yazdir(f"{indirimli(200.0, 25):.2f}")
%%%
180.00
150.00
`en_kucuk_en_buyuk(l: liste<sayi>)` fonksiyonu listedeki en küçük ve en büyük değeri birlikte döndürsün. Sonucu iki değişkene alıp `3 - 41` biçiminde yazdır.
%%%
# buraya yaz
kucuk, buyuk = en_kucuk_en_buyuk([17, 3, 41, 8])
yazdir(f"{kucuk} - {buyuk}")
%%%
fonksiyon en_kucuk_en_buyuk(l: liste<sayi>):
enk = l[0]
enb = l[0]
dongu x icinde l:
eger x < enk:
enk = x
eger x > enb:
enb = x
don enk, enb
kucuk, buyuk = en_kucuk_en_buyuk([17, 3, 41, 8])
yazdir(f"{kucuk} - {buyuk}")
%%%
3 - 41