Pourquoi “if-else-break” pauses en python?
Je suis en train d'utiliser if-else expression qui est censé casser la boucle si le if
condition échoue, mais obtenir un invalid syntax
erreur.
Exemple de code:
a = 5
while True:
print(a) if a > 0 else break
a-=1
Bien sûr, si j'écris de façon traditionnelle (n'utilisant pas le un paquebot), il fonctionne.
S'il vous plaît laissez-moi savoir ce qui est mauvais dans l'aide de la break
de commande après le else
mot-clé.
dans cet exemple, comment voulez-vous sortir de cette boucle?
fait de la modifier.
Ouais.. il y a deux fautes de frappe, (true à la place de la Vraie et
fait de la modifier.
Ouais.. il y a deux fautes de frappe, (true à la place de la Vraie et
a>5
au lieu a>0
). Fixe. Merci pour la mention 🙂OriginalL'auteur Manish Goel | 2017-06-30
Vous devez vous connecter pour publier un commentaire.
Si je l'exécute, j'obtiens l'erreur suivante:
C'est parce que
est un opérateur ternaire. Ternaire opérateurs sont pas
if
états. Ces travaux avec la syntaxe:Il est équivalent à une "fonction virtuelle":
Ce qui signifie que la partie à côté de la
else
devrait être un expression.break
est pas une expression, c'est une déclaration. Si Python n'attend pas de vous que. Vous ne peut pasreturn
unbreak
.Dans python-2.x,
print
n'était pas une fonction. Donc, ce serait une erreur avec leprint
déclaration. Dans python-2.xprint
était un mot-clé.Vous pouvez réécrire votre code:
Vous pouvez en lire plus à ce sujet dans le la documentation et PEP-308.
Merci. J'ai inclus les références dans la réponse.
OriginalL'auteur Willem Van Onsem
If
est une expression,break
similaire àreturn
est une instruction. Vous ne pouvez pas utiliser deux instructions en une seule phrase (sauf si vous utilisez un point-virgule qui est laid). Je sais que ça aurait été vraiment cool si on peut le faire, mais hélas c'est la façon dont il est.OriginalL'auteur hspandher
De le mettre légèrement en termes plus simples, vous êtes un mauvais usage du "on-line
if
énoncé" ( opérateur ternaire ). Il évalue toujours à un expression (c'est à dire, une valeur). C'est,évalue à
<expr1>
si<condition>
estTrue
, et à<expr2>
si<condition>
estFalse
. Cette valeur peut ensuite être utilisé comme n'importe quel Python valeur, par exemple:Bien sûr, les parenthèses sont totalement inutiles (même déconseillé), mais espérons-le, seront utiles pour comprendre le sens de cette ligne.
Par conséquent,
essaie d'évaluer
print(a)
(qui, par la définition deprint()
en Python 3, renvoie toujoursNone
– parfaitement valide, mais probablement pas ce que vous voulez généralement) et puisbreak
, qui n'évalue pas à quoi que ce soit parce que c'est un déclaration (action), pas un expression (valeur), d'où leinvalid syntax
erreur.Donc, si vous voulez exécuter l'un des deux états en fonction d'une condition, vous avez vraiment besoin de multi-ligne solution proposée par
Willem Van Onsem. Il peut être hacky façons de le faire en une seule ligne, mais plusieurs lignes est la solution habituelle pour quelque chose comme ça en Python.
OriginalL'auteur orn688