12-ámeliy jumıs: Python programmalastırıw tilinde sózlikler (dictionaries)

Python programmalastırıw tilinde sózlikler (dictionaries) - bul programmalastırıw tiliniń áhmiyetli strukturalarınan biri.
1. Sózlikler haqqında ulıwma túsinik
Sózlik - bul juplıqlar toplamı bolıp, hárbir element gilt-mánilik (key-value) juplıǵınan ibarat. Sózliktiń tiykarǵı ózgeshelikleri:
• Gilt unikal bolıwı kerek
• Mánilik hár qanday tipte bolıwı múmkin
• Sózlikler ózgeriwshi (mutable)
• Gilt-mánilik juplıqları tártipsiz saqlanadı
2. Sózlik jaratıw usılları
# 1-usıl: Bos sózlik
sozlik1 = {}
sozlik2 = dict()

# 2-usıl: Mánis berip jaratıw
student = {
    "atı": "Azamat",
    "jası": 20,
    "kurs": 2
}
# 3-usıl: dict() funkciyası járdeminde
student2 = dict(atı="Gúlnaz", jası=19, kurs=1)

3. Sózlik penen islewdiń tiykarǵı operaciyaları
# Sózlikke element qosıw
student["telefon"] = "+998901234567890"

# Elementti ózgertiw
student["jası"] = 21

# Elementti óshiriw
del student["telefon"]

# Elementti alıw
jası = student["jası"]
# yamasa
jası = student.get("jası")  # get() qáwipsizirek, sebebi gilt tawılmasa None qaytaradı

# Giltlerdi alıw
giltler = student.keys()

# Mánislerdi alıw
manisler = student.values()

# Gilt-mánilik juplıqların alıw
juplıqlar = student.items()

4. Ámeliy máseleler
1-másele: Studentler dizimin sózlik járdeminde basqarıw
# Studentler dizimin saqlaw ushın sózlik
studentler = {}

# Student qosıw funkciyası
def student_qosıw(id, atı, kurs):
    studentler[id] = {
        "atı": atı,
        "kurs": kurs
    }

# Student haqqında maǵlıwmat alıw
def student_koriw(id):
    if id in studentler:
        return studentler[id]
    return "Student tabılmadı"

# Studentti óshiriw
def student_oshiriw(id):
    if id in studentler:
        del studentler[id]
        return "Student óshirildi"
    return "Student tabılmadı"

# Testlew
student_qosıw(1, "Azamat", 2)
student_qosıw(2, "Gúlnaz", 1)

print(student_koriw(1))
print(student_koriw(2))
print(student_oshiriw(1))

2-másele: Telefon knijkası
telefon_knijka = {}

def kontakt_qosıw(atı, nomer):
    telefon_knijka[atı] = nomer

def kontakt_izlew(atı):
    return telefon_knijka.get(atı, "Kontakt tabılmadı")

def barlıq_kontaktlar():
    for atı, nomer in telefon_knijka.items():
        print(f"{atı}: {nomer}")

# Testlew
kontakt_qosıw("Azamat", "+998901234567")
kontakt_qosıw("Gúlnaz", "+998907654321")

print(kontakt_izlew("Azamat"))
print("Barlıq kontaktlar:")
barlıq_kontaktlar()

5. Qosımsha metodlar
sozlik = {"a": 1, "b": 2}

# clear() - sózlikti tazalaw
sozlik.clear()

# copy() - sózliktiń kóshirmesin jaratıw
jan_sozlik = sozlik.copy()

# update() - sózlikti basqa sózlik penen biriktiriw
sozlik.update({"c": 3, "d": 4})

# setdefault() - gilt bolmasa, default mánisti qosıw
man = sozlik.setdefault("e", 5)

ÁMELIY MÍSALLAR
1. Oqıwshınıń bahaların esaplaw sisteması:
oqıwshı = {
    "atı": "Alisher",
    "klass": 9,
    "pánler": {
        "matematika": [5, 4, 5, 4],
        "fizika": [4, 5, 4, 5],
        "informatika": [5, 5, 5, 4]
    }
}

def orta_baha_esaplaw(bahalar):
    return sum(bahalar) / len(bahalar)

# Hárbir pán boyınsha orta bahanı esaplaw
for pán, bahalar in oqıwshı["pánler"].items():
    orta_baha = orta_baha_esaplaw(bahalar)
    print(f"{pán}: {orta_baha}")

2. Dúkan tovarlardı basqarıw sisteması:
tovarlar = {
    "alma": {"baha": 12000, "muǵdar": 50},
    "banan": {"baha": 25000, "muǵdar": 30},
    "apelsin": {"baha": 15000, "muǵdar": 40}
}

def tovar_qosıw(atı, baha, muǵdar):
    tovarlar[atı] = {"baha": baha, "muǵdar": muǵdar}

