Kod arahan
What this chapter coversMatlamat bab ini
- Murid boleh menggunakan jenis data (integer, boolean, double, char dan string) dalam segmen kod (3.1.1)
- Murid boleh membezakan antara pemboleh ubah dan pemalar dalam segmen kod (3.1.2)
- Murid boleh menghasilkan segmen kod menggunakan fungsi input dan output, operator perbandingan dan operator logik (3.1.3)
- Murid boleh mengesan dan membaiki ralat sintaks, ralat masa larian dan ralat logik pada segmen kod dalam penyelesaian masalah (3.1.4)
- Murid boleh menyelesaikan masalah yang melibatkan gabungan jenis data, pemboleh ubah, pemalar dan operator dalam segmen kod (3.1.5)
- Murid boleh menghasilkan atur cara yang melibatkan struktur kawalan jujukan, pilihan, pilihan bersarang dan ulangan dalam penyelesaian masalah (3.2.1)
- Murid boleh menguji atur cara dan membaiki ralat pada kod arahan yang dihasilkan (3.2.2)
- Murid boleh menghasilkan atur cara yang melibatkan gabungan pelbagai struktur kawalan (3.2.3)
3.1Persekitaran kod arahan
Bahasa yang digunakan oleh pengatur cara untuk menulis kod arahan ialah bahasa pengaturcaraan. Anda sudah belajar Scratch dan HTML. Dalam bab ini anda belajar Python, yang banyak persamaan dengan Scratch. Kod yang ditulis mestilah mudah difahami.
Penterjemah
Komputer hanya faham bahasa mesin. Semasa atur cara dilaksanakan, kod arahan diterjemahkan kepada bahasa mesin oleh penterjemah. Setiap bahasa pengaturcaraan mempunyai penterjemah sendiri. Ada tiga jenis (Rajah 3.1).
- Penghimpun (assembly): contoh Basic Assembly Language yang digunakan oleh sistem IBM.
- Pengkompil (compiler): contoh C, C++, Java dan Pascal.
- Pentafsir (interpreter): contoh Python, PHP, Perl dan Ruby.
Rajah 3.1: ms. 76.
Buku teks menggunakan Python 3.5.2 dengan aplikasi IDLE. IDLE ada dua tetingkap yang perlu anda bezakan.
- Shell (tanda
>>>): taip satu arahan, tekan Enter, hasil terus keluar. Sesuai untuk mencuba. - Fail baharu (File > New File): taip banyak baris, simpan sebagai fail
.py, kemudian Run > Run Module (atau tekan F5).
print(). Teks merah ialah mesej ralat. Baris yang bermula dengan # ialah komen (dokumentasi) dan tidak dilaksanakan.3.1.1 Jenis data dalam segmen kod
Jenis data memberitahu atur cara apa kegunaan sesuatu pemboleh ubah dan membolehkan data disimpan dalam ingatan dengan berkesan. Lima jenis data dikelaskan kepada tiga kumpulan (Rajah 3.2).
| Kumpulan | Jenis data | Contoh |
|---|---|---|
| Nombor | Nombor bulat: integer (int) | -89, 650, 0 |
| Nombor perpuluhan: double (float dalam Python) | 0.09, -1.43, 45.1 | |
| Teks | Aksara: char | A, b, 8, $, % |
| Rentetan aksara: string (str) | Malaysia, Borneo | |
| Nilai logik | boolean: Benar atau Palsu | True, False dalam atur cara |
Integer dan operator matematik
int memastikan pemboleh ubah sentiasa memegang nilai integer.Operator matematik (Jadual 3.1 dan 3.9, ms. 78 dan 100):
+tambah:88 + 22= 110.-tolak:42 - 25= 17.*darab (bukan x):23 * 8= 184./bahagi:66 / 3= 22.0 (hasil bahagi dalam Python 3 ialah float).%modulus, baki pembahagian:11 % 2= 1.**eksponen, kuasa:11 ** 2= 121 (iaitu 112).//floor division, hasil bahagi tanpa baki:11 // 2= 5.
>>> a = int (10)
>>> b = int (29)
>>> c = a + b
>>> print (c)
39
Contoh 3.1: Buku teks Asas Sains Komputer Tingkatan 2, ms. 78.
*, bukan x. Operator ** ialah kuasa, bukan darab dua kali. 11 % 2 memberi baki (1), manakala 11 // 2 memberi hasil bahagi tanpa baki (5).Python mengikut tertib operasi matematik: darab dan bahagi dahulu, kemudian tambah dan tolak. Kurungan ( ) diselesaikan dahulu. Contoh yang dikira: (1+2+3)*4 - 15/3 = 24 - 5.0 = 19.0.
Double dan float
C, C++ dan C# mengiktiraf double. Python tidak menyokong double; Python menggunakan float. Perbezaannya ialah memori yang diperuntukkan: double 64 bit, float 32 bit (Rajah 3.5 dan 3.6).
Kod C++ dalam Contoh 3.2 mengisytiharkan double. Kod Python dalam Contoh 3.3 menggunakan float dan fungsi round() untuk membundarkan kepada bilangan tempat perpuluhan yang dikehendaki.
>>> nom1 = float (3.333)
>>> nom2 = float (10.401)
>>> nom3 = nom1 + nom2
>>> print (nom3)
13.734
>>> round (nom3, 2)
13.73
Contoh 3.3: Buku teks Asas Sains Komputer Tingkatan 2, ms. 80.
Char
C, C++, C# dan Java ada jenis char. Python tidak ada char; semua aksara diwakili oleh jenis string.
String
str. Nilainya diletakkan dalam petikan tunggal (' ') atau petikan berganda (" ").>>> ayat = str ("Selamat Datang")
>>> print (ayat)
Selamat Datang
Contoh 3.5: ms. 82. Mencetak pemboleh ubah dengan print() tidak memerlukan petikan.
| Fungsi | Tujuan | Contoh dan hasil |
|---|---|---|
[ ] atau [ : ] | Mencapai satu aksara atau lebih | ayat[4] memberi m; ayat[10:14] memberi tang |
len() | Menghitung bilangan aksara | len(ayat) memberi 14 |
+ | Menggabungkan dua string tanpa ruang kosong | "Helo" + "Dunia" memberi HeloDunia |
, (dalam print) | Menggabungkan dengan satu ruang kosong | print("Helo", "Dunia") memberi Helo Dunia |
* | Mengulang string | "Helo" * 4 memberi HeloHeloHeloHelo |
join() | Menambah aksara di antara setiap aksara | ":".join("Selamat") memberi S:e:l:a:m:a:t |
>>> ayat = str ("Selamat datang")
>>> print (ayat[4])
m
>>> print (ayat[10:14])
tang
>>> print (a , b + c)
Helo Dunia!
>>> print (a * 4)
HeloHeloHeloHelo
>>> ayat = str ("Selamat Datang")
>>> print (":".join(ayat))
S:e:l:a:m:a:t: :D:a:t:a:n:g
>>> print (" ".join(ayat))
S e l a m a t D a t a n g
Contoh 3.6 hingga 3.9: ms. 83 hingga 85 (a = "Helo", b = "Dunia", c = "!" daripada Contoh 3.8; Contoh 3.7 dan 3.9 menggunakan "Selamat Datang").
Nombor dalam tanda [ ] dipanggil nombor indeks. Indeks bermula daripada 0: S=0, e=1, l=2, a=3, m=4. Julat [10:14] bermula pada indeks 10 dan berhenti sebelum indeks 14, iaitu aksara pada indeks 10, 11, 12 dan 13 ("t", "a", "n", "g").
Boolean
True dan Palsu sebagai False.Nilai logik digunakan sebagai pernyataan bersyarat dalam struktur kawalan pilihan dan struktur kawalan ulangan. Pernyataan bersyarat ini ialah ungkapan boolean, iaitu ungkapan perbandingan yang menggunakan operator seperti >, >=, <, <=.

