7
votes

En face de Python pour ... d'autre

Le code Python suivant aboutira à N (14) étant imprimé, car la boucle pour est terminée. xxx

Cependant, je veux le contraire de cette . Y a-t-il un moyen de faire un pour ... sinon (ou tandis que ... sinon ) boucle, mais n'exécute que le code si la boucle a fait pause?


1 commentaires

Trop fatigué pour écrire une solution ATM (peut-être plus tard!) Mais l'utilisation de contextmanagers pourrait être une solution! Source d'inspiration pourrait être ici: Stackoverflow.com/a/3171971/1524913


4 Réponses :


16
votes

Il n'y a pas de explicite pour ... ElseIfbrebrebrebrebrebrebreak Code> - Construction semblable à Python (ou dans n'importe quelle langue que je connaisse) car vous pouvez simplement le faire:

for n in range(15): 
    if n == 100:
        print(n)  
        break


4 commentaires

Sûrement pas ce que l'op voulait?


Pourquoi pas? Il a le même effet. Si vous souhaitez que le code soit exécuté lorsque vous rencontrez une instruction Break , alors ... exécutez le code avant la déclaration de pause


Je n'ai pas vu des constructions comme ça en soi, mais vous pouvez toujours utiliser * shudders * goto


Le point est que ce que l'OP voulait n'est pas ce qu'il cherche vraiment, il y a une meilleure façon de le faire.



6
votes

Un peu plus de solution générique utilisant des exceptions au cas où vous cédez plusieurs points de la boucle et ne souhaitez pas dupliquer le code:

try:
    for n in range(15):
        if n == 10:
            n = 1200
            raise StopIteration()
        if n > 4:
            n = 1400
            raise StopIteration()
except StopIteration:
    print n


0 commentaires

4
votes

Je n'aime pas vraiment les réponses affichées jusqu'à présent, car elles ont toutes besoin que le corps de la boucle soit changé, ce qui pourrait être gênant / risqué si le corps est vraiment compliqué, voici un moyen de le faire en utilisant un drapeau. Remplacer _break code> avec trouvé code> ou quelque chose d'autre significatif pour votre cas d'utilisation.

for n in range(15):
    if n == 100:
        break
else:
    return
print(n)


0 commentaires

0
votes

Utilisation:

for n in range(15):
    if n == 100:
        break
else:
    print("loop successful")
if n != range(15)[-1]:
    print("loop failed")


3 commentaires

Cela donne un résultat erroné si le break se produit dans la dernière itération de la boucle. Il imprimera "Boucle réussie" et "Boucle a échoué" dans ce cas.


S'il vous plaît ne publiez pas uniquement le code comme réponse, mais fournissez également une explication de votre code et de la manière dont il résout le problème de la question. Les réponses avec une explication sont généralement plus utiles et de meilleure qualité, et sont plus susceptibles d'attirer des upvotes.


Salut! Bien que ce code puisse résoudre la question, y compris une explication de la manière et pourquoi cela résout le problème aiderait vraiment à améliorer la qualité de la qualité. de votre message et aboutit probablement à plus de votes ultérieurs. N'oubliez pas que vous répondez à la question pour les lecteurs à l'avenir, pas seulement la personne qui demande maintenant. S'il vous plaît Modifier Votre réponse pour ajouter des explications et donner une indication de quelles limitations et hypothèses s'appliquent.