Tutorial Python untuk bukan pengatur cara/Senarai

Daripada Wikibooks
Pergi ke pandu arah Pergi ke carian

Pemboleh ubah yang memiliki lebih daripada satu nilai[sunting]

Anda sudah melihat pemboleh ubah biasa yang menstor nilai tunggal. Walau bagaimanapun pemboleh ubah jenis lain dapat menstor lebih daripada satu nilai. Jenis yang paling ringkas atau mudah dipanggil list atau senarai. Ini contoh penggunaan list:

mana_satu = input("Bualan apa (1-12)? ")
bulan = ['Januari', 'Februari', 'Mac', 'April', 'Mei', 'Jun', 'Julai',
          'Ogos', 'September', 'Oktober', 'November', 'Disember']

if 1 <= mana_satu <= 12:
    print "Bulan ialah", bulan[mana_satu - 1]

dan outputnya:

Bulan apa (1-12)? 3
Bulan ialah Mac

Dalam contoh ini bulan ialah list. Pemboleh ubah bulan ditakrifkan dengan baris bulan = ['Januari', 'Februari', 'Mac', 'April', 'Mei', 'Jun', 'Julai', dan 'Ogos', 'September', 'Oktober', 'November', 'Disember'] (perhatikan bahawa sebuah \ juga boleh digunakan untuk membahagikan sebuah baris yang panjang, namun ia tidak perlu oleh sebab Python pintar dan tahu bahawa semua yang terkandung dalam kurungan harus disatukan). Tanda [ dan ] memula dan mengakhiri list dengan koma (,) yang mengasingkan kandungan atau item list atau senarai. list digunakan dalam bulan[mana_satu - 1].

Sebuah list terdiri daripada item yang diberi bilangan bermula dengan sifar (0). Dalam kata lain, jika anda mahu Januari anda akan mengguna bulan[0]. Berikan nombor kepada list dan ia akan memulangkan nilai yang terstor pada lokasi itu.

Kenyataan if 1 <= mana_satu <= 12: hanya akan menjadi true (benar) jika mana_satu antara satu dan dua belas inklusif (dalam kata lain, ia adalah apa yang anda sangkakan sekiranya anda melihat kod seakan-akan itu dalam algebra).

List juga boleh difikirkan sebagi siri kotak. setiap kotak memiliki nilai berlainan. Misalnya kotak-kotak yang dijana demolist = ['hayat', 42, 'alam', 6, 'dan', 7] akan kelihatan demikian:

nombor kotak 0 1 2 3 4 5
demolist "hayat" 42 "alam" 6 "dan" 7

Setiap kotak dirujuk dengan nombornya agar kenyataan demolist[0] akan mendapat 'hayat', demolist[1] akan mendapat 42 dan seterusnya sehinggalah demolist[5] yang mendapat 7.

Lagi tentang ciri-ciri list[sunting]

Contoh berikut ialah untuk mempamerkan operasi-operasi lain yang dapat dilakukan list (buat kali ini saya tidak memerlukan anda menaipnya, tetapi anda patut mencuba-cuba list sehingga anda berasa selesa dengannya.). Ini dia:

demolist = ["hayat", 42, "alam", 6, "dan", 7]
print "demolist = ",demolist
demolist.append("semua")
print "selepas 'semua' ditambah, demolist sekarang ialah:"
print demolist
print "len(demolist) =", len(demolist)
print "demolist.index(42) =", demolist.index(42)
print "demolist[1] =", demolist[1]

# Kemudian kita akan masuk gelung <code>list</code>
c = 0
while c < len(demolist):
    print "demolist[", c, "] =", demolist[c]
    c = c + 1

del demolist[2]
print "Selepas 'alam' dibuang, demolist sekarang ialah:"
print demolist
if "hayat" in demolist:
    print "'hayat' hadir dalam demolist"
else:
    print "'hayat' tidak hadir dalam demolist"

if "amoeba" in demolist:
    print "'amoeba' hadir dalam demolist"

if "amoeba" not in demolist:
    print "'amoeba' tidak hadir dalam demolist"

demolist.sort()
print "Demolist yang sudah sort ialah", demolist

Output ialah:

demolist =  ['hayat', 42, 'alam', 6, 'dan', 7]
selepas 'semua' ditambah, demolist sekarang ialah:
['hayat', 42, 'alam', 6, 'dan', 7, 'semua']
len(demolist) = 7
demolist.index(42) = 1
demolist[1] = 42
demolist[ 0 ] = hayat
demolist[ 1 ] = 42
demolist[ 2 ] = alam
demolist[ 3 ] = 6
demolist[ 4 ] = dan
demolist[ 5 ] = 7
demolist[ 6 ] = semua
Selepas 'alam' dibuang, demolist sekarang ialah:
['hayat', 42, 6, 'dan', 7, 'semua']
'hayat' hadir dalam demolist
'amoeba' tidak hadir dalam demolist
Demolist yang sudah sort ialah [6, 7, 42, 'dan', 'semua', 'hayat']