>>> x = 13
>>> x > 3
True
>>> x < 0
False
>>> x = 2
>>> 1 < x < 3
True
>>> 10 < x < 20
False
>>> 3 > x <= 2
TrueContoh 3.11 dan Rajah ms. 87.
= bermaksud memberi nilai (x = 13 memberi nilai 13 kepada x). Dua == bermaksud menyemak sama atau tidak dan memberi True atau False.3.1.2 Pemboleh ubah dan pemalar
Semasa pemboleh ubah diisytiharkan, ruang ingatan ditempah berdasarkan jenis datanya. Dalam Python, pengisytiharan berlaku secara automatik apabila anda menetapkan nilai dengan tanda =.
nama = str ("Daniel") # nama: pengecam; str: jenis data; "Daniel": nilai
Rajah 3.9: ms. 91.
Syarat nama pemboleh ubah (ms. 91):
- Boleh: hanya mengandungi aksara (a hingga z, A hingga Z) dan digit (0 hingga 9), contohnya
markah1. - Boleh: nama menggambarkan nilai yang dipegang supaya kod mudah difahami, contohnya
jum_jualan. - Tidak boleh: dimulakan dengan nombor;
3d = 2menghasilkan ralat. - Tidak boleh: ada ruang kosong;
nama muridsalah, tulisnama_murid.
_ digunakan untuk menyambung perkataan (jum_jualan, buku_motivasi).>>> nama = "Daniel"
>>> print ("Nama saya:", nama)
Nama saya: Daniel
Contoh 3.12: ms. 91.
>>> pi = 3.142
>>> jejari_1 = 3
>>> jejari_2 = 5
>>> luas_bulatan_1 = pi * (jejari_1 * jejari_1)
>>> luas_bulatan_2 = pi * (jejari_2 * jejari_2)
>>> print (luas_bulatan_1)
28.278
>>> print (luas_bulatan_2)
78.55
Contoh 3.13: ms. 92. pi ialah pemalar; jejari_1 dan jejari_2 ialah pemboleh ubah. Luas = π × jejari2. Semakan: 3.142 × 3 × 3 = 28.278 dan 3.142 × 5 × 5 = 78.55.
Pemboleh ubah dan pemalar (Jadual 3.4, ms. 92):
- Perubahan nilai: nilai pemboleh ubah boleh berubah-ubah; nilai pemalar tetap dan tidak berubah.
- Nilai yang perlu diingat: pengatur cara perlu mengingat label dan nilai pemboleh ubah; tidak perlu bagi pemalar.
- Standard penggunaan nilai: pemboleh ubah tiada nilai standard; pemalar mempunyai nilai yang standard.
isi_padu = 4/3 * pi * j**3. Jika j = 3 dan pi = 3.142, hasilnya ialah 113.112, iaitu 113.1120 apabila ditulis dengan empat tempat perpuluhan (Python mencetak round(isi_padu, 4) sebagai 113.112). Rumus 3/4 yang salah itu akan memberi 63.6255.3.1.3 Fungsi input, fungsi output dan operator
Fungsi input dan output ialah kaedah interaktif dalam Interaksi Manusia Komputer (IMK). Perantaraan ialah medium seperti antara muka atur cara, warna, cara data dimasukkan dan reka bentuk grafik yang mesra pengguna.
input().print().Fungsi input dan output dalam beberapa bahasa (Jadual 3.5 dan 3.6, ms. 96 dan 97): C++ cin >> umur; dan cout << "Mesej";. C scanf (...); dan printf ("Mesej");. Java System.in (dengan Scanner) dan System.out.println ("Mesej");. Python umur = input ("Umur: ") dan print ("Umur: ") atau print (umur). Scratch: blok ask ... and wait (nilai dalam answer) dan blok say.
>>> umur = input ("Masukkan umur anda: ")
Masukkan umur anda: 14
>>> umur
'14'
>>> umur = int (14)
>>> print ("Umur anda pada tahun ini ialah", umur)
Umur anda pada tahun ini ialah 14
Contoh 3.14 dan 3.15: ms. 96 dan 97. Teks dalam petikan dicetak seperti asal; nama pemboleh ubah dicetak tanpa petikan dan nilainya muncul.
input() sentiasa memberi string (perhatikan '14' dalam petikan di atas). Untuk mengira, tukar jenisnya: umur = int(input("Umur: ")) atau float(input("...")). Salah menulis input(float("...")) menyebabkan ralat masa larian (lihat Contoh 3.28).Operator perbandingan
Contoh dengan a = 5 dan b = 10 (Jadual 3.7, ms. 98):
==sama dengan:a == bFalse;a == 5True.!=tidak sama dengan:a != bTrue;a != 5False.>lebih besar daripada:a > bFalse;b > aTrue.<kurang daripada:a < bTrue;b < aFalse.>=lebih besar atau sama dengan:a >= bFalse;b >= aTrue.<=kurang atau sama dengan:a <= bTrue;b <= aFalse.
!= juga boleh ditulis sebagai < >, tetapi penggunaannya semakin kurang. Rajah buku teks: = memberi nilai (Nama kucing ialah Manja), == Manja semakan yang tidak benar jika nama berbeza, dan Manja == semakan yang benar.
Contoh 3.16: ms. 99. Dengan a = 8 dan b = 10, a > b memberi False. Selepas b = a (nilai a diberi kepada b), a > b masih False tetapi b == a memberi True.
Operator logik
and, or dan not.| a | b | a AND b | a OR b | NOT a | NOT (a AND b) |
|---|---|---|---|---|---|
| True | True | True | True | False | False |
| True | False | False | True | False | True |
| False | True | False | True | True | True |
| False | False | False | False | True | True |
- AND: benar hanya jika kedua-dua operan benar.
- OR: benar jika salah satu operan benar (palsu hanya jika kedua-duanya palsu).
- NOT: menyongsangkan keadaan logik.
Contoh buku teks: operan a = benar, b = palsu. (a AND b) palsu, (a OR b) benar, NOT (a AND b) benar (baris kedua jadual di atas).
a = 6
b = 7
print ("1", a == 6) # True
print ("2", a == 7) # False
print ("3", a == 6 and b == 7) # True
print ("4", a == 7 and b == 7) # False
print ("5", not (a == 7 and b == 6)) # True
Contoh 3.17: mesin layan diri

