Muszę wydrukować niektóre rzeczy tylko wtedy, gdy zmienna boolowska jest ustawiona na True
. Po przyjrzeniu się temu spróbowałem na prostym przykładzie:
>>> a = 100
>>> b = True
>>> print a if b
File "<stdin>", line 1
print a if b
^
SyntaxError: invalid syntax
To samo, jeśli napiszę print a if b==True
.
Czego tu brakuje?
python
if-statement
inline
Ricky Robinson
źródło
źródło
Odpowiedzi:
Python nie ma końcowej
if
instrukcji .W
if
Pythonie istnieją dwa rodzaje :if
komunikat:if
wyrażenie (wprowadzone w Pythonie 2.5)I uwaga, że zarówno
print a
ib = a
są oświadczenia. Tylkoa
część jest wyrażeniem. Więc jeśli napiszeszto znaczy
i podobnie podczas pisania
to znaczy
Co by to wydrukowało / przypisało, gdyby nie było
else
klauzuli? Wydruk / przypisanie nadal tam jest .I zauważ, że jeśli nie chcesz, żeby tam była, zawsze możesz napisać zwykłą
if
instrukcję w jednym wierszu, chociaż jest ona mniej czytelna i naprawdę nie ma powodu, aby unikać wariantu dwuwierszowego.źródło
if condition: statement
to nie działa w przypadku oświadczeń wielowierszowych.if
, to dlaczego to działa:print [i for i in range(10) if i%2]
? Chciałbym, żeby pozwolili na to poza zrozumieniem ...for
między nimi.Inline if-else EXPRESSION zawsze musi zawierać klauzulę innego, np:
Jeśli chcesz pozostawić niezmienioną wartość zmiennej „a” - przyjmując starą wartość „a” (inaczej jest to nadal wymagane przez wymagania dotyczące składni):
Ten fragment kodu pozostawia niezmienione, gdy obroty b być fałszywe.
źródło
print a if b
else a
byłoby lepiejelse 0
if b: print a
Wystarczy prosty, jeśli w takim przypadku""
lubNone
, zobacz szczegóły w innych odpowiedziach).Oświadczenie „else” jest obowiązkowe. Możesz robić takie rzeczy:
EDYTOWAĆ:
Lub, w zależności od potrzeb, możesz spróbować:
źródło
Jeśli nie chcesz
from __future__ import print_function
, możesz wykonać następujące czynności:Które wydruki:
Jeśli nie jesteś uśpiony
from __future__ import print_function
lub używasz Pythona 3 lub nowszego:Dodanie else jest jedyną zmianą, którą musisz wprowadzić, aby kod był poprawny pod względem składniowym, potrzebujesz else dla wyrażenia warunkowego („w linii, jeśli inaczej blokuje”)
Powodem, dla którego nie użyłem
None
lub nie0
lubiłem innych w tym wątku, jest to, że użycieNone/0
spowoduje, że program się pojawiprint None
lubprint 0
w przypadkach, w którychb
jestFalse
.Jeśli chcesz przeczytać o tym temacie, zamieściłem link do informacji o wersji łatki, że ta funkcja została dodana do Pythona.
„Wzór” powyżej jest bardzo podobny do wzoru pokazanego w PEP 308:
Myślę więc, że ogólnie jest to rozsądny sposób na zbliżenie, ale nie można kłócić się z prostotą:
źródło
print ""
nadal coś wydrukuje: pusta linia.end
Argumnt wprint
pojawia się tylko w Pythonie 3.x, prawda?from __future__ import print_function
Od wersji 2.5 można użyć równoważnika trójskładnikowego operatora warunkowego „?:” , A składnia jest następująca:
Twój przykład jest w porządku, ale musisz po prostu dodać
else
, na przykład:źródło
print ''
nadal będzie drukować nowy wiersz, czego unika Noelkd w odpowiedzi.Możesz użyć:
Równie dobrze możesz kontynuować:
Przykład ze świata rzeczywistego:
źródło
Można to zrobić za pomocą formatowania łańcucha . Działa z notacją% oraz ciągami .format () i f (nowymi od 3.6)
lub
lub
źródło
print a if b else ""
. To właśnie robi odpowiedź Noelkda.print "",
(dwukropka) dla Python2 i używaniaprint("", end="")
dla Python3.W twoim przypadku działa to:
Edycja: Jak to działa?
W pytaniu
Tak oceniam
prowadzi do
który jest przypisany do
a
.Jeśli
b == False?
,b or 0
ocenia na drugi operand, do0
którego zostanie przypisanya
.źródło
Spróbuj tego . To może ci pomóc
źródło
Po prostu nadmiernie komplikujesz.
źródło
if DEBUG: print something
Zawsze potrzebujesz
else
in-line, jeśli:Ale byłoby to łatwiejsze
a = int(b)
.źródło
a = int(bool(b))
.Dlaczego po prostu nie napiszesz:
źródło
hmmm, możesz to zrobić ze zrozumieniem listy . Miałoby to sens tylko, gdybyś miał prawdziwy zasięg ... ale spełnia swoje zadanie:
lub używając tylko tych dwóch zmiennych:
źródło