Ini kode saya:
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
Saya mendapatkan kesalahan dalam kondisi IF .
Apa yang saya lakukan salah?
python
if-statement
keyword
logical-operators
and-operator
Arsen Khachaturyan
sumber
sumber
&&
dan menyarankan kepada mereka bahwa mereka mungkin ingin menggunakan kata kunciand
sebagai gantinya. Hal yang sama berlaku untuk hal-hal seperti++
dan operator umum lainnya dari bahasa lain.import this
Jawaban:
Anda ingin
and
bukan&&
.sumber
&&
danAND
mendapat kesalahan (tidak mengharapkan python ingin kata keciland
).Penggunaan
and
danor
kondisi Python .yaitu
sumber
and
memiliki prioritas lebih tinggi daripadaor
.Ada alasan yang Anda dapatkan
SyntaxError
adalah bahwa tidak ada&&
operator di Python. Demikian juga||
dan!
yang tidak sah operator Python.Beberapa operator yang mungkin Anda kenal dari bahasa lain memiliki nama yang berbeda dengan Python. Operator logis
&&
dan||
sebenarnya dipanggiland
danor
. Demikian juga operator negasi logis!
disebutnot
.Jadi Anda bisa menulis:
atau bahkan:
Beberapa informasi tambahan (yang mungkin berguna):
Saya meringkas "ekivalen" operator dalam tabel ini:
Lihat juga dokumentasi Python: 6.11. Operasi Boolean .
Selain operator logis, Python juga memiliki operator bitwise / biner:
Tidak ada negasi bitwise dalam Python (hanya operator bitwise terbalik
~
- tapi itu tidak setara dengannot
).Lihat juga 6.6. Hitung aritmatika dan operasi bitwise / biner dan 6.7. Operasi aritmatika biner .
Operator logis (seperti dalam banyak bahasa lain) memiliki keuntungan bahwa ini hubung singkat. Itu berarti jika operan pertama sudah menentukan hasilnya, maka operator kedua tidak dievaluasi sama sekali.
Untuk menunjukkan ini saya menggunakan fungsi yang hanya mengambil nilai, mencetaknya dan mengembalikannya lagi. Ini berguna untuk melihat apa yang sebenarnya dievaluasi karena pernyataan cetak:
Seperti yang Anda lihat, hanya satu pernyataan cetak yang dijalankan, jadi Python benar-benar tidak melihat operan yang tepat.
Ini bukan kasus untuk operator biner. Mereka selalu mengevaluasi kedua operan:
Tetapi jika operan pertama tidak cukup maka, tentu saja, operator kedua dievaluasi:
Untuk meringkas ini di sini adalah Tabel lain:
The
True
danFalse
mewakili apabool(left-hand-side)
kembali, mereka tidak harus menjadiTrue
atauFalse
, mereka hanya perlu kembaliTrue
atauFalse
ketikabool
dipanggil pada mereka (1).Jadi dalam Pseudo-Code (!)
and
Danor
fungsinya bekerja seperti ini:Perhatikan bahwa ini adalah pseudo-code bukan kode Python. Dalam Python Anda tidak dapat membuat fungsi yang disebut
and
atauor
karena ini adalah kata kunci. Anda juga tidak boleh menggunakan "evaluasi" atauif bool(...)
.Menyesuaikan perilaku kelas Anda sendiri
bool
Panggilan implisit ini dapat digunakan untuk menyesuaikan bagaimana perilaku kelas Andaand
,or
dannot
.Untuk menunjukkan bagaimana ini dapat dikustomisasi, saya menggunakan kelas ini yang lagi-lagi
print
sesuatu untuk melacak apa yang terjadi:Jadi mari kita lihat apa yang terjadi dengan kelas itu dalam kombinasi dengan operator ini:
Jika Anda tidak memiliki
__bool__
metode maka Python juga memeriksa apakah objek memiliki__len__
metode dan jika itu mengembalikan nilai lebih besar dari nol. Itu mungkin berguna untuk diketahui jika Anda membuat wadah urutan.Lihat juga 4.1. Pengujian Nilai Kebenaran .
Array dan subkelas NumPy
Mungkin sedikit di luar ruang lingkup pertanyaan asli tetapi jika Anda berurusan dengan array atau subkelas NumPy (seperti Pandas Series atau DataFrames) maka
bool
panggilan implisit akan meningkatkan yang ditakutiValueError
:Dalam kasus ini Anda dapat menggunakan logis dan fungsi dari NumPy yang melakukan unsur-bijaksana
and
(atauor
):Jika Anda hanya berurusan dengan boolean array Anda juga bisa menggunakan operator biner dengan NumPy, ini memang melakukan perbandingan elemen-bijaksana (tetapi juga biner):
(1)
Bahwa
bool
panggilan pada operan harus kembaliTrue
atauFalse
tidak sepenuhnya benar. Ini hanya operan pertama yang perlu mengembalikan boolean dalam__bool__
metode itu:Itu karena
and
sebenarnya mengembalikan operan pertama jika operan pertama mengevaluasiFalse
dan jika mengevaluasiTrue
maka mengembalikan operan kedua:Demikian pula untuk
or
tetapi sebaliknya:Namun, jika Anda menggunakannya dalam sebuah
if
pernyataan,if
maka secara implisit juga akan memanggilbool
hasilnya. Jadi poin yang lebih baik ini mungkin tidak relevan untuk Anda.sumber
Dua komentar:
and
danor
untuk operasi logis dengan Python.sumber
Anda menggunakan
and
danor
untuk melakukan operasi logis seperti di C, C ++. Seperti secara harfiahand
adalah&&
danor
sekarang||
.Lihatlah contoh yang menyenangkan ini,
Katakanlah Anda ingin membangun Logic Gates dengan Python:
Sekarang coba panggil mereka:
Ini akan menampilkan:
Semoga ini membantu!
sumber
Saya menggunakan solusi matematika murni:
sumber
Mungkin ini bukan kode terbaik untuk tugas ini, tetapi berfungsi -
sumber
Satu
&
(bukan ganda&&
) sudah cukup atau seperti jawaban teratas menyarankan Anda bisa menggunakan 'dan'. Saya juga menemukan ini di pandajika kita mengganti "&" dengan "dan", itu tidak akan berfungsi.
sumber
mungkin dengan & bukannya% lebih cepat dan menjaga kesiapan
tes lain genap / ganjil
x genap? x% 2 == 0
x aneh? bukan x% 2 == 0
mungkin lebih jelas dengan bitwise dan 1
x aneh? x & 1
x genap? bukan x & 1 (tidak aneh)
sumber
Penggunaan "dan" dalam kondisi. Saya sering menggunakan ini ketika mengimpor di Jupyter Notebook:
sumber