Tutorial Python untuk bukan pengatur cara/Kamus

Daripada Wikibooks
Jump to navigation Jump to search

Bab ini berkaitan dengan kamus. Jika anda membuka sebuah kamus, anda anda melihat bahawa setiap entri terkandung daripada dua bahagian, sebuah perkataan dan takrif perkataan tersebut. Perkataan merupakan kunci kepada pencarian maksud sebuah perkataan itu, dan maksud perkataan itu pula dianggap nilai bagi kunci tersebut. Dengan Python, kamus memiliki kunci dan nilai. Kunci digunakan bagi mencari nilai. Berikut adalah contoh penggunaan kamus:

def menu_cetak():
    print '1. Cetak Kamus'
    print '2. Tambah takrif'
    print '3. Buang perkataan'
    print '4. Cari perkataan'
    print '5. Berhenti'
    print

perkataan = {}
pilihan_menu = 0
menu_cetak()

while pilihan_menu != 5:
    pilihan_menu = input("Taipkan nombor (1-5): ")
    if pilihan_menu == 1:
        print "Takrif:"
        for x in perkataan.keys():
            print x, ": ", perkataan[x]
        print
    elif pilihan_menu == 2:
        print "Tambah takrif"
        nama = raw_input("Perkataan: ")
        maksud = raw_input("Takrif: ")
        perkataan[nama] = maksud
    elif pilihan_menu == 3:
        print "Buang perkataan"
        nama = raw_input("Perkataan: ")
        if nama in perkataan:
            del perkataan[nama]
            print nama, " dibuang."
        else:
            print nama, " tidak terjumpa."
    elif pilihan_menu == 4:
        print "Cari Perkataan"
        nama = raw_input("Perkataan: ")
        if nama in perkataan:
            print "Takrif ", nama, " ialah: ", perkataan[nama]
        else:
            print nama, "Tiada takrif bagi ", nama, " dijumpai."
    elif pilihan_menu != 5:
        cetak_menu()

Dan ini output saya:

1. Cetak Kamus
2. Tambah takrif
3. Buang perkataan
4. Cari perkataan
5. Berhenti

Taipkan nombor (1-5): 2
Tambah takrif
Perkataan: Python
Takrif: Sejenis ular, sebuah bahasa pengaturcaraan, dan sebuah komedi British.
Taipkan nombor (1-5): 2
Tambah takrif
Perkataan: Kamus
Takrif: Buku yang mengandungi takrif perkataan.
Taipkan nombor (1-5): 1
Takrif:
Python: Sejenis ular, sebuah bahasa pengaturcaraan, dan sebuah komedi British.
Kamus: Buku yang mengandungi takrif perkataan.

Taipkan nombor (1-5): 4
Cari Perkataan
Perkataan: Python
Takrif Python ialah: Sejenis ular, sebuah bahasa pengaturcaraan, dan sebuah komedi British.
Taipkan nombor (1-5): 3
Buang Perkataan
Perkataan: Kamus
Kamus dibuang.
Taipkan nombor (1-5): 1
Takrif:
Python: Sejenis ular, sebuah bahasa pengaturcaraan, dan sebuah komedi British. 
Taipkan nombor (1-5): 5

Program ini seakan-akan dengan list nama daripada bab terawal tentang list (perhatikan bahawa list menggunakan index sementara kamus tidak). Ini caranya program ini dilaksanakan:

  • Mula-mula function atau fungsi menu_cetak diberi definisi. menu_cetak hanya mencetak sebuah menu yang kemudiannya digunakan sebanyak dua kali oleh program.
  • Kemudian muncul baris yang kelihatan aneh, perkataan = {}. Tugas baris ini ialah memberitahu Python bahawa perkataan ialah sebuah dictionary atau kamus.
  • Baris-baris berikutnya bertugas untuk melaksanakan program.