Mesin menerima wang kertas RM1, RM2 dan RM5 sahaja. Semua minuman berharga RM2. RM1: "Wang anda tidak mencukupi...". RM2: "Terima kasih". RM5: "Sila tunggu, baki wang anda akan dikembalikan...". Penyelesaian dalam Scratch menggunakan pilihan bersarang: jika answer = 2, Terima kasih; jika tidak, jika answer < 2, wang tidak mencukupi; jika tidak, baki dikembalikan.
Operator tambahan %, ** dan // (Jadual 3.9) digunakan untuk baki, kuasa dan hasil bahagi tanpa baki (lihat jadual operator matematik di atas). Contohnya 10 % 2 ialah 0, dan ini kegunaan penting: nombor genap mempunyai nom % 2 == 0.
3.1.4 Mengesan dan membaiki ralat
| Jenis | Apa yang berlaku | Punca biasa (daripada buku teks) |
|---|---|---|
| Ralat sintaks | Dikesan semasa atur cara dilaksanakan; mesej ralat dan baris ditandakan merah; atur cara tidak berjalan | Sintaks salah (printf ialah C++, bukan Python); ejaan sintaks salah; tertinggal atau salah guna simbol (titik bertindih, petikan, kurungan); sintaks di tempat salah (>>> y print); inden salah |
| Ralat masa larian | Atur cara terhenti tiba-tiba dan mesej ralat dipaparkan | Pembahagian dengan sifar; operasi dua pemboleh ubah berlainan jenis data; pemboleh ubah, fungsi, modul atau objek yang belum ditakrifkan; mengakses pustaka atau objek yang tidak wujud; mengakses fail yang tidak wujud |
| Ralat logik | Atur cara berjalan tanpa mesej ralat tetapi hasilnya salah | Pemanggilan pemboleh ubah salah; nombor bulat atau perpuluhan salah tempat; operator salah; kesilapan dalam ungkapan Boolean; ruang jarak salah |
Contoh 3.18: ralat sintaks
Rosli mengira purata ketinggian lima ahli kumpulan (dalam meter), dibundarkan kepada dua tempat perpuluhan. Output yang diingini: setiap ahli dipaparkan dan "Purata Ketinggian: 15.88 m". Tetapi atur cara memberi mesej invalid syntax. Semakan langkah demi langkah menemui satu baris yang salah:
print ("\nPurata Ketinggian: " round (purata,2), "m") # SALAH: tiada koma sebelum round
print ("\nPurata Ketinggian: ", round (purata,2), "m") # BETUL
Contoh 3.18: ms. 102 hingga 105. Semakan: (14.8 + 15.6 + 16.3 + 15.9 + 16.8) / 5 = 79.4 / 5 = 15.88.
Contoh 3.19: ralat masa larian
Mengira kos perkhemahan: kos tetap ialah kelengkapan peribadi RM13.50, pakaian RM105.90 dan sewaan khemah RM12.00; kos berubah (barangan memasak) dimasukkan oleh pengguna. Output yang diingini: jumlah kos tetap RM131.4 (13.5 + 105.9 + 12.0), kos berubah RM30.0 dan jumlah kos RM161.4.
float(peribadi = 13.50) # SALAH
float(pakaian = 105.90)
float(khemah = 12.00)
...
Traceback (most recent call last):
File "C:/Users/Dell/Desktop/Python Saya/perkhemahan.py", line 1, in <module>
float(peribadi = 13.50)
TypeError: 'peribadi' is an invalid keyword argument for this function
peribadi = float(13.50) # BETUL: nama = jenis data(nilai)
Contoh 3.19: ms. 106 hingga 108.
Contoh 3.20: ralat logik
Aziz membayar RM200 untuk dua buku cerita (RM39 satu), satu majalah (RM16) dan dua buku motivasi (sama harga). Baki ialah RM66. Berapakah harga satu buku motivasi?
Kerja yang betul: jumlah belian = 200 - 66 = 134. Buku cerita dan majalah = 2 × 39 + 16 = 94. Dua buku motivasi = 134 - 94 = 40, maka satu buku = 40 / 2 = RM20.
jum1 = (2 * buku_cerita) + majalah
jum_buku = bayaran - baki1
buku_motivasi = jum_buku - jum1 / 2 # SALAH: bahagi dibuat dahulu
buku_motivasi = (jum_buku - jum1) / 2 # BETUL: kurungan, tolak dahulu
Semakan meja (dikira): jum1 = (2 × 39) + 16 = 94; jum_buku = 200 - 66 = 134. Kod salah: 134 - 94 / 2 = 134 - 47 = 87.0, maka semakan baki 200 - (94 + 2 × 87) = -68.0, bukan 66, jadi ada ralat. Kod betul: (134 - 94) / 2 = 20.0, maka semakan baki 200 - (94 + 2 × 20) = 66.0 (benar).
Contoh 3.20: ms. 109 hingga 111. Atur cara menggunakan baki2==baki1 untuk mencetak True jika semakan benar.
Amali Komputer 3.2 dan Aktiviti 3.5: alat tulis
Kod ini mempunyai empat ralat. (1) Sintaks: bil_pembaris = int(input("Masukkan bilangan pembaris yang diperlukan: ") kekurangan satu kurungan tutup ); Python menandakan baris berikutnya dengan invalid syntax. (2) Masa larian: jum_pembaris = pembaris * bi_pembaris menggunakan nama salah eja (patut bil_pembaris), maka NameError. (3) Logik: ... + jum_pemadam * jum_pembaris patut +; tiada mesej ralat. (4) Masa larian: print("\nJumlah kos untuk alat tulis: RM"+ jum_kos) menambah string dengan nombor; baiki dengan koma: print("\nJumlah kos untuk alat tulis: RM", jum_kos).
Aktiviti 3.5: >>> 3d = 2 ialah ralat sintaks (nama pemboleh ubah dimulakan dengan digit). int(input(...)) dengan input 3.6 memberi ValueError: invalid literal for int() with base 10: '3.6' (masa larian); baiki dengan float(input(...)).
3.1.5 Gabungan jenis data, pemboleh ubah, pemalar dan operator
Kebanyakan aplikasi menggunakan gabungan beberapa jenis data (Jadual 3.10).
Contoh (Jadual 3.10, ms. 115): permainan perlumbaan kereta menggunakan integer (kedudukan pemenang), float (perkiraan masa) dan pemboleh ubah (nama pemain); simulasi fesyen pakaian menggunakan float (ukuran baju), pemalar (ukuran aksesori) dan pemboleh ubah (nama pakaian); e-mel menggunakan integer (umur) dan pemboleh ubah (nama).
Contoh 3.21: saiz pakaian S
Pengguna memasukkan lebar bahu, lingkar dada, lingkar pinggang, lingkar pinggul dan panjang lengan (inci). Atur cara menyemak sama ada ukuran menepati jadual saiz S: bahu tidak melebihi 14, dada 35, pinggang 26, pinggul 36 dan lengan 21. Carta alir buku teks menggunakan jujukan: masukkan, setkan, kemudian paparkan nilai boolean bagi setiap perbandingan. Python:
bahu = float(input("Ukuran bahu: "))
dada = float(input("Ukuran lingkar dada: "))
... # pinggang, pinggul, lengan: sama
print ("\nUkuran bahu,",bahu < 14)
print ("Ukuran lingkar dada,",dada < 35)
... # pinggang < 26, pinggul < 36, lengan < 21
Contoh 3.21: ms. 115 hingga 118. Input 13, 32, 25, 32 dan 20 memberi Ukuran bahu, True dan seterusnya True bagi kelima-lima baris.
< (contohnya bahu < 14), jadi input 14, 35, 26, 36 dan 21 memberi False bagi kelima-limanya. Untuk "tidak melebihi" yang tepat, gunakan <=. Ini contoh ralat logik pada ungkapan boolean.hujan = 12, cerah = 16, jumlah = 12 * 2 + 16 * 3, print ("jumlah") (Praktis 3.1 no. 5).
Tunjuk jawapanSembunyi jawapan
cerah = 12
hujan = 16
jumlah = cerah * 3 + hujan * 2
print (jumlah)Jumlah = 36 + 32 = 68 minit. Ralat: nilai cerah dan hujan bertukar, darab dengan bilangan hari yang salah (12 * 2 + 16 * 3 = 72), dan print ("jumlah") mencetak perkataan jumlah, bukan nilainya (patut print (jumlah) tanpa petikan).3.2Struktur kod arahan
Atur cara yang kompleks (contohnya robot cef yang memasak daripada lebih 2000 resipi) menggabungkan beberapa struktur kawalan supaya atur cara interaktif dan boleh membuat pilihan. Struktur kod arahan ialah paradigma pengaturcaraan yang menjadi model untuk menjelaskan atur cara, meningkatkan kualiti dan menjimatkan masa pembangunan. Empat struktur kawalan dipelajari: jujukan, pilihan, pilihan bersarang dan ulangan.
Simbol carta alir yang digunakan
Setiap contoh buku teks mengikut lima langkah: pernyataan masalah, algoritma, carta alir, pengekodan (Scratch 2.0 dan Python 3.5.2) dan contoh output.
3.2.1 (i) Struktur kawalan jujukan
Ia sesuai untuk masalah yang mudah. Carta alirnya: MULA, Langkah 1, Langkah 2, Langkah 3, TAMAT (Rajah 3.11).
Contoh 3.23: purata dua markah ujian
Input: dua markah. Proses: pengiraan purata. Output: nilai purata.
# Kod arahan pengiraan purata markah ujian
markah1 = int (input("Masukkan markah ujian 1: ")) # Langkah 1
markah2 = int (input("Masukkan markah ujian 2: ")) # Langkah 2
purata = (markah1 + markah2) / 2 # Langkah 3
print ("\nPurata markah ujian ialah: ", purata) # Langkah 4
Masukkan markah ujian 1: 65
Masukkan markah ujian 2: 68
Purata markah ujian ialah: 66.5
Contoh 3.23: Buku teks Asas Sains Komputer Tingkatan 2, ms. 123. Semakan: (65 + 68) / 2 = 66.5.
Contoh 3.24: luas segi tiga
Luas segi tiga = ½ × panjang tapak × tinggi. Algoritma: (1) isytihar luas, tapak dan tinggi; (2) masukkan panjang tapak; (3) setkan tapak; (4) masukkan tinggi; (5) setkan tinggi; (6) kira luas; (7) paparkan jawapan; (8) tamat.
# Pengguna masukkan ukuran panjang tapak
tapak = float(input("Masukkan ukuran panjang tapak (cm): "))
# Pengguna masukkan ukuran tinggi
tinggi = float(input("Masukkan ukuran tinggi (cm): "))
# Formula mengira luas segi tiga
luas = 0.5 * tapak * tinggi
# Mencetak output
print ("Luas segi tiga ialah", luas)Contoh 3.24: ms. 124 hingga 126. Tapak 15 dan tinggi 30 memberi 225.0; tapak 33 dan tinggi 25.3 memberi 417.45 (0.5 × 33 × 25.3).
float(input(...)) apabila ukuran mungkin mempunyai titik perpuluhan.3.2.1 (ii) Struktur kawalan pilihan
Tiga jenis struktur kawalan pilihan (Rajah 3.12): tunggal (if, satu cabang), dwipilihan (if-else, dua cabang) dan pelbagai pilihan (if-elif-else, lebih daripada dua cabang). Bentuk umum dalam Python:
if syarat: if syarat: if syarat 1:
pernyataan pernyataan 1 pernyataan 1
else: elif syarat 2:
pernyataan 2 pernyataan 2
else:
pernyataan 3
: di hujung if, elif dan else; (2) inden yang salah (blok di bawah if mesti masuk ke dalam dan sama); (3) else tidak ada syarat. Ini semua ralat sintaks.Contoh 3.25: cadangan kalori sehari
Input: jantina dan umur. Hasil: kalori yang dibenarkan sehari.
Cadangan pengambilan kalori (Contoh 3.25, ms. 128), lelaki / perempuan dalam kcal: 13 - 15 tahun 2690 / 2180; 16 - 18 tahun 2840 / 2050; 19 - 29 tahun 2440 / 2000; 30 - 59 tahun 2460 / 2180; 60 tahun dan ke atas 2010 / 1780.
Perhatikan susunan syarat: semak umur dari yang terbesar (60, 30, 19, 16, 13). Dengan cara ini, setiap elif hanya perlu >= satu nombor.
print ("**CADANGAN JUMLAH KALORI YANG DIBENARKAN BERDASARKAN JANTINA DAN UMUR**")
jantina = input ("Adakah jantina anda lelaki? (Ya atau Tidak): ")
if jantina == "Ya":
umur = int(input("Berapakah Umur Anda? "))
if (umur >= 60):
print ("Nilai kalori yang dibenarkan ialah 2010")
elif (umur >= 30):
print ("Nilai kalori yang dibenarkan ialah 2460")
... (elif untuk 19, 16 dan 13: 2440, 2840 dan 2690)
elif (umur >= 13):
print ("Nilai kalori yang dibenarkan ialah 2690")
else:
print("Maaf, had umur perlu 13 tahun ke atas.")
elif jantina == "Tidak":
umur = int(input("Berapakah Umur Anda? "))
... (lima cabang yang sama bagi perempuan)
else:
print("Terima Kasih")
Contoh 3.25: ms. 128 hingga 132. Input Ya dan 14 memberi 2690.
if-elif disemak dari atas ke bawah dan Python berhenti pada yang pertama benar. Susun syarat dari yang paling ketat (umur >= 60) ke yang paling longgar; jika umur >= 13 di atas sekali, umur 70 pun jatuh ke situ.Amali Komputer 3.3: diskaun kad koperasi
Pemegang kad premium: jika kad masih sah, diskaun bergantung pada mata ganjaran: >= 100 mata diskaun 20%, >= 50 mata 15%, kurang daripada itu 10%. Jika kad tidak sah, mesej "Sila perbaharui kad anda".
Amali Komputer 3.3: ms. 133 hingga 135 (kad mesti dijawab YA atau TIDAK dengan huruf besar; baris if mata_ganjaran == "0": ialah baris yang salah). Input RM 25.2, YA dan 45 mata memberi "Diskaun ialah 10%" dan "RM 22.68" (25.2 × 0.90).
mata_ganjaran ialah integer (kerana int(input(...))) tetapi dibandingkan dengan string "0", jadi syarat itu tidak pernah benar; patutnya mata_ganjaran == 0. Akibatnya 0 mata memberi diskaun 10%, bukan tamat. Selain itu exit tanpa kurungan tidak berbuat apa-apa (patutnya exit()), dan jawapan TIDAK hanya exit tanpa mesej "Sila perbaharui kad anda" seperti dalam algoritma. bayar = jum_belian * 0.80 betul: diskaun 20% bermaksud membayar 80%.3.2.1 (iii) Struktur kawalan pilihan bersarang
Rajah 3.13: membandingkan nombor a dan b. Jika a < b, cetak "b lebih besar daripada a."; jika tidak, semak a > b: jika ya cetak "a lebih besar daripada b.", jika tidak cetak "a dan b adalah sama."
Contoh 3.26: positif atau negatif, genap atau ganjil
Kishen menulis atur cara yang meminta integer selain 0. Atur cara menentukan sama ada integer negatif atau positif; jika positif, tentukan sama ada genap atau ganjil.
nom % 2 == 0 berada di dalam cabang "positif".
say "positif" ada dalam kedua-dua cabang genap dan ganjil.Contoh 3.26: Buku teks Asas Sains Komputer Tingkatan 2, ms. 138 dan 139.
num = int(input("Masukkan satu nombor: "))
if num == 0:
exit ()
else:
if num > 0:
print("Nombor", num, "ialah nombor positif.")
if (num % 2) == 0:
print ("Nombor", num, "ialah nombor genap.")
else:
print ("Nombor", num, "ialah nombor ganjil.")
else:
print("Nombor", num, "ialah nombor negatif.")
Contoh 3.26: ms. 137 hingga 140. Input 2017 memberi "Nombor 2017 ialah nombor positif." dan "Nombor 2017 ialah nombor ganjil." Pemeriksaan: 2017 % 2 = 1.
Amali Komputer 3.4: tahun lompat
Tahun lompat ialah tahun yang menambah satu hari pada Februari (29 hari). Setahun sebenar = 365.242 hari, maka 0.242 × 4 = kira-kira 1 hari dilaraskan setiap empat tahun. Peraturan: bahagi dengan 4, kemudian 100, kemudian 400.
# Tahun yang dimasukkan perlu dalam integer
tahun = int(input("Masukkan tahun untuk semakan: "))
if (tahun % 4) == 0:
if (tahun % 100) == 0:
if (tahun % 400) == 0:
print(str(tahun),"ialah tahun lompat.")
else:
print(str(tahun),"bukan tahun lompat.")
else:
print(str(tahun),"ialah tahun lompat.")
else:
print(str(tahun),"bukan tahun lompat.")
Amali Komputer 3.4: ms. 141 dan 142. Aktiviti 3.9 meminta kod ini diringkaskan: if (tahun % 4 == 0 and tahun % 100 != 0) or tahun % 400 == 0: memberi jawapan yang sama.
3.2.1 (iv) Struktur kawalan ulangan
| Gelung | Dikawal oleh | Bentuk umum dalam Python |
|---|---|---|
| for (UNTUK) | bilangan lelaran yang diketahui | |
| while (SELAGI) | keadaan; bilangan lelaran tidak diketahui | |
Kedua-duanya ialah struktur kawalan praujian (pretest): syarat diuji sebelum lelaran. Pemboleh ubah gelung dalam for terbentuk sebaik sahaja for ditaip, jadi tidak perlu diisytiharkan dahulu. Lelaran bermula dengan nilai pertama dalam data dan berhenti apabila sampai nilai terakhir.
Fungsi range()
range() menyatakan bilangan lelaran for. Nombor dalam range() dipanggil parameter, mestilah integer (positif atau negatif).
| Bentuk | Maksud | Contoh dan hasil |
|---|---|---|
range(henti) | Bermula dengan 0; berhenti satu digit sebelum henti | range(3) memberi 0, 1, 2 (3 kali) |
range(mula, henti) | Bermula dengan mula; berhenti sebelum henti | range(3, 7) memberi 3, 4, 5, 6 (4 kali) |
range(mula, henti, langkau) | Langkau ialah beza antara dua digit bersebelahan | range(3, 10, 2) memberi 3, 5, 7, 9 (4 kali) |
range(10) (2) range(5, 16) (3) range(0, 30, 5) (4) range(5, -1, -1)
Tunjuk jawapanSembunyi jawapan
Contoh 3.27: log masuk dan "Selamat datang" tiga kali
Jika pengguna berjaya log masuk (id 123), atur cara paparkan "Selamat datang" sebanyak tiga kali. Guna while (kawalan ulangan yang tidak diketahui bilangan lelarannya) dan for (tiga kali).
# Pemalar id diisytiharkan sebagai 123
id = "123"
# Pemboleh ubah jawab diumpukkan dengan nilai yang dimasukkan pengguna
jawab = input("Masukkan nombor id anda: ")
# Struktur kawalan yang terlibat
while jawab != "123":
jawab = input("Masukkan nombor id anda: ")
else:
for i in range (3):
print("Selamat datang")
Masukkan nombor id anda: 122
Masukkan nombor id anda: 123
Selamat datang
Selamat datang
Selamat datangContoh 3.27: ms. 144 dan 145.
Perhatikan: tiga kali kerana range(3) memberi 0, 1, 2. Dalam carta alir buku teks, i bermula 1 dan diuji i <= 3, juga tiga kali.
while ialah syarat yang menentukan sama ada gelung berhenti atau terus berulang.Amali Komputer 3.3: gelung tak terhingga dan gelung terhingga
Gelung tak terhingga ialah gelung yang syaratnya sentiasa benar, jadi tidak pernah berhenti. Tekan Ctrl + C untuk menghentikannya. Bahagian A dan B dibandingkan:
Amali Komputer 3.3 A dan B: ms. 147 dan 148. Pada B, jualan RM150 dan peratusan 0.3 memberi komisen RM 45.0 (150 × 0.3); jawapan n menghentikan gelung.
while mesti ada sesuatu yang mengubah syarat di dalam badan gelung (contohnya pembilang i = i + 1 atau input baharu). Jika tidak, gelung menjadi tak terhingga. Bahagian B lebih baik kerana pengguna dapat memilih untuk berhenti.3.2.2 Menguji atur cara dan membaiki ralat
Menguji atur cara ialah sebahagian daripada pembangunan perisian. Setiap kali baris kod ditulis, diubah atau dipadamkan, ia mesti diuji supaya atur cara masih berfungsi seperti yang diharapkan. Murid baharu lazim melakukan kesilapan menaip.
) semasa menggunakan input(); (b) inden kenyataan else yang salah. Ingat tiga jenis ralat daripada 3.1.4: sintaks, masa larian, logik.Contoh 3.28: komisen jualan amal
Pasukan menjual buah-buahan, minuman dan biskut. Komisen 5% diberi atas jumlah jualan melebihi RM500 dan 8% atas jumlah melebihi RM800. Atur cara memaparkan jumlah jualan, kadar komisen, jumlah komisen dan komisen individu. Pasukan ada enam orang termasuk ketua.
Carta alir pertama menyemak jum_jualan > 500 dahulu. Dengan data sampel buah = 300, minuman = 300, biskut = 300 (jumlah 900), semakan meja menunjukkan:
Semakan meja dengan jum_jualan = 900. Kod pertama (salah): 900 > 500 benar, maka komisen 5%; jum_komisen = 900 × 0.05 = 45; ind_komisen = 45 / 5 = 9. Kod dibaiki: 900 > 800 benar, maka komisen 8%; jum_komisen = 900 × 0.08 = 72; 72 / 5 = 14.4 (masih salah) lalu 72 / 6 = 12. Output yang diingini: komisen 8%, jumlah komisen RM72, setiap ahli RM12.
Dua ralat logik: (1) syarat > 800 mesti disemak dahulu; (2) pembahagi ialah 6 bukan 5.
Pelaksanaan demi pelaksanaan (ms. 155 hingga 157):
- Masa larian,
ValueError: could not convert string to float: 'Masukkan jualan buah-buahan: RM '. Baiki:buah = float(input("Masukkan jualan buah-buahan: RM "))(input dahulu, float di luar). - Sintaks,
SyntaxError: invalid syntaxdan bariselseditandakan merah. Baiki: tambah:padaelse:. - Sintaks,
unexpected EOF while parsingdan baris terakhir merah. Baiki: tambah kurungan tutup). - Masa larian,
NameError: name 'jumjualan' is not defined(baris 8). Baiki ejaan kepadajum_jualan. - Logik: tiada mesej, tetapi output salah (5%, 45, 9). Baiki: semak > 800 dahulu dan bahagi dengan 6.
Selepas semua dibaiki, input 300, 300 dan 300 memberi: "Jumlah jualan: RM 900.0", "Komisen ialah 8%", "Jumlah komisen: RM 72.0" dan "Komisen untuk setiap ahli: RM 12.0".
3.2.3 Gabungan pelbagai struktur kawalan
Dalam dunia sebenar, atur cara perlu lebih dinamik dan kompleks, contohnya untuk pengisihan, pemilihan dan kawalan akses. Ia dihasilkan dengan menggabungkan jujukan, pilihan, pilihan bersarang dan ulangan (Rajah 3.16). Atur cara yang hanya ada fungsi terhad dianggap stereotaip dan pengguna kurang berminat.
Contoh 3.29: permainan meneka nombor
Nombor rahsia ialah pemalar (49). Pengguna meneka berulang kali; jika salah, atur cara memberitahu sama ada tekaan lebih besar atau lebih kecil. Apabila betul, "Syabas!" dipaparkan lima kali.

