La répétition est l'une des choses pour lesquelles les ordinateurs sont particulièrement doués. Comment convaincre Karel d'exécuter plusieurs fois un bloc de code? Pour voir comment la répétition peut être utilisée, considérez la tâche de placer 42 jetons :
Puisque vous savez qu'il y a exactement 42 jetons à placer, l'instruction de contrôle dont vous avez besoin est une boucle for , qui spécifie que vous souhaitez répéter une opération un nombre fixe de fois. La structure du for La déclaration semble compliquée principalement parce qu'elle est en fait beaucoup plus puissante que tout ce dont Karel a besoin. La seule version du for La syntaxe utilisée par Karel est:
for i in range( compter ):
déclarations à répéter
Nous allons passer en revue tous les détails de la for boucle plus tard dans la classe. Pour l'instant, vous devriez lire cette ligne comme un moyen d'exprimer, "répétez les instructions dans le corps de la fonctioncompterfois. "Nous pouvons utiliser ce nouveau boucle for placer 42 jetons en remplaçantcompter avec 42 et en mettant la commande laisser_jeton() à l'intérieur du for bloc de code de boucle. Nous appelons les commandes dans le bloc de code corps :
Le code ci-dessus est modifiable . Essayez de le changer pour qu'il ne place que 15 jetons .
L'exemple précédent donne l'impression qu'un for loop répète une seule ligne de code. Cependant, le corps du for loop (les instructions qui se répètent) peuvent être sur plusieurs lignes. Voici un exemple de programme qui place un jeton dans chaque coin d'un monde:
Faites très attention à la façon dont le programme circule à travers ces instructions de contrôle. Le programme run par l'ensemble des commandes du for boucle le corps un par un. Il répète le corps quatre fois.
La partie la plus compliquée de l'écriture d'une boucle est peut-être que vous avez besoin de l'état du monde à la fin de la boucle (le postcondition ) être un état du monde valide pour le début de la boucle (le condition préalable ). Dans l'exemple ci-dessus, les hypothèses correspondent. Bon temps. Au début de la boucle, Karel est toujours sur une case sans jetons face au prochain coin vide. Et si vous supprimiez le tourner_gauche() à la fin de la boucle? La postcondition à la fin de la première itération ne satisferait plus les hypothèses faites sur Karel face au prochain coin vide. Le code est modifiable. Essayez de supprimer le tourner_gauche() commande pour voir ce qui se passe!
Techniquement, le corps d'un for loop peut contenir n'importe quel code de flux de contrôle, même d'autres boucles. Voici un exemple de for boucle qui répète un appel à une fonction qui a également un for boucle. Nous appelons cela une boucle «imbriquée». Essayez de lire le programme et de comprendre ce qu'il fait avant exécuter :