TODO

Nota penterjemah:
Dalam kod di atas, sort ialah sebuah method untuk list


Contoh di atas menggunakan beberapa fungsi baharu. Perhatikan bahawa anda boleh print sebuah list. Kemudian fungsi append digunakan untuk menambah item baharu pada penghujung list. len memulangkan bilangan item yang terdapat dalam list. Index yang sah (seperti nombor yang boleh digunakan dalam []) sebuah list memiliki julat daripada 0 hingga ke len - 1. Fungsi index memberitahu di mana lokasi item pertama dalam list. Perhatikan bagaimana demolist.index(42) memulangkan 1, dan apabila demolist[1] dilaksanakan ia memulangkan 42. Baris # Kemudian kita akan masuk gelung list hanya sebuah peringatan kepada pengatur cara (juga digelar ulasan). Python akan mengabaikan apa jua baris yang bermula dengan #. Kemudian baris-baris:

c = 0
while c < len(demolist):
    print 'demolist[', c, '] =', demolist[c]
    c = c + 1

menjana pemboleh ubah c, yang bermula daripada 0 dan ditokok (increment) sehingga ia sampai kepada indeks terakhir senarai. Sementara itu kenyataan print mencetak setiap unsur yang terdapat dalam senarai tersebut. Perintah del dapat digunakan bagi menyingkir sesuatu unsur daripada senarai. Baris-baris berikutnya mengguna operator in untuk menguji sama ada sesuatu unsur itu berada dalam senarai atau tidak. Fungsi sort mengisih senarai. Ini amat berguna sekiranya anda memerlukan senarai yang bermula dengan angka paling kecil sehingga yang paling besar, ataupun sekirannya anda memerlukan senarai mengikut abjad. Perhatikan bahawa ini akan mengatur semula senarai. Secara ringkas, bagi senarai, operasi-operasi berikut berlaku:

contoh penjelasan
demolist[2] mengakses unsur di indeks 2
demolist[2] = 3 menetapkan unsur di indeks 2 pada 3
del demolist[2] menyingkir unsur pada indeks 2
len(demolist) memulangkan panjang demolist
"nilai" dalam demolist ialah Benar jika "nilai" ialah unsur dalam demolist
"nilai" tiada dalam demolist ialah Benar jika "nilai" bukan unsur dalam demolist
demolist.sort() mengisih demolist
demolist.index("nilai") memulangkan indeks tempat pertama berlakunya "nilai"
demolist.append("nilai") menambah "nilai" unsur pada penghujung senarai
demolist.remove("nilai") menyingkir kejadian pertama nilai daripada demolist (sama dengan del demolist[demolist.index("nilai")])

Contoh berikutnya menggunakan ciri-ciri ini dalam cara yang lebih berguna:

item_menu = 0
senarainama = []
while item_menu != 9:
    print "--------------------"
    print "1. Cetak senarai"
    print "2. Tambah nama pada senarai"
    print "3. Singkir nama daripada senarai"
    print "4. Tukar item dalam senarai"
    print "9. Berhenti"
    item_menu = input("Pilih item daripada menu: ")
    if item_menu == 1:
        semasa = 0
        if len(senarainama) > 0:
            while semasa < len(senarainama):
                print semasa, ".", senarainama[semasa]
                semasa = semasa + 1
        else:
            print "Senarai kosong"
    elif item_menu == 2:
        nama = raw_input("Taip nama yang mahu ditambah: ")
        namelist.append(nama)
    elif item_menu == 3:
        buang_nama = raw_input("Taip nama yang mahu dibuang: ")
        if buang_nama in senarainama:
            # senarainama.remove(buang_nama) juga boleh diguna
            nombor_item = senarainama.index(buang_nama)
            del senarainama[nombor_item]
            # Kod di atas hanya menyingkirkan kejadian pertama 
            # nama. Kod di bawah daripada Gerald menyingkirkan semua.
            # while buang_nama in senarainama:
            #       nombor_item = senarainama.index(buang_nama)
            #       del senarainama[nombor_item]
        else:
            print buang_nama, "tidak diketemu"
    elif item_menu == 4:
        nama_lama = raw_input("Nama apa yang ingin anda ubah: ")
        if nama_lama in senarainama:
            nombor_item = senarainama.index(nama_lama)
            nama_baru = raw_input("Apa nama baharu: ")
            senarainama[nombor_item] = nama_baru
        else:
            print nama_lama, "tidak diketemu"

