2014-04-20 5 views
0

En C++, je peux le faire:pas à pas manuel en python pour

for(int i=0; i<10; ++i) { 
    if(something) i += 3; 
} 

Comment puis-je faire la même chose en Python?

for i in range(10): 
    # ???? 
+0

En raison du manque de mots-clés pour mon problème, je n'ai pas trouvé de questions connexes. –

+1

pourquoi avez-vous besoin de faire cela? Habituellement, cette construction n'est pas vraiment nécessaire (et il y a presque toujours une meilleure alternative) ... si vous avez vraiment besoin de faire une boucle while –

+0

@A श wini च haudhary Juste pour le rendre clair. Je sais comment faire un C-style en python, je me demandais si avec la construction 'in range (10)' il serait possible de faire des pas supplémentaires. Parce que je trouve l'approche 'while' moche. –

Répondre

4

Python pour les boucles fonctionne sur les itérateurs. Si vous exécutez sur un objet iterator que vous avez lié à un nom, vous pouvez faire la boucle sauter les valeurs futures en appelant next vous:

it = iter(iterable) # create our own iterator 

for i in it: # loop on it 
    # do stuff with i 

    if something: 
     next(it) # discard the next three values 
     next(it) 
     next(it) 

Vous pouvez bien sûr utiliser les valeurs de retour des next(i) appels, si vous vouloir. Cela peut être pratique pour certains types de fichiers de données texte, où une ligne d'en-tête spécifie la signification des lignes de données suivantes.

Vous devez savoir que si vous atteignez la fin de la séquence itérable, next déclenchera une exception StopIteration. Si cela se produit dans l'itération de la boucle for, il s'occupe de l'exception pour vous, mais si cela se produit lorsque vous appelez next vous-même, ce ne sera pas le cas. Si une fin inattendue des données n'est pas une erreur irrécupérable, vous voudrez probablement utiliser un bloc try/except pour supprimer l'exception.

+0

Chaque réponse ici est une bonne réponse, mais je marque la vôtre comme accepté car il évite effectivement d'utiliser C-style pour. –

+0

Ne devrait pas être le prochain? –

+0

@ AndréPuel: Oui, tu as raison. J'ai corrigé cette erreur idiote. – Blckknght

2
i=0 
while i<10: 
    if something: 
     i += 3 
    else: 
     i += 1 
+0

Je pense que vous auriez besoin de i = 1 pour commencer puisqu'il l'incrémente avant d'entrer dans la boucle –

+1

Je pense que ++ i et i ++ font la même chose juste à la dernière ligne de la boucle –

+1

@JoranBeasley [Nope] (https: // eval.in/138860) – hjpotter92

3

L'équivalent en Python est la suivante:

for i in range(start, stop, increment): 
    do_something(i) 

Cela signifie que les codes suivants se comportent de manière identique:

for (int i = 10; i >= 1; i -= 2) { 
    doSomething(i); 
} 

for i in range(10, 0, -2): 
    do_something(i) 

Normalement, nous voulons commencer à zéro, incrémenter de un, et arrêter à un certain nombre, ce qui conduit au raccourci:

for i in range(stop): 
    do_something(i) 

Si vous souhaitez modifier « i », et avoir affecte la façon dont vous boucle de fois, vous devez utiliser un « tout » boucle:

i = 0 
while i <= 10: 
    if (something): 
     i += 3 
    i += 1 

... qui est ce que vous devriez aussi être faire en C++. Une boucle «pour» est utilisée pour répéter un certain nombre de fois. Si vous modifiez le compteur à l'intérieur de la boucle, alors la boucle n'est plus définie et vous devriez utiliser une boucle while à la place, puisque c'est sémantiquement un meilleur ajustement.

Questions connexes