Tutorial Python untuk bukan pengatur cara/Gelung For

Daripada Wikibooks

Dan ini satu lagi latihan menaip bagi bab ini:

onetoten = range(1, 11)
for count in onetoten:
    print count

dan output yang sering dilihat:

1
2
3
4
5
6
7
8
9
10

Outputnya kelihatan sama tapi kod programnya kelihatan lain. Baris pertama menggunakan fungsi range. Fungsi range mengguna dua argumen seperti ini range(start, finish). Kata "start" ialah nombor pertama yang dijana. Kata "finish" pula lebih besar daripada nombor terakhir. Perhatikan bahawa program ini boleh dilakukan dengan cara yang lebih pendek:

for count in range(1, 11):
    print count

Berikut beberapa contoh bagi menunjukkan apa yang berlaku dengan perintah range:

>>> range(1, 10)
[1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> range(-32, -20)
[-32, -31, -30, -29, -28, -27, -26, -25, -24, -23, -22, -21]
>>> range(5,21)
[5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]
>>> range(5)
[0, 1, 2, 3, 4]
>>> range(21, 5)
[]

Baris berikut, for count in onetoten: mengguna struktur kawalan for. Struktur kawalan for berupa begini: for variable in list: (bagi pemboleh ubah dalam list:). list dihurai bermula dengan unsur pertama list hingga yang terakhir. Semasa for memeriksa setiap unsur dalam list, ia meletakkan setiap unsur tersebut ke dalam variable atau pemboleh ubah. Ini membolehkan penggunaan variable setiap kali gelung for dilaksana. Ini satu lagi contoh (anda tidak perlu taip kod ini) bagi menunjukkan penggunaan ini:

demolist = ['hayat', 42, 'alam', 6, 'dan', 9, 'semua']
for item in demolist:
    print "Item semasa ialah:",
    print item

Outputnya ialah:

Item semasa ialah: hayat
Item semasa ialah: 42
Item semasa ialah: alam
Item semasa ialah: 6
Item semasa ialah: dan
Item semasa ialah: 9
Item semasa ialah: semua


Perhatikan bagaimana gelung for menghurai setiap item dan meletakkan setiap item kepada unsur yang terdapat dalam list. Perhatikan juga bahawa sekiranya anda tidak mahu print berada di baris berikutnya, anda boleh tambah koma di penghujung kenyataan (iaitu, sekiranya anda mahu mencetak perkara lain pada baris itu). Jadi, apa gunanya for? Penggunaan pertama ialah untuk menghurai setiap unsur sesebuah list dan melakukan sesuatu dengan unsur tersebut. Ini satu cara bagi menghitung kesemua unsur:

list = [2, 4, 6, 8]
jumlah = 0
for num in list:
    jumlah = jumlah + num

print "Jumlah ialah:", jumlah

dengan outputnya:

Jumlah ialah: 20

Ataupun anda boleh menulis program untuk memastikan sama ada terdapat pendua dalam sebuah senarai, seperti yang dilakukan program ini:

list = [4, 5, 7, 8, 9, 1, 0, 7, 10]
list.sort()
sebelum = list[0]
del list[0]
for item in list:
    if sebelum == item:
        print "Pendua atau duplicate ", sebelum, "dijumpai"
    sebelum = item

dan untuk mendapatkan kepastian:

Pendua atau duplicate 7 dijumpai

Okey, jadi bagaimana kod ini bekerja? Ini sebuah versi nyahpepijat bagi membantu anda memahami (anda tidak perlu menaipnya):

l = [4, 5, 7, 8, 9, 1, 0, 7, 10]
print "l = [4, 5, 7, 8, 9, 1, 0, 7, 10]", "\t\tl:", l
l.sort()
print "l.sort()", "\t\tl:", l
sebelum = l[0]
print "sebelum = l[0]", "\t\tsebelum:", sebelum
del l[0]
print "del l[0]", "\t\tl:", l
for item in l:
    if sebelum == item:
        print "Pendua atau duplicate ", sebelum, "dijumpai"
    print "if sebelum == item:", "\t\tprev:", sebelum, "\titem:", item
    sebelum = item
    print "sebelum = item", "\t\tsebelum:", sebelum, "\titem:", item

Dengan output:

l = [4, 5, 7, 8, 9, 1, 0, 7, 10]        l: [4, 5, 7, 8, 9, 1, 0, 7, 10]
l.sort()                l: [0, 1, 4, 5, 7, 7, 8, 9, 10]
sebelum = l[0]          sebelum: 0
del l[0]                l: [1, 4, 5, 7, 7, 8, 9, 10]
if sebelum == item:     sebelum: 0          item: 1
sebelum = item          sebelum: 1         item: 1
if sebelum == item:     sebelum: 1         item: 4
sebelum = item          sebelum: 4         item: 4
if sebelum == item:     sebelum: 4         item: 5
sebelum = item          sebelum: 5         item: 5
if sebelum == item:     sebelum: 5         item: 7
sebelum = item          sebelum: 7         item: 7
Pendua atau duplicate 7 dijumpai
if sebelum == item:     sebelum: 7         item: 7
sebelum = item          sebelum: 7         item: 7
if sebelum == item:     sebelum: 7         item: 8
sebelum = item          sebelum: 8         item: 8
if sebelum == item:     sebelum: 8         item: 9
sebelum = item          sebelum: 9         item: 9
if sebelum == item:     sebelum: 9         item: 10
sebelum = item          sebelum: 10        item: 10

Saya memuatkan banyak kenyataan print dalam kod agar anda dapat melihat apa yang berlaku pada setiap baris. (Oh ya, jika anda tidak faham kenapa program tidak berjalan dengan betul, anda boleh cuba memuatkan banyak kenyataan print agar anda boleh lihat apa yang sedang berlaku). Mula-mula sekali program berjalan dengan menjana list. Kemudian program mengisih list. Ini dilakukan agar apa jua pendua akan diletakkan bersebelahan. Program kemudian mengasal pemboleh ubah sebelum. Selepas itu unsur pertama list dihapus agar item pertama tidak disalah anggap sebagai sebuah pendua. Kemudian program memasuki gelung for. Setiap item dalam list diperiksa untuk memastikan sama ada ia sama dengan item sebelumnya. Jika ya, ini bermakna sebuah pendua telah dijumpai. Nilai sebelum kemudiannya diubah supaya sebelum menjadi item sebelum kepada item semasa apabila gelung for dilaksanakan sekali lagi. Dan sudah tentu, 7 didapati sebagai pendua. (Lihat juga bagaimana \t digunakan bagi mencetak "tab".)

Cara lain bagi menggunakan gelung for ialah untuk melakukan sesuatu buat beberapa kali tertentu. Ini kod bagi mencetak 9 angka pertama siri Fibonacci:

a = 1
b = 1
for c in range(1, 10):
    print a,
    n = a + b
    a = b
    b = n

dengan output yang tidak dijangka:

1 1 2 3 5 8 13 21 34

Setiap perkara yang dapat dilakukan dengan gelung for boleh juga dilakukan dengan gelung while tetapi gelung for menyediakan cara mudah bagi menghurai kesemua unsur dalam sesebuah list atau melakukan sesuatu buat beberapa kali tertentu.