print "Sayonara"

Dan ini sebahagian daripada output:

--------------------
1. Cetak senarai
2. Tambah nama pada senarai
3. Singkir nama daripada senarai
4. Tukar item dalam senarai
9. Berhenti

Pilih item daripada menu: 2
Taip nama yang mahu ditambah: Jack

Pilih item daripada menu: 2
Taip nama yang mahu ditambah: Jill

Pilih item daripada menu: 1
0 . Jack
1 . Jill

Pilih item daripada menu: 3
Taip nama yang mahu dibuang: Jack

Pilih item daripada menu: 4
Nama apa yang ingin anda ubah: Jill
Apa nama baharu: Jill Kuppusamy

Pilih item daripada menu: 1
0 . Jill Kuppusamy

Pilih item daripada menu: 9
Sayonara

Itu satu atur cara yang panjang. Mari kita lihat kod sumber. Baris senarainama = [] membuat pemboleh ubah senarainama sebuah senarai yang tidak mengandungi item (ataupun unsur). Baris penting berikutnya ialah while item_menu != 9:. Baris ini memulakan gelung yang membolehkan sistem menu bagi program ini. Baris-baris selanjutnya menampilkan menu dan membuat keputusan bahagian mana atur cara akan dilaksanakan (P: bergantung pada pilihan pengguna).

Bahagian

semasa = 0
if len(senarainama) > 0:
    while semasa < len(senarainama):
        print semasa, ".", senarainama[semasa]
        semasa = semasa + 1
else:
    print "Senarai kosong"

memperlelar senarai dan mencetak setaip nama. len(namelist) memberitahu bilangan item dalam senarai. Jika len memulangkan 0, senarai tidak mengandungi apa-apa item.

Beberapa baris kemudian, penyataan senarainama.append(nama) pula muncul. Ia menggunakan fungsi append untuk menambah item pada penghujung senarai. Langkah dua baris lagi dan lihat kod berikut:

nombor_item = senarainama.index(buang_nama)
del senarainama[nombor_item]

Di sini, fungsi index digunakan untuk mencari nilai indeks yang akan digunakan kemudian bagi menyingkir item berkenaan. del senarainama[nombor_item] digunakan bagi menyingkir sebuah unsur senarai.

Bahagian berikut

nama_lama = raw_input("Nama apa yang ingin anda ubah: ")
        if nama_lama in senarainama:
            nombor_item = senarainama.index(nama_lama)
            nama_baru = raw_input("Apa nama baharu: ")
            senarainama[nombor_item] = nama_baru
        else:
            print nama_lama, "tidak diketemu"

mengguna index untuk mencari nombor_item dan kemudian meletakkan nama_baru di tempat terletaknya nama_lama.

Tahniah, memandangkan sekarang anda sudah memahami senarai atau >code>list, anda sudahpun mengetahui sebahagian yang mencukupi tentang bahasa ini dan anda sekarang boleh melakukan pengkomputan yang dapat dilakukan sesebuah komputer (secara teknikal, ini dikenali sebagai Turing-Completeness). Sudah tentu masih ada lagi ciri-ciri lain yang boleh digunakan yang dapat memudahkan tugas anda.

Contoh[sunting]

ujian.py

## Program ini melaksana ujian pengetahuan

# Mula-mula dapatkan soalan ujian
# Kemudian ini akan diubah suai
# untuk mengguna io fail.
def dapat_soalan():
    # perhatikan bagaimana data distor sebagai senarai beberapa senarai
    return [["Apakah warna langit pada siang hari? ", "biru"],
            ["Apakah jawapan kepada persoalan tentang alam semesta dan semuanya? ", "42"],
            ["Apakah perkataan 6 huruf yang merujuk kepada perangkap tikus? ", "kucing"]]

# Ini akan menguji soalan tunggal
# ia mengutarakan satu soalan 
# dan memulangkan True jika jawapan yang dimasukkan pengguna itu betul,
# jika tidak, False

def periksa_soalan(soal_jawab):
    # sari soalan dan jawapan daripada senarai
    soalan = soal_jawab[0]
    jawapan = soal_jawab[1]
    # berikan jawapan kepada pengguna
    jawapan_diberi = raw_input(soalan)
    # bandingkan jawapan pengguna dengan jawapan tukang uji
    if jawapan == jawapan_diberi:
        print "Betul"
        return True
    else:
        print "Tidak betul, jawapannya ialah:", jawapan
        return False

