Saya perlu mencetak beberapa hal hanya ketika variabel boolean diatur ke True
. Jadi, setelah melihat ini , saya mencoba dengan contoh sederhana:
>>> a = 100
>>> b = True
>>> print a if b
File "<stdin>", line 1
print a if b
^
SyntaxError: invalid syntax
Hal yang sama jika saya menulis print a if b==True
.
Apa yang kulewatkan di sini?
python
if-statement
inline
Ricky Robinson
sumber
sumber
Jawaban:
Python tidak memiliki trailing
if
pernyataan tambahan .Ada dua jenis
if
Python:if
pernyataan:if
ekspresi (diperkenalkan dengan Python 2.5)Dan catatan, bahwa kedua
print a
danb = a
adalah pernyataan. Hanyaa
bagian yang merupakan ekspresi. Jadi, jika Anda menulisitu berarti
dan juga saat Anda menulis
itu berarti
Sekarang apa yang akan dicetak / tetapkan jika tidak ada
else
klausa? Hasil cetak / tugas masih ada .Dan perhatikan, bahwa jika Anda tidak ingin ada di sana, Anda selalu dapat menulis
if
pernyataan reguler pada satu baris, meskipun itu kurang mudah dibaca dan benar-benar tidak ada alasan untuk menghindari varian dua baris.sumber
if condition: statement
tidak berfungsi dalam kasus pernyataan multiline.if
, lalu mengapa pekerjaan ini:print [i for i in range(10) if i%2]
? Saya berharap mereka membiarkannya di luar pemahaman ...for
antara mereka.Sertakan jika ada EXPRESSION harus selalu mengandung klausa lain, misalnya:
Jika Anda ingin membiarkan nilai variabel 'a' Anda tidak berubah - dengan asumsi nilai 'a' yang lama (yang lain masih diperlukan oleh permintaan sintaks):
Potongan kode ini meninggalkan sebuah berubah ketika b bergantian menjadi False.
sumber
print a if b
else a
akan lebih baikelse 0
if b: print a
Hanya perlu sederhana jika dalam kasus itu""
atauNone
, lihat detail dalam jawaban lain).Pernyataan 'lain' adalah wajib. Anda dapat melakukan hal-hal seperti ini:
EDIT:
Atau, tergantung dari kebutuhan Anda, Anda dapat mencoba:
sumber
Jika Anda tidak mau,
from __future__ import print_function
Anda dapat melakukan hal berikut:Yang mencetak:
Jika Anda tidak suka
from __future__ import print_function
atau menggunakan python 3 atau lebih baru:Menambahkan yang lain adalah satu-satunya perubahan yang perlu Anda lakukan untuk membuat kode Anda benar secara sintaksis, Anda memerlukan yang lain untuk ekspresi kondisional ("sejalan jika ada yang menghalangi")
Alasan saya tidak menggunakan
None
atau0
seperti orang lain di thread telah digunakan, karena menggunakanNone/0
akan menyebabkan program untukprint None
atauprint 0
dalam kasus di manab
adalahFalse
.Jika Anda ingin membaca tentang topik ini, saya telah menyertakan tautan ke catatan rilis untuk tambalan yang fitur ini ditambahkan ke Python.
'Pola' di atas sangat mirip dengan pola yang ditunjukkan dalam PEP 308:
Jadi saya pikir secara keseluruhan ini adalah cara masuk akal untuk menerimanya tetapi Anda tidak dapat berdebat dengan kesederhanaan:
sumber
print ""
masih akan mencetak sesuatu: baris kosong.end
argumnt diprint
hanya muncul di Python 3.x, kan?from __future__ import print_function
Sejak 2,5 Anda dapat menggunakan setara dengan C's "?:" Operator kondisional ternary dan sintaksnya adalah:
Jadi contoh Anda baik-baik saja, tetapi Anda cukup menambahkan
else
, seperti:sumber
print ''
masih akan mencetak baris baru, yang dihindari dalam jawaban oleh Noelkd.Kamu bisa menggunakan:
Anda juga dapat terus seperti:
Contoh dunia nyata:
sumber
Ini dapat dilakukan dengan pemformatan string . Ia bekerja dengan notasi% serta .format () dan f-string (baru ke 3,6)
atau
atau
sumber
print a if b else ""
. Itulah tepatnya jawaban Noelkd.print "",
(titik dua) untuk Python2, dan menggunakanprint("", end="")
untuk Python3.Untuk kasus Anda ini berfungsi:
Edit: Bagaimana cara kerjanya?
Dalam pertanyaan
Jadi mengevaluasi
hasil dalam
yang ditugaskan untuk
a
.Jika
b == False?
,b or 0
akan mengevaluasi ke operan kedua0
yang akan ditugaskana
.sumber
Coba ini . Mungkin membantu Anda
sumber
Anda terlalu rumit.
sumber
if DEBUG: print something
Anda selalu memerlukan
else
in inline jika:Tetapi cara yang lebih mudah untuk melakukannya adalah
a = int(b)
.sumber
a = int(bool(b))
.Nah kenapa tidak Anda tulis saja:
sumber
hmmm, Anda bisa melakukannya dengan pemahaman daftar . Ini hanya akan masuk akal jika Anda memiliki jangkauan nyata .. tetapi itu memang berhasil:
atau hanya menggunakan kedua variabel tersebut:
sumber