repeat until mengandungi pilihan bersarang dan repeat 5.whilemengulang proses meneka sehingga betul (bilangan lelaran tidak diketahui).if-elif-elsemembandingkan nombor tekaan dengan nombor rahsia.for i in range(5)memaparkan "Syabas!" lima kali (bilangan diketahui).
print ("************* PERMAINAN MENEKA NOMBOR *************")
rahsia = 49
teka = True
while teka:
nombor = int(input("Masukkan nombor tekaan anda: "))
if rahsia == nombor:
for i in range (5):
print ("Syabas!")
teka = False
elif rahsia < nombor:
print("Nombor tekaan lebih besar daripada nombor rahsia.")
else:
print("Nombor tekaan lebih kecil daripada nombor rahsia.")
else:
print("Terima kasih kerana menyelesaikan permainan meneka nombor ini.")
| Tekaan | rahsia == nombor? | rahsia < nombor? | Output | teka |
|---|---|---|---|---|
| 48 | Tidak | 49 < 48 palsu | Nombor tekaan lebih kecil daripada nombor rahsia. | True |
| 50 | Tidak | 49 < 50 benar | Nombor tekaan lebih besar daripada nombor rahsia. | True |
| 49 | Ya | - | Syabas! (5 kali) | False |
Contoh 3.29: ms. 159 hingga 163. Selepas teka menjadi False, syarat while teka palsu, gelung berhenti, dan else pada while dilaksanakan: "Terima kasih kerana menyelesaikan permainan meneka nombor ini."
rahsia < nombor bermaksud nombor lebih besar daripada rahsia. Baca syarat dengan teliti: tekaan 50 menghasilkan "lebih besar daripada nombor rahsia". Pada while ... else, bahagian else dilaksanakan apabila syarat gelung menjadi palsu.Amali Komputer 3.6: meneka nama
Peluang meneka nama ialah bilangan huruf dalam nama itu. Atur cara menggunakan while dengan dua syarat (and), len(), indeks nama[bil] dan if-else.
Amali Komputer 3.6: ms. 164 (gambar skrin kod ditaip semula dan dijalankan; atur cara menggunakan while tekaan != nama and bil < len(nama) dan if bil == len(nama) and nama != tekaan). Tekaan Ali, Amirul, Aminah memberi petunjuk "huruf 1 ialah A." dan "huruf 2 ialah m.", kemudian "Tahniah! Anda berjaya pada tekaan ke-3." Nama "Aminah" ada 6 huruf, maka ada 6 petunjuk; pemain sebenarnya mendapat 7 tekaan (satu tekaan awal dan satu selepas setiap petunjuk). Jika tujuh tekaan salah, atur cara memberitahu nama yang betul.
Memilih struktur kawalan yang sesuai
Jujukan: masalah mudah, satu aliran baris demi baris. Pilihan (if, if-else, if-elif-else): tindakan bergantung pada syarat. Pilihan bersarang: syarat kedua hanya disemak jika syarat pertama benar. Ulangan: for jika bilangan lelaran diketahui; while jika bergantung pada syarat.
output(), tetapi fungsi output Python ialah print(); bandingkan Jadual 3.6 (ms. 97). (b) Soalan berstruktur 7: pseudokod menulis baris suhu – 1 (tanda tolak sahaja, tanpa penetapan). Dalam Python murid mesti menulis suhu = suhu - 1; jika hanya suhu - 1, nilai suhu tidak berubah dan gelung tidak berhenti. (c) Soalan objektif 13: else dicetak sejajar dengan if i == 3 di dalam gelung while, jadi else itu milik if, bukan while. Output yang betul ialah 0, 0, 1, 0, 2 (pilihan C). Kalau else disejajarkan dengan while, ia hanya dijalankan apabila gelung tamat tanpa break, dan outputnya berbeza (0, 1, 2); perhatikan inden dengan teliti.