for x in perkataan.keys():
    print x, ": ", perkataan[x]
  • Ini menghurai kamus dan mencetak kesemua maklumat. Fungsi perkataan.keys() memulangkan sebuah list atau senarai yang kemudiannya diguna oleh loop atau gelung for. Senarai yang dipulangkan oleh keys() tidak berada dalam aturan tertentu, jadi jika anda mahu ia berada dalam aturan mengikut abjad anda perlu membuat sort atau pengisihan. Sama dengan senarai, kenyataan perkataan[x] digunakan untuk mendapatkan ahli tertentu kamus. Sudah tentunya dalam kes ini, x ialah sebuah string.
  • Kemudian baris words[name] = means menambah perkataan dan definisi pada kamus. Jika name sudah terdapat dalam kamus, means akan menggantikannya.
if nama in perkataan:
    del perkataan[nama]
  • Lihat sama ada nama terdapat dalam perkataan, dan buangkan jika ada. Ungkapan nama in perkataan memulangkan true jika nama merupakan kunci dalam perkataan, tetapi akan memulangkan false jika sebaliknya. Baris del perkataan[nama] membuang kunci nama dan nilai yang terpaut dengan kunci tersebut.
if nama in perkataan:
    print "Definisi ", nama, " ialah: ", perkataan[nama]
  • Periksa sama ada perkataan memiliki kunci tertentu dan jika ya, mencetak definis yang berkaitan dengannya.
  • Akhir sekali, jika pilihan menu tidak sah, ia akan mencetak semula menu buat tatapan anda.

Ulang kaji: Kamus, Dictionaries memiliki kunci dan nilai. Kunci boleh hadir dalam bentuk rentetan atau nombor. Kunci menunjuk kepada nilai. Nilai boleh terdiri daripada apa-apa jenis pemboleh ubah (termasuk senarai dan juga kamus (dan kamus atau senarai tersebut sudah tentu boleh mengandungi kamus atau senarai (menakutkan, betul tak? :-) )). Ini contoh penggunaan senarai dalam kamus:

markah_maksimum = [25, 25, 50, 25, 100]
kerja_rumah = ['hw ch 1', 'hw ch 2', 'kuiz   ', 'hw ch 3', 'ujian']
pelajar = {'#Max': markah_maksimum}

def menu_cetak():
    print "1. Tambah pelajar"
    print "2. Buang pelajar"
    print "3. Cetak gred"
    print "4. Catat gred"
    print "5. Cetak Menu"
    print "6. Keluar"

def cetak_semua_gred():
    print '\t',
    for i in range(len(kerja_rumah)):
        print kerja_rumah[i], '\t',
    print
    keys = pelajar.keys()
    keys.sort()
    for x in keys:
        print x, '\t',
        gred = pelajar[x]
        cetak_gred(gred)

def cetak_gred(gred):
    for i in range(len(gred)):
        print gred[i], '\t', '\t',
    print

menu_cetak()
pilihan_menu = 0
while pilihan_menu != 6:
    print
    pilihan_menu = input("Pilihan Menu (1-6): ")
    if pilihan_menu == 1:
        nama = raw_input("Pelajar yang ditambah: ")
        pelajar[nama] = [0] * len(markah_maksimum)
    elif pilihan_menu == 2:
        nama = raw_input("Pelajar yang dibuang: ")
        if nama in pelajar:
            del pelajar[nama]
        else:
            print "Pelajar:", nama, "tidak terjumpa"
    elif pilihan_menu == 3:
        cetak_semua_gred()
    elif pilihan_menu == 4:
        print "Catat Gred"
        nama = raw_input("Pelajar: ")
        if nama in pelajar:
            gred = pelajar[nama]
            print "Taipkan nombor gred yang mahu dicatat"
            print "Taip 0 (sifar) untuk keluar"
            for i in range(len(kerja_rumah)):
                print i + 1, kerja_rumah[i], '\t',
            print
            cetak_gred(gred)
            mana = 1234
            while mana != -1:
                mana = input("Tukar gred yang mana: ")
                mana = mana - 1
                if 0 <= mana < len(gred):
                    gred_baru = input("Gred: ")
                    gred[mana] = gred_baru
                elif mana != -1:
                    print "Nombor Gred Tidak Sah"
        else:
            print "Pelajar tidak terjumpa"
    elif pilihan_menu != 6:
        menu_cetak()

dan ini sampel output:

1. Tambah pelajar
2. Buang pelajar
3. Cetak gred
4. Catat gred
5. Cetak Menu
6. Keluar

