- 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.1 KiB
baslik, bolum, ozet
| baslik | bolum | ozet |
|---|---|---|
| Dosyalar | Hatalar ve dosyalar | Dosyaya yazmak, sonuna eklemek, geri okumak ve JSON ile saklamak |
Program bittiğinde değişkenlerdeki her şey kaybolur. Bilgiyi saklamak için dosyaya yazarsın; program bir sonraki çalışmada onu geri okuyabilir. Dosya işlemleri dosya modülündedir; kullan kaba.sistem ile gelir.
Not: Bu dersteki örnekler çalıştıkları klasörde dosya oluşturur. Her örnek önce yazar, sonra aynı programda geri okur.
Yazmak ve okumak
dosya.yaz(yol, metin) dosyayı oluşturur; dosya varsa içeriğini silip yeniden yazar. dosya.oku(yol) bütün dosyayı tek bir metin olarak verir.
kullan kaba.sistem
dosya.yaz("selam.txt", "Merhaba dosya!\n")
icerik = dosya.oku("selam.txt")
yazdir(icerik)
Merhaba dosya!
Her satırın sonuna \n koyarsın; yoksa satırlar yan yana birleşir.
Sonuna eklemek
dosya.ekle(yol, metin) var olan içeriğe dokunmadan sonuna ekler.
kullan kaba.sistem
dosya.yaz("gunluk.txt", "Pazartesi: 5 km koştum\n")
dosya.ekle("gunluk.txt", "Salı: dinlendim\n")
dosya.ekle("gunluk.txt", "Çarşamba: 7 km koştum\n")
yazdir(dosya.oku("gunluk.txt"))
Pazartesi: 5 km koştum
Salı: dinlendim
Çarşamba: 7 km koştum
Dikkat: Bir kayıt eklemek istiyorken
dosya.yazkullanırsan dosyadaki eski her şey silinir. Eklemek içindosya.eklekullan.
Satır satır işlemek
Okuduğun metni kirp() ile sondaki \n'den arındırıp bol("\n") ile satırlara ayırırsın. Her satırı da ; gibi bir ayraçla bölüp alanlara ulaşırsın.
kullan kaba.sistem
dosya.yaz("alisveris.txt", "ekmek;2;12.50\n")
dosya.ekle("alisveris.txt", "süt;1;34.90\n")
dosya.ekle("alisveris.txt", "domates;3;18.75\n")
toplam = 0.0
dongu satir icinde dosya.oku("alisveris.txt").kirp().bol("\n"):
parca = satir.bol(";")
adet = sayi(parca[1])
tutar = adet * ondalik(parca[2])
toplam += tutar
yazdir(f"{parca[0]:<10}{adet:>3}{tutar:>9.2f}")
yazdir(f"{'Toplam':<13}{toplam:>9.2f} TL")
ekmek 2 25.00
süt 1 34.90
domates 3 56.25
Toplam 116.15 TL
Dosya var mı?
Olmayan bir dosyayı okumak hata vermez, boş metin döndürür. Bu yüzden önce dosya.var_mi() ile sorarsın. dosya.sil() dosyayı siler.
kullan kaba.sistem
dosya.yaz("gecici.txt", "deneme\n")
yazdir(dosya.var_mi("gecici.txt"))
dosya.sil("gecici.txt")
yazdir(dosya.var_mi("gecici.txt"))
eger degil dosya.var_mi("ayarlar.txt"):
yazdir("ayarlar.txt yok, varsayılanlar kullanılacak.")
doğru
yanlış
ayarlar.txt yok, varsayılanlar kullanılacak.
JSON ile saklamak
JSON, sözlük ve listeleri metne çevirmenin yaygın bir biçimidir; başka programlar da okuyabilir. json.uret() bir sözlüğü metne çevirir, json.coz() metni geri çözer.
kullan kaba.sistem
ayarlar = {"tema": "koyu", "yazi_boyutu": 14}
dosya.yaz("ayarlar.json", json.uret(ayarlar))
yazdir(dosya.oku("ayarlar.json"))
okunan = json.coz(dosya.oku("ayarlar.json"))
yazdir(f"Tema: {metin(okunan['tema'])}")
yazdir(f"Yazı boyutu + 2: {sayi(okunan['yazi_boyutu']) + 2}")
{"tema":"koyu","yazi_boyutu":14}
Tema: koyu
Yazı boyutu + 2: 16
JSON'dan çözülen değerin türü derleme anında bilinmez; metin() ve sayi() ile hangi türde kullanacağını açıkça söylersin.
İpucu: Bozuk olabilecek bir dosyayı çözmeden önce
json.gecerli_mi(metin)ile denetle; geçerli değilseyanlisdöner.
Alıştırma
`notlar.txt` dosyasına üç satır yaz: `Ayşe;88`, `Can;47`, `Elif;92` (ilkini `yaz`, diğerlerini `ekle` ile). Sonra dosyayı okuyup her satırı bölerek notların ortalamasını 1 basamakla `Ortalama: 75.7` biçiminde yazdır.
%%%
kullan kaba.sistem
# buraya yaz
%%%
kullan kaba.sistem
dosya.yaz("notlar.txt", "Ayşe;88\n")
dosya.ekle("notlar.txt", "Can;47\n")
dosya.ekle("notlar.txt", "Elif;92\n")
toplam = 0
satirlar = dosya.oku("notlar.txt").kirp().bol("\n")
dongu satir icinde satirlar:
toplam += sayi(satir.bol(";")[1])
yazdir(f"Ortalama: {toplam / satirlar.uzunluk():.1f}")
%%%
Ortalama: 75.7