koddla

Yazılımcıları bilgi ile güçlendirir.

Python101 – Sözlükler

Bu bölüm sözlükler hakkında. Sözlüklerin anahtarları ve değerleri vardır. Anahtarlar değerleri bulmak için kullanılır. Kullanımda olan bir sözlük örneği için aşağıdaki koda bakalım:

def print_menu():
    print('1. Telefon numaralarını bastır')
    print('2. Telefon numarası ekle')
    print('3. Telefon numarası sil')
    print('4. Telefon numarasına bak')
    print('5. Çıkış')
    print()

numaralar = {}
menu_secimi = 0
print_menu()

while menu_secimi != 5:
    menu_secimi = int(input("Bir numara girin (1-5): "))
    if menu_secimi == 1:
        print("Telefon numaraları:")
        for x in numaralar.keys():
            print("İsim: ", x, "\tNumara:", numaralar[x])
        print()
    elif menu_secimi == 2:
        print("İsim ve telefon numarası ekle")
        isim = input("İsim: ")
        numara = input("Numara: ")
        numaralar[isim] = numara
    elif menu_secimi == 3:
        print("İsim ve telefon numarası sil")
        isim = input("İsim: ")
        if isim in numaralar:
            del numaralar[isim]
        else:
            print(isim, " bulunamadı")
    elif menu_secimi == 4:
        print("Numara bak")
        isim = input("İsim: ")
        if isim in numaralar:
            print("Numara : ", numaralar[isim])
        else:
            print(isim, " bulunamadı")
    elif menu_secimi != 5:
        print_menu()

Çıktı:

1. Telefon numaralarını bastır
2. Telefon numarası ekle
3. Telefon numarası sil
4. Telefon numarasına bak
5. Çıkış

Bir numara girin (1-5): 2
İsim ve telefon numarası ekle
İsim: Joe
Numara: 545-4464
Bir numara girin (1-5): 2
İsim ve telefon numarası ekle
İsim: Jill
Numara: 979-4654
Bir numara girin (1-5): 2
İsim ve telefon numarası ekle
İsim: Fred
Numara: 132-9874
Bir numara girin (1-5): 1
Telefon numaraları:
İsim: Jill     Numara: 979-4654
İsim: Joe      Numara: 545-4464
İsim: Fred     Numara: 132-9874

Bir numara girin (1-5): 4
Numara bak
İsim: Joe
Numara : 545-4464
Bir numara girin (1-5): 3
İsim ve telefon numarası sil
İsim: Fred
Bir numara girin (1-5): 1
Telefon numaraları:
İsim: Jill     Numara: 979-4654
İsim: Joe      Numara: 545-4464

Bir numara girin (1-5): 5

Bu program, listeler bölümünde gördüğümüz isim listesine benziyor. Programın işleniniş şekli şöyle; İlk önce print_menu işlevi tanımlanır. Daha sonra programda iki kez kullanılan bir menü yazdırılır. Sonra komik görünen bir satır geliyor: numbers = {}. Bu satırın tek yaptığı Python’a bunun bir sözlük olduğunu söylemek. Sonraki birkaç satır ise menünün çalışmasını sağlar.

for x in numaralar.keys():
    print("İsim: ", x, "\tNumara:", numaralar[x])

Yukarıdaki satırlar sözlük elemanlarını tarayıp tüm bilgileri yazdırır. numaralar.keys() işlevi, döngü tarafından kullanılan bir liste döndürür. keys() tarafından döndürülen liste belirli bir sırada olmaz, bu nedenle alfabetik sırada istiyorsanız önce bunu sıralamanız gerekir. Listelere benzer şekilde, numaralar[x] deyimi sözlüğün belirli bir üyesine erişmek için kullanılır. Tabii ki bu durumda x bir dizedir.

Daha sonraki satırlarda gelen numaralar[isim] = numara sözlüğe bir isim ve telefon numarası ekler. Eğer isim zaten sözlükte varsa, daha önce orada olan bilginin yerini alır.

 if isim in numaralar:
     del numaralar[isim]   

Bu satırlar sözlükte bir isim olup olmadığını bakar ve varsa kaldırır. İşleç isim varsa true döndürür, ancak yoksa false döndürür. Dolayısıyla bu satır, anahtarı ve bu anahtarla ilişkili değeri kaldırır.

if isim in numaralar:
    print("Numara : ", numaralar[isim])

Bu kod parçası ise sözlükte belirli bir anahtarın olup olmadığını kontrol eder ve onunla ilişkili numarayı yazdırır.

