Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214
Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214
Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214
Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214
Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214
Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214
Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214
Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214
Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214
Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214
Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214
Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214
Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214
Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214
Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214
Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214
Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214
Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214
Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214
Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214
Table des matières
L'entrepôt et le robot cariste
Cet exercice permet de réviser les fondamentaux de la programmation.
On utilise une animation représentant un robot qui manipule des caisses dans un entrepôt.
Je vous fourni le fichier entrepot.py qui permet à l'animation de fonctionner. Vous n'avez pas besoin de connaître ou comprendre le détail du contenu de ce fichier. Il vous suffit de savoir comment vous en servir.
Le module
Exemple d'utilisation
Pour résoudre un problème, vous allez définir un script python, par exemple script.py. Ce script initialise l'animation et fait déplacer une caisse au robot.
On utilise souvent le mot script pour désigner un programme dans le cas de langages interprétés comme Python. L'idée est que l'intégralité du programme tient en un fichier très simple qui tiendrait sur une feuille de papier. On n'utiliserait pas le terme script pour un gros programme.
# script.py from entrepot import robot, docks robot.set_speed(10) docks.set_sortie(9) docks.set_caisses([2, 3, 2, 0, 0, 0, 5]) robot.prendre() robot.droite() robot.poser() robot.fin()
Pour que cela fonctionne vous devez enregistrer votre script et placer entrepot.py dans le même dossier que script.py.
Explications
- ligne 2 : on importe les objets
robotetdocksdu module fourni.robotreprésente le robot etdocksl'ensemble des compartiments. - lignes 4-6 : on définit les propriétés de l'entrepôt en indiquant comment sont réparties les caisses, où est la rampe de sortie…
- lignes 8-10 : le robot fait ce qu'il a à faire…
- ligne 12 : cette ligne permet de maintenir l'affichage de l'animation quand le programme est fini.
Les commandes disponibles
Concernant le robot
robot.position # donne la position du robot robot.gauche() # déplace le robot d'un compartiment à gauche robot.droite() # déplace le robot d'un compartiment à droite robot.prendre() # le robot prend l'éventuelle caisse située en-dessous de lui robot.poser() # le robot pose la caisse qu'il tient dans le compartiment robot.set_speed(10) # définit la vitesse d'animation. Ajustez selon la puissance du PC
Concernant les docks
docks.taille # nombre de compartiments
docks.sortie # position du dock de sortie, -1 s'il n'y en a pas
docks.occupation(i) # nombre de caisses dans le compartiment i
# compartiment courant si i pas précisé
docks.est_plein(i) # indique si le compartiment est complètement rempli
# compartiment courant si i pas précisé
docks.est_vide(i) # indique si le compartiment est vide
# compartiment courant si i pas précisé
docks.est_sortie(i) # indique si le compartiment est une rampe de sortie
# compartiment courant si i pas précisé
Aide
En console, après une première exécution, vous pourrez écrire :
>>> help(docks)
Vous verrez alors s'afficher l'aide indiquant toutes les fonctions utiles concernant docks. Idem pour robot.
Les problèmes
Les problèmes suivants sont progressifs.
Si vous implémentez une fonction dans l'un des problème, elle pourra resservir dans un autre.
Si vous avez déjà de bonnes notations de programmation, il est très probable que vous produisiez dès le début un programme pouvant répondre à plusieurs problèmes. C'est très bien. Les problèmes sont très découpés pour permettre à tous une progression en douceur.
Problème 1
# problème 1 from entrepot import robot, docks robot.set_speed(10) docks.set_sortie(9) # rampe de sortie dans le compartiment 9 docks.set_caisses([1]) # 1 caisse dans le compartiment 0 # amener la caisse à la rampe de sortie
Problème 2
# Problème 2 from entrepot import robot, docks robot.set_speed(10) docks.set_sortie(9) docks.set_caisses([5]) # 5 caisses dans le compartiment 0 # amener les 5 caisses à la rampe de sortiesortie.
Dans cette nouvelle version du problème, on peut bien sûr faire 5x la même chose que dans le problème 1, mais l'utilisation d'une boucle serait plus judicieuse.
Problème 3
# Problème 3 from entrepot import robot, docks from random import randrange # pour générer entier à aléatoire robot.set_speed(10) docks.set_sortie(9) docks.set_caisses([randrange(1, 5)]) # nombre de caisses aléatoire dans le compartiment 0 # amener les N caisses à la rampe de sortie
À présent, au moment de programmer, on ne sait pas combien il y aura de caisses dans le compartiment 0. Il faut donc programmer de façon plus générale.
Pensez à exécuter votre programme plusieurs fois pour voir s'il fonctionne pour différentes situations.
Fonction 1
La suite nécessite de savoir ce qu'est une fonction. Vous pouvez poursuivre si vous savez déjà, sinon il faudra y revenir plus tard dans le cours.
Écrire une fonction aller_au_compartiment(i) qui fait aller le robot au compartiment i, quelque soit le compartiment où il se trouve actuellement.
Problème 4
# Problème 4 from entrepot import robot, docks robot.set_speed(10) docks.set_sortie(9) docks.set_caisses([0, 2, 3]) # amener toutes les caisses à la rampe de sortie
Problème 5
# Problème 5 from entrepot import robot, docks from random import randrange robot.set_speed(10) docks.set_sortie(9) docks.set_caisses([randrange(5) for i in range(4)]) # état des compartiments aléatoire... # amener toutes les caisses à la rampe de sortie
Problème 6
Pour résoudre ce problème, il sera préférable que vous écriviez les fonctions suivantes :
compartiment_max()qui renvoie le numéro de compartiment contenant le plus de caisses.compartiment_min()qui renvoie le numéro de compartiment contenant le moins de caisses.
# Problème 6 from entrepot import robot, docks from random import randrange # pour générer entier à aléatoire robot.set_speed(10) docks.set_max(10) # augmente la capacité des compartiments docks.set_caisses([randrange(10) for i in range(20)]) # égaliser la hauteur des caisses dans les compartiments
Attention, pas de rampe de sortie dans cet exercice. On déplace les caisses d'un compartiment à l'autre afin d'égaliser les hauteurs.