Pilihan Menu (1-6): 3
       hw ch 1         hw ch 2         kuiz            hw ch 3         ujian 
#Max    25              25              50              25              100 

Pilihan Menu (1-6): 5
1. Tambah pelajar
2. Buang pelajar
3. Cetak gred
4. Catat gred
5. Cetak Menu
6. Keluar

Pilihan Menu (1-6): 1
Pelajar yang ditambah: Ramlee

Pilihan Menu (1-6): 4
Catat Gred
Pelajar: Ramlee
Taipkan nombor gred yang mahu dicatat
Taip 0 (sifar) untuk keluar
1   hw ch 1     2   hw ch 2     3   kuiz        4   hw ch 3     5   ujian 
0               0               0               0               0 
Tukar gred yang mana: 1
Grade: 25
Tukar gred yang mana: 2
Grade: 24
Tukar gred yang mana: 3
Grade: 45
Tukar gred yang mana: 4
Grade: 23
Tukar gred yang mana: 5
Grade: 95
Tukar gred yang mana: 0

Pilihan Menu (1-6): 3
       hw ch 1         hw ch 2         kuiz            hw ch 3         ujian 
#Max    25              25              50              25              100
Ramlee  25              24              45              23              95 

Pilihan Menu (1-6): 6

Ini caranya bagaimana program ini bekerja. Secara asasnya, pemboleh ubah pelajar adalah sebuah kamus dengan nama pelajar sebagai kunci dan gred sebagai nilai. Dua baris pertama hanya mewujudkan dua senarai. Baris berikut, pelajar = {'#Max': markah_maksimum} mewujudkan sebuah kamus baharu dengan kunci {#Max} dan nilai ditetapkan sebagai [25, 25, 50, 25, 100], memandangkan itulah markah_maksimum apabila kerja rumah diberi (saya guna kunci #Max kerana # diisih sebelum aksara abjad). Kemudian cetak_menu ditetapkan [diberi definisi]. Kemudian fungsi cetak_semua_gred diberi definisi dalam baris-baris:

def cetak_semua_gred():
    print '\t',
    for i in range(len(kerja_rumah)):
        print kerja_rumah[i], '\t',
    print
    keys = pelajar.keys()
    keys.sort()
    for x in keys:
        print x, '\t',
        gred = pelajar[x]
        cetak_gred(gred)

Perhatikan bagaimana mula-mula kunci diperoleh daripada kamus pelajar dengan fungsi keys dalam baris keys = students.keys(). keys adalah satu senarai, jadi semua fungsi senarai dapat digunakan terhadapnya. Kemudian, memandangkan ia sebuah senarai, kunci diisih pada baris keys.sort(). for digunakan untuk menggelintar semua kunci. Gred-gred distor sebagai sebuah senarai dalam kamus, justeru umpukan gred = pelajar[x] memberigred senarai yang distor pada kunci x. Fungsi cetak_gred mencetak sebuah senarai dan diberi definisinya beberapa baris kemudian.

Baris-baris terkemudian program ini melaksanakan pilihan menu. Baris pelajar[nama] = [0] * len(markah_maksimum) menambah pelajar pada kunci nama mereka. Notasi [0] * len(markah_maksimum) mencipta sebuah senarai yang mengandungi '0' yang sama panjang dengan senarai markah_maksimum.

Entri bagi 'buang pelajar' menyingkir pelajar sama dengan cara yang dibuat dalam contoh buku telefon. Pilihan 'catatan gred' sedikit kompleks. Gred-gred diperoleh dalam baris gred = pelajar[nama] mendapat rujukan kepada gred nama pelajar. Satu gred kemudiannya dicatat pada baris gred[mana] = gred_baru. Anda mungkin perasan yang gred tidak dimasukkan semula ke dalam kamus pelajar (tiada pelajar[nama] = gred). Sebabnya ialah gred sebenarnya sama dengan pelajar[nama], jadi mengubah gred akan mengubah pelajar[nama].

Kamus menyediakan cara yang mudah untuk mengaitkan kunci dengan nilai. Ini dapat digunakan untuk mengesan data tang dikaitkan dengan pelbagai kunci.