Özet: Sözlüklerde anahtarlar ve değerler vardır. Anahtarlar dizeler veya sayılar olabilir. Anahtarlar değerleri işaret eder. Değerler her türlü değişken olabilir (listeler ve hatta sözlükler de dahil (bu sözlükler veya listeler elbette sözlükler veya listelerin kendilerini içerebilir (korkutucu mu? 🙂 ))). Sözlükte liste kullanma örneğine aşağıda bakalım:

max_points = [25, 25, 50, 25, 100]
assignments = ['hw ch 1', 'hw ch 2', 'quiz   ', 'hw ch 3', 'test']
students = {'#Max': max_points}

def print_menu():
    print("1. Add student")
    print("2. Remove student")
    print("3. Print grades")
    print("4. Record grade")
    print("5. Print Menu")
    print("6. Exit")

def print_all_grades():
    print('\t', end=' ')
    for i in range(len(assignments)):
        print(assignments[i], '\t', end=' ')
    print()
    keys = list(students.keys())
    keys.sort()
    for x in keys:
        print(x, '\t', end=' ')
        grades = students[x]
        print_grades(grades)

def print_grades(grades):
    for i in range(len(grades)):
        print(grades[i], '\t', end=' ')
    print()

print_menu()
menu_choice = 0
while menu_choice != 6:
    print()
    menu_choice = int(input("Menu Choice (1-6): "))
    if menu_choice == 1:
        name = input("Student to add: ")
        students[name] = [0] * len(max_points)
    elif menu_choice == 2:
        name = input("Student to remove: ")
        if name in students:
            del students[name]
        else:
            print("Student:", name, "not found")
    elif menu_choice == 3:
        print_all_grades()
    elif menu_choice == 4:
        print("Record Grade")
        name = input("Student: ")
        if name in students:
            grades = students[name]
            print("Type in the number of the grade to record")
            print("Type a 0 (zero) to exit")
            for i in range(len(assignments)):
                print(i + 1, assignments[i], '\t', end=' ')
            print()
            print_grades(grades)
            which = 1234
            while which != -1:
                which = int(input("Change which Grade: "))
                which -= 1    #same as which = which - 1
                if 0 <= which < len(grades):
                    grade = int(input("Grade: "))
                    grades[which] = grade
                elif which != -1:
                    print("Invalid Grade Number")
        else:
            print("Student not found")
    elif menu_choice != 6:
        print_menu()

Çıktı:

1. Add student
2. Remove student
3. Print grades
4. Record grade
5. Print Menu
6. Exit

Menu Choice (1-6): 3
       hw ch 1         hw ch 2         quiz            hw ch 3         test 
#Max    25              25              50              25              100 

Menu Choice (1-6): 5
1. Add student
2. Remove student
3. Print grades
4. Record grade
5. Print Menu
6. Exit

Menu Choice (1-6): 1
Student to add: Bill

Menu Choice (1-6): 4
Record Grade
Student: Bill
Type in the number of the grade to record
Type a 0 (zero) to exit
1   hw ch 1     2   hw ch 2     3   quiz        4   hw ch 3     5   test 
0               0               0               0               0 
Change which Grade: 1
Grade: 25
Change which Grade: 2
Grade: 24
Change which Grade: 3
Grade: 45
Change which Grade: 4
Grade: 23
Change which Grade: 5
Grade: 95
Change which Grade: 0

Menu Choice (1-6): 3
       hw ch 1         hw ch 2         quiz            hw ch 3         test 
#Max    25              25              50              25              100
Bill    25              24              45              23              95 

Menu Choice (1-6): 6

Programın nasıl çalıştığına bakalım. Temel olarak students değişkeni, anahtarları öğrencilerin adı ve değerleri de notları olan bir sözlüktür. İlk iki satır sadece iki liste oluşturur. Sonraki satır students = {'#Max': max_points} ile '#Max' anahtarında yeni bir sözlük oluşturur ve değer olarak [25, 25, 50, 25, 100] atar. (max_points’in bu değere karşılık geldiğine dikkat edin).

def print_all_grades():
    print('\t',end=" ")
    for i in range(len(assignments)):
        print(assignments[i], '\t',end=" ")
    print()
    keys = list(students.keys())
    keys.sort()
    for x in keys:
        print(x, '\t',end=' ')
        grades = students[x]
        print_grades(grades)

Sonra print_all_grades() işlevi tanımlanır.

Anahtarların sözlükten keys fonksiyonu ile nasıl çekildiğine dikkat edin. keys bir yineleyicidir ve bir liste oluşturur. Bu sayede listeler için tanımlı tüm işlevler kullanılabilir.

Sözlükler, anahtarları değerlere bağlamanın kolay bir yolunu sağlar. Bu, çeşitli anahtarlara bağlı verileri kolayca izlemek için kullanılabilir.

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Back to top