Dalam Python, lekukan ialah sebahagian daripada logik. Baris yang dilekukkan di bawah if, elif, else, for dan while ialah baris yang dimilikinya, jadi menggerakkan satu baris mengubah apa yang program lakukan.
Pelajaran ini menyambung peralihan ke Python dan pelaksanaan selepas memetakan algoritma kepada fungsi Python.
Bagaimanakah Python menentukan baris mana yang berada dalam blok?
Baris yang berakhir dengan titik bertindih membuka satu blok. Setiap baris yang dilekukkan satu tahap di bawahnya berada di dalam. Baris pertama yang dilekukkan keluar berada di luar, dan berjalan selepas blok tamat.
Bagi cabang, if, elif dan else diperiksa mengikut urutan, dan hanya cabang pertama yang syaratnya True akan berjalan. else menangkap semua yang tinggal.
Contoh berlangkah
Tugasan: pulangkan “High” untuk markah 70 atau lebih, “Middle” untuk 40 hingga 69, dan “Low” selainnya.
def band(mark):
if mark >= 70:
return "High"
elif mark >= 40:
return "Middle"
else:
return "Low"
Langkah 1, pilih ujian sempadan. Tepinya ialah 70, 69, 40 dan 39.
Langkah 2, jejak setiap satu.
| mark | mark >= 70 | mark >= 40 | keputusan |
|---|---|---|---|
| 70 | True | tidak diperiksa | High |
| 69 | False | True | Middle |
| 40 | False | True | Middle |
| 39 | False | False | Low |
Kerana cabang pertama menangkap 70 ke atas, elif tidak perlu menyebut “dan di bawah 70”.
Kesilapan yang perlu diwaspadai
Satu kesilapan lazim ialah menggunakan pernyataan if berasingan untuk pilihan yang sepatutnya saling menyisih.
Jawapan yang tersilap:
def band(mark): result = "Low" if mark >= 70: result = "High" if mark >= 40: result = "Middle" return resultUntuk 80,
ifpertama menetapkan “High”, kemudianifkedua juga True dan menimpanya dengan “Middle”. Fungsi memulangkan “Middle” untuk markah 80.
Pembetulannya ialah menukar if kedua kepada elif, supaya ia hanya diperiksa apabila yang pertama False. Menguji markah yang jauh di atas sempadan tertinggi, seperti 80, mendedahkan ini serta-merta.
Lekukan boleh gagal dengan cara yang sama dalam gelung:
total = 0
for n in [1, 2, 3]:
total = total + n
print(total)
Ini mencetak 1, 3, 6. Jika print(total) dialihkan satu tahap ke belakang, ia berada selepas gelung dan hanya mencetak 6.
Semak kendiri
1. Apakah yang dicetak oleh check(15) dan check(3)?
def check(n):
if n > 10:
print("big")
print("done")
Lihat jawapan
check(15) mencetak big kemudian done. check(3) hanya mencetak done, kerana print("done") tidak dilekukkan di bawah if, jadi ia sentiasa berjalan.
2. Apakah yang dipulangkan oleh sign(0)?
def sign(n):
if n > 0:
return "positive"
elif n < 0:
return "negative"
else:
return "zero"
Lihat jawapan
“zero”. 0 > 0 ialah False, 0 < 0 ialah False, jadi else berjalan.
3. Mengapa 40 ialah nilai ujian yang baik untuk band?
Lihat jawapan
Ia terletak tepat pada sempadan mark >= 40. Jika pelajar menulis > dan bukan >=, 40 akan memulangkan “Low” dan mendedahkan ralat itu.
Ke mana pelajaran ini membawa
Seterusnya, belajar membezakan ranap daripada kesalahan senyap dalam membezakan ralat sintaks daripada keputusan yang salah. Jalankan band dengan nilai ujian anda sendiri dalam kotak pasir penaakulan Python, atau tulis cabang yang sama dalam pseudokod dan semak dalam pelatih jejak pseudokod terhad.
Tuisyen Sains Komputer dalam talian satu dengan satu kami boleh membantu jika soalan cabang sentiasa tergelincir pada sempadan.