Voici mon 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
Je reçois une erreur dans le conditionnel IF .
Qu'est-ce que je fais mal?
python
if-statement
keyword
logical-operators
and-operator
Arsen Khachaturyan
la source
la source
&&
et lui suggérer qu'il pourrait vouloir utiliser le mot-clé à laand
place. Il en va de même pour des choses comme++
et d'autres opérateurs communs d'autres langues.import this
Réponses:
Vous voudriez
and
au lieu de&&
.la source
&&
etAND
j'ai eu une erreur (je ne m'attendais pas à ce que python veuille le mot en minusculeand
).Utilisations
and
etor
conditions de Python .c'est à dire
la source
and
a une priorité plus élevée queor
.La raison pour laquelle vous obtenez un
SyntaxError
est qu'il n'y a pas d'&&
opérateur en Python. De même||
et ne!
sont pas des opérateurs Python valides .Certains des opérateurs que vous connaissez peut-être dans d'autres langues ont un nom différent en Python. Les opérateurs logiques
&&
et||
sont en fait appelésand
etor
. De même, l'opérateur de négation logique!
est appelénot
.Vous pouvez donc simplement écrire:
ou même:
Quelques informations supplémentaires (qui pourraient être utiles):
J'ai résumé l'opérateur "équivalents" dans ce tableau:
Voir aussi la documentation Python: 6.11. Opérations booléennes .
Outre les opérateurs logiques, Python possède également des opérateurs binaires / binaires:
Il n'y a pas de négation au niveau du bit en Python (juste l'opérateur inverse au niveau du bit
~
- mais ce n'est pas équivalent ànot
).Voir aussi 6.6. Opérations arithmétiques unaires et au niveau du bit / binaire et 6.7. Opérations arithmétiques binaires .
Les opérateurs logiques (comme dans beaucoup d'autres langues) ont l'avantage d'être court-circuités. Cela signifie que si le premier opérande définit déjà le résultat, le deuxième opérateur n'est pas évalué du tout.
Pour le montrer, j'utilise une fonction qui prend simplement une valeur, l'imprime et la renvoie à nouveau. C'est pratique pour voir ce qui est réellement évalué en raison des instructions d'impression:
Comme vous pouvez le voir, une seule instruction print est exécutée, donc Python n'a même pas regardé l'opérande approprié.
Ce n'est pas le cas pour les opérateurs binaires. Ceux-ci évaluent toujours les deux opérandes:
Mais si le premier opérande ne suffit pas, alors, bien sûr, le deuxième opérateur est évalué:
Pour résumer ceci, voici un autre tableau:
Les
True
etFalse
représentent ce quibool(left-hand-side)
retourne, ils n'ont pas à êtreTrue
ouFalse
, ils ont juste besoin de revenirTrue
ouFalse
quandbool
est appelé sur eux (1).Ainsi, dans le pseudo-code (!)
and
, Lesor
fonctions et fonctionnent comme suit:Notez qu'il s'agit de pseudo-code et non de code Python. En Python, vous ne pouvez pas créer de fonctions appelées
and
ouor
parce que ce sont des mots clés. De plus, vous ne devez jamais utiliser "évaluer" ouif bool(...)
.Personnalisation du comportement de vos propres classes
Cet
bool
appel implicite peut être utilisé pour personnaliser le comportement de vos classes avecand
,or
etnot
.Pour montrer comment cela peut être personnalisé, j'utilise cette classe qui, encore
print
une fois, permet de suivre ce qui se passe:Voyons donc ce qui se passe avec cette classe en combinaison avec ces opérateurs:
Si vous n'avez pas de
__bool__
méthode, Python vérifie également si l'objet a une__len__
méthode et s'il renvoie une valeur supérieure à zéro. Cela peut être utile de savoir si vous créez un conteneur de séquence.Voir aussi 4.1. Test de valeur de vérité .
Tableaux et sous-classes NumPy
Probablement un peu au-delà de la portée de la question d'origine, mais dans le cas où vous avez affaire à des tableaux ou sous-classes NumPy (comme Pandas Series ou DataFrames), l'
bool
appel implicite augmentera le redoutéValueError
:Dans ces cas, vous pouvez utiliser la logique et la fonction de NumPy qui effectue un élément
and
(ouor
):Si vous traitez uniquement avec des tableaux booléens, vous pouvez également utiliser les opérateurs binaires avec NumPy, ceux-ci effectuent des comparaisons par élément (mais aussi binaire):
(1)
Que l'
bool
appel sur les opérandes doit retournerTrue
ouFalse
n'est pas complètement correct. C'est juste le premier opérande qui doit retourner un booléen dans sa__bool__
méthode:C'est parce
and
que retourne en fait le premier opérande si le premier opérande évalue àFalse
et s'il évalue àTrue
alors il retourne le deuxième opérande:De même pour
or
mais juste l'inverse:Toutefois, si vous les utilisez dans une
if
instruction, le résultatif
invoquera également implicitementbool
le résultat. Ces points plus fins peuvent donc ne pas être pertinents pour vous.la source
Deux commentaires:
and
etor
pour les opérations logiques en Python.la source
Vous utilisez
and
etor
pour effectuer des opérations logiques comme en C, C ++. Commeand
est&&
etor
est||
littéralement .Jetez un oeil à cet exemple amusant,
Supposons que vous souhaitiez créer des portes logiques en Python:
Essayez maintenant de les appeler:
Cela produira:
J'espère que cela t'aides!
la source
Je suis allé avec une solution purement mathématique:
la source
Ce n'est probablement pas le meilleur code pour cette tâche, mais cela fonctionne -
la source
Un simple
&
(pas double&&
) est suffisant ou comme la réponse du haut suggère que vous pouvez utiliser 'et'. J'ai aussi trouvé ça chez les pandassi nous remplaçons le "&" par "et", cela ne fonctionnera pas.
la source
peut-être qu'avec & au lieu de cela% est plus rapide et maintient la lisibilité
autres tests pairs / impairs
x est pair? x% 2 == 0
x est impair? pas x% 2 == 0
est peut-être plus clair avec bit à bit et 1
x est impair? x & 1
x est pair? pas x & 1 (pas impair)
la source
Utilisation de "et" au conditionnel. J'utilise souvent cela lors de l'importation dans Jupyter Notebook:
la source