Kodlarımı geliştirebilir miyiz? hatalarım var / sözlük yapısı

Merahaba,

tel.txt dosyasının içi:
ayse macit : 5001023435
necmi eroglu : 5067891234

dosyanın içindekileri sözlüğe aktardıktan sonra kalan tüm işlemleri (listele,ekle,sil,bul) sözlük üzerinden yapmam gerekiyor.

1.sorunum: oluşturduğum sözlüğe yeni veri eklemek istediğimde ekliyor, ama tekrar ekleme yapmak istediğimde eklediğim şeyi değiştiriyor. yani her zaman “2” yazdığım yere ekliyor. O kısımda kodum hatalı biliyorum ama nasıl düzeltebilirim bunu?
2.sorunum: sözlük içinde ad veya soyad bilgisi girildiğinde telefon numarasını bulmasını istiyorum. Ama böyle biri yoktur yanıtını alıyorum. O kısımdaki hatamı nasıl düzeltebilirim?
3.sorunum: her şey bittikten sonra yani çıkışı seçince bu yeni bilgilerin hepsini tel.txt dosyasına aktarmam gerekiyor. Nasıl yaparım?
Teşekkürler şimdiden…

with open(“tel.txt”, encoding=“utf-8”) as f:
data = f.readlines()

data = [
i[0].split(" “) + [i[1]]
for i in [i.strip().split(” : ") for i in data]
]
#print(data)

sozluk = {
i: {
“Ad”: j[0],
“Soyad”: j[1],
“Telefon”: j[2]
} for i, j in enumerate(data)
}

yeni_tel_defteri= sozluk.copy()
while True:

secim= input("1-listele,\n2-ekle,\n3-sil,\n4-bul,\n5-cikis\nislemlerinden birini seciniz.")

if(secim=="5"):
    break
elif secim =="1":
    print("Telefon defteriniz= ",yeni_tel_defteri)

elif secim =="2":
    yeni_tel_defteri["2"] = {"Ad": input("ad:"),"Soyad":input("soyad:"),"Telefon":input("telefon:")}
    print(yeni_tel_defteri)

elif secim =="3":
    siraNo = str(input("silinecek sira secin: "))

    if siraNo in yeni_tel_defteri:
        yeni_tel_defteri.pop(siraNo)
        print("basariyla silinmistir.")
    else:
        print("Hatali satir numarasi girdiniz.")

    print(yeni_tel_defteri)


elif secim == "4":
    bulunacak = str(input("bulmak istediginiz kisinin bilgisini giriniz."))
    if bulunacak in yeni_tel_defteri:
        yeni_tel_defteri.get(bulunacak)
        print("bulunmustur.")
    else:
        print("boyle biri bulunamadi.")

input("Menuye donmek icin Enter'a basiniz...")

open kısmında append eklersen “a” bu sorunu halledebileceğini düşünüyorum. (encodindgden önce.) . w ile açarsan o eskileride silecektir.

Sozlukler yapilari geregi bir veriyi (key; “2”) baska bir veriyle (value; {“Ad”…}) eslestirirler. Key olarak 2 yerine baska bir sey, hem de her seferinde degisik olacak bir sey kullanman lazim.

Amac sadece value’lari tutmaksa list veri tipini kullanabilirsin.

in key’ler (yoksa value’lar miydi?) arasinda arayan, bunu da esitlikle yapan bir operator. Value’lara baksan bile esitlikle degil, value["Telefon"] == bulunacak ile bakman lazim. Bu asamada en kolayi liste/sozluk ve telefon alip bulunan kaydi veya None donduren bir fonksiyon yazmak olur diye tahmin ediyorum.

Yine ayni sekilde (ama yazmak icin) acip ayristirmada yaptiginin tersini yaparak. print(..., file=f) kullanabilirsin.

1 Beğeni