Tutorial Python untuk bukan pengatur cara/Ungkapan Boolean: Perbezaan antara semakan

Kandungan dihapus Kandungan ditambah
Algazel (bincang | sumb.)
→‎Examples: terjemahan
Algazel (bincang | sumb.)
Baris 148:
Ungkapan Boolean boleh digunakan apabila anda mahu memeriksa dua atau lebih perkara sekaligus.
 
=== Nota berkaitan dengan operator Boolean ===
Satu kesilapan yang sering dibuat prang yang baru mengatur cara adalah menyalah faham bagaimana operator Boolean bekerja, yang berpunca daripada cara pnetafsirpentafsir Python membaca ungkapan-ungkapan ini. Misalnya, selepas mempelajari kenyataan-kenyataan <code>and</code> dan <code>or</code>, sesorangseseorang itu mungkin membuat tanggapan bahawa ungkapan <code>x == ('a' or 'b')</code> akan memeriksa sama ada pemboleh ubah <code>x</code> sama dengan rentetan <code>'a'</code> atau <code>'b'</code>. Ia tidak begitu. Untuk melihat apa yang saya maksudkan, mulakan sesi interaktif dengan pentafsir dan masukkan ungkapan-ungkapan berikut:
 
>>> 'a' == ('a' or 'b')
Baris 169:
Pada peringkat ini, operator-operator <code>and</code> dan <code>or</code> kelihatan seperti rosak. Tidak masuk akal yang, buat dua ungkapan terdahulu, <code>'a'</code> sama dengan <code>'a'</code> atau <code>'b'</code> sementara <code>'b'</code> tidak. Tambah lagi, tidak masuk akal yang 'b' sama dengan <code>'a'</code> dan <code>'b'</code>. Namun, selepas meneliti apa yang dilakukan pentafsir terhadap operator-operator Boolean, keputusan yang dipaparkan sebenarnya membuat apa yang anda minta, hanya ia tidak sama dengan apa yang anda ''fikir'' yang anda minta.
 
Apabila pentafsir Python melihat ungkapan <code>or</code>, ia mengambil kenyataan pertama dan memeriksa sama ada ia <code>true</code> atau benar. Jika kenyataan pertama benar, Python memulangkan nilai objek tanpa memeriksa kenyataan kedua. Ini kerana untuk ungkapan <code>or</code>, keseluruhan kenyataan itu benar jika satu daripada nilainya benar; program tidak perlu memeriksa bahagian kedua. Sebaliknya, jika nilai pertama dinilai sebagai <code>false</code> atau palsu, Python akan memeriksa bahagian kedua dan memulangkan nilai itu. Bahagian kedua itu menentukan nilai benar keseluruhan ungkapan oleh sebab bahagian pertama palsu. "Kemalasan" pentafsir ini digelar ''short circuiting'' (litar pintas) dan adalah cara penilaian ungkapan Boolean yang sering terjumpa dalam banyak bahasa pengaturcaraan.
 
Sama juga, bagi ungkapan <code>and</code>, Python menggunakan jalan pintas bagi mempercepatkan evaluasi nilai benar. Jika kenyataan pertama itu palsu, pada kiraan Python kesemua ungkapan itu palsu dan ia memulangkan nilai tersebut (yakni, <code>false</code>). Sebaliknya jika kenyataan pertama itu benar, Python akan memeriksa kenyataan kedua dan memulangkan nilainya.
 
OneSatu thingperkara toyang noteharus atanda thismaklum pointdi issini thatadalah thebahawa booleanungkapan expressionBoolean returnsmemulangkan anilai valueyang indicatingmenunjukkan <code>True</code> orataupun <code>False</code>, butakan thattetapi Python considersmenganggap abeberapa numberperkara ofyang differentberlainan thingssebagai tomemiliki havenilai akebenaran truthyang value assigned to themterkait. ToBagi checkmemeriksa thenilai truthkebenaran valuemana-mana of any given objectobjek <code>x</code>, youanda canboleh usemenggunakan the functionfungsi <code>bool(x)</code> tobagi seemelihat itsnilai truth valuekebenarannya. Below is a table withJadual examplesyang ofmengandungi thecontoh truthnilai valueskebenaran ofdihuraikan variousdi objectsbawah:
 
