- Formations
- conversion_path Parcours & Formations
- science Projets
- data_object Exercices de code
- psychology Exercices IA
- quiz Quiz
- Articles
- rss_feed Blog
- sort_by_alpha Glossaire
- menu_book Guides
- help_center FAQ
- media_link Ressources
- Communauté
- groups La communauté
- forum Questions
- live_tv Mentorats
- science Projets mensuels
- Formations
- conversion_path Parcours & Formations
- science Projets
- data_object Exercices de code
- psychology Exercices IA
- quiz Quiz
- Articles
- rss_feed Blog
- sort_by_alpha Glossaire
- menu_book Guides
- help_center FAQ
- media_link Ressources
- Communauté
- groups La communauté
- forum Questions
- live_tv Mentorats
- science Projets mensuels
Deviens membre Premium magic_button
Débloque cette session en devenant Membre Premium 🚀
Inscris-toi
(c'est gratuit !)
Un compte est nécessaire pour participer aux discussions.
Créer un compte person00:00:00 :Dans cette partie, on va voir un des concepts les plus importants de la programmation qui va nouspermettre d'automatiser les choses. J'ai parlé des boucles. Les boucles, ça va vous permettre de
00:00:10 :répéter une opération un certain nombre de fois. Donc vous avez deux types de boucles, les bouclesfor et les boucles while. Les boucles for, c'est des boucles qui vont itérer sur quelque chose,
00:00:19 :donc sur ce qu'on appelle un itérable, par exemple une liste. Donc vous allez par exemple dans Mayaavoir une liste d'objets et on va pouvoir itérer et donc boucler sur cette liste d'objets.
00:00:29 :On a d'autres types de boucles, les boucles while, qui vont pouvoir boucler tant qu'unecondition est vraie. Ça peut être assez dangereux car avec les boucles while, on peut tomber dans
00:00:39 :ce qu'on appelle une boucle infinie si jamais la condition est toujours vraie et ne change jamais.Dans cette partie, on ne va pas s'intéresser aux boucles while. Ça peut être intéressant en 3D
00:00:48 :dans certains cas, par exemple si vous êtes à l'intérieur d'une hiérarchie. Donc par exempledans l'outliner ici, si vous avez un enfant et que vous souhaitez remonter jusqu'aux parents,vous ne pouvez pas savoir d'avance combien de liens il va y avoir pour remonter jusqu'aux parents.
00:01:01 :Donc une boucle while dans ce cas-ci peut être intéressante puisque vous allez remonter tantque vous allez retrouver un parent et quand vous n'aurez plus de parents, donc que vousserez au niveau ici de l'outliner, au niveau principal, le premier niveau, et bien ça veutdire que vous serez au niveau du parent le plus élevé. Donc ça c'est un cas de figure dans
00:01:18 :lequel une boucle while est vraiment très intéressant. Dans cette vidéo, nous on vas'intéresser aux boucles for. Donc jusqu'à présent, on a par exemple créé un cube et on a créé
00:01:26 :un seul cube. Maintenant imaginez qu'on souhaite répéter cette opération. Alors on pourrait trèsbien copier-coller la ligne de code, prendre le mc.polycube, le mettre 4-5 fois à la suite
00:01:36 :comme ça, et ainsi créer 5 cubes les uns sur les autres. Ce n'est pas très efficace, vous enconviendrez. En général, en programmation, on essaye de rester dry, donc dry qui veut dire
00:01:45 :don't repeat yourself, ça veut dire qu'on va essayer de ne pas répéter les lignes de code.Donc ce que je peux faire ici, c'est créer une boucle for, et pour répéter une opération uncertain nombre de fois, on va utiliser un objet qui est l'objet range. Donc en fait, cet objet,
00:01:58 :vous voyez, on peut le créer avec la fonction range, et ça va nous retourner un objet de typerange. Là vous voyez, il part de 0 par défaut et il va jusqu'à la valeur qu'on lui donne. Donc ça
00:02:08 :en fait, qu'est-ce que c'est ? C'est tout simplement une liste. Donc vous pouvez entourer cet objet dela fonction liste ici pour l'afficher sous forme de liste. Donc si j'exécute tout ça, vous allez
00:02:16 :voir qu'on a une liste qui contient 10 nombres, donc 0, 1, 2, 3, 4, 5, 6, 7, 8, 9. Par défaut,on va commencer à 0, mais on peut changer l'élément de départ. On peut dire qu'on va commencer à 5 et
00:02:25 :aller jusqu'à 10 par exemple. Et là, on a une liste qui va de 5 jusqu'à 9. Donc le deuxièmeélément ici est exclusif. On va commencer à 5 et on va s'arrêter un nombre avant le deuxième ici,
00:02:36 :donc un nombre avant le 10. Donc ça, c'est très pratique puisqu'on va pouvoir, avec cette fonctionrange, créer rapidement une liste sur laquelle on va pouvoir itérer. Pour itérer, on utilise
00:02:45 :donc une boucle for. On va dire pour i in range de 10, on met deux points et ensuite à la ligne,on va mettre une indentation, donc que je fais avec la touche tab. Vous pouvez également faire
00:02:56 :quatre espaces, ça c'est la grosse guerre dans les programmeurs entre les tabulations et lesespaces. Dans mon cas, je préfère utiliser une tabulation. Donc là, qu'est-ce qu'on a fait ici ?
00:03:05 :On a créé une boucle et on dit qu'on boucle sur range de 10. Donc en fait ici, on dit qu'on boucletout simplement sur une liste avec 0, 1, 2, 3, 4, 5, 6, 7, 8 et 9. Donc vous conviendrez
00:03:15 :que c'est un peu plus rapide d'écrire range 10 plutôt que d'écrire cette liste à chaque fois.Imaginez qu'on souhaite boucler 100 fois, ça serait un peu long d'écrire une liste avec 100éléments ici à l'intérieur. Donc pour ça, on peut utiliser range et très rapidement, comme ça,
00:03:27 :créer une liste de 100 éléments. Donc si j'exécute tout ça, vous allez voir qu'on va créer 100 cubes.Et vous voyez, c'est très rapide. Avec seulement deux lignes de code ici, on arrive à répéter une
00:03:37 :opération 100 fois dans notre scène. Donc au niveau de la syntaxe, qu'est-ce qu'on a ici ? On a lemot for, donc on dit qu'en fait on boucle sur, donc in cette liste, on assigne chaque itération,donc chaque élément sur lequel on itère, dans cette variable i. Donc ce que je vais faire ici,
00:03:53 :c'est printer i et vous allez voir en fait, si j'exécute ce code, qu'on va afficher les élémentsde notre liste. Donc là, on affiche 0, 1, 2, 3, 4, 5, 6, etc. jusqu'au nombre 99. Donc ça en fait,
00:04:04 :ça va prendre la valeur de l'itération actuelle. Par exemple ici, si je mets Maya, donc on peutitérer sur cette chaîne de caractère, puisqu'une chaîne de caractère, ça n'est rien d'autre qu'unesuite de caractères. Donc c'est un objet itérable sur lequel on peut boucler. Donc là, ce que ça va
00:04:18 :faire, c'est que i, il va être égal à m, ensuite il va être égal à a, à y et à a. Donc si jeréexécute le code, vous voyez que cette fois-ci, on affiche m, a, y, a. Donc i va prendre à chaque
00:04:30 :fois une valeur différente. Ça c'est très pratique, vous pouvez commencer à imaginer dansquel cas on pourrait l'utiliser. Si je reviens sur mon range de 10, on va pouvoir utiliser cette
00:04:39 :valeur, par exemple, pour déplacer nos cubes. Parce que pour l'instant, si je fais un mc polycube,que j'exécute cette ligne de code, on a 10 cubes qui se créent les uns sur les autres. Ce qu'on
00:04:48 :va pouvoir faire, c'est récupérer le cube que l'on crée et le déplacer avec un setAttribute.Donc je vais assigner ce que je crée ici, donc le cube, dans une variable que je vais appeler cube.
00:04:56 :Si vous vous souvenez bien, quand on fait ça, donc si j'exécute juste cette ligne de code,on va récupérer dans cube une liste qui contient le nom de mon cube et le nom de l'anneau depolycube. Donc je vais pouvoir récupérer ensuite le nom du cube et faire un setAttribute sur la
00:05:11 :translation. Donc pour ça on va faire mc.setAttr, donc setAttribute. On va faire un string et dansla chaîne de caractère, on va mettre notre cube, donc ici en tracolade le cube. On va récupérer
00:05:23 :avec les crochets le premier élément de la liste, donc le nom du cube ici, pcube1, et on va mettreaprès .translate et on va le déplacer sur l'axe des X. On va à la suite de cette chaîne de
00:05:35 :caractère et là on va mettre la valeur que l'on souhaite assigner à cet attribut. Donc là si onmet 1, on va juste assigner 1 à tous les cubes. Nous ce qu'on va mettre à la place ici, c'est
00:05:44 :notre variable i. Donc cette variable elle va changer à chaque fois qu'on va boucler sur notreobjet ici. Donc au début ça va être égal à 0, ensuite à 1, à 2, à 3, à 4, etc. jusqu'à 9. Donc je
00:05:55 :vais supprimer mon cube, je relance tout ça, et là vous voyez qu'on a bien 10 cubes les uns à lasuite des autres. Donc le premier cube ici qui a 0, le deuxième qui a 1, 2, 3, 4, 5, 6, etc. jusqu'à
00:06:05 :9. Et donc vous voyez là toute la puissance de la programmation puisqu'il me suffit de changer lerange, de mettre par exemple 25 à la place de 10, et voilà j'ai répété l'opération 25 fois avec lescubes qui se déplacent sur l'axe des X. On peut faire plein de choses créatives à partir de ça.
00:06:20 :On pourrait se dire par exemple qu'on va multiplier cette valeur par 2, j'exécute et là vous voyezqu'on a rajouté un espace entre chacun des cubes. On pourrait très bien même mettre une boucle à
00:06:29 :l'intérieur d'une autre boucle, et à chaque fois il va falloir faire bien attention au niveaud'indentation ici. Puisqu'en fait ce niveau d'indentation ce qu'il fait c'est qu'il signifie
00:06:36 :que ces lignes de code elles appartiennent à cette boucle. Donc je pourrais créer une autreboucle ici, dire pour Y par exemple in range de 10, je mets un 2 points, je sélectionne tout ça,et j'indente donc avec la touche tabulation toute cette partie du code à l'intérieur de ma boucle.
00:06:53 :Donc là j'ai une première boucle qui va boucler 10 fois. Dans cette boucle on va reboucler unedeuxième fois, cette fois-ci 25 fois, et là on va créer un cube et on va déplacer notre cube.
00:07:03 :Donc là ce que je peux faire c'est répéter cette opération, ce setAttribute, sauf quecette fois-ci on va enlever les multiplications juste pour avoir quelque chose un peu plus clair.
00:07:11 :Cette fois-ci je vais le déplacer sur l'axe par exemple des Z. Je vais modifier un petit peu mesvariables, j'avais mis Y mais à la place je vais mettre X et Z pour garder le nom des axes. Et
00:07:21 :donc là on a X et Z et je vais remplacer les Y par X et Z. Je relance tout ça et là vousvoyez qu'on a une grille de cubes. Donc ce qu'on a fait ici c'est qu'on va boucler 10 fois sur notre
00:07:33 :range de 10. Donc on va avoir X qui va être égal à 0, 1, 2, 3, 4, 5, 6, 7, 8, 9. A chacune de ces
00:07:38 :itérations on va boucler de nouveau avec Z qui va boucler donc sur range de 25. Donc on va avoir Zqui va être égal à 0, 1, 2, 3, 4, 5, etc. jusqu'à 24, puisque le 25 ici est exclusif, souvenez-vous.
00:07:49 :Et à chaque fois on va créer un cube et le déplacer en X et en Z. Si vous voulez voir ceque ça donne au niveau des coordonnées on peut faire un print de X et de Z et je vais mettre 10ici pour avoir quelque chose d'un peu plus cohérent au niveau des deux coordonnées. Et je vais commenter
00:08:03 :ces lignes de code pour ne pas créer des cubes juste pour vous montrer les coordonnées. Donc pourcommenter une ligne de code on peut mettre ici le symbole dièse et ça va faire en sorte que ceslignes de code ne seront pas exécutées. Donc c'est pratique comme ça on les garde dans notre script,
00:08:14 :on n'a pas besoin de les effacer mais au moins elles ne sont pas exécutées. Donc je relance tout çaet là vous voyez qu'on a bien nos coordonnées donc notre grille de coordonnées. On a notre 0 ici
00:08:23 :donc qui correspond au X qui va rester à 0 les dix premières itérations pendant que Z lui va êtreincrémenté 0 1 2 3 4 5 6 7 8 9. Ensuite on va incrémenter X de 1 donc on va rester à 1 pendant
00:08:34 :dix itérations pendant que Z lui va repartir à 0 et refaire la boucle complète de 0 à 9 etc etc.Ensuite on va avoir 2 0 1 2 3 4 5 6 7 8 9, 3 0 1 2 3 4 5 6 7 8 9 etc etc. D'accord ? Donc ici il faut
00:08:48 :vraiment comprendre qu'on peut avoir différents niveaux d'indentation, que c'est très important,c'est grâce à ces niveaux d'indentation que Python va savoir quelles lignes de code il fautexécuter et il faut bien entendu toujours avoir quelque chose à l'intérieur de vos différentsblocs. Si je ne mets rien ici là je vais avoir une erreur, si j'exécute ce code vous voyez il nous
00:09:05 :dit qu'il s'attendait à avoir quelque chose et que là il n'y a rien. Si vous voulez ne rien mettrevous pouvez mettre le mot pass et ça va avoir comme effet en fait que votre script ne planterapas donc là si je relance ça fonctionne c'est juste qu'il ne se passe rien. Ce mot c'est juste
00:09:17 :en fait un placeholder si vous voulez en fait on fait juste le mettre pour dire qu'on a quelquechose on a du code qui est écrit mais ce code il ne fait rien. Donc voilà pour le principe des
00:09:26 :boucles, n'oubliez pas au niveau de la syntaxe les deux points à chaque fois que vous avez des deuxpoints en Python ici ça veut dire que quand vous allez à la ligne vous allez avoir une tabulationet vous remarquez d'ailleurs par la même occasion que Maya la met automatiquement. Donc si je reviens
00:09:38 :ici que j'appuie sur entrer automatiquement Maya va mettre cette indentation ici. Donc normalementvous n'avez pas trop besoin d'y penser mais faites quand même bien attention puisque si je ne metspas d'indentation, si je fais juste un print par exemple de x ici sans faire d'indentation làencore on va avoir un problème puisqu'il s'attendait à avoir donc un indented block. Donc là je peux
00:09:56 :remettre un pass et là vous allez voir que si j'exécute ce script j'ai 9 qui est affiché. Pourquoi ?Et bien tout simplement parce qu'on va boucler dix fois x va être égal à 0 1 2 3 4 5 6 7 8 9 etune fois qu'on a terminé cette boucle on va passer au print ici qui est en dehors de la boucle qui va
00:10:13 :donc être exécuté une seule fois et qui va afficher la dernière valeur de x donc dans ce cas-ci 9. Onpeut coupler ça à ce qu'on a vu dans la partie précédente donc la fonction input. On pourrait
00:10:23 :faire une variable nombre ici par exemple et dire entrer le nombre de cubes. On termine notre chaînede caractère et là on pourrait mettre notre variable nombre ici à l'intérieur de range etremettre notre mc.polycube. Et là si j'exécute ce script on va me demander donc combien de cubes
00:10:41 :je veux. Je vais dire que je veux 12 cubes. Je clique sur ok et là j'ai un problème puisquestring object alors vous voyez dans ce cas-ci on a le fameux problème j'y avais pas pensé puisqueinput va nous retourner une chaîne de caractère donc c'est le fameux problème dont je vous avais
00:10:54 :parlé. Quand on avait créé notre polycube on avait pu passer directement à 8 notre valeur ici quiétait en chaîne de caractère et ça ne posait pas de problème. Dans ce cas-ci évidemment comme on
00:11:02 :lui passe un nombre en fait on va lui passer ici par exemple la chaîne de caractère 10 et lafonction range on ne peut pas lui passer directement une chaîne de caractère. Donc là il va falloir
00:11:10 :convertir cette chaîne de caractère donc cette variable nombre ici en nombre avec la fonctionint donc on fait int de nombre. On relance tout ça, on dit qu'on veut 12 cubes, je clique sur ok et
00:11:20 :là j'ai bien mes 12 cubes qui sont créés dans ce cas-ci tous au même endroit mais c'est vraimentjuste pour l'exemple. Donc voilà pour les boucles c'est vraiment comme je vous dis quelque chose qui
00:11:28 :est très important vous allez en créer tout le temps. Dans ce cas-ci on l'utilise pour bouclerun certain nombre de fois pour créer un certain nombre de cubes. Bien sûr ça pourrait être
00:11:36 :utilisé pour plein d'autres choses comme je vous disais par exemple pour boucler sur la sélection.Donc la sélection on peut la récupérer avec mc.ls et c'est une fonction à laquelle on va
00:11:45 :pouvoir passer le paramètre sl donc sl pour selected on va lui dire true et là si je créeplusieurs objets donc je vais créer plusieurs cubes ici, je les sélectionne et si j'exécutecette commande ici vous voyez qu'on récupère une liste avec les deux objets de sélectionné. Donc
00:12:00 :là encore ça donne une liste, cette liste c'est un objet itérable donc je pourrais prendre cetteligne ici la mettre à la place de mon range et ici à la place je fais par exemple un print de x etvous allez voir que comme ça on peut boucler sur notre sélection. Donc encore un autre exemple avec
00:12:15 :les boucles qui nous permet de faire des opérations sur les objets sélectionnés dans ce cas-ci donclà je fais juste un print, j'exécute ces lignes de code et là j'ai bien affiché le nom des deuxobjets qui sont sélectionnés. Si je n'en sélectionne qu'un et que je réexécute ce script cette fois-ci
00:12:28 :je n'ai que le p3 qui est affiché. Ok donc voilà pour les boucles il y a beaucoup de choses qu'onpeut faire avec comme je vous dis, dans les parties qui vont suivre on va avoir de plus enplus d'exemples avec ces boucles qui vont vous permettre de voir dans quel cas de figure vous
00:12:40 :pouvez les utiliser. Pour l'instant je vous conseille de vous entraîner avec la fonctionrange, d'essayer de faire juste des prints, de faire des cubes, des sphères, de les déplacer,d'utiliser cette variable que vous créez ici pour l'utiliser à l'intérieur de votre boucle etmodifier ce que vous faites donc dans votre boucle. Donc faites des tests avec tout ça pour vous
Ce n'est pas fini...
✋
Tu as complété % du parcours 🔥
Termine l'intégralité de la formation pour pouvoir débloquer ton attestation de réussite.