def tovar_satıw(atı, muǵdar):
    if atı in tovarlar:
        if tovarlar[atı]["muǵdar"] >= muǵdar:
            tovarlar[atı]["muǵdar"] -= muǵdar
            return muǵdar * tovarlar[atı]["baha"]
        else:
            return "Jetkilikli tovar joq"
    return "Bunday tovar joq"

# Tovar qosıw
tovar_qosıw("nok", 8000, 60)

# Tovar satıw
print(tovar_satıw("alma", 5))  # 60000 qaytaradı
print(tovarlar["alma"]["muǵdar"])  # 45 qaytaradı

3. Waqıyalar kalendarı:
kalendar = {}

def waqıya_qosıw(sáne, waqıt, waqıya):
    if sáne not in kalendar:
        kalendar[sáne] = {}
    kalendar[sáne][waqıt] = waqıya

def kún_waqıyaların_koriw(sáne):
    if sáne in kalendar:
        print(f"\n{sáne} kúngi waqıyalar:")
        for waqıt, waqıya in kalendar[sáne].items():
            print(f"{waqıt}: {waqıya}")
    else:
        print("Bul kúnde waqıyalar joq")

# Waqıyalardı qosıw
waqıya_qosıw("2024-10-26", "10:00", "Jumıs jıynalısı")
waqıya_qosıw("2024-10-26", "15:30", "Prezentaciya")
waqıya_qosıw("2024-10-27", "12:00", "Túslik")

# Waqıyalardı kóriw
kún_waqıyaların_koriw("2024-10-26")

4. Kórsetilgen xızmetler esabı:
xızmetler = {
    "kompyuter remont": 200000,
    "virus tazalaw": 100000,
    "programa ornatıw": 50000
}

buyırtpalar = []

def buyırtpa_qosıw(klient, xızmet_atı):
    if xızmet_atı in xızmetler:
        buyırtpa = {
            "klient": klient,
            "xızmet": xızmet_atı,
            "baha": xızmetler[xızmet_atı]
        }
        buyırtpalar.append(buyırtpa)
        return "Buyırtpa qabıl etildi"
    return "Bunday xızmet joq"

def esap_shıǵarıw(klient):
    ulıwma_summa = 0
    klient_buyırtpaları = []
    
    for buyırtpa in buyırtpalar:
        if buyırtpa["klient"] == klient:
            klient_buyırtpaları.append(buyırtpa)
            ulıwma_summa += buyırtpa["baha"]
    
    if klient_buyırtpaları:
        print(f"\n{klient}niń buyırtpaları:")
        for b in klient_buyırtpaları:
            print(f"{b['xızmet']}: {b['baha']} sum")
        print(f"Ulıwma summa: {ulıwma_summa} sum")
    else:
        print("Buyırtpalar tabılmadı")

# Testlew
buyırtpa_qosıw("Azamat", "kompyuter remont")
buyırtpa_qosıw("Azamat", "virus tazalaw")
buyırtpa_qosıw("Gúlnaz", "programa ornatıw")

esap_shıǵarıw("Azamat")

5. Soraw-juwap sisteması:
sorawlar = {
    "Python nege arnalǵan?": {
        "juwap": "Python - ulıwma maqsetli programmalastırıw tili",
        "qıyınlıq": "ańsat"
    },
    "Dictionary degenimiz ne?": {
        "juwap": "Dictionary - gilt-mánilik juplıqlarınan ibarat struktura",
        "qıyınlıq": "orta"
    },
    "List penen Dictionary arasında qanday ayırma bar?": {
        "juwap": "List indeksler menen, al Dictionary giltler menen isleydi",
        "qıyınlıq": "qıyın"
    }
}

def soraw_beriw():
    durıs_juwaplar = 0
    
    for soraw, maǵlıwmat in sorawlar.items():
        print(f"\nSoraw ({maǵlıwmat['qıyınlıq']}): {soraw}")
        juwap = input("Siziń juwabıńız: ")
        
        if juwap.lower() == maǵlıwmat["juwap"].lower():
            print("Durıs!")
            durıs_juwaplar += 1
        else:
            print(f"Nátiyjesi: {maǵlıwmat['juwap']}")
    
    print(f"\nSiz {len(sorawlar)} sorawdan {durıs_juwaplar} durıs juwap berdińiz")

# Sistemanı iske túsiriw
soraw_beriw()

Bul mısallarda sózliklerdiń hár túrli qollanıw usılların kórsetilgen. Hár bir mısal real máselelerdi sheshiwge arnalǵan hám sózliklerdiń hár qıylı múmkinshiliklerinen paydalanılǵan.