{| class="wikitable"
Baris 183:
|1 ||0
|-
|NumbersNombor otherselain thandaripada zerosifar ||The stringRentetan 'None'
|-
|Rentetan yang tak kosong ||Rentetan kosong
|Nonempty strings ||Empty strings
|-
|Senarai yang tak kosong ||Senarai kosong
|Nonempty lists ||Empty lists
|-
|Kamus yang tak kosong ||Kamus kosong
|Nonempty dictionaries ||Empty dictionaries
|}
 
Sekarang kita dapat memahami keputusan yang mengelirukan yang kita peroleh semasa menguji ungkapan-ungkapan Boolean sebelum ini. Mari kita tengok apa yang "dilihat" pentafsir Python semasa ia mengendalikan kod:
Now it is possible to understand the perplexing results we were getting when we tested those boolean expressions before. Let's take a look at what the interpreter "sees" as it goes through that code:
 
'''FirstKes casepertama:'''
>>>''' 'a' == ('a' or 'b')''' # LookLihat attanda parentheseskurungan firstdahulu, so evaluatemenilai expressionungkapan "('a' or 'b')"
# 'a' issebuah arentetan nonemptytak stringkosong, so the firstjadi valuenilai ispertamanya True
# Return thatMemulangkan firstnilai valuepertama: 'a'
>>>''' 'a' == 'a' ''' # the stringrentetan 'a' is equivalent tosetara thedengan stringrentetan 'a', sojadi expressionungkapan ismenjadi True
True
 
'''SecondKes casekedua:'''
>>>''' 'b' == ('a' or 'b')''' # LookLihat attanda parentheseskurungan firstdahulu, somenilai evaluate expressionungkapan "('a' or 'b')"
# 'a' issebuah arentetan nonemptytak stringkosong, sojadi thenilai first value ispertamanya True
# ReturnMemulangkan thatnilai first valuepertama: 'a'
>>>''' 'b' == 'a' ''' # the stringrentetan 'b' istidak notsetara equivalentdengan to the stringrentetan 'a', so expression is False
# jadi ungkapan menjadi False
False
 
'''ThirdKes case:ketiga'''
>>>''' 'a' == ('a' and 'b')''' # LookLihat attanda parentheseskurungan firstdahulu, somenilai evaluate expressionungkapan "('a' and 'b')"
# 'a' issebuah arentetan nonemptytak stringkosong, sojadi thenilai first value ispertamanya True, examine second value
# 'b'periksa isnilai a nonempty string, so second value is Truekedua
# Return'b' thatsebuah secondrentetan valuetak askosong, resultjadi ofnilai wholekeduanya expression: 'b'True
# Memulangkan nilai kedua hasil ungkapan penuh: 'b'
>>>''' 'a' == 'b' ''' # the string 'a' is not equivalent to the string 'b', so expression is False
>>>''' 'a' == 'b' ''' # rentetan 'a' tidak setara dengan rentetan 'b',
# jadi ungkapan adalah False
False
 
'''FourthKes casekeempat:'''
>>>''' 'b' == ('a' and 'b')''' # LookLihat attanda parentheseskurungan firstdahulu, somenilai evaluate expressionungkapan "('a' and 'b')"
# 'a' issebuah arentetan nonemptytak stringkosong, sojadi thenilai first value ispertamanya True, examine second value
# 'b'periksa isnilai a nonempty string, so second value is Truekedua
# Return'b' thatsebuah secondrentetan valuetak askosong, resultjadi ofnilai wholekeduanya expression: 'b'True
# Memulangkan nilai kedua hasil ungkapan penuh: 'b'
>>>''' 'b' == 'b' ''' # the stringrentetan 'b' issetara equivalentdengan to the stringrentetan 'b', so expression is True
#jadi ungkapan adalah True
True
 
 
So Python was really doing its job when it gave those apparently bogus results. As mentioned previously, the important thing is to recognize what value your boolean expression will return when it is evaluated, because it isn't always obvious.