Reeborg - partie 2#

Exercice 7#

Le programme que tu trouveras à l'adresse https://www.codepuzzle.io/PWJQGR est dans le désordre. Remets-le dans l'ordre pour que Reeborg fasse le parcours suivant (attention : souviens-toi que certaines lignes doivent être décalées vers la droite) :

Parcours en escalier de l'exercice 1

Position initiale :

Position initiale de Reeborg

Colle ta solution dans le devoir sur Teams

Pour copier :

Bouton pour copier le programme

Exercice 8#

Reeborg doit faire le tour du monde :

Parcours du tour du monde

Le programme suivant est proposé mais il est long :

avance()
avance()
avance()
avance()
avance()
avance()
avance()
avance()
avance()
tourne_a_gauche()
avance()
avance()
avance()
avance()
avance()
avance()
avance()
avance()
avance()
tourne_a_gauche()
avance()
avance()
avance()
avance()
avance()
avance()
avance()
avance()
avance()
tourne_a_gauche()
avance()
avance()
avance()
avance()
avance()
avance()
avance()
avance()
avance()
tourne_a_gauche()

Propose une solution plus « élégante » en définissant au moins une nouvelle commande et en faisant usage de l'instruction for pour répéter des instructions.

Sélectionne le monde Autour 1.

Colle ta solution dans le devoir sur Teams

Note

Dans tous les exercices à partir de maintenant, tu dois réfléchir comment définir des nouvelles commandes et utiliser les instructions de répétition pour écrire des programmes courts et le plus compréhensible possible.

Parfois un programme un peu plus long est plus facile à comprendre. Il faut donc trouver le bon équilibre !

Collection de jetons#

Certains aiment collectionner les timbres, d'autres collectionnent les pièces de monnaie ; Reeborg, lui, aime collectionner les jetons. Il utilise son imagination pour représenter toute sorte d'objet par des jetons. Il peut les ramasser lorsqu'ils sont par terre, ou les déposer, en utilisant les instructions suivantes :

prend()
depose()

Exercice 9#

Sélectionne le monde Jetons 1.

Il y a un jeton tout juste à côté de Reeborg avec un chiffre 1 en rouge à côté : le chiffre 1 indique qu'il n'y a qu'un seul jeton à cet endroit ; la couleur rouge indique que le jeton n'est pas à l'endroit désiré.

Dans le carré suivant, on voit une image d'un jeton en ton de gris plutôt qu'en couleur : ceci indique que Reeborg doit déposer un seul jeton à cet endroit.

Finalement, le carré suivant en vert pâle indique l'endroit où Reeborg doit terminer son programme.

Écris un programme pour accomplir cette tâche et colle ta solution dans le devoir sur Teams.

Est-ce que ton programme peut également, sans aucun changement, accomplir la tâche du monde Jetons 2 ?

La réponse devrait être non... mais, plus tard, tu apprendras à écrire un seul programme pouvant accomplir ces deux tâches.

Exercice 10#

Dans cet exercice, tu dois lire et comprendre le programme donné et le compléter !

Reeborg a un emploi : il livre le journal l'Étoile du nord. Plusieurs des clients de Reeborg ne vivent pas au rez-de-chaussée de leur immeuble. Pour ceux-ci, Reeborg doit suivre la procédure suivante :

  1. Prendre une copie du journal (représenté par une étoile jaune).

  2. Grimper le nombre d'étages requis pour rejoindre la porte du client.

  3. Laisser une copie du journal sur le seuil de porte (représenté par une étoile grise).

  4. Redescendre au rez-de-chaussée.

Le journal est représenté par une étoile. Reeborg prend l'étoile en bas à gauche et doit la déposer en haut à droite :

Livraison du journal

Choisis le monde Journal 0 et aide Reeborg à livrer le journal.

Tu dois pour cela tout d'abord comprendre puis adapter le programme suivant en utilisant les deux instructions prend() et depose() :

# Définitions de commandes
def tourne_a_droite():
    for i in range(3):
        tourne_a_gauche()

def avance_2_fois():
    for i in range(2):
        avance()

def demi_tour():
    for i in range(2):
        tourne_a_gauche()

def monte():
    tourne_a_gauche()
    avance()
    tourne_a_droite()
    avance_2_fois()

def descend():
    avance_2_fois()
    tourne_a_gauche()
    avance()
    tourne_a_droite()

# Programme
for i in range(5):
    monte()

demi_tour()

for i in range(5):
    descend()

Colle ta réponse dans le devoir sur Teams

Si 6 scies scient 6 citrons, 606 scies scient 606 citrons !#

Si seulement Reeborg pouvait prendre des décisions de lui-même, écrire des programmes serait tellement plus simple... OUPS ! J'ai oublié de te le mentionner : Reeborg PEUT prendre ses propres décisions !

La syntaxe Python pour prendre des décisions est la suivante :

if condition:
    instructions si la condition est vraie

Ceci permet à Reeborg de prendre des décisions.

Dans le monde Reeborg, les conditions possibles sont :

  • au_but() est vérifié si Reeborg est sur une des cases suivantes :

    Cases marquant le but

    Dans ce cas, on peut alors terminer l'exécution du programme en utilisant l'instruction termine().

  • transporte() est vérifié si Reeborg transporte quelque chose (une carotte par exemple).

  • rien_devant() / rien_a_droite() est vérifié s'il n'y a rien devant / à droite.

  • mur_devant() / mur_a_droite() est vérifié s'il y a un mur devant / à droite.

  • objet_ici() si un objet se trouve sur la case où est placé Reeborg.

