Python est l'équivalent de && (logique-et) dans un if
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
J'obtiens une erreur dans le SI conditionnel. Ce que je fais mal?
- Clairement Sergio voulait savoir pourquoi son code était cassé, mais j'ai lu un peu plus sur le titre de la question. Pourquoi ne pas && être disponible de toute façon? == et != sont disponibles (mais sont différents des est et n'est pas, je sais). Pourquoi ne pas inclure cette syntaxe? Préférence personnelle?
- Pourquoi inclure redondants une syntaxe qui ne s'améliore pas à un seul aspect?
- Rudolph: C'est un outil que les gens à atteindre, pour autant, il est là, c'est tout. Si nous avons inclus tous les ces de tels scénarios, cependant, conduire à des ballonnements. Donc je peux dire que non,
&&
ne leur appartient pas. - Il me semble que l'interprète doit, plutôt que d'imprimer un laconique "SyntaxError: invalid syntax" - détecter que l'utilisateur a utilisé le
&&
à penser qu'ils pourraient vouloir utiliser le mot cléand
à la place. En va de même pour des choses comme++
et d'autres opérateurs courants à partir d'autres langues. - devrait être l'un, et de préférence un seul, moyen évident de le faire."
import this
- Absolument améliore les aspects de la langue. Il est plus cohérent et intuitif pour quelqu'un qui n'a jamais utilisé de toute autre langue. le fait que cette question existe et qu'il a autant de trafic qu'il ne met clairement en évidence que cette question est une commune point d'achoppement pour les gens.
- Maintenez la presse, plus d'un langage de programmation syntaxe existe. Sérieusement, Python moyen de définition de ces opérateurs n'est pas unique, et il est parfaitement justifiable. Il y a un argument pour des raisons de cohérence, mais à l'inverse il y a aussi un argument pour améliorer l'existant. Et sans changement, il ne peut y avoir d'amélioration. Clairement, je crois que dans ce cas particulier, Python est un point d'amélioration.
- Je pense que vous devriez être à la une "la presse". Je suis tout simplement réfuter votre déclaration absurde que ça ne fait pas avancer d'un seul aspect. Lorsque comme je l'ai dit ci-dessus, il est clair que cela. Peut-être, il existe de bons arguments pour ne pas l'inclure. Mais vous n'êtes pas faire un de ces arguments.
and
etor
peut également être utilisé pour évaluer la truthiness des expressions impliquant plus que juste des valeurs booléennes. Pour plus d'informations, veuillez consulter ce post.
Vous devez vous connecter pour publier un commentaire.
Vous voulez
and
au lieu de&&
.&&
etAND
et a rencontré une erreur (ne pas attendre python à ce que le mot en minusculesand
).Python utilise
and
etor
conditions.c'est à dire
and
a une priorité plus élevée queor
.and
a une priorité plus élevée que la logiqueor
dans pratiquement tous les langages de programmation. Voici c++ plus logique de la table avec une priorité plus élevée dans la partie supérieure.Deux commentaires:
and
etor
pour des opérations logiques en Python.Il y a des raisons pour que vous obtenez un
SyntaxError
est qu'il n'est pas&&
opérateur en Python. De même||
et!
sont pas valide Python opérateurs.Certains opérateurs vous savez peut-être d'autres langues ont un nom différent en Python.
Les opérateurs logiques
&&
et||
sont appelésand
etor
.De même, la négation logique de l'opérateur
!
est appelénot
.Vous pouvez donc écrire:
ou encore:
Quelques informations supplémentaires (qui peuvent venir dans maniable):
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 a aussi au niveau du bit/opérateurs binaires:
Il n'y a pas de négation binaire en Python (juste le bit à bit inverse de l'opérateur
~
- mais qu'est pas équivalent ànot
).Voir aussi 6.6. Unaire de l'arithmétique et de la bit-à-bit/opérations binaires et 6.7. Opérations arithmétiques binaires.
Les opérateurs logiques (comme dans beaucoup d'autres langues) ont l'avantage que ceux-ci sont court-circuitées.
Cela signifie que si le premier opérande définit déjà le résultat, puis le deuxième opérateur n'est pas évaluée à tous.
Pour montrer cela, j'utilise une fonction qui prend simplement une valeur, l'imprime et le renvoie à nouveau. C'est pratique pour voir ce qui est réellement
évalués en raison de l'impression des déclarations:
Comme vous pouvez le voir une seule impression instruction est exécutée, de sorte que Python n'avait même pas regarder l'opérande de droite.
Ce n'est pas le cas pour les opérateurs binaires. Ceux qui sont toujours évaluer les deux opérandes:
Mais si le premier opérande n'est pas suffisant alors, bien sûr, le second opérateur est évaluée:
Pour résumer il s'agit ici d'une autre Table:
La
True
etFalse
représenter cebool(left-hand-side)
retourne, ils n'ont pas à êtreTrue
ouFalse
, ils ont juste besoin de retournerTrue
ouFalse
quandbool
est appelé sur eux (1).Donc en Pseudo-Code(!) le
and
etor
fonctions de travail comme celles-ci:Remarque que c'est de la pseudo-code pas de code Python. En Python, vous ne pouvez pas créer des fonctions appelées
and
ouor
parce que ces mots-clés.Aussi, vous ne devez jamais utiliser "évaluer" ou
if bool(...)
.De personnaliser le comportement de vos propres classes
L'implicite
bool
appel peut être utilisé pour personnaliser la façon dont vos classes se comporter avecand
,or
etnot
.Pour montrer comment cela peut être personnalisée-je utiliser cette classe qui, là encore,
print
s quelque chose pour suivre ce qui se passe:Donc, nous allons voir ce qui se passe avec cette classe en combinaison avec ces opérateurs:
Si vous n'avez pas de
__bool__
méthode, puis Python vérifie également si l'objet a une__len__
méthode, et si elle renvoie une valeur supérieure à zéro.Qui pourrait être utile à savoir dans le cas où vous créez un conteneur de séquence.
Voir aussi 4.1. Valeur De Vérité De Tests.
NumPy d'ensembles et de sous-classes
Probablement un peu au-delà de la portée de la question d'origine, mais dans le cas où vous avez à traiter avec des tableaux NumPy ou sous-classes (comme les Pandas Série ou DataFrames) puis l'implicite
bool
appelva relever le redoutable
ValueError
:Dans ces cas, vous pouvez utiliser la logique et fonction de NumPy qui exécute un élément-sage
and
(ouor
):Si vous traitez seulement avec boolean tableaux vous pouvez également utiliser les opérateurs binaires avec NumPy, ces effectuez élément-sage (mais aussi binaire) comparaisons:
(1)
Que le
bool
appel sur les opérandes est de retourTrue
ouFalse
n'est pas tout à fait correct. C'est juste le premier opérande qui doit retourner un booléen dans__bool__
méthode:C'est parce que
and
renvoie en fait le premier opérande si le premier opérande est évaluée àFalse
et si on les évalue àTrue
puis il renvoie le deuxième opérande:De même pour
or
mais juste dans l'autre sens:Toutefois, si vous les utilisez dans un
if
déclaration de laif
également implicitement appelbool
sur le résultat. De sorte que ces subtilités peuvent ne pas être pertinentes pour vous.ValueError
moi-même. Voyons voir si np.logical_and peut vous aider.Je suis allé avec un purlely solution mathématique:
Vous utilisez
and
etor
pour effectuer des opérations logiques comme en C, C++. Comme littéralementand
est&&
etor
est||
.Prendre un coup d'oeil à cet amusant exemple,
Dites que vous voulez construire des Portes Logiques en Python:
Maintenant, essayez de les appeler:
Ce sera de sortie:
Espérons que cette aide!
Probablement, ce n'est pas le meilleur code pour cette tâche, mais est de travailler
Dans un "if" en Python, vous utilisez et, ou, pas et ce sont les équivalents des &&, ||, ! les opérateurs logiques sont utilisés dans d'autres langages de programmation
Utilisation de "et" en sursis. J'utilise souvent ce lors de l'importation dans Jupyter Portable:
Un seul
&
(pas de double&&
) est suffisante ou que la réponse sommet, suggère que vous pouvez utiliser 'et'.J'ai aussi trouvé ça dans les pandas
si l'on remplace les "&" avec "et", ça ne marchera pas.
peut-être avec & au lieu de cela % est plus rapide et mantain lisibilité
d'autres tests pair/impair
x est la même ? x % 2 == 0
x est impair ? pas x % 2 == 0
est peut-être plus clair avec le bit à bit et 1
x est impair ? x & 1
x est la même ? pas x & 1 (pas top)