Pengguna anonim
Lebih
Python's setara && (logis-dan) dalam if-pernyataan
Berikut ini's my kode:
def front_back(a, b):
# +++your code here+++
if len(a) % 2 == 0 && len(b) % 2 == 0:
return a[:(len(a)/2)] + b[:(len(b)/2)] + a[(len(a)/2):] + b[(len(b)/2):]
else:
#todo! Not yet done. :P
return
I'm mendapatkan kesalahan di IF conditional. Apa yang saya lakukan salah?
761
10
Anda akan ingin
dan
bukan&&
.Python menggunakan
dan
danatau
conditional.yaitu
Dua komentar:
dan
danatau
untuk operasi logis dalam Python.Ada alasan bahwa anda mendapatkan
SyntaxError
adalah bahwa tidak ada&&
operator pada Python. Demikian juga||
dan!
adalah tidak berlaku Python operator.Beberapa dari operator anda mungkin tahu dari bahasa lain memiliki nama yang berbeda di Python. Logical operator
&&
dan||
adalah benar-benar disebutand
danor
. Demikian juga logis negasi operator!
disebuttidak
.Jadi anda hanya bisa menulis:
atau bahkan:
Beberapa informasi tambahan (yang mungkin akan berguna):
Saya diringkas operator "setara" di tabel ini:
Lihat juga Python dokumentasi: 6.11. Operasi Boolean.
Selain operator logika Python juga telah bitwise/operator biner:
Tidak ada bitwise negasi di Python (hanya bitwise invers operator
~
- tapi itu tidak **** setara dengantidak
).Lihat juga 6.6. Unary aritmatika dan bitwise/biner operations dan 6.7. Biner operasi aritmatika.
Logical operator (seperti dalam banyak bahasa lainnya) memiliki keuntungan bahwa ini adalah hubung pendek. Itu berarti jika operan pertama sudah mendefinisikan hasil, maka kedua operator isn't dievaluasi pada semua.
Untuk menunjukkan hal ini saya menggunakan sebuah fungsi yang hanya mengambil nilai, cetakan dan kembali lagi. Hal ini berguna untuk melihat apa yang sebenarnya dievaluasi karena dari statement print:
Seperti yang anda lihat hanya mencetak satu pernyataan yang dijalankan, sehingga Python benar-benar tidak't bahkan melihat operan kanan.
Ini bukan kasus untuk operator biner. Mereka selalu mengevaluasi kedua operan:
Tapi jika operan pertama isn't cukup maka, tentu saja, kedua operator dievaluasi:
Untuk meringkas ini berikut ini adalah Tabel yang lain:
Benar
danSalah
mewakilibool(kiri-sisi-sisi)
kembali, mereka don't harus menjadiTrue
atauFalse
, mereka hanya perlu untuk mengembalikanTrue
atauFalse
ketikabool
disebut pada mereka (1).Jadi dalam Pseudo-Code(!) kata
and
danor
fungsi pekerjaan seperti ini:Catatan bahwa ini adalah pseudo-code tidak kode Python. Di Python anda tidak dapat membuat fungsi bernama
dan
atauatau
karena ini adalah kata kunci. Anda juga harus menggunakan "mengevaluasi" ataujika bool(...)
.Menyesuaikan perilaku anda sendiri kelas
Ini implisit
bool
call dapat digunakan untuk menyesuaikan bagaimana anda kelas berperilaku dengandan
,atau
dantidak
.Untuk menunjukkan bagaimana hal ini dapat disesuaikan aku menggunakan kelas ini yang lagi-lagi `mencetak sesuatu untuk melacak apa yang terjadi:
Jadi let's melihat apa yang terjadi dengan kelas yang di kombinasi dengan operator-operator ini:
Jika anda don't memiliki
__bool__
metode kemudian Python juga memeriksa jika objek memiliki__len__
metode dan jika ia mengembalikan nilai yang lebih besar dari nol. Yang mungkin akan berguna untuk mengetahui dalam kasus anda membuat urutan wadah.Lihat juga 4.1. Nilai kebenaran Pengujian.
NumPy array dan subclass
Mungkin sedikit di luar lingkup pertanyaan yang asli tapi dalam kasus anda're berurusan dengan array NumPy atau subclass (seperti Panda Seri atau DataFrames) maka implisit
bool
call akan menaikkan ditakutiValueError
:Dalam kasus ini anda dapat menggunakan logis dan fungsi dari NumPy yang melakukan unsur-bijak
dan
(atauatau
):Jika anda're berurusan hanya dengan boolean array anda juga bisa menggunakan operator biner dengan NumPy, ini tidak melakukan unsur-bijaksana (tapi juga biner) perbandingan:
(1)
Bahwa
bool
panggilan pada operan telah mengembalikanTrue
atauFalse
isn't benar-benar benar. It's hanya operan pertama yang perlu untuk mengembalikan boolean dalam it's__bool__
metode:Yang's karena
dan
benar-benar kembali operan pertama jika operan pertama mengevaluasi untukPalsu
dan jika mengevaluasi keBenar
maka ia mengembalikan kedua operan:Demikian pula untuk
atau
tapi justru sebaliknya:Namun jika anda menggunakan mereka dalam sebuah
jika
pernyataanjika
juga akan secara implisit menyebutbool
pada hasil. Jadi, ini poin-poin penting yang mungkin tidak relevan untuk anda.Aku pergi dengan purlely matematika solusi:
Anda menggunakan
dan
danatau
untuk melakukan operasi logis seperti di C, C++. Seperti benar-benardan
adalah&&
danatau
ini||
.Lihatlah ini menyenangkan contoh,
Katakan anda ingin membangun Gerbang Logika di Python:
Sekarang mencoba memanggil mereka:
Ini akan menampilkan:
Harap ini membantu!
Mungkin ini bukan kode terbaik untuk tugas ini, tetapi bekerja -
Gunakan "dan" dalam bersyarat. Saya sering menggunakan ini ketika mengimpor dalam Jupyter Notebook:
Single
&
(tidak double&&
) sudah cukup atau sebagai jawaban atas menunjukkan anda dapat menggunakan 'dan'. Saya juga menemukan ini di pandajika kita mengganti "&" dengan "dan", itu tidak't bekerja.
mungkin dengan & bukannya % lebih cepat dan menjaga readibility
tes-tes lain bahkan/ganjil
x ini bahkan ? x % 2 == 0
x adalah ganjil ? tidak x % 2 == 0
mungkin lebih jelas dengan bitwise dan 1
x adalah ganjil ? x & 1
x ini bahkan ? tidak x & 1 (tidak ganjil)