Par exemple, pour éviter un obstacle, on pourra écrire :

if mur_devant():
    tourne_a_gauche()

Ou pour ramasser un objet s'il y en a un sur la case où se trouve Reeborg :

if objet_ici():
    prend()

Exercice 11a#

Dans cet exercice, tu dois lire et comprendre le programme donné et le compléter !

Ouvre le monde Récolte 1 :

Monde Récolte 1

Le programme ci-dessous permet à Reeborg de parcourir tout le champ de carottes.

Prends du temps pour le comprendre.

Ensuite, adapte-le pour que Reeborg récolte les carottes. Il faut bien réfléchir où placer les instructions pour ramasser les carottes. (Indice : il y a deux endroits où il faut changer le programme).

# Définition des commandes
def tourne_a_droite():
    for i in range(3):
        tourne_a_gauche()

def avance_2_fois():
    for i in range(2):
        avance()

def avance_5_fois():
    for i in range(5):
        avance()

def aller_au_depart():
    avance_2_fois()
    tourne_a_gauche()
    avance_2_fois()

def recolte_2_colonnes():
    avance_5_fois()
    tourne_a_droite()
    avance()
    tourne_a_droite()
    avance_5_fois()
    tourne_a_gauche()
    avance()
    tourne_a_gauche()

# Programme
aller_au_depart()
for i in range(3):
    recolte_2_colonnes()

Colle ta solution dans le devoir sur Teams

Exercice 11b#

Dans le monde Autour 1 - carottes, des carottes sont placées aléatoirement (à chaque exécution du programme, elles se trouvent à un endroit différent).

Monde Autour 1 - carottes

Voici ci-dessous un programme pour ce monde.

Réécris le programme pour qu'il soit plus court et plus facile à lire :

if objet_ici():
    prend()
avance()
if objet_ici():
    prend()
avance()
if objet_ici():
    prend()
avance()
if objet_ici():
    prend()
avance()
if objet_ici():
    prend()
avance()
if objet_ici():
    prend()
avance()
if objet_ici():
    prend()
avance()
if objet_ici():
    prend()
avance()
if objet_ici():
    prend()
avance()
tourne_a_gauche()
if objet_ici():
    prend()
avance()
if objet_ici():
    prend()
avance()
if objet_ici():
    prend()
avance()
if objet_ici():
    prend()
avance()
if objet_ici():
    prend()
avance()
if objet_ici():
    prend()
avance()
if objet_ici():
    prend()
avance()
if objet_ici():
    prend()
avance()
if objet_ici():
    prend()
avance()
tourne_a_gauche()
if objet_ici():
    prend()
avance()
if objet_ici():
    prend()
avance()
if objet_ici():
    prend()
avance()
if objet_ici():
    prend()
avance()
if objet_ici():
    prend()
avance()
if objet_ici():
    prend()
avance()
if objet_ici():
    prend()
avance()
if objet_ici():
    prend()
avance()
if objet_ici():
    prend()
avance()
tourne_a_gauche()
if objet_ici():
    prend()
avance()
if objet_ici():
    prend()
avance()
if objet_ici():
    prend()
avance()
if objet_ici():
    prend()
avance()
if objet_ici():
    prend()
avance()
if objet_ici():
    prend()
avance()
if objet_ici():
    prend()
avance()
if objet_ici():
    prend()
avance()
if objet_ici():
    prend()
avance()
tourne_a_gauche()

Colle ta solution dans le devoir sur Teams

Exercice 12#

Tu vas écrire un programme qui permet à Reeborg de réaliser ses tâches dans les mondes Jetons 1, 2 et 3.

Dans chacun de ces mondes, il y a un jeton sur une case et il faut aller déposer celui-ci sur la case suivante.

Une partie du programme a été écrite pour toi. Avant de réfléchir comment le compléter, essaye de l'exécuter dans ta tête et de comprendre ce qui se passe dans les 2 cas où Reeborg est arrivé au but quand il y a un objet à l'endroit où il se trouve.

L'instruction termine() permet de stopper le programme.

def avance_jusqua_tache_terminee():
    if au_but():
        # Ajouter 1 instruction
    avance()
    if objet_ici():
        # Ajouter 3 instructions

for i in range(42):
    # La valeur 42 a été choisie pour être sûr d'arriver au bout.
    # Nous verrons plus tard comment mieux faire.
    avance_jusqua_tache_terminee()

À toi de compléter le programme et de le tester dans les mondes Jetons 1, 2 et 3.

Colle ta solution dans le devoir sur Teams

Exercice 13#

Reprends le programme de l'exercice 11a.

Va dans le monde Récolte 2.

Ce monde est très similaire au monde Récolte 1 : on ne sait pas a priori combien de carottes il y a sur chaque emplacement. Cependant, on sait qu'il y a au maximum 3 carottes.

Monde Récolte 2

Réfléchis comment modifier le programme de l'exercice 11a pour qu'il fonctionne dans ce nouveau monde.

Fonctionne-t-il aussi dans le monde Récolte 1 ?