# Ini akan melaksanakan semua soalan
def laksana_ujian(soalan):
    if len(soalan) == 0:
        print "Tiada soalan diberikan."
        # "return" akan menghentikan fungsi
        return
    index = 0
    betul = 0
    while index < len(soalan):
        # Semak soalan 
        if periksa_soalan(soalan[index]):
            betul = betul + 1
        # pergi ke soalan berikutnya
        index = index + 1
    # perhatikan urutan pengkomputan, mula-mula darab,
    # kemudian bahagi
    print "Anda mendapat", betul * 100 / len(soalan),\
           "% jawapan betul daripada", len(soalan), "soalan yang dikemukakan."

# laksana soalan

laksana_ujian(dapat_soalan())

Nilai-nilai True dan False masing-masing merujuk kepada 1 dan 0. Nilai-nilai ini sering digunakan dalam "ujian kewarasan", syarat-syarat gelung, dll. Anda akan mempelajari lebih lanjut tentang perkara ini kemudian (bab Ungkapan Boolean).

Sampel Output:

Apakah warna langit pada siang hari? hijau
Tidak betul, jawapannya ialah: biru
Apakah jawapan kepada persoalan tentang alam semesta dan semuanya? 42
Betul
Apakah perkataan 6 huruf yang merujuk kepada perangkap tikus? kucing
Betul
Anda mendapat 66 % jawapan betul daripada 3 soalan yang dikemukakan.

Latihan[sunting]

Kembangkan program ujian.py agar ia memiliki menu yang memberikan pilihan mengambil ujian, membelek senarai soalan dan jawapan, dan pelihan untuk berhenti. Lagi, tambah soalan baharu yang menanyakan, "Apakah bunyi yang dibuat mesin yang betul-betul maju?" dengan jawapannya "ping".

Penyelesaian

Kembangkan program ujian.py agar ia memiliki menu yang memberikan pilihan mengambil ujian, membelek senarai soalan dan jawapan, dan pelihan untuk berhenti. Lagi, tambah soalan baharu yang menanyakan, "Apakah bunyi yang dibuat mesin yang betul-betul maju?" dengan jawapannya "ping".

## Program ini merupakan ujian pengetahuan

soalan = [["Apakah warna langit pada siang hari? ", "biru"],
            ["Apakah jawapan kepada persoalan tentang alam semesta dan semuanya? ", "42"],
            ["Apakah perkataan 6 huruf yang merujuk kepada perangkap tikus? ", "kucing"],
            ["Apakah bunyi yang dibuat mesing yang paling maju? ", "ping"]]

# Ini akan menguji soalan tunggal
# ia mengutarakan satu soalan 
# dan memulangkan True jika jawapan yang dimasukkan pengguna itu betul,
# jika tidak, False

def periksa_soalan(soal_jawab):
    # sari soalan dan jawapan daripada senarai
    soalan = soal_jawab[0]
    jawapan = soal_jawab[1]
    # berikan jawapan kepada pengguna
    jawapan_diberi = raw_input(soalan)
    # bandingkan jawapan pengguna dengan jawapan tukang uji
    if jawapan == jawapan_diberi:
        print "Betul"
        return True
    else:
        print "Tidak betul, jawapannya ialah:", jawapan
        return False

# This will run through all the questions

def laksana_ujian(soalan):
    if len(soalan) == 0:
        print "Tiada soalan diberikan."
        # "return" akan menghentikan fungsi
        return
    index = 0
    betul = 0
    while index < len(soalan):
        # Semak soalan 
        if periksa_soalan(soalan[index]):
            betul = betul + 1
        # pergi ke soalan berikutnya
        index = index + 1
    # perhatikan urutan pengkomputan, mula-mula darab,
    # kemudian bahagi
    print "Anda mendapat", betul * 100 / len(soalan),\
           "% jawapan betul daripada", len(soalan), "soalan yang dikemukakan."
 

#memaparkan senarai soalan dan jawapan

def papar_soalan():
    s = 0
    while s < len(soalan):
        j = 0
        print "S:" , soalan[s][j]
        j = 1
        print "J:" , soalan[s][j]
        s = s + 1

# sekarang kita beri definisi fungsi menu
def menu():
    print "-----------------"
    print "Menu:"
    print "1 - Ambil ujian"
    print "2 - Belek senarai soalan dan jawapan"
    print "3 - Belek menu"
    print "5 - Berhenti"
    print "-----------------"

pilih = "3"
while pilih != "5":
    if pilih == "1":
        laksana_ujian(soalan)
    elif pilih == "2":
        papar_soalan()
    elif pilih == "3":
        menu()
    print
    pilih = raw_input("Nyatakan pilihan anda daripada menu di atas: ")


TODO

Nota penterjemah:
Perhatikan perubahan kecil, tetapi penting, pada beberapa bahagian kod berbanding kod asal ujian.py