Hier ist mein Code:
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
Ich erhalte einen Fehler in der IF- Bedingung.
Was mache ich falsch?
python
if-statement
keyword
logical-operators
and-operator
Arsen Khachaturyan
quelle
quelle
&&
und ihm vorschlagen sollte,and
stattdessen das Schlüsselwort zu verwenden. Gleiches gilt für Dinge wie++
und andere gängige Operatoren aus anderen Sprachen.import this
Antworten:
Sie würden wollen ,
and
statt&&
.quelle
&&
undAND
eine Fehlermeldung erhalten habe ( ich habe nicht erwartet, dass Python das Kleinbuchstaben möchteand
).Python verwendet
and
undor
Bedingungen.dh
quelle
and
hat eine höhere Priorität alsor
.Der Grund dafür
SyntaxError
ist, dass es&&
in Python keinen Operator gibt . Ebenso||
und!
sind keine gültigen Python-Operatoren.Einige der Operatoren, die Sie möglicherweise aus anderen Sprachen kennen, haben in Python einen anderen Namen. Die logischen Operatoren
&&
und||
werden tatsächlichand
und genanntor
. Ebenso wird der logische Negationsoperator!
aufgerufennot
.Sie könnten also einfach schreiben:
oder auch:
Einige zusätzliche Informationen (die nützlich sein könnten):
Ich habe die Operator "Äquivalente" in dieser Tabelle zusammengefasst:
Siehe auch Python-Dokumentation: 6.11. Boolesche Operationen .
Neben den logischen Operatoren hat Python auch bitweise / binäre Operatoren:
In Python gibt es keine bitweise Negation (nur den bitweisen inversen Operator
~
- aber das entspricht nichtnot
).Siehe auch 6.6. Unäre arithmetische und bitweise / binäre Operationen und 6.7. Binäre Rechenoperationen .
Die logischen Operatoren (wie in vielen anderen Sprachen) haben den Vorteil, dass diese kurzgeschlossen sind. Das heißt, wenn der erste Operand das Ergebnis bereits definiert, wird der zweite Operator überhaupt nicht ausgewertet.
Um dies zu zeigen, verwende ich eine Funktion, die einfach einen Wert nimmt, ihn druckt und wieder zurückgibt. Dies ist praktisch, um zu sehen, was aufgrund der print-Anweisungen tatsächlich ausgewertet wird:
Wie Sie sehen, wird nur eine print-Anweisung ausgeführt, sodass Python nicht einmal den richtigen Operanden angesehen hat.
Dies ist bei den Binäroperatoren nicht der Fall. Diese bewerten immer beide Operanden:
Aber wenn der erste Operand nicht ausreicht, wird natürlich der zweite Operator ausgewertet:
Um dies hier zusammenzufassen, ist eine andere Tabelle:
Die
True
undFalse
stellen dar, wasbool(left-hand-side)
zurückkehrt, sie müssen nicht seinTrue
oderFalse
sie müssen nur zurückkehrenTrue
oderFalse
wann siebool
aufgerufen werden (1).In Pseudo-Code (!) Funktionieren die Funktionen
and
undor
wie folgt:Beachten Sie, dass dies Pseudocode und kein Python-Code ist. In Python können Sie keine Funktionen erstellen, die aufgerufen werden
and
oderor
weil dies Schlüsselwörter sind. Auch sollten Sie niemals "evaluieren" oder verwendenif bool(...)
.Anpassen des Verhaltens Ihrer eigenen Klassen
Diese implizite
bool
Aufruf kann verwendet werden , um anzupassen , wie Ihre Klassen verhalten sich mitand
,or
undnot
.Um zu zeigen, wie dies angepasst werden kann, verwende ich diese Klasse, die wiederum
print
etwas ist, um zu verfolgen, was passiert:Mal sehen, was mit dieser Klasse in Kombination mit diesen Operatoren passiert:
Wenn Sie keine
__bool__
Methode haben, prüft Python auch, ob das Objekt eine__len__
Methode hat und ob es einen Wert größer als Null zurückgibt. Dies kann hilfreich sein, wenn Sie einen Sequenzcontainer erstellen.Siehe auch 4.1. Wahrheitswertprüfung .
NumPy-Arrays und Unterklassen
Wahrscheinlich etwas außerhalb des Rahmens der ursprünglichen Frage, aber falls Sie mit NumPy-Arrays oder -Unterklassen (wie Pandas Series oder DataFrames) arbeiten, wird der implizite
bool
Aufruf die gefürchtetenValueError
:In diesen Fällen können Sie die Logik und Funktion von NumPy verwenden, die elementweise
and
(oderor
) ausführt :Wenn Sie nur mit booleschen Arrays arbeiten, können Sie auch die Binäroperatoren mit NumPy verwenden. Diese führen elementweise (aber auch binäre) Vergleiche durch:
(1)
Dass der
bool
Aufruf der Operanden zurückkehren mussTrue
oderFalse
nicht ganz korrekt ist. Es ist nur der erste Operand, der in seiner__bool__
Methode einen Booleschen Wert zurückgeben muss :Das ist , weil
and
tatsächlich den ersten Operanden zurückgibt , wenn der erste Operand ausgewertetFalse
und , wenn sie ausgewertetTrue
dann gibt er den zweiten Operanden:Ähnliches gilt für,
or
aber umgekehrt:Wenn Sie sie jedoch in einer
if
Anweisung verwenden,if
ruftbool
das Ergebnis implizit auch das Ergebnis auf. Daher sind diese Feinheiten für Sie möglicherweise nicht relevant.quelle
Zwei Kommentare:
and
undor
für logische Operationen in Python.quelle
Sie verwenden
and
undor
führen logische Operationen wie in C, C ++ aus. Wie buchstäblichand
ist&&
undor
ist||
.Schauen Sie sich dieses lustige Beispiel an:
Angenommen, Sie möchten Logic Gates in Python erstellen:
Rufen Sie sie jetzt an:
Dies wird Folgendes ausgeben:
Hoffe das hilft!
quelle
Ich habe mich für eine rein mathematische Lösung entschieden:
quelle
Wahrscheinlich ist dies nicht der beste Code für diese Aufgabe, aber er funktioniert -
quelle
Ein einzelnes
&
(nicht doppeltes&&
) ist genug oder wie die obere Antwort andeutet, können Sie 'und' verwenden. Ich fand das auch bei PandasWenn wir das "&" durch "und" ersetzen, funktioniert es nicht.
quelle
Vielleicht ist mit & stattdessen% schneller und besser lesbar
andere Tests gerade / ungerade
x ist gerade? x% 2 == 0
x ist ungerade? nicht x% 2 == 0
vielleicht ist mit bitwise und 1 klarer
x ist ungerade? x & 1
x ist gerade? nicht x & 1 (nicht ungerade)
quelle
Verwendung von "und" unter bestimmten Bedingungen. Ich benutze dies oft beim Importieren in Jupyter Notebook:
quelle