Test
testler = {
    1: {
        "soraw": "Python tilinde bos sózlik jaratıwdıń durıs variantı qaysı?",
        "variantlar": {
            "a": "dict = []",
            "b": "dict = {}",
            "c": "dict = ()",
            "d": "dict = <<>>"
        },
        "durıs_juwap": "b",
        "túsindirme": "Bos sózlik {} járdeminde yamasa dict() funkciyası menen jaratıladı"
    },
    2: {
        "soraw": "Sózlikte bir gilt neshe ret qaytalanıwı múmkin?",
        "variantlar": {
            "a": "Sheksiz ret",
            "b": "2 ret",
            "c": "3 ret",
            "d": "Gilt unikal bolıwı kerek, qaytalanbawı shárt"
        },
        "durıs_juwap": "d",
        "túsindirme": "Sózlikte giltler unikal bolıwı shárt, bir gilt tek bir ret paydalanıladı"
    },
    3: {
        "soraw": "Sózliktiń mánisi qanday tipte bolıwı múmkin?",
        "variantlar": {
            "a": "Tek sanlı",
            "b": "Tek tekstli",
            "c": "Hár qanday tipte",
            "d": "Tek spisok"
        },
        "durıs_juwap": "c",
        "túsindirme": "Sózliktiń mánisi hár qanday tipte bolıwı múmkin: san, tekst, spisok, basqa sózlik h.t.b."
    },
    4: {
        "soraw": "Sózlikten elementti óshiriw ushın qaysı operator qollanıladı?",
        "variantlar": {
            "a": "remove()",
            "b": "pop()",
            "c": "del",
            "d": "clear()"
        },
        "durıs_juwap": "c",
        "túsindirme": "del operatorı sózlikten belgili bir elementti óshiriw ushın qollanıladı"
    },
    5: {
        "soraw": "Sózliktiń barlıq giltlerin alıw ushın qaysı metod qollanıladı?",
        "variantlar": {
            "a": "keys()",
            "b": "values()",
            "c": "items()",
            "d": "get()"
        },
        "durıs_juwap": "a",
        "túsindirme": "keys() metodı sózliktiń barlıq giltlerin qaytaradı"
    },
    6: {
        "soraw": "Sózlikte joq giltke múrajat etkenimizde qátelik bolmawı ushın qaysı metodtı qollanıw kerek?",
        "variantlar": {
            "a": "find()",
            "b": "get()",
            "c": "search()",
            "d": "index()"
        },
        "durıs_juwap": "b",
        "túsindirme": "get() metodı gilt tawılmasa None qaytaradı, qátelik júz bermeydi"
    },
    7: {
        "soraw": "Sózliktiń elementlerin sanaw ushın qaysı cikl eń qolay?",
        "variantlar": {
            "a": "while",
            "b": "for in",
            "c": "do while",
            "d": "repeat until"
        },
        "durıs_juwap": "b",
        "túsindirme": "for in cikli sózlik elementlerin sanaw ushın eń qolaylı usılı"
    },
    8: {
        "soraw": "Sózliktiń barlıq mánislerin alıw ushın qaysı metod qollanıladı?",
        "variantlar": {
            "a": "keys()",
            "b": "values()",
            "c": "items()",
            "d": "get()"
        },
        "durıs_juwap": "b",
        "túsindirme": "values() metodı sózliktiń barlıq mánislerin qaytaradı"
    },
    9: {
        "soraw": "Sózlikti tolıq tazalaw ushın qaysı metod qollanıladı?",
        "variantlar": {
            "a": "delete()",
            "b": "remove()",
            "c": "clear()",
            "d": "empty()"
        },
        "durıs_juwap": "c",
        "túsindirme": "clear() metodı sózliktiń barlıq elementlerin óshiredi"
    },
    10: {
        "soraw": "Eki sózlikti birlestiriw ushın qaysı metod qollanıladı?",
        "variantlar": {
            "a": "merge()",
            "b": "update()",
            "c": "append()",
            "d": "extend()"
        },
        "durıs_juwap": "b",
        "túsindirme": "update() metodı eki sózlikti biriktiriw ushın qollanıladı"
    }
}

def test_alıw():
    bal = 0
    
    for nomer, test in testler.items():
        print(f"\n{nomer}. {test['soraw']}")
        
        for variant, juwap in test['variantlar'].items():
            print(f"{variant}) {juwap}")
        
        user_juwap = input("\nJuwabıńızdı kiritiń (a/b/c/d): ").lower()
        
        if user_juwap == test['durıs_juwap']:
            print("Durıs! ✅")
            bal += 1
        else:
            print(f"Nátiyjesi: {test['túsindirme']} ❌")
    
    print(f"\nTest juwmaqlandı!")
    print(f"Sizdiń balıńız: {bal} / {len(testler)}")
    procent = (bal / len(testler)) * 100
    print(f"Procent: {procent}%")

# Testti baslawıńız ushın tómendegi qatardı kommentariydan shıǵarıń
# test_alıw()

Bul testlerdi orınlaw ushın programmanı iske túsirip, hár bir sorawǵa a, b, c yamasa d variantların kiritip juwap beriw kerek. Testtiń aqırında ulıwma bal hám procent kórsetiledi.