Introduction à la programmation Python pour les animateurs maya | Anim TD | Skillshare

Vitesse de lecture


1.0x


  • 0.5x
  • 0.75x
  • 1 x (normale)
  • 1.25x
  • 1.5x
  • 1.75x
  • 2x

Introduction à la programmation Python pour les animateurs maya

teacher avatar Anim TD, Technical Education for VFX & Animation

Regardez ce cours et des milliers d'autres

Bénéficiez d'un accès illimité à tous les cours
Suivez des cours enseignés par des leaders de l'industrie et des professionnels
Explorez divers sujets comme l'illustration, le graphisme, la photographie et bien d'autres

Regardez ce cours et des milliers d'autres

Bénéficiez d'un accès illimité à tous les cours
Suivez des cours enseignés par des leaders de l'industrie et des professionnels
Explorez divers sujets comme l'illustration, le graphisme, la photographie et bien d'autres

Leçons de ce cours

    • 1.

      Introduction

      0:44

    • 2.

      Aperçu de l'éditeur de script

      7:47

    • 3.

      Votre premier programme Python : bonjour Maya

      11:28

    • 4.

      Intro à la bibliothèque de disques et aux importations

      6:56

    • 5.

      Projet 1 - Outil de Rigging de prop : Intro

      1:02

    • 6.

      Pause d'outil

      3:47

    • 7.

      Créer l'outil

      7:25

    • 8.

      Modification du contrôle

      11:38

    • 9.

      Plongée profonde - Aide et documentation

      9:03

    • 10.

      Travailler avec des noms et des listes de nœuds

      9:54

    • 11.

      Extension de l'outil par des déclarations "if"

      18:49

    • 12.

      Plongée profonde - Déclarations et booleans

      8:46

    • 13.

      Introduction aux fonctions

      29:00

    • 14.

      Transformer le code en une fonction

      14:23

    • 15.

      PyCharm - Installer et configurer

      10:15

    • 16.

      Créer un module

      10:11

    • 17.

      Plongée profonde - Fonctions

      31:51

    • 18.

      Projet 2 - Outil de transfert de pose : introduction et panne

      11:17

    • 19.

      espaces de noms et listes

      6:12

    • 20.

      Sélection et boucle pour

      10:12

    • 21.

      Aperçu des loops

      3:09

    • 22.

      Obtenir des attributs

      20:03

    • 23.

      Stocker la dose - Intro aux dictionnaires

      10:19

    • 24.

      Stocker la dose - Construire le dictionnaire de la dose

      23:07

    • 25.

      Appliquer la pose

      33:14

    • 26.

      Créer la fonction "Transfert" principale

      22:50

    • 27.

      Intro aux interfaces d'apprentissage

      21:06

    • 28.

      Créer l'interface utilisateur

      11:59

    • 29.

      Recap de projet

      1:40

    • 30.

      Plongée profonde

      23:43

    • 31.

      Plongée profonde - Loops

      15:05

    • 32.

      Plongée profonde - Listes, Tuples, ensembles

      32:23

    • 33.

      Plongée profonde - Dictionnaires

      23:33

    • 34.

      Projet final - Bibliothèque de Poses : Intro

      1:54

    • 35.

      Créer le package Python

      5:16

    • 36.

      Travailler avec des fichiers

      10:51

    • 37.

      Enregistrer des poses dans des fichiers JSON

      9:38

    • 38.

      Lire les poses de fichiers JSON

      13:57

    • 39.

      Créer l'interface utilisateur

      30:07

    • 40.

      Connecter la fonctionnalité et partager vos outils

      45:00

  • --
  • Niveau débutant
  • Niveau intermédiaire
  • Niveau avancé
  • Tous niveaux

Généré par la communauté

Le niveau est déterminé par l'opinion majoritaire des apprenants qui ont évalué ce cours. La recommandation de l'enseignant est affichée jusqu'à ce qu'au moins 5 réponses d'apprenants soient collectées.

157

apprenants

3

projets

À propos de ce cours

Bienvenue dans cette introduction à la programmation Python pour les animateurs de Maya !

Apprenez à créer vos propres outils, à automatiser des parties fastidieuses et ennuyeux de votre flux de travail et à vous aider ainsi que votre équipe à travailler beaucoup plus efficacement.

Comme le titre l'indique, le cours sera plus intéressant aux animateurs, ainsi que aux artistes de la disposition et de la implies, principalement en raison de la nature des projets, mais toute personne travaillant à Maya pourrait profiter des cours s'ils veulent apprendre la programmation python.

Que vous souhaitiez simplement améliorer votre travail quotidien ou envisager de passer à un rôle technique, je suis sûr que ce cours vous permettra de progresser dans votre objectif !

Qu'est-ce qui est couvert ?

  • Concepts de programmation fondamentaux en Python : boucles, si les déclarations, les fonctions, les listes, les dictionnaires, etc.
  • Techniques et pratiques fondamentales : même si c'est un cours pour débutants, vous apprendrez quelques pratiques exemplaires que les TDs et les développeurs professionnels utilisent .
  • Bibliothèque de disques de Maya : les compétences que vous allez acquérir sont de vastes compétences en programmation, mais les projets utilisent beaucoup la bibliothèque de disques étant donné que les outils en cours de création sont pour Maya.
  • Outils de production : vous terminerez le cours avec les outils réels que vous pouvez utiliser dans votre travail.
  • UIs : vous apprendrez à créer des UI en utilisant les bibliothèques intégrées de Maya.

Qu'est-ce qui n'est pas couvert ?

  • Les cours de python : les cours sont un élément essentiel de Python, et ils peuvent être inclus dans le futur, mais vous pouvez créer des outils et des scripts très puissants sans eux. C'est pour cela que vous ne les avez pas enseignés dans ce cours. Cela dit, une fois que vous apprenez les concepts couverts dans ce cours, vous serez en mesure de comprendre les cours facilement.
  • PyQt : Qt nécessite une bonne compréhension des cours, et c'est un cadre d'interface utilisateur plus avancé qui peut même être utile de suivre un cours distinct. Pour ce cours d'introduction, l'accent est mis sur les fonctionnalités d'interface utilisateur de la bibliothèque de cmds, qui sont encore très utiles et plus faciles à maîtriser pour quelqu'un qui vient de commencer à apprendre.

À qui s'adresse ce cours ?

  • Artistes de Maya : Ce cours ne vous apprendra pas à utiliser le maya, vous pouvez apprendre de nouveaux conseils de Maya, mais on suppose que vous avez des connaissances de base de Maya (bien que vous n'avez pas besoin d'être avancé).
  • Composer des débutants ou des personnes avec une certaine connaissance de base de Python.
  • Les programmeurs qui cherchent à se familiariser avec Python pour Maya. Le contenu est destiné aux débutants, mais les projets pourraient aider quelqu'un à se familiariser avec Maya et ses bibliothèques.

À qui s'applique ce cours PAS ?

  • Intermédiaire à les programmeurs avancés : si vous avez déjà une bonne compréhension des concepts comme les fonctions, les structures de données de base, la mutabilité, pour les loops, etc., vous pouvez bénéficier d'un cours plus avancé.

Meilleure façon d'aborder le cours :

  • Suivre les projets dans le ordre : les projets sont conçus pour introduire de nouveaux concepts naturellement comme ils sont nécessaires, du plus fondamental au plus complexe, et chaque projet réutilisera les connaissances précédentes.
  • Plongées profondes : les plongées profondes vous permettent de faire une pause du projet pour vous plonger plus en profondeur dans un sujet spécifique. Ils sont placés après qu'un concept a été introduit, vous voudrez peut-être les regarder immédiatement après avoir appris le concept, mais vous pouvez également les traiter comme une bibliothèque de référence pour revenir à l'avenir.
  • Code source : Gardez un œil sur les ressources de chaque conférence, vous aurez la possibilité de télécharger les fichiers avec le code source pour une partie du projet.
  • Horodatages vidéo : malheureusement cette plateforme n'offre pas de correctifs sur les vidéos, mais vous pourrez télécharger des fichiers texte (en ressources) avec des codes de temps pour les points importants du cours.
  • Quizz et exercices : vous trouverez des questionnaires et des exercices de codage après quelques conférences, ceux-ci sont facultatifs, mais un excellent moyen de pratiquer

FAQ

  • Puis-je devenir un TD avec ce cours ?
    • C'est un cours de débutant qui ne suffit peut-être pas pour trouver un emploi en tant que TD, mais il vous donnera certainement une base solide pour continuer à apprendre ce dont vous avez besoin.
  • Cela va-t-il aider ma carrière ?
    • Cela pourrait pourvoir, mais cela dépend de vos objectifs, cela fera de vous un atout en tant que quelqu'un qui a des compétences à la fois artistiques et techniques. Si vous vous lancez dans une carrière technique, cela vous permettra de poursuivre votre carrière en bonne et due forme, ce qui peut conduire à une carrière très gratifiante, stable et bien rémunéré.
  • Puis-je inclure ce cours sur mon LinkedIn ?
    • Ce n'est pas une certification (encore), mais il pourrait certainement vous servir de mentionner que vous terminez ce cours de Python.
  • Que faire si je suis un étudiant et que je ne connais pas très bien l'animation ou Maya ?
    • C'est bon, vous n'avez pas à être un professionnel et non un utilisateur avancé. Comprendre les bases de base comme le parcours du viewport et la création d'un cube vous permettra de commencer, il se peut que vous ne soyez pas familier avec des références de rig mais vous pourrez facilement les apprendre à partir d'un tutoriel en ligne gratuit.
  • Puis-je utiliser une version Maya plus ancienne ?
    • Vous pouvez, la plupart des commandes Maya fonctionneront toutes, mais il n'y a pas de garantie que tous les vont le faire. Si tel est le cas, vous pouvez utiliser la section Q&A (ou une recherche google rapide) pour obtenir de l'aide.
  • C'est juste pour les animateurs ?
    • Pas forcément. Les projets sont liés à l'animation, ce qui sera beaucoup plus familier avec quelqu'un qui travaille avec l'animation, la disposition ou le gréement que avec quelqu'un qui se concentre sur l'éclairage par exemple, mais les concepts de programmation actuels sont applicables à tous les ministères.

Rencontrez votre enseignant·e

Teacher Profile Image

Anim TD

Technical Education for VFX & Animation

Enseignant·e

Hi! I'm Fernando, a technical director with a passion for helping artists work better and more efficiently.

 

As a TD I've worked on films and tv shows such as Once Upon a Time, Arrow, The Lego Movie 2, Peter Rabbit 2, DC League of Super-Pets and more.

 

Before becoming a TD I was a 3D animator, I loved animation but I also fell in love with the power of programming which launched me into the long and tedious process of figuring out how to create things with Python as an artist. That, along with the many times I was asked by other animators "how do I learn coding?", is why I decided to create this course.

 

I've been through that challenging learning journey, now I'm here to help you with it!

<... Voir le profil complet

Level: Beginner

Notes attribuées au cours

Les attentes sont-elles satisfaites ?
    Dépassées !
  • 0%
  • Oui
  • 0%
  • En partie
  • 0%
  • Pas vraiment
  • 0%

Pourquoi s'inscrire à Skillshare ?

Suivez des cours Skillshare Original primés

Chaque cours comprend de courtes leçons et des travaux pratiques

Votre abonnement soutient les enseignants Skillshare

Apprenez, où que vous soyez

Suivez des cours où que vous soyez avec l'application Skillshare. Suivez-les en streaming ou téléchargez-les pour les regarder dans l'avion, dans le métro ou tout autre endroit où vous aimez apprendre.

Transcription

1. Introduction: Bienvenue dans cette introduction à la programmation Python. Je m'appelle Fernando Ortega. Je suis directeur technique dans l'industrie de l'animation et des effets visuels, ainsi qu'un ancien animateur 3D. Dans ce cours, je vais vous apprendre les bases du codage en Python en créant une série de jeux amusants. Vous avez parlé d' outils intégrés à Maya. Mais même si les projets que nous allons créer sont centrés sur l' animation dans Maya, les compétences que vous allez acquérir, nos compétences en programmation sont parfaitement applicables à d'autres départements, à d' autres logiciels et même à d'autres langages de programmation. À la fin de ce cours, vous aurez les compétences et la capacité nécessaires pour créer vos propres outils et rendre votre propre flux de travail beaucoup plus efficace. Merci de vous joindre à nous. Allons-y. 2. Aperçu de l'éditeur de script: Familiarisons-nous avec l'éditeur de script intégré à Maya. Tout d'abord, comment le trouver ? Au fait, c'est mon annonce 2020. Mais ce que je vais vous montrer est pratiquement le même dans toutes mes aversions. Pour ouvrir l'éditeur de script , vous pouvez le faire via ce bouton situé dans le coin inférieur droit ou depuis le menu Windows. Rédacteurs généraux et grattez-la ou quelle est cette erreur descriptive est l'outil de Maya pour écrire, exécuter. Ou je montre la sortie du code que vous écrivez ou du code ou des commandes qui sont exécutés lorsque vous utilisez Maya. Il comporte donc deux parties principales. La première est la fenêtre de script, qui est celle en bas où se trouve mon curseur. C'est ici que vous écrivez le numéro de code. Il s'agit de la fenêtre de sortie qui affichera le résultat de ce code. Alors écrivons quelque chose. Faisons un peu de calcul. Deux plus deux, quelque chose de très simple. Maintenant, c'est un peu petit. Nous pouvons appuyer sur la touche Ctrl , sur la molette et sur la masse pour l'agrandir un peu. C' est la même chose qui apparaît dans la fenêtre de sortie que je vais vous montrer dans une seconde. Donc, pour exécuter votre code, supposons que nous voulions faire ce petit calcul ici. Il existe quelques options, quelques façons d'exécuter le code. L'un d'eux se fait via ce bouton Play. Cela s'appelle exécuter. Vous voyez, encore une fois, je vais l'agrandir un peu à l'aide la touche Ctrl, de la souris et de la molette de la souris. Vous verrez que Maya vous montre toujours le code que vous exécutez. Et puis le résultat de ce code. Cela peut être un peu confus au début, mais vous vous y habituerez très rapidement. Vous remarquez donc que votre code a disparu ici. Si cela vous arrive, ne vous inquiétez pas, appuyez simplement sur Control Z ou Control Z pour le récupérer. Maintenant, le moyen le plus simple d'éviter cela est simplement de surligner votre code. J'utilise généralement les touches de raccourci Control a pour tout sélectionner , puis je clique sur le bouton Exécuter. À exécuter sans cliquer sur ce bouton. Vous pouvez utiliser la touche Entrée du pavé numérique ou cliquer sur Contrôle et Entrée pour exécuter ce code. Une autre façon d'exécuter le code sans le faire disparaître est d' utiliser ce bouton Double Play. Cela ressemble à jouer à des icônes. Il fera de même, mais il le fera, il ne supprimera pas votre code. Cela dit, comme vous êtes généralement avec les mains sur le clavier, je trouve qu'il est facile d'appuyer sur Control a Control Enter pour exécuter le code. Maintenant que nous sommes en train de surligner, permettez-moi d'écrire une autre ligne de code ici. C'est juste un calcul de plus. Dans Maya, vous pouvez soit tout gérer, comme vous pouvez le voir. Une fois de plus, il m'a donné le décodeur et j'ai couru jusqu'ici. Et puis le résultat pour chaque code de ligne. Mais vous pouvez également simplement surligner une seule ligne, par exemple ici, Control Enter pour exécuter cette ligne. Et il ne fait que lancer l'exécution de cette ligne. Ainsi, la fenêtre de sortie, comme vous le voyez, affiche le code que vous exécutez, mais elle montre également ce qui se passe dans Maya. Donc, par exemple si je devais créer un cube puis sélectionner le cube , vous verrez que tout ce que je fais est affiché dans cette fenêtre de sortie. Ce qui est génial. C'est un moyen de connaître les commandes dont Maya a besoin pour créer un cube. Par exemple, à un moment donné, cette fenêtre de sortie sera un peu encombrée. Comme tu peux le voir. Effacez cela avec ce bouton ici, effacez l'historique. Et avant de passer à autre chose, je tiens à vous le montrer. Comme je l'ai dit, ce que vous faites dans Maya est affiché ici, mais tout n' est pas affiché. Par exemple, si je change mon mode d'ombrage via ce menu, vous verrez qu'il change à l'écran. Je le refais. Changements dans la fenêtre d'affichage, désolé. Mais cela ne vous dit pas vraiment ce qui s'est passé. Il existe un moyen d'afficher plus d' informations provenant de Maya. Cela s'appelle Echo all Commands. C'est ce bouton ici. Et cela va montrer encore plus de choses qui peuvent devenir un peu verbeuses. Comme vous pouvez le voir, tout ce que je fais est publié ici. Cela peut être un peu verbeux, comme je l'ai dit, mais il est parfois utile de savoir ce qui se passe à l'intérieur du capot. Je vais donc l' éteindre pour le moment. Effacez à nouveau ma fenêtre de sortie avec ce bouton. Ici, vous avez probablement remarqué ces onglets, ce sont des onglets MEL. Une fois de plus, nous nous concentrons sur Python. Nous allons donc nous en tenir à l'onglet Python. Vous pouvez créer de nouveaux onglets à l'aide de ce bouton plus ici. Créons un autre onglet Python. Nous allons juste pulvériser une fonction. Si vous ne savez pas ce qu'est une fonction, ne vous inquiétez pas, nous y reviendrons très bientôt. Alors, agrandissons encore un peu les choses. Vous pouvez voir que vous coloriez mes cadeaux pour différentes choses. Par exemple, c'est jaune, c'est une chaîne, c'est un commentaire. C'est ce qu'on appelle la mise en évidence de la syntaxe C'est ma façon S de vous aider à lire un peu mieux votre code , ce qui est très agréable. Nous avons donc cet onglet. C'est une bonne façon d' organiser votre code. Et vous pouvez nommer ces étapes dans le menu de commande. Vous pouvez renommer cet onglet. Appelons cet onglet numéro deux, par exemple appelons-le onglet numéro un. Vous pouvez donc maintenant reconnaître facilement ce que contient chaque onglet. Et vous pouvez également supprimer le type que les onglets utilisent ici. Et ce qui est vraiment bien, c'est que lorsque vous fermez Maya et que vous l'ouvrez à nouveau, elle se souviendra des onglets et du code que vous y aviez. Donc tu ne perds rien de tout ça. Parfois, tu le fais, mais pas d'habitude  ? D'habitude, c'est mon oui. Très doué pour garder ce code pour vous. La dernière chose que je veux vous montrer, c'est comment mettre du code dans une étagère. Donc, par exemple sais que pour créer un cube, j'ai dû utiliser cette commande. Nous nous familiariserons très bientôt avec ces commandes. C'est juste pour, nous en sommes à l'exemple. Donc je sais que, euh, si je lance à nouveau cette commande, j'appuie sur Control a et Enter ou Control Enter pour exécuter le code. Je suis en train de créer ces cubes. C'est super. Et si je voulais le mettre sur une étagère ? Vous pouvez surligner votre code, cliquer dessus, puis simplement le faire glisser sur l'étagère. Et Maya vous donnera cette option pour créer un bouton. Nous allons cliquer sur l'option Python. Lorsque nous cliquons sur le bouton, le cube sera créé pour nous. C'est super. Donc, lorsque nous éditons ce bouton, vous voyez que votre code est ici et qu'il est en mode Python. Et n'oubliez pas de sauvegarder vos étagères chaque fois que vous les modifiez. Hum, et c'est ça, en général, il y a beaucoup plus d'options. Comme vous pouvez le constater, il y a beaucoup plus de boutons et de menus ici. Il y a beaucoup de choses que vous pouvez faire, n'importe quel script ou ce que je vous ai montré sera ce dont vous aurez besoin. 95, 99 % du temps. Que vous réalisiez des scripts simples ou des scripts plus complexes, disons du développement. Voici les principales options dont vous aurez besoin. Alors allons-y et écrivons votre premier morceau de code. 3. Votre premier programme Python : bonjour Maya: Bien, créons votre premier programme Python. Donc, l'une des premières choses que nous pouvons faire, l'une des choses les plus simples que nous puissions faire est d'afficher ce que l'on appelle le sprint. Alors tapez avec moi, imprimez des parenthèses ouvertes, ouvrez un guillemet et écrivons notre message. Bonjour tout le monde. Fermez maintenant les guillemets et fermez les parenthèses. Maintenant, exécutons ce code. Encore une fois, je peux, je vais appuyer sur Control a pour tout surligner. Et je vais cliquer sur le bouton Exécuter. Et comme je l'ai déjà mentionné, Maya imprimera ou affichera le code que vous exécutez. Et puis les résultats réels ou la sortie de ce code. Et d'ailleurs, si la police est trop petite, oubliez pas que vous pouvez cliquer sur la touche Ctrl et sur la molette de la souris pour la réduire ou l'agrandir. Décomposons donc un peu cela . Tout d'abord, nous avons les relevés imprimés. Maintenant. Vous m'entendrez dire déclaration et fonctions. Ils signifient des choses différentes. Mais pour l'instant, considérons une impression comme une fonction. Il s'agit d'un mot spécial en Python qui affichera simplement quelque chose dans la console ou dans la fenêtre de sortie ci-dessus. Ensuite, la parenthèse, nous utilisons une parenthèse pour exécuter quelque chose, pour appeler des fonctions à l'action ou exécuter des fonctions. N'oubliez donc jamais d'ouvrir et de fermer les parenthèses. Et puis au milieu, ici en jaune. Et n'oubliez pas que Maya mettra en évidence les éléments pour vous permettre de les prononcer plus facilement savoir en un coup d'œil le contenu de votre code. Il s'agit d'une chaîne. Une chaîne est essentiellement un morceau de texte placé sous le capot. C'est un peu plus compliqué qu'un simple texte. Mais vous pouvez le considérer comme une simple chaîne de caractères. Ça pourrait être une séquence, désolé, une phrase. Il peut s'agir d'une paroisse ou d'un symbole, ou d'un seul caractère, d'un seul chiffre. Dans ce cas. Une chaîne sera toujours créée ou créée à l'aide de guillemets. Vous pouvez utiliser un guillemet simple ou un guillemet double. Peu importe tant que vous utilisez le même type au début et à la fin. Il existe un autre type de chaîne spécial qui utilise trois guillemets. Mais nous réserverons cela à la documentation et nous en reparlerons plus tard. Donc, si vous l'avez déjà fait, vous avez peut-être vu l'impression effectuer sans parenthèses. Essayons donc ça. Je vais cliquer sur Contrôler un. Et maintenant, cette fois, je vais cliquer sur Control Enter pour exécuter mon code. Le résultat est donc le même. Alors, que se passe-t-il ici ? Ce qui se passe, c'est l'impression d'inversions vers Maya 2020, que nous utilisons ici. Maya utilise une version de Python 2.7. Et dans cette version de Python, print est un type spécial de fonction appelé instructions que vous pouvez utiliser avec ou sans parenthèses, dans ce cas. Maintenant, à partir de Maya 2022, qui est la prochaine version, car Autodesk a décidé de ne pas utiliser Tony, Tony One, en commençant par mon avocat, 22 Python. La version Python sera Python 3. Et dans ce cas, l'impression ne pourra être exécutée qu'avec les parenthèses. C'est pourquoi vous me verrez utiliser des parenthèses. Notre convention. Je pense que c'est une bonne habitude. Mais sachez simplement que pour la plupart des versions actuelles de Maya, vous aurez la possibilité de le faire avec ou sans. Tant que vous laissez un espace entre l'instruction d'impression et la chaîne. Maintenant, permettez-moi de clarifier. La différence entre les instructions et les fonctions est un peu technique et vous n' avez pas vraiment à vous en préoccuper. À ce stade. Vous n'avez pas à vous en soucier, alors ne pensez pas trop à cette distinction. Alors améliorons un peu les choses. Stockons cela dans une variable. Faisons donc de la place ici. Maintenant, variables, je vais appeler cette variable mon message. Les variables sont des conteneurs de valeurs et le nom d'une variable dépend de vous. Vous pouvez nommer vos variables comme vous voulez leur attribuer une valeur en utilisant le signe égal, le signe égal unique. Ensuite, je vais attribuer cette chaîne que nous avons ici. Donc HelloWorld dans une variable appelée par message. Et maintenant, au lieu d'imprimer directement cette chaîne, je vais imprimer ma variable de manière contrôlée pour tout mettre en évidence, Control Enter pour exécuter. Et voilà. Alors, que se passe-t-il ici ? Encore une fois, comme je l'ai dit, une variable est un conteneur de valeur, ce qui signifie que vous pouvez attribuer n'importe quelle valeur tant qu'elle est valide pour Python, bien sûr, à n'importe quelle variable de votre choix. Donc, par exemple, la valeur dix, le chiffre dix, qui fonctionne, vous pouvez attribuer le résultat de quelque chose. Faisons donc à nouveau un peu de calcul. Trois plus trois. Six, et voilà. Maintenant, pourquoi est-ce que j'utilise un trait de soulignement ? C'est simplement une convention que j'aime utiliser et qui s'appelle le boîtier Snake. Lorsque vous séparez des mots à l'aide de traits de soulignement. Certaines personnes aiment utiliser des carcasses de chameau, ce qui signifie qu'elles utilisent une majuscule pour séparer les mots, lequel utiliser. Peu importe. Cela dépend de vous ou de l'équipe avec laquelle vous travaillez. J'ai tendance à utiliser ceci et je m'en tiens à cela. Je dirais qu'il n'y a que deux règles concernant les variables. L'une d'elles est qu' elles devraient avoir du sens. Qu'est-ce que je veux dire par là ? Je veux dire que vous pourriez nommer votre variable x. Et Python s'en fiche. Cela fonctionnera toujours de la même manière. Mais lorsque vous reviendrez à votre code, disons dans six mois, x n'aura plus vraiment de sens pour vous. Mais je vais nommer une variable comme mon message, par exemple nous aurons un peu plus de sens ou quelque chose comme ça si vous l'appelez simplement MSG, même si ce nom est meilleur que x ou simplement message. Et l'autre règle est que vous maintenez la cohérence de votre dénomination. Par exemple, si vous avez ceci, désolé, pour la faute de frappe, vous mélangez des conventions. Vous utilisez un trait de soulignement ici, vous utilisez des majuscules ici. Ce n'est pas un problème pour Python, mais c'est une bonne pratique pour garder votre code propre et lisible afin de respecter les mêmes conventions que vous avez établies. Mais nous en reparlerons un peu plus tard. C'est donc génial, mais ce n'est pas très excitant. Tout ce que nous faisons, c'est imprimer. Même si l'impression est très puissante et que vous l'utiliserez beaucoup lorsque vous codez. Mais maintenant que je peux répondre à nos ordres d'une certaine manière, profitons-en. Utilisons le mien un peu plus directement. Je vais donc taper à partir de Maya Important CMBS. Nous en reparlerons un peu plus en détail dans les prochaines leçons. Mais sachez qu'il s' agit de la bibliothèque CMBS, également connue sous le nom de bibliothèque de commandes ou bibliothèque de commandes Maya. Cela nous donne accès à de nombreuses commandes que Maya comprendra. L'un d'eux est appelé dans le message d'affichage. Remarquez maintenant que mon autre foutue les a datées ou les a simplement surlignées en bleu. Et il y a un rendu magnifique et métallique dans la police. C'est parce que Maya la reconnaît comme une commande disponible dans la bibliothèque de commandes. Donc, cette commande est également connue sous le nom de fonction, et je vais l'appeler fonction car c' est le terme approprié en Python. Il s'agit donc d'une fonction. Et notez que nous utilisons cette notation par points. Nous verrons cela plus en détail, comme je l'ai déjà mentionné. Mais l'explication est simple : nous accédons à cette fonction depuis cette bibliothèque que nous importons ici. La bibliothèque de commandes possède donc cette fonction et nous accédons aux fonctions à partir de celle-ci via la notation par points. Maintenant, nous utilisons les parenthèses pour appeler cette fonction. Et les fonctions peuvent avoir, et c'est généralement le cas, des options spéciales que nous pouvons utiliser pour modifier la sortie de la fonction. Et ces options sont appelées arguments. Dans ce cas, cette fonction possède un argument appelé message d'assistance. Maintenant, je sais que j'ai dit que vous devriez garder les choses cohérentes lorsqu'il s'agit de nommer vos variables. Et vous dites qu'il y a une coque en forme de chameau ou des lettres majuscules. C'est parce que Maya a décidé que c'était la convention de Maya. Vous pouvez vous en tenir à cela si vous le souhaitez ou créer le vôtre. Mais lorsqu'il s'agit d' utiliser les fonctions de Maya, vous devez utiliser ce que mes développeurs aériens ont décidé d'utiliser. C'est donc un message d'assistance mésographique qui acceptera une chaîne. Dans ce cas, j' aimerais que vous utilisiez la variable que j' ai déjà créée. Et permettez-moi d'en revenir à dire Bonjour tout le monde. Ensuite, il y a un autre argument appelé payant. Je dirais que c'est vrai et nous verrons dans une seconde pourquoi je le fais. Et il existe un autre argument appelé position qui prend une autre chaîne. Et je dois dire que je veux que ce soit en haut du centre. Placez-le un peu plus au centre et agrandissez-le un peu. Exécutons donc ce code et voyons ce qui se passe. Vous voyez ce petit message ici et il va s'estomper un peu car nous avons l'option «  fondu égal à vrai ». Maintenant, comme vous l'avez vu, nous utilisons ces arguments pour modifier le comportement de la fonction. Si je veux qu'il apparaisse sur le côté droit, par exemple, je dis simplement en haut à droite. Si je souhaite modifier le message, je modifie simplement ma variable. Et cette variable est utilisée ici. Et maintenant, nous avons un message différent. Vous l'avez déjà vu. Eh bien, je ne sais pas si c'est le cas, il est fort probable que vous l'ayez vu. Par exemple, lorsque vous basculez entre le mode d' ombrage dans ce menu, vous verrez ce message sous le capot, mes yeux utilisant exactement la même commande que celle que nous utilisons. Avec des arguments différents. Bien sûr. Nous parlerons des fonctions en détail très bientôt. Nous allons apprendre comment trouver les arguments disponibles pour chacune des fonctions qui existent dans la même bibliothèque ds. Pour l'instant, je le sais de mémoire, juste à titre d'exemple. Mais nous allons vous montrer comment trouver cela dans leur recommandation. Mais vous êtes maintenant prêt à démarrer votre premier projet dans Maya. Alors allons-y et faisons-le. 4. Intro à la bibliothèque de disques et aux importations: Avant de passer au premier projet, nous devons parler de la bibliothèque Maya CMBS. Qu'est-ce donc qu'une bibliothèque ? Une bibliothèque est un ensemble de code, un ensemble de fonctions. Exemple parfait, nous l' avons déjà utilisé. Est-ce que ce message est affiché ? Rafraichissons simplement votre mémoire sur son fonctionnement. Et voilà, vous recevez un petit message dans la fenêtre d'affichage. Ainsi, une bibliothèque, en l'occurrence le MIS him, la bibliothèque, également connue sous le nom de bibliothèque de commandes malloc, possède un ensemble de fonctions. Et des fonctions. Vous pouvez les considérer comme des boîtes noires dans la mesure où vous ne savez pas comment elles fonctionnent sous le capot, mais vous savez comment vous pouvez en tirer un résultat. Dans ce cas, nous savons que le message d' imbue est accessible via la notation par points depuis la scène, cette bibliothèque. Et nous pouvons modifier la sortie avec ces arguments. Nous ne savons pas comment il affiche un message sous le capot. Mais honnêtement, on s'en fout. Ce qui nous intéresse, c'est le résultat. Il s'agit donc d'une bibliothèque, essentiellement d'une collection de code. Maintenant, pour accéder à une bibliothèque, vous devez tout d'abord vous assurer que Python Maya ont accès au code qui se trouve à l' intérieur de la bibliothèque. Parce que les bibliothèques ne sont en fin de compte que des fichiers texte contenant du code Python. La deuxième chose que vous devez faire est importante, et c'est ce que nous faisons ici. Donc, ce que je faisais, ce que je fais ici vient de Maya, il se trouve que c'est une autre bibliothèque. Je dis donc qu'à partir de la bibliothèque Meyer, importez la bibliothèque CMBS. Et puis, en bas, je dis que depuis la bibliothèque C&DH, accédez à la fonction de message d'entretien. Vous verrez donc cette importation se faire différemment. Quelque chose comme importer Maya, le point obscène comme CMBS. Cela vous donnera exactement le même résultat que celui que vous pouvez voir ici. Désormais, vous n'avez même plus besoin de saisir C et D car vous pouvez accéder aux bibliothèques d'autres bibliothèques via la notation par points. On pourrait simplement dire maya important, comme ça. Nous devons maintenant dire qu'à partir de la bibliothèque Meyer, accédez à la bibliothèque C&DH via cette notation par points. Et à partir de là, dans cette bibliothèque, accéder à votre fonction de messagerie, cela demande beaucoup de saisie. C'est pourquoi nous préférons le faire à partir de mon entrée CMBS. Maintenant, vous verrez également cela se faire d'une manière différente. Quelque chose comme ça. C'est très courant si vous voyez des scripts en ligne, vous les verrez, cette façon d' importer ce qui se passe ici. C'est ce que l'on appelle des espaces de noms. Nous sommes donc toujours en train d'importer depuis la bibliothèque Meyer. Nous importons ce thème, cette bibliothèque, mais nous l'appelons MC. C'est pourquoi ils étaient alors MC. Maintenant, l'AMC est un peu comme une variable. Vous stockez essentiellement la bibliothèque CMBS dans la variable de votre choix. Vous pouvez appeler ces commandes. Cela fonctionnera tout de même. Vous pouvez voir le résultat ici. Beaucoup de gens choisissent de faire du MC parce qu'ils pensent que c'est plus rapide à taper et plus pratique. Que ce soit le cas pour vous ou non. Cela dépend de vous. Vous pouvez considérer l'espacement des noms comme lorsque vous créez un espace de noms pour un personnage, lorsque vous importez un équipement dans la scène, vous importez votre référencement dans le rakefile. Vous lui donnez un espace de dénomination pour qu'il fonctionne dans la scène. Maintenant, dans ce cas, pour moi, cmd est assez simple à taper, donc j'ai tendance à m'en tenir à cela. Mais c'est à vous de décider si vous souhaitez ou non utiliser l'espacement des noms. Et j'utilise souvent l'espace de noms, mais c'est généralement lorsque la bibliothèque que j' importe est trop longue à taper que je n'utilise pour quelque chose plus efficace ou plus pratique. Alors voilà. C'est mon SEM, cette bibliothèque, juste pour faire comprendre le point. Passons à une autre fonction que je connais de mémoire, le poly cube. Cela créera simplement un cube. Donc, encore une fois, nous accédons à la fonction poly cube à partir de cette bibliothèque via cette notation par points. Et que se passe-t-il à titre d'exemple, que se passera-t-il si je l'exécute ? N'oubliez pas que vous pouvez exécuter des lignes de code individuelles en surlignant le code et en cliquant sur Control Enter. Si je l'exécute, Python me dit simplement qu'il s'agit d'une méthode également connue sous le nom de fonction. Mais rien n'arrive, comme je l'ai déjà dit, à une action ou à l' exécution d'une fonction. Tu dois l'appeler entre parenthèses. Et voilà. Cela créera un cube pour vous. Nous venons de modifier mon mode d'ombrage. Parfait. Alors, laissez-moi vous donner un autre exemple de bibliothèque avant de passer à un autre exemple de bibliothèque. Il existe une bibliothèque intégrée en Python. Cela ne vient pas, mon conseil vient de Python lui-même. Je vais obtenir un laissez-passer. Et get pass possède une fonction très utile appelée getUser. Ce que cela va faire, et laissez-moi les attribuer à ma variable ici. Donc, dans ma variable de message, au lieu de dire bonjour Maya, je veux en obtenir le résultat, en appelant cette fonction. Cela me donnera le nom d'utilisateur qui enregistre mon ordinateur. Permettez-moi d'effacer ma fenêtre de sortie. Je vais me débarrasser de cette fonction du polycube. Maintenant, exécutons-le. Encore une fois, en me souvenant que je stocke la sortie de GetUser. En fait, rendons les choses plus évidentes d'abord, imprimons la sortie de GetUser. Tout d'abord, je vais saisir cette bibliothèque. Ensuite, je vais imprimer la sortie de la fonction GetUser à partir de cette bibliothèque. Voilà, vous l'avez. Voici donc le nom d' utilisateur sur ma machine. Si vous exécutez ces lignes de code, ce sera différent pour vous, bien sûr, car votre ordinateur a un nom d'utilisateur différent. Exécutons maintenant ce code qui attribue le résultat de getUser, cette variable ici. Et voilà. Maintenant, ils transmettent un message. La fonction affiche mon nom d'utilisateur dans la fenêtre d'affichage. Et voilà. Nous sommes donc prêts à démarrer le premier projet. 5. Projet 1 - Outil de Rigging de prop : Intro: Vous êtes prêt à créer votre premier outil Python. Nous allons commencer par quelque chose de simple. Ce sera un outil approprié. Laissez-moi vous montrer ce que je veux dire. Voilà le résultat. Je l'ai juste mis ici sur l'étagère à titre d'exemple. Cela vous donnera donc une simple géométrie. Dans ce cas, il s'agit d'un cube, mais cela peut être autre chose. Il vous donnera une manette. Vous pouvez donc animer votre accessoire et imaginer que vous bloquez un tir et que vous avez besoin de quelque chose avec lequel votre personnage puisse interagir. Ou imaginez que vous créez une séquence précédente et que vous deviez régler tracé de votre prise de vue afin de déterminer le timing de la séquence ou de définir le cadrage de l'appareil photo. Les utilisations de ce type d'outil sont nombreuses. C'est donc très utile. Mais surtout, il vous montrera les principes de Python dont vous avez besoin pour créer vos propres outils. Il vous montrera les bases de l'interaction avec mon application. Et cela vous aidera à découvrir comment actions très simples, comme la création d'un cube et d'un cercle, peuvent rapidement aboutir à la création d'outils très puissants. 6. Pause d'outil: Donc, un aperçu de ce qui se passe ici. Si nous regardons ici sur la gauche, dans le plan, nous avons notre courbe correspondant à un cercle appelé contrôle. Et en dessous, nous avons une pièce de géométrie qui est un cube. Ça s'appelle un accessoire. Prop est contrôlé par voie parentérale afin de pouvoir être animé. Il s'agit d'une configuration très simple, et en fait, nous pouvons le faire manuellement. En fait, c' est généralement l'une des meilleures façons de commencer à développer un outil lorsque vous ne savez pas par où commencer. Laissez-moi vous montrer ce que je veux dire. Ouvrons l'éditeur de script. Vous vous souviendrez que dans les deux premières leçons, nous vous avons montré que la fenêtre de sortie ne vous montre pas seulement la sortie de votre code, mais aussi ce que font mes yeux. Voyons donc cela en action. Permettez-moi d'effacer la fenêtre de sortie. Permettez-moi de supprimer ce code car nous n'en avons plus besoin. Commençons par créer un cercle. Maintenant, commençons l' entraînement du cube. Ensuite, je veux sélectionner le cube et le cercle. Et je vais cliquer sur la touche P pour les parents. Nous obtenons maintenant des résultats très similaires. Bien sûr, ce n'est pas pareil. Nous n'avons pas les noms et nous voulons que le cercle soit légèrement plus petit que ce que l'outil nous donne. Mais c'est un bon début et cela nous a permis de faire la majeure partie du chemin en effectuant ces étapes manuellement. Maintenant, si vous remarquez ici, dans la fenêtre de sortie, Maya nous a fourni de nombreuses informations. Maintenant, recommençons et regardons la fenêtre de sortie. Au fur et à mesure que je crée mes objets. Commencez par le cercle, le cube. Sélectionnez, déplacez, sélectionnez le cercle et le parent. Génial. Vous voyez donc que Maya a reçu toutes les commandes dont nous avons besoin pour le créer. Maintenant, c'est Malcolm, sont des commandes MEL. C'est le code Mel. Comme je l'ai déjà mentionné, nous n'allons pas utiliser MEL. Mais savoir lire un petit bout de courrier sera très utile car vous pouvez traduire ce Python. Alors, essayons de le faire. Le code que Maya vous donne n'est pas toujours, pas toujours propre. Vous voyez, il y a beaucoup d'options dont nous n'avons probablement pas besoin. Et vous remarquerez également qu'il crée deux cercles. si j' exécutais ce code tel quel, il créerait la configuration que nous voulons. Comme vous pouvez le voir ici, le coupon est imprimé sur le dossier, mais il a également créé des objets supplémentaires. Pourquoi les commandes de mon Aggie Was se répètent-elles ? Honnêtement, je ne sais pas. Mais nous savons que nous devons simplement ignorer le premier. Et encore une fois, il ne s'agit que d'une directive. Ce ne sera pas le code qui en résultera, bien que ce ne soit pas possible. Si vous devez faire quelque chose d' aussi simple que cela, c'est peut-être tout ce que vous devez faire. Mais pour nos besoins, cela ne suffit pas. Le principal point à retenir réside dans les commandes que Maya exécute. Dans ces cas, il s'agit de la commande circle, de la commande poly cube et de la commande parent. Et en plus de cela, nous allons devoir faire un petit nettoyage. Comme je l'ai mentionné, la dénomination n' est pas tout à fait ce dont nous avons besoin et la taille du cercle est connue pour être aussi conviviale que nous le souhaiterions. Traduisons donc ces commandes en Python et commençons à créer l'outil nous-mêmes. 7. Créer l'outil: Commençons par traduire ces commandes en Python. Nous n'avons donc besoin que des noms des commandes elles-mêmes. Cercle, cube. Nous pouvons avoir besoin ou non de la commande select. Nous allons donc l' ignorer pour le moment. Et la commande d'impression. Alors, copions ceci et apportons-le dans un laboratoire Python. Cela va rendre la police un peu plus grande. Contrôle sur le volant, sur la souris. Permettez-moi de supprimer cette configuration que nous avions auparavant. Nous savons donc que ces commandes, et généralement lorsque vous les voyez en bleu et italique, signifient qu'elles proviennent de la bibliothèque MIS him It's. Donc, encore une fois, si vous vous en souvenez, nous devons importer cette bibliothèque et vous les apprendrez. Ceux-là, par cœur. Vous allez taper à partir de Maya import, voir MDS. Super. Nous allons maintenant accéder à ces fonctions depuis la bibliothèque CMBS via cette notation par points, TMDL, le cercle ressemblant à un polycube. Maintenant, remarquez le cas ici, la capitalisation. C'est important. Si vous n'avez pas ce C majuscule, ce ne sera pas la bonne commande. Le Cmd a un pardon. Commençons donc par encercler d'abord. N'oubliez pas que pour exécuter une fonction, je vais simplement effacer l'historique ici, afin que ce soit moins encombré. Pour exécuter une fonction, vous devez utiliser les parenthèses ouvertes et fermantes. Allons-y et faisons-le. Et exécutons simplement ces trois premières lignes de code. Donc on obtient, on obtient un cercle. Excellent. Maintenant, faisons de même, mais avec un cube, un polycube. Exécutons cette ligne de code. En fait, exécutons les commandes ou fonctions du cercle et du polycube. Excellent. C'est un bon début. Nous avons un cube et un cercle. Notez maintenant que nous ne transmettons aucun argument. Donc, mon S ajoute le nom pour nous. Je sais que vous découvrirez très bientôt comment découvrir ces arguments. Mais je sais qu'il existe un argument de nom dans la plupart de ces fonctions que vous pouvez utiliser pour transmettre une chaîne qui sera utilisée pour nommer l'objet résultant. Donc, dans ce cas, nous avions dit que nous voulions que le cercle soit appelé contrôle. Nous avions dit que nous voulions que le cube ou toute autre géométrie que nous utiliserons soit appelé accessoire. Alors laisse-moi faire ça. Et réexécutons-le. Excellent, ça a l'air un peu mieux. Nous avons maintenant un cercle appelé contrôle, et nous avons une pièce de géométrie ou un cube appelé accessoire. Maintenant, ils ne sont pas encore parentés. Alors, pour les imprimer, nous allons utiliser la commande d'impression. Maintenant, je vais vous montrer comment les élever. Et puis, juste après, je vais vous montrer comment découvrir ce chaque commande a besoin et cela se fera en utilisant leur documentation. Mais maintenant, ce que nous voulons faire, c'est leur confier le contrôle de l'accessoire. Maintenant, remarquez ce que je suis en train de faire ici. Nous savons qu'il s'agit d'un cube et le nœud du cube est appelé accessoire. Et renforçons cela en prononçant le nom ici dans la boîte des chaînes. Alors, malgré toutes ces commandes Maya, vous allez utiliser le nom des nœuds. Et les noms de ces nœuds seront des chaînes de caractères. Rappelez-vous donc encore une fois que les chaînes sont créées à l'aide de guillemets. Vous pouvez utiliser des guillemets simples ou des guillemets doubles. C'est à vous de décider. Je vais utiliser des guillemets simples. Donc, je vais demander au nœud parent de contrôler l'alimentation et à l'accessoire, désolé, je suis passé en tant que fonction parent à la police parent, au nœud accessoire au nœud de contrôle. Donc, si je devais exécuter cette ligne de code, elle le ferait pour moi. Laissez-moi, laissez-moi simplement montrer qu'ils ne sont pas encore parents. Et allons-y. Et voilà. C'est le résultat que nous souhaitons. Et maintenant, vous pouvez voir les partisans des entreprises, ils sont sous contrôle. Exécutons donc tout ce code à partir de zéro. Excellent. Maintenant, il est parenté. Et c'est en quelque sorte faire ce que nous voulons ? Il y a encore quelques points à modifier. Vous avez probablement remarqué que le cercle n' est pas dans la même position qu'auparavant. Il est vertical et nous voulons qu'il soit plat sur le sol. Et ce n'est pas non plus la taille que nous voulons. Alors nettoyons ça. Mais vous l'avez peut-être remarqué, avant de corriger ces petits détails, nous devrions nettoyer notre code. Vous avez peut-être remarqué que nous codons en dur les noms que nous voulons inclure ici en faisant du marketing, je veux dire, en écrivant directement les chaînes et nous répétons ces noms ici. Donc, un bon moyen de savoir que vous devez commencer à utiliser des variables est de commencer à vous répéter, soit en vous répétant, soit en copiant et en collant. Si vous vous trouvez, par exemple copiant et en collant ce nom, prop est une bonne indication que vous pouvez probablement utiliser une variable. Alors allons-y. Disons, disons que le nom du contrôle sera contrôle. Supposons maintenant que le nom de la géométrie soit prop. Maintenant, remarquez également à quel point je fais attention variables minimales afin qu' elles n'aient aucun sens lorsque vous les lisez. Et remplaçons simplement ces chaînes, ces chaînes codées en dur par ces variables. Ce sera donc votre nom apparenté au nom de contrôle. Excel. Réexécutons-le juste pour être sûr que tout va bien. C'est excellent, ça l'est. Maintenant, encore une fois, le pouvoir des variables. Si vous souhaitez nommer ce contrôle au lieu de CTRL. Et si vous voulez les nommer comme un accessoire, par exemple ou quelque chose d'autre, cela fonctionne toujours et vous n'avez qu'à le faire à un seul endroit lieu de le faire à plusieurs endroits. Excellent. Alors, continuons à nettoyer ça. 8. Modification du contrôle: Nous voulons apporter quelques modifications au cercle. L'une d'elles est que nous voulons qu'elle soit un peu plus grande. Et nous voulons également qu'il soit orienté vers haut dans la direction de l'axe Y. Alors, comment pouvons-nous y parvenir ? Comme nous l'avons déjà mentionné, supprimons-le maintenant, exécutons simplement les premières lignes pour créer le cercle. Comme nous l'avons déjà mentionné, nous pouvons demander à Maya de nous expliquer comment procéder. Je vais effacer l'histoire. Nous pourrions simplement le faire pivoter grossièrement, en pointant vers le haut, espérons-le. Nous pourrions également l'agrandir un peu. Donc, comme nous l'avons dit, cela pourrait fonctionner, nous pourrions voler la commande de rotation et de mise à l'échelle. Nous allons faire quelque chose d'un peu plus propre, si vous me le permettez, d'un peu plus facile à contrôler. C'est pour ça. Nous devons entrer dans le cercle de commande. Alors jetons-y un coup d'œil. Demandons quand même à Maya de nous aider un peu. Créons un cercle à partir de ce bouton situé ici dans le menu de modélisation, ainsi que dans les cercles et les surfaces. Et je vais créer un cercle Nurbs. Alors, que se passe-t-il ici ? Laisse-moi l'agrandir un peu. Mes yeux, bien sûr, en utilisant la commande circulaire que nous utilisons déjà. Et il utilise quelques arguments supplémentaires. Maintenant, nous n'avons pas besoin de tous ces arguments, mais nous en avons besoin de certains. Maintenant, cela pourrait être, cela peut sembler un peu confus. Mais je sais pertinemment que r est pour rayon. Donc, dans ce cas c'est quelqu'un qui voudrait peut-être soit un peu plus d'un, mais ce n'est pas grave pour le moment. Et n sont, prend trois valeurs. Et quand c'est le cas, lorsque vous convertissez du langage masculin en Python, si vous voyez trois valeurs, cela signifie qu'il s'agit d'une liste. Et vous devrez les séparer par des virgules. Alors exécutons-le. Exécutons cette commande circulaire toute seule. C'est super. Voyons voir si nous augmentons le, le, notre argument. Permettez-moi de supprimer celui-ci. Encore une fois, exécutez le code. Et maintenant, c'est un peu plus grand. Alors, comment puis-je le savoir et comment puis-je savoir que notre rayon moyen est ? Que vous deviez consulter la documentation ? Le moyen le plus simple d'y accéder est d'utiliser le menu d'aide l'éditeur de script et de cliquer dans la référence des commandes Python. Maintenant, une fois que vous avez cliqué dessus, cela vous amènera à cette documentation d' aide. Maintenant, voici la mise en œuvre de My Aberation 2020. Et voici toutes les commandes disponibles dans Maya. Donc, celle qui nous intéresse en ce moment est la commande circulaire. Vous pouvez utiliser cette barre de recherche ici. Et nous avons trouvé la commande circulaire. Maintenant, quelques points à noter. Ici, en haut à droite de cette section. Vous pouvez avoir la version masculine ou la version Python. Et nous voulons être dans la version Python, bien sûr. Ce synopsis est en quelque sorte un résumé des commandes qui sont à votre disposition, désolé, des arguments qui sont à votre disposition. Maintenant, toutes ces options d' arguments peuvent être appliquées à cette commande. Maintenant, si vous faites défiler la page un peu vers le bas, j'aimerais pouvoir m'en débarrasser ici, mais je ne peux pas pour le moment. Elle fait défiler la page un peu vers le bas. Tu vois du flux. Flux est un autre mot pour désigner des arguments. Tu peux tous les voir. convient donc de noter que chaque fleur, chaque argument a un nom long et un nom court, c'est pourquoi nous avons vu un NR, ce qui est un peu énigmatique à mon avis. Donc, si nous faisons défiler la page un peu vers le bas, essayons de découvrir nos conservateurs sont le nom long de r est radius. Maintenant, si vous voyez ici, cela vous indique le type de valeur, argument, de type de valeur que mes yeux attendent pour cet argument spécifique. Nous aborderons la majeure partie de cela. Le booléen est essentiellement un vrai ou un faux, un oui ou un non. Dans le cas du rayon, linéaire. Linéaire signifie un nombre, soit un entier, soit un nombre flottant, qui, en Python, est essentiellement un nombre avec des décimales. Donc, dans ce cas, si vous le souhaitez, cela vous indique ici que l'argument radius a une valeur par défaut de 1,0. Ceux-ci, parce qu'il a des nombres décimaux, sont à flot. Mais pour l'instant, vous considérez le linéaire comme un nombre. C'est un peu dommage que Maya n' utilise pas le vocabulaire utilisé par Python, mais ça va. Dans ce cas, vous y arriverez par sections. Il attend donc un int lorsqu'il est linéaire, cela signifie en fait un flottant ou un entier en abréviation d'entier. C'est donc le premier. Maintenant, l'autre qui nous tient à cœur. Comme je l'ai dit, c'est un R. Maintenant, N-R signifie normal. La normale est essentiellement un vecteur. C'est la phrase qui , pour en revenir à mon annonce, explique cela un peu mieux. C'est la ligne parallèle au plan auquel nous avons affaire. Dans ce cas, la normale augmente essentiellement de cette façon. Nous n'allons pas entrer dans les détails de la création de vecteurs ni dans tous ces détails plus spécifiques. Mais pour l'instant, notez simplement que cela prend trois valeurs. Vous pouvez généralement considérer ces valeurs comme vos axes x, y et z. Et notez qu'il comporte ces crochets. Maintenant, ces crochets signifient qu'il s'agit d'une liste. Nous allons bientôt entrer dans les listes. Mais au moins, il s'agit essentiellement d'une liste de valeurs ou d'un ensemble de valeurs. Dans ce cas, il attend trois valeurs spécifiques. Maintenant que nous le savons, revenons à Maya. Oh, désolée. Avant que j'oublie, si vous faites défiler la page vers le bas, vous aurez généralement des exemples et c'est vraiment cool. C'est très utile car mon autre recommandation vous donne des exemples d' utilisation de la commande. Vous pouvez donc très facilement exécuter et voir comment les choses fonctionnent. Dans ce cas, il s'agit d'utiliser l'argument normal, qui est ce qui nous intéresse en ce moment. Et si vous passez à la version masculine, vous verrez les mêmes exemples dans le manuel de Nelson. Nous utilisons Python en ce moment, alors restons-en à les acheter. OK, alors revenons en arrière. Passons en fait au nom complet de ces arguments. Désormais, dans le cas des commandes Maya, vous pouvez utiliser à la fois le nom court ou le nom long à votre guise. Beaucoup de gens préfèrent le nom long. Mais quand c'est facile à taper, je préfère être un peu plus explicite et me contenter de taper le texte en mode long. Je vais rendre le rayon un peu plus grand que la valeur par défaut, qui est de 1,0. Je vais y arriver aussi. Je pourrais taper deux, 2.0 ou 2.5, tout ce que vous voulez. Dans ce cas, je vais laisser cela vrai. Passons maintenant à la normale. Allons, jouons un peu. Disons simplement que nous voulons qu' il regarde vers l'axe X. Maintenant, si vous le remarquez ici, au cas où vous ne connaîtriez pas cet axe, cliquez ici dans le coin inférieur gauche. Cela vous indique quels actes vous êtes en train de regarder. Donc, c'est x, ce sera z, puis vers le haut, ce sera l'axe y. Que se passera-t-il si nous l'exécutons ? Eh bien, notre cercle pointera vers l'axe X. Mais encore une fois, nous voulons qu'il pointe vers l'axe Y. Maintenant, comme je l'ai mentionné, ces valeurs représentent un vecteur, donc ce n'est pas tout à fait l'axe. Mais pour l'instant, pour cet exemple, pour nos besoins, vous pouvez les considérer uniquement comme les axes x, y et z. Et encore une fois, souvenez-vous de cela, sans attendre une liste, et cela se fait grâce à cette notation entre crochets que nous avons ici. Mais nous y reviendrons très bientôt. Exécutons donc cette commande huit, surlignons tout. Ctrl Enter pour exécuter mon code. Excellent, ça a l'air un peu mieux. Ce cercle est donc un peu plus grand, plus facile à sélectionner. Nous pouvons maintenant l'animer. Et bien sûr, c'est le moteur du cube. Excellent. Alors, que pouvons-nous faire d'autre ? Voyons s'il y a des bogues que nous pouvons trouver. Il y en a un et c'est un bogue un peu majeur. Que se passe-t-il si nous exécutons le même code ? Une fois de plus, nous avons une erreur. C'est génial. Les erreurs sont bonnes car elles vous indiquent exactement ce qui ne va pas. Cela vous indique donc que plus d'un objet correspond au nom prop. Comment est-ce possible ? Vous voyez donc ici que nous avons deux géométries qui portent le nom de prop. Voici ce cube. Et il semble que nous ayons deux courbes différentes. Souvenez-vous maintenant que nous avons mentionné que chaque fois que Maya, chaque fois que nous donnons, donnons l'argument du nom, Maya essaiera d'utiliser le nom que nous lui avons donné. Mais s'il existe déjà, il ajoutera un numéro, c' est-à-dire, ce qui est le cas ici, il en a ajouté un. Cela signifie donc que notre, lorsque nous essayons d'alimenter et de contrôler, de sonder ou, malheureusement, de contrôler la production. Contrôle. C'est trompeur car il s' agit d'un précédent que nous avons créé. Ce n'est pas vraiment le plus récent qui porte le numéro un. Maintenant, voyons un exemple clair de cela. Et si je créais simplement quelques cercles différents ? Permettez-moi de souligner un élément du cercle fou de Kodak. Exécutons ce code trois fois. Trois. Vous voyez, le premier porte le nom que je, que je veux avoir ou donner au cercle. Mais maintenant, les autres auront ce suffixe, ce numéro supplémentaire. Pouvons-nous éviter cela ? Non, on ne peut pas. Maya dispose d'un moyen de s' assurer que les noms de nœuds sont uniques. Dans le cas précédent. Je pense que je devrais clarifier cela. Dans le cas précédent, je vais juste exécuter le code deux fois, il va échouer à nouveau. Prob porte le même nom. En effet, comme vous le remarquez, propriété est en fait imbriquée sous un autre nœud. Donc, dans ce cas, je permet que cela se produise. Mais ne t'inquiète pas pour ça. C'est un détail qui vous affectera pas trop pour le moment. Alors, comment traiter cette affaire avec mon SID et des chiffres supplémentaires à nos noms Venons-en à cela. 9. Plongée profonde - Aide et documentation: Avant de continuer, prenons un peu de recul et parlons un peu plus de la documentation. Revenons donc une fois de plus à la page de documentation. Pour y accéder, vous pouvez accéder à l'éditeur de script dans le menu d'aide. Cliquez sur Référence de commande Python. Et je vais vous amener à cette page ici. Maintenant, toutes ces commandes exécutent d'autres commandes qui sont disponibles dans la bibliothèque de commandes Maya , la bibliothèque CMBS. Ils sont organisés par catégories. Donc, par exemple , vous avez les animations ici. Vous les utiliserez beaucoup. Ou vous avez la partie recherche ici. Regardons donc l'autre commande que nous utilisons. Oh, en fait, jetons peut-être un coup d'œil au cube. Maintenant. Encore une fois, un bref résumé. Dans le coin supérieur droit de cette section, vous pouvez basculer entre les versions masculine et Python. Nous allons nous en tenir à la version Python. Synapse. Synapsis contient un résumé des arguments que vous pouvez avoir à disposition dans cette commande. Il y a une petite description. Et surtout, en bas, il y en a, il y aura des exemples. C'est ce qui vous sera le plus utile lorsque vous commencerez à utiliser une nouvelle commande. Parfois, vous pouvez obtenir toutes les informations dont vous avez besoin en essayant maintenant ces exemples. Super. La partie la plus complète est donc l'indicateur, la section de flux, également appelée arguments. Chaque indicateur ou argument a un nom long. Comme celui-ci, l'histoire de la construction ou un nom abrégé he H. C'est à vous de décider si vous souhaitez utiliser un nom court ou long. Je recommande généralement des noms longs car ils sont plus explicites, mais tout le monde a des préférences à cet égard. Vous trouverez les descriptions des commentaires ici. Maintenant, un type d'argument, comme je l' ai déjà dit, est un peu dommage que Maya n' utilise pas toujours les noms correspondant au type Python. Dans ce cas, linéaire signifie en fait flottant, qui est un nombre contenant des décimales. Ain't existe en Python sous cette forme abrégée d'entier, qui est essentiellement un nombre sans décimales. Dans ce cas, un en soi serait un entier, un point quelque chose serait un nombre flottant. Chaque fois que vous voyez ces crochets, cela signifie une liste ou un tuple. Nous y reviendrons très bientôt. Vous remarquerez probablement qu'il y a, y a ces lettres ici. Qu'est-ce que cela signifie ? Dans des propriétés ? Cela signifie que vous pouvez utiliser ces commandes lorsque vous créez, interrogez ou modifiez le nœud ou l'objet pour lequel vous les utilisez. Dans ce cas, la construction d' historique de construction de tas fixes n'est utilisée que pour créer et interroger. La plupart des autres arguments peuvent être utilisés pour l' édition. Qu'est-ce que cela signifie ? Cela signifie que vous pouvez utiliser le même argument dans la même commande, en l'occurrence un polycube. Vous pouvez soit l'utiliser pour créer un nouveau cube. Vous pouvez l'utiliser pour rechercher des informations à partir d'un cube existant, ou vous pouvez l'utiliser pour modifier un cube existant. Par exemple, si vous souhaitez modifier la largeur de votre cube, vous utiliserez l'indicateur d'édition pour cela, mais nous y reviendrons également dans d'autres projets. Il existe désormais d'autres moyens d' obtenir de l'aide de Maya. La principale, pour être honnête, est cette page que nous venons de voir. Le deuxième meilleur endroit pour le faire est probablement Google lui-même. Et Google en lui-même peut être une compétence que vous voudrez développer. Mais je recommande généralement taper ce que vous voulez faire. Et par exemple disons que vous vouliez trouver la commande actuelle Je suis le parent de mon Python. Cela vous donnera généralement un bon exemple ou un bon résultat, soit pour revenir à la documentation. Notez simplement que vous obtenez parfois une ancienne version de Maya ou que cela peut vous renvoyer vers d'autres sites Web. L'un d'entre eux qui sera très, très utile sera StackOverflow. Il s'agit d' une communauté pour les développeurs. Et vous trouverez ici une aide précieuse pour répondre à des questions très spécifiques. Je recommande donc de rechercher de l'aide dans StackOverflow, soit directement sur Google, soit dans la barre de recherche d'un StackOverflow. Il y a toujours beaucoup de forums. Je ne peux en recommander aucun en particulier. Il existe de nombreux forums d' artistes techniques qui vous apporteront de l'aide. N'ayez donc absolument pas peur de rechercher sur Google vos informations ou les erreurs que vous pourriez avoir, vos informations ou les erreurs que vous pourriez avoir car Google sera votre meilleur ami dans votre carrière de développement. Alors, comment pouvons-nous obtenir de l'aide ? Permettez-moi d'ouvrir un nouvel onglet Python. Une façon d'obtenir de l'aide est littéralement de parler de santé. L'aide est désormais une fonction intégrée à Python qui intègre une fonction. Et elle le fera, si la fonction contient de la documentation, elle vous donnera ces informations. Passons donc à une bibliothèque CMBS importante. Exécutons directement l'aide CMBS. Pour exécuter ceci. Maintenant, vous voyez qu'il vous a donné toutes ces informations. C'est beaucoup. C'est essentiellement ce que les développeurs de la bibliothèque CMBS ont inclus dans cette recommandation de la bibliothèque, et tout cela est à votre disposition. Pour être honnête, ce n'est pas très complet, mais c'est quelque chose qui vous indique où vous pouvez le trouver sur votre ordinateur. Ces boîtiers, ce chemin et toutes les fonctions qu'il contient. Nous pourrions par exemple cocher cette case ABC important dans Olympic Important. Maintenant, remarquez que pour consulter l'aide, je n'exécute pas la fonction. Je suis désolée pour ça. Je n'ajoute pas de parenthèse car je ne veux pas exécuter la fonction. Je veux juste obtenir de l'aide de sa part. D'accord ? Eh bien, celui-ci est très utile, ce qui est dommage, mais vous obtiendrez parfois de l'aide grâce à cette fonction d'aide. Laissez-moi, laissez-moi, laissez-moi trouver une fonction qui pourrait être utile. Celui-ci pourrait être plus utile. Oui, voilà. Il a juste fait une petite description, mais c'est assez utile. Il vous donne même une recommandation qui est excellente, excellente. Un autre moyen d'obtenir de l'aide, en particulier avec la bibliothèque de commandes Maya, consiste à activer l'aide rapide. C'est maintenant dans le menu de commande. Afficher l'aide rapide. Vous trouverez cette petite, cette petite section ici. Vous pouvez trouver des informations, trouver vos commandes. Disons, retrouvons Poly Cube. Maintenant, cela n'a aucun détail, mais il contiendra les arguments dont vous disposez. Par exemple, nous avons utilisé. Nous revenons à cet onglet. Nous avons utilisé l'argument name. Vous savez donc que cela vient de là. 11. 11 vous indique que c'est une chaîne, ce qui est vraiment sympa. Un autre semble en cours. C'est génial. Ce n'est donc pas très détaillé, mais c'est suffisant pour que vous puissiez au moins savoir en un coup d'œil quels arguments vous avez à votre disposition. Je n'ai pas l'habitude de l'utiliser, notamment parce que cela prend de la place dans l'éditeur de script, mais c'est utile de temps en temps. Je vais donc l'éteindre. Vous pouvez également obtenir de l'aide en cliquant sur Afficher l'aide sous forme d'infobulle. Maintenant, la façon dont cela fonctionne est : disons que je commence à taper la commande circulaire. Lorsque j'ouvre les parenthèses, vous verrez ces infobulles. Maintenant, c'est comme lorsque vous passez la souris dessus, comme sur un bouton d'étagère. Cela vous donnera une sorte d'info-bulle de défilement vers le haut, infobulles qui apparaissent lorsque vous passez la souris sur quelque chose. Cela vous indiquera qu'il contient un peu plus d'informations. Et il a les types d' arguments. De plus, les arguments sont des indicateurs disponibles pour ce commentaire. Personnellement, celui-ci est un peu intrusif car il couvre mon code et je n'aime pas vraiment ça. Mais c'est une bonne option. Beaucoup de gens l'aiment et c' est une bonne option à connaître. En général, je l'enlève, mais encore une fois, c'est une question de préférence personnelle. Voilà donc un bon aperçu des moyens d'obtenir de l'aide. Revenons au code. 10. Travailler avec des noms et des listes de nœuds: Pour trouver le nom Maya, nous utiliserons ou utiliserons une fois que nous aurons créé nos notes. Voyons le résultat de cette fonction ici. Commençons donc par le résultat dans une variable appelée contrôle. Maintenant, ne confondez pas le nom de cette variable et celui de ce contrôle de chaîne car ils le sont, ils sont très différents. Ils n'ont rien à voir l'un avec l'autre. En fait, j'évite toute confusion. Je vais inverser ces deux étapes de contrôle. Alors allons-y, exécutons-le. Et imprimons la sortie du contrôle. Cette variable dont nous stockions la sortie, la sortie de la commande circle ou la fonction circle dans cette variable. Laissons simplement ça. Juste pour le rendre un peu plus propre. Supprimons cela. Laisse-moi effacer mon histoire. Et voilà. Voici donc la sortie. Maintenant, remarquez qu'il y en a deux, encore une fois, nous avons ces crochets. Cela signifie que c'est une liste. Maintenant, cette cellule contient deux chaînes. Ne vous inquiétez pas pour le u. U signifie Unicode, mais à ces fins c'est essentiellement la même chose qu'une chaîne. Ne vous inquiétez donc pas pour l'UE. Vous remarquerez que nous avons le contrôle. Nous avons quelque chose d'autre appelé Make Nerve Circle. L'un d'eux est un peu énigmatique. Maintenant, exécutons-le encore quelques fois. Maintenant, vous verrez que la deuxième fois que nous l'exécuterons, c'est ici. Nous avons en fait le nom du nœud créé par Maya. Alors, qu'est-ce que cela signifie ? Disons que je vais copier-coller ceci ici juste pour le rendre un peu plus clair. Maintenant, le premier élément de la liste, c'est le nom réel du nœud que j'ai créé, c'est ce que nous voulons savoir, n'est-ce pas ? Permettez-moi de me débarrasser du U. Une fois de plus, l'UE n'a pas d'importance. Tu peux le laisser là si tu veux. Mais pour l'instant, je vais m'en débarrasser. Et puis il y a ce truc. C'est le, c'est le constructeur du nœud que les Mayas utilisent pour le créer. Qu'est-ce que cela signifie ? Faisons un autre exemple. En faisant la même chose avec le cube. Je pense que c'est peut-être un peu plus clair. Stockons donc le résultat du cube. Cette variable s'appelle prop. Permettez-moi de supprimer ce cercle que j'ai créé. Je vais maintenant mettre en évidence uniquement ces deux lignes de code. Vous remarquez que je ne mets pas en avant les autres. En effet, une fois que vous avez exécuté ces lignes de code, une fois que Maya les aura détectées, maya stockera essentiellement la dernière valeur de ces variables, ce qui peut être très pratique. Donc, dans ce cas, une fois que j'ai exécuté ces trois lignes de code, j'ai déjà enregistré le nom de cette variable ou la valeur de cette variable. Maintenant, je peux simplement exécuter ces deux lignes de code. Et ça marchera, ça marchera tout aussi bien. Alors allons-y. Faisons-le trois fois également. Encore une fois, remarquez que mes mains utilisent le nom que j'ai suggéré, qui est stocké dans la variable de nom géographique, qui est prep, c'est la chaîne de valeur. Mais comme il constate que l'une ou l'autre a déjà été créée, il ajoute ces noms et le résultat de chacune de ces commandes. Encore une fois, c'est le nœud réel qui a été créé. Et puis ce constructeur. Maintenant, ne t'en fais plus pour ça à partir de maintenant. Pourquoi nous soucions-nous de cette valeur première ? Alors, comment accéder à cette valeur ? Eh bien, comme je l'ai dit, laissez-moi coller à nouveau. Permettez-moi de le coller à nouveau ici, juste pour qu'il soit un peu plus facile voir et de me débarrasser des États-Unis, car ils ne le sont pas nécessairement en ce moment. Il s'agit d'une liste. Comme je l'ai déjà mentionné, vous savez que c'est Alice à cause de ces crochets. Et une liste est essentiellement une liste d'éléments, un ensemble de valeurs. Vous pouvez avoir des nombres entiers, qui ne sont que des nombres. Vous pouvez avoir des cordes, vous pouvez en avoir un mélange. Dans ce cas, il ne s'agit que d'une liste de chaînes. Comment puis-je obtenir le premier article ? Pour ce faire, nous utilisons une autre notation entre crochets. Maintenant, lorsqu'il s'agit de compter en programmation, et cela sera vrai pour la plupart des langages de programmation, mais surtout en Python, nous commençons à compter à zéro. Donc, l'indice ou la position, ou disons que le numéro de cet élément est zéro, donc c'est la position zéro, puis c'est la position un. Nous allons maintenant aborder très bientôt les détails. Mais pour l'instant, sachez que pour obtenir le premier élément de cette liste, nous allons le faire passer par l'index zéro. Nous commençons à compter à zéro pour diverses raisons. C'est une norme très courante, une norme dans les langages de programmation. Exécutons donc cette ligne de code. Imprimons simplement ceci. Maintenant, n'oubliez pas que j' imprime le premier élément, l'élément de la liste, et le tour est joué. C'est ce que nous obtenons. Essayons donc de le faire un peu proprement. Appelons cela, changeons cette variable. Appelons cela le contrôle. Appelons cela le contrôle. Encore une fois, nous savons que le résultat est la liste contenant à la fois le nom du nœud et le constructeur, ce qui ne nous intéresse pas pour le moment. nœud de contrôle Let's call sera le premier, le premier élément, l'élément de la liste de contrôle. Et maintenant, le nœud en sera le premier élément, dans le résultat que nous obtenons de Maya. Maintenant, si cela prête à confusion, ne vous inquiétez pas. Nous allons expliquer à nouveau les listes plus en détail très bientôt. Maintenant, comme vous pouvez l'imaginer, nous n'allions plus utiliser ces noms. Ces suggestions sont devenues des suggestions pour Maya doit ajouter des chiffres au nom, autant que possible, en utilisant quatre . Imprimons donc ces deux variables ici. Les nouvelles variables que nous avons créées, contrôlent donc le nœud, puis le nœud. Maintenant, ces deux variables représentent les nœuds réels qui ont été créés. Et voilà. Nous les contrôlons et en pratique dès la première fois que nous les créons. Si nous recommençons, contrôlons une sonde, une, exécutez-la encore de nombreuses fois. Vous voyez que le nombre augmente au fur et à mesure que nous exécutons le code. C'est exactement ce que nous voulons. Maintenant. Réglons notre pouvoir aux commandes. Nous voulons donc maintenant être parents du nœud de contrôle créatif. Nous voulions être parents de la sonde. Remarque. Permettez-moi de supprimer ces deux lignes, supprimer quelques lignes et d'exécuter ce code. Excellent. Voici donc les résultats que nous connaissons. En fait. Ça n'a pas marché , ça n'a pas marché. Oh, je l'ai mal fait. Nous voulons associer le nœud accessoire au nœud de contrôle. Nous voulons que le contrôle soit à l'origine du problème. Ce qui est logique. J'en suis désolée. Déboguez au fur et à mesure. Encore une fois. Excellent. Alors maintenant, c'est comme prévu Si nous le mettons de côté, exécutons à nouveau notre code juste pour nous assurer que cela fonctionne. Super. Maintenant, c'est contrôlé une fois et lâche. Encore une fois, comme je l'ai dit, ce cube est apparenté à quelque chose, j'autorise la répétition du nom, mais c'est très bien. Cela ne nous intéresse pas, car n'oubliez pas que le nom vient directement de Maya. Nous ne devinons aucun nom. Mon strlen, tu nous donnes exactement le nom qu'il a utilisé pour créer ce polycube ? Juste pour vérifier la santé mentale, recommençons. La troisième fois, c'est bon, comme on dit. Et nous y voilà. Maintenant, nous avons tout cela. Nous avons maintenant plusieurs accessoires qui fonctionnent en même temps. Faisons un petit ajustement avant de passer à la leçon suivante. Le petit ajustement que je souhaite que vous fassiez est essentiellement un ajustement du flux de travail. Ne serait-il pas intéressant que, lorsque vous créez votre équipement, nous ne voulions pas animer directement le cube. Il est fort probable que nous voulions animer la plate-forme. Alors, faisons en sorte qu'il sélectionne ce contrôle. Nous avons, ce sont les commandes de sélection qui sont excellentes. Alors voyons voir. Nous pouvons simplement le faire. Cmbs Dot sélectionne cela, cela fonctionne. Et nous voulons sélectionner le nœud de contrôle que nous avons créé, n'est-ce pas ? Il transmet donc le nœud de contrôle à cette fonction. Permettez-moi de clarifier cela à travers mon histoire. Et exécutons à nouveau le code. Et voilà. Maintenant, dès que vous créez votre préparation, vous pouvez commencer à l'animer. 11. Extension de l'outil par des déclarations "if": Notre travail consiste essentiellement à faire ce dont nous avons besoin. Mais rendons les choses un peu plus intéressantes. J'ai dit au début que l'accessoire ne devait pas nécessairement être un simple cube. Ajoutons-en un peu, gardons-nous quelques options supplémentaires. Et nous allons également introduire un nouveau concept. Et c'est la déclaration if. Si vous lui demandez s'il se passe quelque chose, faites-le autrement ou faites autre chose, ce qui signifie que vous pouvez effectuer un changement et choisir une option différente en fonction de la situation. C'est ainsi que fonctionnent les instructions iif. Alors, comment s'y prendre ? d'abord, déterminons où cette condition pourrait changer. Dans ce cas, ce serait ici, qui est comme le cube. Nous savons que le contrôle, nous ne voulons pas le changer , vous voulez simplement qu' il s'agisse d'un simple cercle. Nous voulons simplement modifier la géométrie. Commençons donc par modifier la géométrie. Au lieu d'en faire un cube. Faisons une sphère, par exemple , laissons Maya nous dire ce dont nous avons besoin. Cette coque ressemble à des sphères en polyéthylène, tout ce dont nous avons besoin. Donc, saisissons cela avant d' ajouter l'énoncé qui signifie « nettoyons tout ça ». Tapons donc à nouveau Pauli majuscule S. Maintenant, exécutons simplement ce code. Notez maintenant que le code est exactement le même que celui que nous avions. Tout ce que nous changeons, c'est un cube ou une sphère. Et voilà. Le code fonctionne parfaitement. Eh bien, comme avant. Maintenant, disons que nous voulons, disons un cône. C'est assez simple, tapez simplement cône au lieu de sphère. Découvrez la beauté de la cohérence que Maya apporte. Désolé, je voulais taper cône. Écrivons-le. Parfait. Alors, restons-en à ces trois options. Nous savons maintenant que tout ce dont nous avons besoin dépend de l' option que nous voulons. Nous voulons changer cela, cette commande ou cette fonction. Maintenant, ajoutons une variable qui nous aidera à choisir l'option. Appelons ça type. Et ce sera aussi une chaîne. Cela peut être tout ce que vous voulez, cela peut aussi être un nombre si vous voulez décider de cette façon. Mais pour le rendre plus convivial, nous allons utiliser une chaîne. Supposons que la valeur par défaut soit coupée en cubes. Maintenant, remarquez que je l'appelle intentionnellement type d'accessoire, pas seulement type. La raison en est qu'il existe une fonction intégrée dans Python qui est type. Et ce n'est généralement pas une bonne idée de créer des variables portant le même nom que les fonctions intégrées. En effet, si vous le faites, votre code ne se cassera pas, mais vous allez essentiellement remplacer la fonction intégrée à Python et vous n' y aurez pas accès. Dans ce cas, nous n'avons pas besoin de cette fonction, pouvez donc le faire. Mais en général, c'est une bonne pratique de ne pas le faire. Je vais dire prototype. Je vais dire de le réinitialiser en tant que cube. Pour l'instant. Nous allons dire que si le type d'accessoire est égal à qb. Maintenant, faites attention et je dis « double égal ». Au lieu d'un égal simple, lorsque vous utilisez un égal simple, vous attribuez une valeur à une variable. Vous utilisez un double égal, vous faites une comparaison. Et maintenant, voici quelque chose, quelque chose de nouveau appelé indentation nous pouvons utiliser à l'intérieur de cette déclaration if. Nous allons devoir le mettre en retrait à l'intérieur. L'indentation standard en Python est environ quatre espaces, soit 1234. Vous pouvez également utiliser l'onglet, dans ce cas, situé en haut juste au-dessus du verrouillage en majuscules, à côté de la touche Q. Dans ce cas, Maya écrit ou traduit en Maya se traduit par un toucher à quatre espaces. Gardez simplement à l'esprit qu'en général, c'est une bonne pratique d'avoir les bases de force dans Python 1234. Maintenant, je vais utiliser un onglet parce que c'est équivalent, parce que nous sommes à l'intérieur de Maya. Si nous étions à l'intérieur de quelque chose comme le Bloc-notes, par exemple celui-ci, l'onglet. Laisse-moi m'y attarder un peu. Disons juste à un, il s'agit donc d'un onglet. Ce sont quatre espaces, 1234. Ce ne sont pas les mêmes. C'est donc une distinction très importante. indentation est quelque chose qui rend Python très facile à lire car vous n'avez pas besoin de beaucoup de syntaxe supplémentaire, mais vous devez être conscient de l'indentation. Si moins d'indentation est décalée d'un espace, vous allez obtenir une erreur. Nous pouvons le voir dans un instant. Donc, encore une fois, si le type d' accessoire est égal à cube, alors nous allons le faire. En fait. Je tape un cône. Disons donc cube. Maintenant, disons l. Si cela équivaut à dire « else if ». Mais dans ce cas, vous devez taper LF prop type equals, equals b ou, par exemple, Poland. Notez maintenant qu'à la fin de l'instruction if, j'écris une colonne. C'est très important. Si vous ne le faites pas, Python vous donnera une erreur. Et remarquez également qu'après les deux points, lorsque je tape, entrez Maya, script ou dans Maya cela me donne automatiquement cet espacement , car cela indique que je dois inventer quelque chose là-dedans, sinon une déclaration. Donc, cette affaire, allons-la. Maintenant. Sphère au lieu d' un cube ou d'une sphère, parfait. Et maintenant, la dernière option dont nous avons parlé était un cône. Donc, le prototype de LA est égal à deux points, deux points. Copions-collons ceci. Et vous constaterez peut-être déjà une redondance dans ce code, qui est formidable si vous vous êtes fait du bien. Bravo. Si ce n'est pas le cas, je le mentionnerai dans une seconde. Donc, un cône en polyéthylène. Excellent. Maintenant, que se passera-t-il si, maintenant, souvenez-vous, désolé cette variable, nous comparons cette chaîne à la valeur de cette variable ici. Que se passera-t-il maintenant s'il n'y a aucune option que nous acceptons ? Prenons une valeur par défaut, par exemple. Donc, pour cela, vous pouvez dire autre chose. Attribuons. Disons que la valeur par défaut sera cube. Disons également à l'utilisateur qu'il n'a pas fourni de valeur sur, que nous utilisons une valeur par défaut. Il existe donc une fonction appelée alerte, de même que l'embarquement. Et l'avertissement nous permet de simplement donner à un message une option non valide en utilisant le cube x. Cela pourrait donc être un meilleur message, mais en fait une option de type d' accessoire non valide utilisant cube par défaut. Et voilà. C'est un peu plus clair. Excellent. Exécutons donc ce code avant de nous y plonger un peu plus profondément. Permettez-moi de nettoyer un peu mon espacement et peut-être un espace de plus, mais nous serons un peu plus faciles à lire. Et voilà. Très bien, exécutons simplement ce code et nous obtenons un cube. Maintenant, ajoutons une autre option. Disons une sphère. Et voilà, nous obtenons une sphère. Maintenant, que se passerait-il si nous faisions une table, par exemple celle-ci ? Maintenant, n'hésitez pas à mettre la vidéo en pause et à essayer de deviner ce qui va se passer. Alors exécutons-le. Et voilà. Vous voyez donc que nous avons cet avertissement ici. option de type d'accessoire non valide est par défaut à Cuba et nous avons obtenu un cube. Donc, ce qui s' est passé là-bas, c'est que puisque la valeur ne correspond à aucune de ces options que nous avons insérées, alors nous utilisons l'autre par défaut. Maintenant, notez également que cela distingue les majuscules et minuscules. Donc, si je tape sphère avec un S, S majuscule au lieu d'un S minuscule, nous allons obtenir un autre cube. Et ils sont bouleversés parce que décalés parce que j'ai déjà déplacé l'autre. Nous allons donc tester notre dernière option qui est un cône. Excellent. Et voilà. Le total est donc maintenant un peu plus robuste. Nous avons d'autres options. Et c'est génial. Vous auriez même pu créer trois boutons d'étagère et simplement modifier cette variable pour obtenir les trois formes différentes. Examinons donc un peu le code. Une fois que je peux remarquer que nous utilisons l'instruction if pour valider ou conditionner. C'est ce qu'on appelle une condition. Tu es, tu fais une comparaison. Vous dites que si cette variable est égale à cette valeur, nous allons créer un polygone. Sinon, sinon, si cette variable est égale à cette autre valeur, nous allons utiliser cette autre fonction. Et à la fin, nous avons, disons, une autre déclaration en blanc. Nous n'avons pas de condition spécifique vérifier comme dans cette autre déclaration. Cela revient essentiellement à dire contraire, si quelque chose d'autre se produit, même si cela n' est plus nécessaire maintenant. Vous pouvez avoir une instruction if toute seule et elle fonctionne, elle fonctionne, elle fonctionne bien. Cela vous donne simplement plus de flexibilité pour avoir des conditions supplémentaires ou une situation un peu fourre-tout , ce qui est le cas dans ce cas. Super. J'ai donc mentionné qu'il y avait une redondance dans ce code. Et voici cette ligne. Nous nous souvenons donc une fois de plus que si vous exécutez la commande poly cube et laissez-moi le faire. Si je sélectionne simplement cette fonction et que je l'exécute, vous verrez le résultat. Maya vous donne le résultat. C'est le nom du nœud. Et puis il y a cette autre forme qui construit le cube dans ce cas, mais elle ne nous intéresse pas à ces fins. Mais c'est ainsi que se trouve la liste. Encore une fois, n'oubliez pas que la liste est entre crochets. Et le fait est que ce qui nous intéresse, c'est le premier élément de cette liste, en l'occurrence le nom du nœud qui a été créé. Et nous y accédons par le biais de cette indexation. Donc, avec cette notation, nous commençons à compter à zéro lorsqu'il s'agit de listes en Python. Nous accédons donc au premier index, l'index des zéros, et nous l' attribuons à cette variable. Maintenant, il y a des licenciements et nous faisons la même chose à chaque fois. Donc peu importe. Peu importe la commande que nous exécutons. Nous stockons toujours ce résultat dans le même nom de variable, n'est-ce pas ? Nous n'avons donc besoin de le faire qu'une seule fois. Supprimons donc cette indentation et retirons-la des instructions if else. Et maintenant, nous n'avons plus besoin de ces lignes ici. Maintenant, faites attention à l'indentation. Encore une fois, notez que cette variable de barre d'accessoires est indentée sous le signe if. Sinon, si des déclarations. Et le nœud final que nous obtenons se trouve en dehors de ces déclarations. C'est important. Parce qu'encore une fois, si nous indentons ici, si nous indentons ceci, cela ne sera désormais exécuté que dans l'instruction else. Et si nous y inscrivons l'instruction if au début, l'instruction if au début, nous n'y arriverons jamais. Et nous pourrions même avoir une erreur. Supprimons cela de ces déclarations. Et aussi, si ce n'était pas encore évident , ils l'ont fait, ils ont une déclaration. Les instructions if-else fonctionnent comme un interrupteur. La première fois, si vous attrapez la maladie pour la première fois, elle s'arrêtera là, elle ne passera pas aux affections suivantes. Si cette condition n'est pas vraie, il essaiera de passer à la suivante dans le cas contraire. Donc, à côté de la dernière barre, si vous le pouvez, si la condition est remplie à l'une de ces étapes précédentes, elle s'arrêtera là. Super. Exécutons donc ceci juste pour assurer que nous n'avons pas cassé le code. Et voilà. Cône. Encore une fois. Sphère. Excellent, cela fonctionne comme prévu. Maintenant, voyons ce qui se passe si vous faites des erreurs. Et il y a de fortes chances que tu l'aies fait. Et si c'est le cas, c'est incroyable, car les erreurs vous permettent d' apprendre beaucoup plus rapidement. Supposons donc que votre indentation soit un peu légère, ou en fait, cela pourrait convenir, car c'est la même déclaration if. Pour prouver ce point. Ajoutons quelques déclarations imprimées. Imprimer un cube d'aide. Permettez-moi de passer à un cube, afin que nous entrions cette instruction IF. Alors maintenant, lorsque nous saisissons cela, le grade devrait être imprimé dans un cube. Excellent. Maintenant, pour prouver mon point de vue concernant l'indentation, supprimons un espace pour cette invitation. Maintenant, notez que ces deux lignes de code ne sont pas alignées. Et voilà, vous obtenez cette erreur. C'est l'importance de l'indentation. Chaque fois que vous avez plusieurs lignes de code, l' une après l'autre, l'indentation doit correspondre. Et en général, il suffit de s'en tenir à quatre espaces. Ou si vous travaillez dans un éditeur de texte de codage, ce qui sera bientôt le cas. L'utilisation de l'onglet sera largement suffisante. Réduisons-le à la normale. Excellent. En fait, je vais me débarrasser de cette ligne parce que nous n'en avons pas vraiment besoin. Et l'autre chose que j'ai mentionnée, c'est la chronique. Si vous n'avez pas cette colonne pour une raison quelconque, laissez-moi effacer la fenêtre de sortie. Cela vous donnera une erreur de syntaxe. La syntaxe signifie que vous ne recevez pas la syntaxe ou le type de caractères que Python attend de vous. Ce qui est génial, et cela va être très utile. Notez que vous les avez tous. C'est ce que l'on appelle une trace de pile. Stack retrace les étapes qui ont conduit à l'erreur que vous avez rencontrée. Et Maya vous indique très facilement la ligne où votre code a échoué. Dans ce cas, c'est ligne par ligne 13. Maintenant, c'est la ligne 13, mais c'est en fait la ligne juste avant. Mais cela vous indique vraiment l' endroit où cela a échoué. est pas toujours le cas dans ce cas, c'est très clair et il ne vous indique pas vraiment ce qui manque, mais il vous indique la zone générale. Vous pouvez donc revenir en arrière, parcourir votre code et essayer de trouver l'erreur. Ce sera donc très utile. Maintenant, avant de terminer la vidéo, faisons autre chose qui rendra notre code un peu plus agréable. Ajoutons quelques commentaires. Donc, ici, sur la septième ligne, juste avant de créer ce cercle, c'est notre type de contrôle, la virgule, le signe numérique ou le hashtag, quel que soit le nom que vous voulez lui donner. Et écrivez simplement une note. Je vais juste écrire create control pour break, par exemple c'est un commentaire. Ce n'est pas du code qui sera exécuté. Python l'ignore essentiellement. C'est juste pour que vous puissiez taper une note pour vous-même ou pour toute autre personne qui exécutera votre code. Maintenant, allons-y. Supposons que créer une géométrie devrait indiquer que géolocalisation en fonction du type serait suffisamment claire et déroulante vers le bas ici. C'est ici que nous obtenons le nœud réel qui a été créé. Nœud créé. Et ce n'est pas le cas, GO TO troll. Ensuite, nous avons sélectionné. Je vais sélectionner cette option très explicite. Je dirais que le terme parent est également très explicite, donc cela ne me dérange pas de répondre à l'autre commentaire, mais laissons-le là. Il n'y a pas de règle générale en matière de commentaires. C'est à votre discrétion. Trop de commentaires peuvent apparaître sur le code du wafer. Mais l'absence de commentaire peut également rendre plus difficile la compréhension de ce qui se passe dans votre code. Trouvez donc votre propre équilibre lorsqu'il s'agit de rédiger des commentaires. Parfois, notre variable bien nommée, par exemple prototype, n'a pas elle-même besoin d'un cosinus de commentaire. C'est très explicite, donc tout comme le nom du contrôle, le nom GO, une fonction bien nommée, et nous allons créer nos propres fonctions. Il est très certain que cela peut également éviter d' avoir besoin de commentaires, par exemple parent est très explicite. Sélectionnez. Il n'est pas nécessaire de dire ce que Select va faire, car vous savez exactement ce qu'il va faire. Donc oui, nous pourrions peut-être en ajouter quelques autres, mais je pense que c'est suffisant pour le moment. 12. Plongée profonde - Déclarations et booleans: Parlons de ses déclarations. Si les énoncés sont très simples et pour bien les comprendre, vous devez connaître deux concepts. L'une d'elles concerne les conditions , également appelées déclarations conditionnelles. Et c'est la base d'une déclaration si, parce que je suis une déclaration IF, c'est essentiellement dire que si cette condition est vraie, faites quelque chose, sinon, faites autre chose. Quelle est cette condition ou, ou ne fais rien si tu le souhaites. Et ces déclarations de condition se résument à ce que l'on appelle un type de données booléen, appelé booléen, également connu sous le nom de bol. Il s'agit d'un type de données très simple qui peut avoir l'une des deux valeurs suivantes, vraie ou fausse. C'est ce qu'on appelle une valeur binaire, qui peut être un zéro ou un, essentiellement une valeur oui ou non, vraie ou fausse. C'est vrai. Faites attention au T. majuscule. C'est la syntaxe de Python ou false. Faisons donc un exemple. Créons une variable, juste un nombre simple, num est égal à dix. Juste à titre d'exemple. Nous allons dire que si le nombre est égal à dix, nous allons imprimer oui, par exemple , sinon, nous allons imprimer. Non. Excellent. Exécutons simplement ce code. OK, désolée, c'était de ma faute. En fait, je n' imprime rien. Laisse-moi régler ça. Nous y voilà. Et voilà. Maintenant, nous imprimons. Oui. Maintenant, si on le remplace par un neuf ou que l'on imprime et non, excellent. Découvrons donc ce qui se passe ici. C'est votre condition ici même. Num est égal à dix. Maintenant, remarquez, eh bien, tout d'abord, notons, y a-t-il une intention ici ? Et dans le cas de cette erreur, chaque fois que j'appuie sur Entrée, cela me donnera automatiquement cette indentation. Mais n'oubliez pas que Python a besoin d'une inondation et qu'il se compose généralement de quatre espaces. Ou dans le cas de mon éditeur de programmation en ce moment, ce sera un onglet, qui sera l' équivalent de quatre espaces. C'est très important. Si nous ne l'avons pas, Python générera une erreur. Notez également la colonne à la fin des if et else. Mais c'est très important. Revenons donc à cela. C'est ton état. Ce que nous faisons, c'est demander, en gros, si le nombre est égal. Maintenant égal, égal, c'est une comparaison. C'est ce qu'on appelle une comparaison ou par opérateur. Et un seul signe égal est un opérateur d'affectation. Cela signifie donc essentiellement qu' un seul signe égal attribuera une valeur à quelque chose, dans ce cas une variable. Et un signe double égal essaiera de faire une comparaison entre deux valeurs différentes. Excellent. Il existe donc différents types d'opérateurs de comparaison. Nous n'allons pas tous les mentionner , car cette vidéo se concentrera sur les déclarations If et les booléens. Mais laissez-moi vous en montrer quelques autres. Le contraire des égaux, des égaux et non des égaux. C'est un signe d'exclamation. Et un simple égal est appelé zéro égal et il vérifie l'inverse. Il s'agit donc de demander si le nombre ou la variable num n' est pas égal à dix ? Donc, si vous exécutez ce code, oui, neuf n'est pas égal à dix, environ 20. C'est vrai, 20 n'est pas égal à dix ou dix. Eh bien, ce n'est pas vrai parce que dix est égal à dix, donc cela ne remplit pas cette condition. Excellent. Faisons donc un autre exemple. Supposons que nous vérifiions une série de chiffres. Disons qu'on demande si le nombre est inférieur à zéro. Supposons que nous voulions que notre plage soit comprise entre 0 et 100 si le nombre est inférieur à zéro. Trop bas, ramenons trop bas. Si cela a une syntaxe spécifique l, si cela vous permet de vérifier une autre condition, L, si le nombre est supérieur à 100, indiquera trop élevé. Sinon, nous ne vérifierons aucune condition spécifique, tout simplement. Ce que nous allons dire, nombre au sein de rich, est une question pour laquelle j'ai une erreur de syntaxe car il nous manque les parenthèses ici. Excellent. Vous avez obtenu un numéro à portée. Que se passera-t-il si on passe à 100 ? Un chiffre dans la fourchette ? 101 ans ? Élevé, et juste pour compléter, moins cinq, c'est trop bas. Excellent. Rappelez-vous donc que j'ai dit que les déclarations conditionnelles se résument essentiellement à un booléen, vrai ou faux. Alors allons-y, voyons ça. Voyons cet exemple. Permettez-moi de supprimer tout cela. Et attribuons cette comparaison à une variable. Nous appellerons une empreinte a. Alors, que sommes-nous, que faisons-nous ici ? En fait, aucune n' existe plus, donc je ne peux pas le faire car nous avons supprimé cette variable. Faisons simplement quelque chose de simple nous l'avons fait au début. Donc, cinq est égal à cinq. Nous attribuons donc le résultat de cette comparaison à cette variable. Maintenant, essaie de penser à ce qui va se passer. C'est jouer ça. Et c'est vrai. Cinq est égal à cinq. Génial. Maintenant, disons que c'est cinq ou moins, ou égal à cinq. C'est vrai. Cinq, moins ou égal à six. Eh bien, non. Non, ça l'est. C'est vrai. Désolée. Oui, c'est cinq, moins ou égal à quatre. Non, ça ne l'est pas, c'est faux. Remarquez donc comment nous obtenons ce résultat. Vrai ou faux en ce qui concerne cette condition. Permettez-moi maintenant de revenir un peu en arrière pour revenir à nos déclarations if précédentes. C'est exactement ce qui se passe ici. Leur déclaration consiste donc essentiellement à évaluer cette condition, résumant à un vrai ou à un faux. Alors maintenant, vous vous demandez peut-être si nous pouvons simplement dire vrai ou faux ? Et vous aurez raison si nous disons que si c'est vrai, imprimez, oui. Sinon, imprimez, non. Et voilà. Dans ce cas, nous n'avons plus besoin de la variable num. Dans ce cas, le vrai sera toujours vrai. Génial. Maintenant, qu'en est-il du faux ? Faux sera toujours faux. Nous allons donc imprimer dans ce cas. Maintenant, laissez-moi vous montrer une dernière chose. Tu peux inverser. Vous pouvez également effectuer des opérations avec des booléens. Vous pouvez dire que vous pouvez faire le contraire pour que ce ne soit pas faux. Et analysons cela dans un exemple isolé. N'imprimons pas de balles. Maintenant, encore une fois, mettez la vidéo en pause et réfléchissez quelques secondes à ce que vous allez imprimer. Maintenant, faisons les choses comme il se doit. Maintenant, si ce n'est pas vrai, qu'est-ce que cela va imprimer faux ? Parce que ce qui n'est pas vrai est essentiellement faux. Génial. Nous allons donc dire que si ce n'est pas faux, imprimez, OUI. Sinon, imprimez, sachez que cela pourrait être un peu artificiel, un peu confus. Mais une fois qu'on y pense, c'est parfaitement logique. Ce n'est pas faux. Nous allons donc imprimer « Oui ». Et si je disais que ce n'est pas vrai, pas vrai, ce n'est pas vrai, c'est faux. Il se peut donc que la division ne soit pas atteinte. Ce sera faux. Nous allons donc nous retrouver dans cette autre situation. Alors. Et voilà. J'espère que si les déclarations sont un peu plus claires maintenant, elles seront extrêmement percutantes. Ils sont très simples, mais vous les utiliserez comme commutateurs pour guider le flux de votre code et pour permettre à votre code d'être très polyvalent et très élégant d'une certaine manière. 13. Introduction aux fonctions: Très bien, vous avez parcouru un long chemin dès votre premier projet. Et en fait, en très peu de lignes de code, vous pouvez voir que ce ne sont que 31 lignes et qu'il y a beaucoup d'espace vide entre les deux. Vous avez acquis des compétences très puissantes et très utiles, des compétences qui vous permettront de créer des variables. En arriver là est une très belle réussite. Tu devrais être fière de toi. Félicitations donc pour cela. Même si certaines d'entre elles sont encore un peu confuses, veuillez noter, bien que cela soit normal, que cela représente en quelque sorte beaucoup d'informations et ne vous inquiétez pas, car nous allons réutiliser toutes ces connaissances, toutes ces informations dans les prochains exemples et les prochaines leçons. Encore une fois, c'est un très bon progrès et cela signifie que vous êtes prêt à passer au niveau supérieur. Alors, de quoi avons-nous besoin pour améliorer nos compétences en matière de codage ? Une chose que nous devons faire est sortir de ce groupe, que ce soit grâce à un don ou à Maya. Et je veux dire, c' est suffisant. Il suffit de taper des coordonnées comme nous l'avons fait jusqu'à présent. Mais nous devrions vraiment utiliser un éditeur de texte ou doté de capacités de programmation, de fonctionnalités de programmation. Cela vous permettra non seulement d' écrire du code en dehors de Maya, mais aussi de rendre votre expérience de codage un peu plus agréable et plus agréable. Et ce sera la première étape pour apprendre à créer vos propres modules ou vos propres bibliothèques afin que vous puissiez importer votre propre code, comme nous le faisons avec la bibliothèque CMBS sans votre propre bibliothèque. Mais avant d'en arriver là, nous devons apprendre un autre concept. Et c'est l'un des concepts les plus importants de ce que l'on appelle la programmation orientée objet. Et c'est le cas, cela vous permettra d' apprendre à créer du code évolutif et organisé. Et cela vous permettra vraiment de libérer toute la puissance de la programmation. Et c'est le concept de fonctions. Nous allons sortir de Maya pendant une seconde pour parler des fonctions. Et j'espère que cela ne vous dérange pas que j'utilise de la peinture. Je sais que ce n'est pas le meilleur outil de dessin, mais il est assez bon pour ce dont nous avons besoin en ce moment. Donc, les fonctions, il y a deux manières de penser les fonctions. L'un d'entre eux, que nous avons déjà mentionné, est de les considérer comme une boîte noire. Laisse-moi juste dessiner. J'ai essayé de faire une boîte ici. C'est donc une boîte mystérieuse dans le sens où nous ne savons pas et ne nous soucions pas vraiment de ce qui s'y passe . Tout ce que nous savons et ce qui nous importe, c' est que cela nécessite une contribution. Et puis, eh bien, les entrées sont des fonctions. Ne prenez pas toujours une entrée. Très souvent, ils le font, mais ce n'est pas obligatoire, mais ils retournent toujours quelque chose. Et c'est un mot clé. Retourner. Les fonctions renverront toujours une valeur qui est la sortie de la fonction. Et comme nous l'avons déjà vu, nous pouvons stocker cette valeur dans une variable. Maintenant, si la valeur de retour d' une fonction n'est pas définie, elle vous donnera par défaut quelque chose appelé un nun, qui est essentiellement une valeur nulle. Nous allons en apprendre plus à ce sujet très bientôt. Passons donc en revue un exemple qui devrait nous être familier. La fonction Poly Cube. Donc, encore une fois, nous ne savons pas vraiment et nous ne nous soucions pas de la façon dont mon œil crée réellement ce cube, n'est-ce pas ? Tout ce qui nous intéresse, c'est que cela nécessite quelques entrées, comme nous savons qu'il prend un nom pour pouvoir nommer le cube. Excusez mon écriture ? Et sur la base de la documentation, nous savons également qu'ils prennent tout autre nombre d' arguments que nous utilisons pour modifier la sortie. Et puis le résultat est bien sûr un cube. Mais comme nous l'avons déjà vu, la valeur renvoyée par cette fonction est en fait une liste. Et cette liste contient deux éléments. L'un d'eux est le nom du nœud et l'autre est un autre objet, une autre forme qui est la construction même du cube. Mais jusqu'à présent, nous ne nous sommes vraiment intéressés qu'au premier élément de cette liste. Encore une fois, c'est ainsi que vous pensez à une fonction lorsque vous l'utilisez. Maintenant, l'autre façon dont vous y pensez, c'est lorsque vous créez réellement la fonction. Et dans ce cas, c'est vous qui définirez ce qui se trouve à l'intérieur de cette boîte bleue, à l'intérieur de cette boîte mystérieuse. Et c'est tout simplement du code. Très similaire au code que vous avez écrit jusqu'à présent, quelques petites exceptions près, mais il s'agit essentiellement d'un ensemble d'instructions. Il s'agit essentiellement d'un ensemble d'étapes ou d'un ensemble d'instructions qui peuvent ou non prendre une entrée, faire quelque chose avec l'entrée, puis donner une valeur à celui qui appelle la fonction. Ou maintenant, ils peuvent ensuite stocker dans une variable s'ils le souhaitent. Par exemple, passons en revue ces exemples très simples. Disons que nous voulons créer une fonction de recette de gâteau. Recette de gâteau. Et disons que nous voulions prendre en compte le nombre de personnes. Disons que n. N signifiera que le nombre de personnes pour lesquelles nous voulons le gâteau, la fonction prendra n, qui est un nombre. Dans ce cas, il s'agit d'un entier. Un entier n'est qu' un nombre entier, comme nous en avons déjà parlé. Ensuite, il déterminera les quantités, les ingrédients et tout ce qu'il doit faire pour donner une recette à ce nombre de personnes. Et puis, par exemple disons qu'il renvoie une chaîne, qui est juste le texte, seront les textes mais la recette qu'il contient. Maintenant, quand quelqu'un utilise cette fonction, il appellera cake. Recette de gâteau. Nous savons qu'il attend n, qui est un entier. Maintenant, c'est toi, toi, tu décides du nom à donner. Cela deviendra une variable. C'est vous qui décidez comment le nommer, mais nous savons qu'il s'agit d'un entier, il faut donc un nombre. Disons que nous voulons un gâteau pour quatre personnes. Maintenant, quiconque appelle cette fonction peut simplement dire qu'il peut simplement en stocker le résultat dans une variable. Dans ce cas, j'appelle cette variable recette. Donc, ce qui se passe ici, c'est que nous revenons à considérer la fonction comme une boîte dans laquelle nous ne savons pas ce qui se passe en vous en tant que développeur, bien sûr, vous savez ce qui se passe à l'intérieur, mais quelqu'un d'autre qui utilise la fonction n'a pas besoin de le savoir. Vous pouvez même modifier les instructions contenues dans la fonction. Et ils appelleront toujours Cake Recipe avec les arguments que vous définissez pour la nouvelle fonction. Donc, ce qui va se passer, c'est votre fonction prendra cette entrée. Il effectuera une sorte de codage à l'intérieur pour traiter la recette, puis restituera cette valeur à l'utilisateur afin qu'elle puisse être ignorée ou stockée, dans ce cas dans cette variable appelée recette. J'espère donc que c'est assez clair. Maintenant, allons-y et créons des fonctions réelles. Ainsi, lorsque vous créez une fonction, cela s'appelle définir. Une fonction. Le type signifierait la mort, la définition de la scène plus dans la définition, les espaces D, E , F, puis le nom de votre fonction. Faisons quelque chose de simple. Disons, créons une fonction qui dira bonjour. Alors tapez, dites souligner Bonjour, maintenant ouvrez et fermez les parenthèses. Et commençons simplement. Disons d'une fonction qui ne prend aucun argument, aucune entrée. Et puis deux-points, appuyez sur Entrée. Vous remarquerez que mon nom m'a automatiquement donné cette indentation. Chaque fois que vous créez une fonction, tout ce qui entre dans la fonction doit être indenté. N'oubliez pas qu'il s'agit de quatre espaces. Ou, dans le cas de l'éditeur de script, il peut s'agir d'un onglet sur tout le code. Comme nous l'avons mentionné précédemment, toutes les instructions Comme nous l'avons mentionné précédemment, que nous voulons avoir dans la fonction seront indentées de cette façon. Nous allons donc avoir un message, et ce message restera très simple. Disons simplement bonjour. Maintenant, ne retournons rien pour le moment, imprimons simplement ce message. Excellent, alors essayons ça. Exécutons ce code. Aucune erreur, mais rien ne s'est passé. Nous venons de rétablir la constitutionnalité de notre code. Disons, écrivons une fonction ici. Maintenant, ne l'appelons pas encore. Écrivons cela, voyons ce qui se passe. Rien ne se passe. Imprimons maintenant la fonction réelle juste pour l'inspecter un peu. Intéressant, nous avons un truc bizarre. Il dit que la fonction dit bonjour à un nombre aléatoire, apparemment aléatoire. Donc, comme je l'ai déjà mentionné, ce qui se passe ici, c'est comme je l'ai déjà mentionné, ce qui se passe ici, j'ai mentionné l'idée de la programmation orientée objet. Une fonction, et presque tout ce qui est en Python s'appelle un objet. Maintenant, ne vous inquiétez pas trop à propos cette définition d'un objet. Mais en gros, sachez que cette fonction existe désormais en mémoire, c'est pourquoi nous avons obtenu ce numéro. Votre fonction est essentiellement enregistrée dans du rhum neuf. Encore une fois, ne vous inquiétez pas trop ces détails techniques. Mais sachez que cette fonction existera, mais elle ne nous donnera pas encore sa valeur tant que nous n'aurons pas appelé la fonction. Appelons donc cette fonction et exécutons le code. Excellent. Maintenant, il s'agit en fait de dire bonjour. Nous avons maintenant parlé des valeurs de retour. Voyons donc ce que cette fonction renvoie. Je vais taper le résultat égal, dire bonjour, ouvrir et fermer les parenthèses. Nous allons maintenant stocker le résultat ou la valeur de retour de cette fonction dans cette variable appelée résultat. Imprimons ça. Imprimez les résultats. Excellent. Nous sommes donc toujours en train de vous dire bonjour, comme vous pouvez le voir ici. Et nous avons ce truc appelé « aucun ». Comme je l'ai déjà mentionné, inconnu, c'est un peu comme une valeur nulle , un peu comme une valeur nulle ou vide. Vous pouvez traiter un élément non similaire à un faux, ce qui, d'une certaine manière, est un peu comme un faux dans un booléen. Mais c'est un type de valeur qui lui est propre . C'est en fait très utile. Ce n'est pas seulement vide, c'est en fait très utile pour vérifier si vous allez récupérer une valeur d'une fonction, comme nous allons le voir très bientôt. Mais si vous vous en souvenez, j'ai dit que les fonctions renvoient toujours une valeur. Maintenant, puisque nous ne renvoyons rien de manière explicite, python renverra par défaut unknown. Cela revient donc à dire explicitement ne rien renvoyer. Changeons donc un peu cela. Et au lieu d' imprimer le message, renvoyons-le. Notez maintenant qu'il n'y a pas de parenthèse ici, c'est juste un message spatial renvoyé. Maintenant, une chose à noter est que retour signifie la fin de la fonction. Il renverra non seulement la valeur, mais mettra également fin à la fonction. Ou nous allons voir ça dans une seconde. Laissons ça. Je vais me débarrasser des résultats d'impression pour le moment. Et exécutons ce code. Permettez-moi abord d' effacer la fenêtre de sortie. Exécutons ce code. Rien de semblable ne s'est produit. Pourquoi pas ? Eh bien, la raison en est que nous n'imprimons plus. Nous renvoyons simplement le message au lieu de l'afficher. Maintenant, si nous imprimons réellement le résultat que nous avons ici, nous attribuons à nouveau, encore une fois, la valeur de retour de la fonction à cette variable appelée résultat. Exécutons ce code. Maintenant, le mot imprime quelque chose d'excellent. Maintenant, on se dit bonjour. Génial. Développons donc la fonction. Mais avant cela, je voulais vous montrer en quoi le retour signifie la fin de la fonction. Imprimons après le retour. Imprimons quelque chose. Disons juste après le retour. Et exécutons simplement ce code. Vous voyez comment nous sommes toujours en train d'imprimer hello, mais ce n'est pas vraiment le cas, nous n'en arrivons pas là, encore une fois, c'est parce que return signifie la fin de la fonction et elle renverra cette valeur. Juste pour que cela soit encore plus clair, que se passe-t-il si au lieu de renvoyer un message, je renvoie un numéro. Retournons 100. Maintenant. Faites une pause et imaginez ce qui va se passer ici. Mais je pense que c'est très clair. Il va en imprimer 100 et nous ignorons complètement ce message ici. Génial. Revenons donc au message de retour. Et développons un peu cette fonction. Maintenant, rendons les choses un peu plus sophistiquées. Et ajoutons-y un argument. Disons que nous voulions dire bonjour à quelqu'un. Dites : « Eh bien, vous prendriez une variable ou un argument appelé name et nous voudrions dire bonjour à name ». Maintenant, nous allons nous attendre à ce que le nom soit une chaîne de caractères, tout comme cet homme ici. Ainsi, lorsque vous avez deux chaînes, vous pouvez les assembler en disant simplement plus, nous pouvons dire bonjour et nom. Exécutons à nouveau ce code. Super, nous l'avons fait, nous avons une erreur. Pourquoi lui ? Voyons ce qui s'y passe. Erreur : dites bonjour, prend exactement un argument, zéro est indiqué exactement, car maintenant nous attendons un argument. Passons donc un nom. Disons Adam. Et encore une fois, comme nous l'avons dit, le nom sera une chaîne. Alors maintenant, nommez. Une fois que nous l'avons exécuté, remarquez comment le nom prendra la forme d'un anime. En gros, nous disons, d'accord, alors cette variable appelée name sera Adam. Alors maintenant, nous devrions dire bonjour et Adam. Maintenant, exécutons-le et voyons ce qui se passe. Excellent. Il nous manque un espace. Ajoutons simplement cet espace après Hello et exécutons à nouveau ce code. Magnifique. C'est excellent. Une chose à noter également est que cette variable n'existe ici que dans le cadre de cette fonction. Maintenant, il y a un autre mot spécifique que j'utilise. Je l'utilise intentionnellement. Champ d'application. Scope signifie que cette fonction, désolé, cette variable, soit la variable de nom , soit même cette variable de message. Cela n'existera que dans le cadre de la fonction. Ils vivent essentiellement aussi longtemps que la fonction fonctionne. Donc, juste pour clarifier ce point, pour faire passer le message, imprimons le nom de ce qui se passe. Nous avons une erreur car le nom n'est pas défini car le nom n' existe pas en dehors de la fonction. Une fois que nous nous en souvenons, tout ce qui se trouve à l'intérieur de la fonction vit après cette indentation. Une fois que nous sommes sortis de cette indentation, nous avons terminé. Nous n'y avons plus accès. Maintenant, si je devais mettre cette empreinte dans la fonction, que se passerait-il ? Maintenant, nous imprimons Atom ici, qui est son nom. Et si nous changeons le nom ici aussi, comme George, par exemple , nous imprimons George. Excellent, alors développons cela un peu plus. Et passons à un deuxième argument. Disons que nous voulions dire bonjour au, au nom complet de la personne. Ajoutons une autre variable. Appelons cela LastName. Laissons ça. Maintenant, nous avons une autre erreur car elle nécessite deux arguments. Nous n'en traversons qu'un. C'est parfaitement logique. Disons George Smith, nom de famille très courant. Nous allons donc transmettre ce nom de famille. Et allons-y, exécutons celui-ci. La seule façon de dire bonjour à George, bien sûr, parce que nous n'avons pas ajouté le nom de famille. Maintenant, nous pouvons le faire, nous pouvons faire plus LastName. Et ça va fonctionner. Mais encore une fois, nous n' avons pas de place. Nous pourrions créer une autre chaîne avec juste un espace dedans, puis continuer à ajouter un plus. Cela va fonctionner. Mais cela devient un peu verbeux. C'est trop dactylographier. Apprenons donc une autre façon d'assembler les ficelles. Permettez-moi de me débarrasser de toutes ces variables positives. Maintenant, tapez avec moi ici, vous allez dire Bonjour, espace, crochets bouclés ouverts et fermés. Pour que cela soit clair, ces crochets frisés ne sont pas des parenthèses, sont des crochets bouclés, un type d'espace. Et puis à nouveau des crochets bouclés. Maintenant, nous allons dire qu'à la fin de la chaîne, nous allons dire format point. Ouvre et ferme les parenthèses, nous allons dire nom, virgule, nom de famille. Alors prenez une seconde pour faire une pause et imaginer ce qui va se passer ici. Cela peut être un peu confus ou très clair. Mais ce qui va se passer, c'est que ce crochet bouclé, donc ces accolades, vont devenir des espaces réservés. Lorsque nous utilisons cette fonction de format de points, Python sait qu'il doit s'attendre à quelque chose remplace la largeur de ces crochets bouclés. Dans ce cas, il y a deux crochets et deux variables. Le nom sera donc, ces crochets bouclés seront remplacés par le nom, et ces seconds crochets de couleur seront remplacés par le nom de famille. Faisons simplement en sorte que notre message soit un peu meilleur. Dire bonjour à son nom et à son nom de famille. Excellent. Maintenant, notre message ou notre résultat dit bonjour au jugement. Génial. J'espère que c'est clair jusqu'à présent, mais pour le rendre encore un peu plus clair, passons en revue un autre exemple. Je pensais à quelque chose qui n' à voir avec l' animation pour essayer de le rendre un peu intéressant, amusant et peut-être plus clair faisons quelque chose en rapport avec vos finances. Si vous avez entendu parler de ce mouvement de paiement appelé Fire, qui signifie indépendance financière, prenez une retraite anticipée. Bien entendu, nous n' allons pas parler de finances. Je ne suis pas un expert financier. Il ne s'agit en aucun cas d'un conseil. C'est juste un exemple un peu amusant. Il existe ce type de calcul selon lequel ces personnes à moitié disent : « OK, si vous voulez savoir combien d' argent vous devez investir pour prendre retraite anticipée ou prendre une retraite à un moment donné », elles disent en gros, prendre vos dépenses annuelles et d'en faire les 4 % de vos investissements ou vous épargnez. L'idée sous-jacente est que le marché en général, comme le marché boursier, les obligations ou certains types d'investissements, vous donnera un rendement de 4 % chaque année. Donc, si vous pouvez vivre de ce rendement de 4 % chaque année, vous pouvez essentiellement vivre de ces investissements pendant quelques années. Supposons, par exemple, que vos dépenses annuelles élèvent à 40 000$, par exemple , 40 000$ correspondent à 4 % d'un million de dollars. C'est beaucoup d'argent. Mais encore une fois, il ne s'agit pas d'une classe financière. Cela signifie que vous devez investir 1 million de dollars et que vous recevrez chaque année 4 % de ce montant, soit les 40 000$ dont vous avez besoin pour couvrir vos dépenses, quelles que soient vos dépenses. Écrivons donc ces calculateurs à titre d'exemple. Encore une fois, tapez avec moi définition def avec la recherche de l'espace fonctionnel. Et nommons la fonction, disons feu, trait de soulignement, trait soulignement, calculatrice, parenthèse ouverte, parenthèse ferme. Excellent. Alors, quelle est notre contribution à présent ? Nous voulons des dépenses, non ? Nous voulons calculer le montant de l'investissement dont vous avez besoin. Chérie, nous allons prendre en charge les dépenses et nous allons vous rembourser l'argent que vous devez investir pour vivre 4 % de ces investissements, n'est-ce pas ? Supposons que le montant soit égal et ce soit les dépenses de calcul divisées par 4/100. Et rendons ce montant. Imprimons donc simplement le résultat de cette fonction. Maintenant, les dépenses, bien sûr, nous devons le remplacer par un chiffre. Ce sera 40 000. Et exécutons simplement ce code. Nous en avons eu 100. Maintenant, c'est clairement faux. Voyons pourquoi. C'est en partie pour cela que je voulais un exemple avec des chiffres afin de vous montrer un autre aspect particulier de cette version de Python. Permettez-moi d'ouvrir un nouvel onglet et allons-y. Faisons ce calcul ensemble. Disons que nous divisons quatre par 100. Nous allons dire qu'il suffit de les stocker dans une variable appelée R. Imprimons ce résultat. Oh désolée, ce n'est pas une division. Un personnage qui m'a fait mal est la barre oblique pour diviser. Génial. Encore une fois, c'est clairement faux. Alors, qu'attendons-nous de cette division si vous divisez quatre par 100, ou si nous nous attendons à 0,04, n'est-ce pas ? Donc, ce qui se passe ici, c'est que nous divisons deux nombres entiers. Et maintenant, à tout moment, pour version inférieure à une version de Python inférieure à Python trois, lorsque vous divisez deux entiers, vous obtenez un entier en retour, ce qui signifie que la valeur est tronquée. Qu'est-ce que cela signifie si j'ai 1,5, par exemple souvenez-vous que j'ai dit auparavant un entier. En gros, un nombre entier qui n'a pas de décimale. Donc, parce que nous divisons deux entiers, si le résultat était 1,5, ce nombre sera tronqué et nous n'aurons qu'un seul. En gros, nous ne faisions que supprimer les décimales. Maintenant, quand c'est difficile d'avoir une virgule décimale appelée virgule flottante. Maintenant, encore une fois, c'est un entier, c'est juste un nombre entier. Et un flottant a des décimales. Alors, que devons-nous faire pour obtenir ce résultat ? Eh bien, nous devons diviser un entier par un nombre flottant. Vous y voilà. Cela correspond davantage à ce à quoi nous nous attendons. Cela fonctionne également dans l'autre sens. D'ailleurs, nous pouvons également diviser un nombre flottant par un entier tant que l'un des nombres est à flot, Python vous donnera la valeur correcte. Mais si ce n'est pas un flottant, encore une fois, s'il ne s'agit que d'un entier , cela le tronquera , cela vous donnera en fait ce résultat. Et puis il le tronque parce qu'il pense que vous demandez une grille d'entiers. C'est donc une particularité importante que vous trouverez dans Python. Et si vous essayez de faire des calculs et que vous rencontrez ce problème, cela peut être extrêmement confus, mais sachez simplement que c'est généralement une bonne idée de simplement utiliser 0,0 pour transformer un nombre en un nombre flottant, vous éviterez ainsi complètement ce problème. Donc, un autre dont nous savons qu'il nous faut. C'est la valeur réelle dont nous avons besoin. Remplaçons-le simplement ici. Encore une fois, ce ne sont que des mathématiques et vous n'avez pas vraiment besoin d' en apprendre beaucoup , ou que devons-nous faire ? Ne vous inquiétez donc pas pour les détails. Sachez simplement que nous calculons essentiellement ce que c'est. Les 4 % d'excellentes dépenses divisés par 0,40 ou 0,04 nous permettront d'obtenir le montant final dont nous avons besoin. Et c'est 1 million de dollars. Et remarquez que nous avons ici un char, ce qui est génial. Peu importe qu'il s'agisse d'un nombre flottant et d'un entier dans ce cas. Testons-le à nouveau. Disons que vous avez besoin de 80 000$ pour survivre toute une année. vous faudrait alors, bien sûr, 2 millions de dollars. Vous y voilà. Encore une fois, il ne s'agit pas d'une discussion financière. Ceci n'est qu'un exemple. Mais je voulais vous montrer cette facette particulière de Python. Nous sommes des charges et les divisions entières peuvent être un peu délicates. Avant de passer à autre chose, il y a une dernière chose dont je voudrais parler, et c'est extrêmement important. Et il existe une documentation que j'ai déjà mentionnée selon laquelle il n'y en a pas d'autre pour créer des chaînes. Vous pouvez utiliser des guillemets simples, des guillemets doubles ou des guillemets triples. Maintenant, j'ai également mentionné que les guillemets triples sont réservés à ce que l' on appelle des docstrings. Docstrings est essentiellement la documentation d'une fonction. Qu'est-ce que je veux dire par là ? Le type signifierait des guillemets triples, 123. Ce sont d'ailleurs trois guillemets doubles. Ensuite, nous allons taper un message. Supposons que cela calcule le montant dont vous avez besoin pour calculer le montant de la retraite, par exemple montant de la retraite. Tapez maintenant trois autres guillemets, 123, mais trois guillemets doubles. Et exécutons ce code. Même résultat. ne s'agit donc que d'une chaîne et cela n' affecte en rien votre code. Mais c'est extrêmement utile pour quelque chose que nous avons déjà vu. Maintenant, souvenons-nous de cette commande d'aide. Nous avons vu cette aide fonctionner. Exécutons notre fonction à l'intérieur de cette fonction d'aide. Alors maintenant, encore une fois, faites attention, je n' appelle pas cette fonction. Je n'ouvre pas et ne ferme les parenthèses et j' écris simplement le nom de la fonction. Exécutons donc ce code. Aide à ouvrir les parenthèses, à calculer les distances, à fermer les parenthèses. Et vous voyez qu'il est dit aidez-les à fonctionner pour une calculatrice dans le module principal. Cela signifie simplement que vous y êtes. Chaque fois que vous n'avez pas de module qui est essentiellement un fichier Python, nous allons le voir très bientôt. Cela dit simplement que c'est méchant, alors ne vous inquiétez pas trop pour cette partie, ne vous inquiétez pas trop pour cette partie, mais elle vous indique essentiellement le nom de la fonction. Et vous pouvez le voir ici, cela vous apporte cette petite aide. Donc, si quelqu'un utilise votre fonction, il peut lancer de l'aide dessus. Et ils peuvent recevoir un petit message de votre part, du développeur, leur indiquant ce qu'ils doivent faire ou ce que fait la fonction. Maintenant, quelque chose d'autre est très important en ce qui concerne les docstrings. Et nous allons l'utiliser. Nous allons le faire à partir de maintenant, en disant à R mentionner ce qui est attendu dans cette entrée. Alors maintenant, souvenez-vous encore une fois, en raison de la portée, telle ou telle variable n'existe que dans la fonction. Et comme c'est Python, se peut que nous transmettions cette fonction à tout ce que nous voulons. Il est donc important de mentionner dans la documentation ce qui est attendu, quel que soit ce que cette fonction s' attend à recevoir. Pour ce faire, vous pouvez simplement dire dépenses ou brûler, fermer des parenthèses et saisir le corps du dossier, disons qu'il s'agit d'un entier. En fait, il y a différentes manières de l'écrire. Je vais m' en tenir à une norme classique de Google. Et ce qu'ils font, c'est dire args, qui étaient des arguments deux-points. Ensuite, nous allons mettre cela en retrait sur les arguments. Nous allons écrire à nouveau les dépenses. Entre parenthèses. Nous allons écrire le type de cette variable, et ce sera un entier parce que nous attendons un nombre, n'est-ce pas ? Ensuite, nous allons écrire un petit commentaire à ce sujet. Disons vos dépenses annuelles. Encore une fois, tout cela n' est que de la documentation, mais cela aidera quiconque utilise cette fonction, qui pourrait être vous-même dans quelques mois, savoir ce qui est attendu. Maintenant, quelque chose d'utile est mentionné : la valeur de retour. Nous allons saisir Return Colon. Ensuite, je vais taper la valeur qui a été renvoyée. Dans ce cas, nous savons qu'il s'agit d'un flotteur. Réexécutons-le. Génial. Une fois de plus, la fonction d'aide nous fournit toutes ces informations ici même. Une fois que vous aurez lancé l'aide, quelqu'un qui utilise votre fonction saura, d'accord, qu'il y a une variable qui attend un entier. Et je peux m'attendre à un flottant en retour en tant que valeur de retour. J'espère donc que cela aidera à clarifier un peu plus quelles fonctions sont. Ce n'était qu'une brève présentation d'eux. Maintenant, transformons notre code en fonction. 14. Transformer le code en une fonction: Bon, revenons à notre code. Transformons maintenant tout ce code en fonction afin qu'il soit un peu plus réutilisable. Maintenant que nous savons ce que sont les fonctions et comment les créer, nous pouvons très facilement transformer ce morceau de code en l'une d'entre elles. Cela peut sembler beaucoup, mais il est en fait très facile de transformer tout cela en fonction. Mais d'abord, réfléchissons à ce que doit faire cette fonction ? Commençons par les arguments qui constituent l'entrée, que voudriez-vous que l'entrée soit ? Nous voulons probablement laisser les utilisateurs de cette fonction de côté le type de PrEP qu'ils souhaitent préparer, n'est-ce pas ? J'imagine que nous pourrions également souhaiter qu'ils décident du nom du contrôle et de la nouvelle géométrie. Mais restons simples pour le moment. Supposons que nous prenions la décision exécutive de simplement partir, leur donner le contrôle sur le type de poignée d'accessoires. Allons-y. Supposons que nous créions à nouveau une fonction pour commencer à définir une fonction que vous tapez def space. Maintenant, nommons la fonction que je vais nommer. Elle crée un trait de soulignement, soulignement, un reg, des parenthèses ouvertes et fermées. Laisse-moi l'agrandir un peu. Maintenant, nous avons besoin de la contribution. Eh bien, c'est très simple. Nous pouvons simplement réutiliser ce nom ici. Puisque nous le sommes, puisque nous utilisons déjà ces noms dans tout le code. Ici en bas. Ce que nous entendons réellement, ce sont des déclarations. Pourquoi ne pas simplement le réutiliser et nous faciliter la tâche. Soulignement de l'accessoire. Ensuite, nous fermerons les parenthèses, puis les deux-points. Et maintenant, nous savons que pour que ces instructions soient à l'intérieur de la fonction, nous devons les indenter. Comment pouvons-nous, comment créons-nous cette indentation ? Nous pouvons surligner tout ce code et appuyer simplement sur la touche Tab. Et voilà. C'est tout. C'est tout ce dont tu as besoin. Nous venons de transformer tout cela en fonction. Super. Qu'est-ce qu'on en fait ici ? Nous n'en avons vraiment plus besoin, nous pouvons donc le supprimer. Maintenant, tout ce code est à l'intérieur d'une fonction, alors exécutons-le, voyons ce qui se passe. Eh bien, rien ne se passe et je suis désolée, cela devient un peu difficile à lire parce que le code grandit, mais c'est génial parce que vous écrivez plus de code. Donc rien ne s'est vraiment passé. C'est un, tout cela n'est que la définition de notre fonction. N'oubliez pas que nous devons appeler cette fonction pour pouvoir l'utiliser. Eh bien, allons-y , faisons-le ici. Appelons-le ici. Créez une parenthèse appropriée, laissez-moi simplement taper créer des parenthèses ouvertes et fermées. Et maintenant, n'oubliez pas que nous attendons une contribution. Dans ce cas, c'est ce qu' on appelle le type d'accessoire. Nous attendons une chaîne et, en fait, écrivons un peu de documentation pour notre fonction via des chaînes de document. Une fois que je me souviendrai des guillemets triples. Et d'ailleurs, il peut également s'agir de guillemets simples. Des guillemets simples, des guillemets simples ou trois guillemets doubles. Je préfère les doubles. Écrivons simplement une lettre de recommandation. Allez-y sans contrôle. Je vais donc simplement écrire, créer un morceau de géo avec du contrôle dedans. Maintenant, nous allons écrire dans les arguments qu'il faut args, deux points. Et puis nous nous attendons à un type d'accessoire. Nous savons que c'est une chaîne. Et nous savons qu' il peut s'agir d'un cube, d'une sphère ou d'un cône. Encore une fois, tout cela n'est que de la documentation. C'est juste pour ceux qui ont besoin d'utiliser la fonction pour obtenir un peu d'aide. Ce n'est pas nécessairement pour que le code fonctionne, mais c'est extrêmement utile. Et je dirais que c'est une habitude très, très utile à prendre, car elle facilitera grandement la vie de votre revêtement. Une fois que vous avez de la documentation, vous vous distinguez honnêtement de tout le monde, du fait que le code est si utile et très apprécié par les autres programmeurs. Je vous recommande d' en prendre l'habitude. Parfois, cela peut être frustrant, parfois c'est du travail supplémentaire. Mais à long terme, cela en vaut vraiment la peine. Et revenez, eh bien, nous n'avons encore rien vraiment retourné. N'ajoutons donc pas la valeur de retour pour le moment. Laissons les choses telles quelles. Super. Nous savons donc que nous nous attendons à une corde et nous savons que nous avons ces options : cubique, sphère ou cône. Tapons, en fait, désolé, nous savons que nous utilisons le cube par défaut. Ajoutons donc cela en écoutant le docstring. Tapons cube, par exemple exécutons simplement ce code. Et voilà. Excellent. Excellent. Maintenant, créons autre chose. Vous voyez maintenant à quel point c'est beau d'avoir une fonction. Vous n'avez pas besoin de copier-coller l'intégralité de ce code. Vous pouvez simplement copier cette fonction, coller dans la ligne ci-dessous. Disons maintenant que nous voulons également avoir un cône . C'est tout ce que nous devons faire. Exécutez simplement ce code. Maintenant tu as un cube, maintenant tu as un cône. Excellent. C'est tout ce que tu dois faire. Vous avez une fonction et vous pouvez désormais réutiliser votre code très facilement. Disons, juste pour le plaisir, créons également une sphère. Parce que pourquoi pas ? Parce que nous pouvons le faire. voilà, sphère, cube et comptez. Magnifique. Maintenant, pour le plaisir, avant de poursuivre, par souci de complétion et par curiosité, laissez-moi réexécuter ce code. Ça devient un peu plus compliqué. J'aime que chaque fois que vous créez la sonde se chevauche simplement par rapport à la précédente. Et si nous pouvions juste créer un tout petit peu d' organisme ? Vous voyez maintenant que nous avons cette fonction de déplacement. Passons, passons aux instructions au fur et à mesure que nous les créons. Alors prenons cela et transformons-le en Python très rapidement. Je sais que ce sont de nombreux arguments. Encore une fois, comme Maya nous l'a donné, obtenez la commande malloc. Je vais improviser un peu. Je vais juste transformer cela en commande Python. Mais avant de le faire, nous devons savoir ce que nous déplaçons, est-ce pas ? Qu'est-ce qu'on déplace ? Le contrôle ? Eh bien, nous ne l'avons pas fait, nous ne reprenons pas vraiment le contrôle. Par exemple, si je stocke cela dans une variable appelée cube, laissez-moi me débarrasser de la sphère de Conan, ce simple cube d'impression. Aucun, bien sûr, c'est inconnu car nous n'avons rien retourné. Qu'est-ce qui serait bien d'y retourner ? Je pense qu'ils contrôlent le nom du contrôleur qui a été créé. Ce serait bien il revienne afin qu'une fois la brique créée, l'utilisateur sache quels sont les contrôleurs pour pouvoir la manipuler. C'est une adaptation que je suis en train de faire au fur et à mesure. Donc, ce que nous voulons renvoyer est en fait le nœud du contrôleur créé par West, n'est-ce pas ? Donc, nœud de contrôle, renvoie le nœud de contrôle. Avant d'oublier, puisque nous le retournons, ajoutons-le à la documentation. Revenez et nous y retournerons en fait. Ajoutons donc simplement que le type est renvoyé. Nous savons que c'est le nom du contrôle. Il s'agit donc d'un nom de chaîne du nœud de contrôle créé. Ceci est juste une note pour le rendre un peu plus évident. Excellent. Permettez-moi donc de supprimer ces deux rayons ici. Exécutons simplement ce code une fois de plus. Contrôle. J'ai l'impression de courir à nouveau, d'en contrôler une. Et voilà. Nous avons donc maintenant le nom de cette commande. Maintenant, permettez-moi d'être plus explicite. Permettez-moi de renommer cette variable appelée cube. Permettez-moi de le renommer Kube, Control. Super. Nous pouvons maintenant utiliser la fonction de déplacement. Alors, prenons ceci et collons-le ici. Si cela prête à confusion, essayez simplement de suivre. J'improvise ici, mais je sais que nous pourrons déplacer cet objet une fois qu'il sera créé. Donc, disons, supposons que le point S se déplace. Cela semble correct. Il est surligné ici. Que déplaçons-nous maintenant ? Eh bien, déplaçons la commande Kube. Alors, donnons cela comme premier argument. Contrôle Kube, pas d'espace. Maintenant, eux, la valeur qui est déplacée est la suivante, juste ici. Utilisons simplement cet argument et voyons ce qui se passe. Nous allons nous débarrasser de ces tirets r. Je vais me débarrasser de ce tiret 0 S. Je vais utiliser ce W, D. Je ne suis pas très sûr de ce que c'est. Mais n'oubliez pas que nous avons des noms longs et des noms courts, donc je vais simplement supposer que c'est le nom abrégé d'un argument. Je vais supprimer le tiret qui s'y trouve. Et n'oubliez pas qu'en Python, nous utilisons des égaux, donc nous allons dire que w d est égal. Et comme nous l'avons vu précédemment, il s'agit de trois valeurs. Que faisons-nous lorsque nous voyons trois valeurs ? Eh bien, nous supposons que c'est une liste. Et une liste est un groupe d' éléments séparés par une virgule, comme nous l'avons déjà fait. Appliquons donc ceci et ce nombre par une virgule. Et puis le chiffre suivant sera une virgule. J'ai imaginé que ce sont, c'est l'axe, c'est x, y et z, ou z, coma, coma. Puis fermez la liste. Nous n'avons pas besoin du point-virgule. Nous devons maintenant fermer la fonction pour pouvoir l'appeler. Excellent. Déplacez-vous donc selon ce montant. Reste avec moi un moment, pendant que j'improvise, mais c'est une bonne chose pour toi. Tu me vois essayer des choses, la vie en quelque sorte. Je vais me débarrasser de cette empreinte. Créons simplement ce décalage. Un argument booléen doit être transmis à d . OK, intéressant. Disons que w d est égal à vrai. En fait, laisse-moi, laisse-moi supprimer ça. Comme je l'ai dit, j'improvisais. Essayons la même fonction sans aucun de ces arguments. Transmettons simplement trois valeurs à cette fonction. Voyons ce qui va se passer. Je vais transmettre ces valeurs sans que ce soit une liste. Il s'agit essentiellement de trois arguments. Comme supprimer ça. Et voilà. Cela fonctionne. D'accord. Je me suis donc complètement trompé. Je m'en excuse et je m'excuse si c'était un peu confus. Je n'ai pas essayé cela à l'avance, mais je pense que c'était bien pour vous de me voir essayer toutes ces vies, car cela fera partie de votre expérience d' essayer des choses jusqu'à ce qu'elles fonctionnent. Parfois, quelque chose peut sembler un peu évident, mais comme vous l'avez vu dans ce cas, n'était clairement pas évident. Oui. Donc, cette fonction de déplacement, la façon dont elle fonctionne, fonctionne sur la dernière chose que nous avons sélectionnée. Nous savons maintenant que nous avons sélectionné ce nœud de contrôle avant sa création. Je suis désolée, après sa création. C'était donc en train d'être sélectionné. Donc, tout ce que nous disons, c'est de déplacer l'objet sélectionné, quel qu'il soit. Et cette fonction de déplacement est prise en compte dans ces trois valeurs, qui seront x, y et z. Bien sûr, comme nous l'avons vu, laissez-moi le refaire juste pour le montrer. Il a de plus en plus d'arguments. Cela signifie probablement relatif. Ça, je ne suis pas sûr de ce que c'est, mais ce n'est pas important pour le moment. Alors prenons, restons-en à ça. Permettez-moi de faire en sorte que ce sixième round soit un bon match. Nous savons que cela fonctionne. Disons que nous voulions créer un cône cubique. Créons un cône. Et vous pensez probablement que si nous n' utilisons plus ce contrôle, nous n'en avons plus besoin. C'est exact. C'est exact. Nous n'en avons plus vraiment besoin, alors je vais m'en débarrasser. Mais je pense que c'est quand même une bonne idée de conserver la valeur de retour pour qu'ils puissent la contrôler. Mais quoi qu'il en soit, c'est votre outil, c'est votre fonction. N'hésitez donc pas à le modifier comme vous le souhaitez. À la fin de la journée, vous avez le contrôle total de tout cela en créant un cube. Créons un cône. À moins qu'il ne s'agisse réellement de déplacer le cube. Nous allons nous en débarrasser. Déplacez-vous sur le cube. Nous allons créer un cône, allons déplacer le cône. Tout ce que nous voulons, c'est de la distance entre eux. Ensuite, créons une sphère. Et déplaçons cette peur deux fois plus que le cône. Déplaçons-le donc de 12 unités, moins 12 unités. OK, nous allons en finir avec ça. Exécutons ce morceau de code. Et voilà. Cube, cône, sphère, tous éloignés les uns des autres. Joliment présenté, prêt à être animé par vous ou quelqu'un d'autre. Super, merci encore de m' avoir accompagné tout au long de ces expériences. J'espère que cela vous a été utile, et je vous verrai dans la prochaine leçon. Merci. 15. PyCharm - Installer et configurer: Je vais vous montrer comment installer Unsettled by Charm car c'est ce que vous allez me voir utiliser pour la suite de ce cours. Bien entendu, vous pouvez utiliser n'importe quel autre IDE ou éditeur de texte de votre choix. Si vous voulez utiliser Sublime, soyez VS Code Note, mais si vous le souhaitez, ce ne sont que des outils. Ils fournissent tous ce résultat final. Je recommande PyCharm. C'est plutôt sympa pour Python et c'est vraiment fait pour les développeurs Python. Leur site Web sera Jet, Brains.com, Dash Pie, Same PY, Charm. Je vais fournir un lien vers celui-ci, bien sûr. Ou très facilement aussi. Vous pouvez simplement à nouveau rechercher PyCharm sur Google, PY charm. Et le premier lien que vous obtiendrez devrait s'y trouver. Le même résultat sur la première page. Cliquez sur le bouton Télécharger. Tu vas avoir deux options. Choisissez la version communautaire. Il existe une version professionnelle que vous pouvez payer. Mais honnêtement, l'intégration communautaire est plus que suffisante. Alors téléchargez-le. Une fois le fichier téléchargé, il suffit de cliquer dessus. Cela ouvrira le programme d'installation. Cliquez maintenant sur Suivant. Prochaine. Je recommande de créer un raccourci, et je recommande de créer ces associations. Dot p-y est simplement l' extension pour les fichiers Python. Je recommande donc de l'utiliser. Vous pouvez laisser tout le reste décoché. Cliquez sur Suivant. Installer. D'accord, et à la fin de l'installation, vous aurez cette fenêtre. Cliquez sur Exécuter PyCharm Community Edition, puis sur Terminer. Si vous avez cette fenêtre, je l'obtiens parce que j'avais une version précédente, mais je vais simplement cliquer, ne pas importer les paramètres. Cliquez sur OK. Et Pycharm devrait ouvrir tout de suite. Une fois PyCharm ouvert, ces fenêtres s' afficheront . Vous pouvez simplement ouvrir des fichiers avec celui-ci. Mais je recommande de créer un nouveau projet car il est généralement conçu pour fonctionner avec, avec des projets. Bien que vous recommandiez également de faire cette visite du centre commercial si vous le souhaitez. Pour l'instant, nous allons procéder à la configuration de base. Cliquons donc sur les nouveaux projets. Leur localisation. Je vous recommande d'utiliser le dossier de scripts Maya. Ce sera donc sous UC Drive, le dossier de vos utilisateurs. Encore une fois, voyez les utilisateurs, votre nom d'utilisateur et vous pouvez suivre ici le chemin que je suis en train de suivre, puis accéder à Documents. Maintenant, au lieu de documents, vous allez avoir votre dossier Maya. Et puis à l'intérieur de ce dossier, il y a un dossier de scripts. Nous allons beaucoup l'utiliser. Cliquons donc sur OK là-dessus. Ici, vous avez encore quelques options. Choisissez un nouvel environnement à l'aide d'un ENV virtuel virtuel. Il s'agit d'un environnement virtuel, mais ne vous inquiétez pas trop à ce sujet. C'est quelque chose que pycharm va créer, mais nous n' allons pas vraiment l'utiliser pour le moment. Tout cela nous laisse donc une série. Désolé, je ne voulais pas vérifier ça. Laisse tout le reste. La série en bas. Créez le PY principal, le script de bienvenue. Je vais cocher cette case juste pour que vous puissiez voir quelque chose une fois que nous avons démarré un projet, cliquez sur Créer. Et PyCharm va commencer à préparer certaines choses pour vous. Cela peut prendre quelques minutes. Tu lui donnes juste un peu de temps. Une fois que c'est fait, vous allez voir ce bref aperçu de ce que vous allez voir. Voici la fenêtre de votre projet. Et c'est vraiment le dossier dans lequel votre projet va être stocké. Laissez-moi vous montrer ce qui se passe ici. Si vous accédez à votre explorateur de fichiers, si vous accédez à votre dossier Documents, accédez à Maya, puis à des scripts. C'est ce que vous voyez ici, c'est le même diagramme circulaire de dossiers et j'ai créé ce dossier appelé idea point idea. Tu peux ignorer ça. Il a également créé ce dossier v, v ENV. Tu peux ignorer ça. Vous pouvez le supprimer si vous le souhaitez, mais pour l'instant cela ne nous dérange pas vraiment, nous pouvons donc le laisser là. Et comme nous avons coché cette dernière case, nous avons ce fichier main.py. La seule raison pour laquelle je vérifie cela est simplement pour créer un fichier Python que vous pourrez consulter. Mais nous allons le supprimer très bientôt. Encore une fois, cela se trouve dans le dossier de scripts Maya de vos documents. Vous pouvez créer ce projet où vous le souhaitez. Mais comme nous allons bientôt travailler dans ce dossier de scripts, je recommande d'utiliser cet emplacement. Encore une fois, il s'agit essentiellement de votre arborescence de fichiers. C'est juste pour t'aider à t'y retrouver. Il s'agit d'un fichier Python que nous allons supprimer très bientôt car nous n'en avons pas vraiment besoin. Configurons donc quelques paramètres avant de commencer. Accédez au menu Fichier, puis descendez dans les paramètres. Vous pouvez également appuyer sur Control Alt, Alt S pour ouvrir la fenêtre Paramètres. Il y a maintenant deux paramètres que nous voulons mettre à jour. Nous allons faire en sorte que ce soit simple. La première se trouve dans la section précédente. Élargissez cela à leur général. La première case à cocher qui permet de modifier la taille de la police contrôlerait ces modes. Nous allons simplement cocher cette case. C'est juste pour imiter la fonctionnalité qui permet d'augmenter ou de diminuer la taille de la police et de le contrôler avec la molette de la souris. Maintenant, passez au paramètre suivant : descendez dans la section Outils, développez-la, puis faites défiler la page jusqu'aux outils intégrés à Python. Maintenant, tout en bas il y a une rumeur dans la section docstring selon laquelle une docstring est une chaîne que nous pouvons placer dans une fonction qui fait office de documentation, où le nom docstring. Au format docstring, je vais choisir Google. C'est une norme que j'aime utiliser. Encore une fois, c'est toujours votre choix. Vous pouvez choisir un autre format si vous le souhaitez, mais je vais utiliser celui-ci pour le reste de ces exemples. Une fois que vous avez choisi ce clic, Appliquer, cliquer sur OK ou envoyer, nous avons modifié cette option. Nous allons le tester. contrôle de la molette et de la souris permet agrandir et de le réduire, ce qui est très agréable. Permettez-moi de supprimer tout ce code car nous n'en avons pas vraiment besoin. C'est juste, par exemple, créons une fonction, juste un exemple de fonction, exemple d'espace def, des parenthèses ouvertes. Ajoutons deux arguments. Juste parce que je voulais vous montrer ce que les docstrings peuvent faire. Donc, un, juste pour l'exemple, ou deux, par exemple, des parenthèses fermées. Maintenant, remarquez que dès que j'ouvre une parenthèse, pycharm complète les deuxièmes parenthèses, ce qui est génial. Il fait une grande partie de ce travail pour moi. Refaisons-le donc sur un ou deux points que je présente une fois de plus, remarquez que Python me donne automatiquement cette indentation, qui est également très agréable. Maintenant que les docstrings ont déjà été mentionnées, je vais taper trois guillemets doubles, 123. Remarquez comment PyCharm le complète automatiquement pour moi. Si j'appuie sur Enter it, ces arguments sont automatiquement complétés pour moi. Cela me donne un espace pour mes arguments et une section pour mes déclarations, ainsi qu'un peu d'espace pour notre description, ce qui est excellent. Donnez-moi donc une description de cet exemple de fonction. Nous devons ajouter les types manuellement. Pycharm n'est pas assez intelligent pour le savoir en ce moment. Donc, encore une fois, c'est juste une convention que je respecte. Je vais dire que c'est une chaîne. Disons un exemple de chaîne. Maintenant celui-ci, disons qu'il s'agit d'un entier et d' un entier d'échantillon. Et disons simplement qu' il renverra un booléen. Juste un exemple. Ce n'est pas vraiment quelque chose que nous allons utiliser. Remarquez que la syntaxe est également surlignée. Les couleurs sont différentes de celles de Maya, mais c'est quand même agréable de voir d' un coup d'œil ce qui se passe. Dans ce cas. Notez que ces arguments sont grisés. Ils peuvent même être un peu difficiles à voir. C'est parce que PyCharm vous indique que vous ne les avez pas utilisés. Pycharm fait beaucoup de choses très intelligentes pour vous aider à inspecter votre code. Comme vous le voyez en bas en fait, jour sur la droite vous avez ce marqueur. C'est comme un avertissement. Et ici aussi, cela vous indique qu' il y a deux avertissements. l'ensemble, ne vous inquiétez pas trop pour le moment, mais il est parfois agréable de voir ce qui se passe. Cela vous indique simplement que vous n'avez pas utilisé ces arguments. Alors, réparons ça. Imprimons simplement l'un d' entre eux pour pouvoir l'utiliser. Vous voyez maintenant qu'il n'est plus grisé. Et aussi, si vous remarquez que dès que je commence à taper, PyCharm me propose une suggestion. Dans ce cas, c'est l'autre argument que je n'ai pas utilisé. Donc, si j'appuie sur Entrée , c'est parti. Il le fait pour moi, ce qui est génial. Il complète automatiquement le formulaire. Nous y voilà. Comme avant. Cela ferme les parenthèses pour moi. La saisie dans PyCharm sera donc beaucoup plus rapide. Retournons simplement quelque chose ici. Dès que je commence à taper F, je sais que je veux un booléen, donc il m'indiquera les erreurs ou si je commence à taper t, il autorisera true comme suggestion. Excellent. Je ne vais pas entrer dans les détails de PyCharm. Il existe de nombreuses fonctionnalités que vous pouvez explorer ou de nombreux didacticiels, une grande documentation sur Internet. Mais pour ce dont nous avons besoin en ce moment, cela devrait être plus que suffisant. Maintenant, avant de partir, faisons un petit nettoyage. Comme je l'ai déjà mentionné, ce fichier main.py n' est qu'un exemple. Nous n'en avons pas vraiment besoin, alors débarrassons-nous de cela. Vous pouvez le supprimer depuis votre navigateur de fichiers ou simplement vous rendre ici. Lorsque cet explorateur est sur le côté, cliquez sur la touche Supprimer, il vous demandera si vous êtes à court pour le faire, vous pouvez dire Oui, et voilà. Nous avons une table rase. Alors allons-y et créons des fichiers Python. 16. Créer un module: Parlons des bibliothèques et des modules. Comme nous l'avons déjà dit, un module est une connexion, un ensemble de fonctions, et une bibliothèque est un ensemble de modules. Le cœur d'un module n'est en fait qu'un fichier. C'est un fichier qui contient le code tel que nous l'avons écrit jusqu'à présent. Nous pouvons créer le nôtre et importer comme nous le faisons avec mon propre CMBS. Alors allons-y et faisons-le. Dans un navigateur de fichiers. Accédez aux documents, à Maya et à votre dossier de scripts. Nous l'utilisons pour créer le même emplacement pour créer le projet PyCharm. Vous devriez donc déjà l'avoir dans la vidéo précédente. Ainsi, à l'intérieur, nous pouvons créer nos modules. Maya sait lire le code à partir de cet endroit. Comment le sait-il ? Découvrons-le d'abord Pour savoir d'où proviennent mes données, nous pouvons utiliser un module appelé sits, SAS, comme dans system. Et dans le système, il existe une variable de liste qui est en fait une liste appelée chemin. Et cela contient tout le répertoire ou les blocs-notes de mon côté. Python en général, car cette session Maya obtient le code de. Alors, imprimons simplement cela. Super. Vous obtiendrez donc cette liste avec de nombreuses chaînes, qui ne sont que des chemins de répertoire vers des dossiers qui existent sur votre machine. Ils vous paraîtront différents car j' ai quelques plugins que vous n'avez peut-être pas, mais beaucoup d'entre eux seront identiques. Par exemple celui-ci, Maya 2020. Il s'agit d'un dossier réservé à la version Maya, Maya. Donc, si vous avez du code destiné à être utilisé uniquement dans une version spécifique de Maya. Vous pouvez le mettre ici, par exemple, nous utilisons un emplacement plus générique parce que notre code est censé être plus générique. Il est vraiment destiné à être utilisé par toutes mes aversions. C'est donc ce que nous utilisons Au final, nous avons ce chemin. Essayons de le rendre un peu plus facile à lire. Nous pouvons utiliser notre module appelé pretty print. Cela s'appelle en fait PWD Print. Nous allons dire : Désolé, laissez-moi annuler cela depuis Pip print, import p, print. C'est un peu superflu, mais c'est ainsi qu'ils ont décidé de l'appeler étoile brillante. Il est à nouveau synonyme de jolis imprimés. Tout ce que cela fait, c'est que cela vous donnera un résultat plus lisible par l'homme. Exécutons donc ce code qui est beaucoup plus agréable. Au lieu d'avoir cette longue liste que nous devons faire défiler pour voir, nous l'avons simplement. C'est toujours une liste qui donne toujours le même résultat. Il est simplement imprimé d'une manière plus lisible par l'homme. Encore une fois, vous pouvez créer des modules n'importe où ici, dans n'importe lequel de ces chemins. Mais pour l'instant, nous allons nous en tenir aux documents, aux scripts Maya. Vous vous demandez peut-être si je voulais utiliser un dossier séparé pour que d'autres personnes, par exemple dans votre pipeline ou au sein de votre équipe, puissent par exemple dans votre pipeline ou au sein de votre équipe, accéder à votre code. Nous pouvons le faire. Nous pouvons modifier cette liste et y ajouter d'autres parties. C'est ce qu'on appelle ajouter des chemins. Mais nous y reviendrons dans une autre leçon. Revenons ici. Scripts, documents Maya, scripts Maya. Créons un fichier. Cliquez avec le bouton droit Accédez à Nouveau et créez un nouveau document texte. Donnons-lui maintenant un nom qui ait du sens. Dans ce cas, nous voulons par exemple prop underscore reg. Maintenant, le format de ce fichier est TXT par défaut, mais nous voulons qu'il soit point p-y, comme en python, point p-y. Windows va nous demander si nous voulions modifier l'extension, nous voulons dire oui, excellent. Maintenant, vous pouvez ouvrir ce fichier si je bouton droit de la souris et que je l' ouvre avec Notepad, nous pouvons écrire du code directement. Notez qu'il ne s'agit que d'un fichier texte avec une extension différente. Mais nous avons déjà configuré PyCharm, nous allons donc l'utiliser. Maintenant, lorsque nous naviguons dans le terme pi, parce que nous utilisons le même emplacement pour notre projet. Le fichier apparaît ici. Vous devriez donc voir ce fichier vide, bien sûr Allons-y et créons une fonction juste pour le tester. Donc, le type rencontrerait Deaf. Espace, test, parenthèses ouvertes et fermées, deux-points. Je vais ignorer les docstrings pour le moment car il ne s'agit que d'un test rapide. Retournons simplement une chaîne. C'est juste dire que c'est un test. Mettez ceci en majuscule. Excellent. Alors, comment l'utilisons-nous ? Supprimons ce code. Permettez-moi de vider la fenêtre de sortie. Entrons simplement cet équipement important. Laissons ça. Voyons ce qui va se passer. Aucune erreur. C'est super. C'est une bonne nouvelle. Imprimons simplement cela. Regarde ce qui se passe. Imprimez, appuyez sur Break. Excellent. Donc, en vous vendant de manière appropriée, utilisez un module provenant de documents, manuscrits, d'un problème d'œufs approprié, appelé rig point p-y. Excellent, c'est notre module. Comment l'utilisons-nous ? Pour ? Eh bien, nous savons que nous avons une fonction appelée test. Faisons donc un test par points. Et appelons simplement la fonction. Nous savons qu'il renvoie une valeur. Stockons donc cette valeur dans une variable pour le moment et appelons-la simplement t. Imprimons. Et voilà. Il s'agit d'un test qui est la valeur que nous obtenons de notre fonction dans notre module. Excellent, félicitations, vous venez terminer votre tout premier module. Comme vous pouvez le constater, c'est très simple. Les modules ne se limitent pas à cela. Ce que nous allons y arriver très bientôt. La prochaine chose que nous devons faire est de créer quelque chose dont nous avons réellement besoin, à savoir convertir notre code approprié en module, ce qui signifie que vous allez dire que ce sera aussi simple que de le copier-coller dans notre module. Alors allons-y, allons-y et faisons-le. Permettez-moi de tout suivre, de l'instruction d'importation en haut jusqu'à la fin de ma fonction. Je vais appuyer sur la commande C. Passons à notre module Fabric. Supprimons ce code. Et je vais le coller ici. Excellent. Nous avons donc des ions bromure présents. Oui, vous remarquez que PyCharm me donne une erreur. Si je le survole, je vais vérifier les erreurs ici. Cela me dit une référence non résolue à Maya, une référence non résolue à CMBS. C'est très bien. C'est parce que PyCharm ne connaît pas la bibliothèque CMBS. Il existe des moyens de contourner ce problème et agit en fait comme du code en dehors de Maya, mais vous n'en avez pas vraiment besoin. Vous pouvez donc les ignorer pour toujours. Tout le reste est exactement le même qu'avant. Nous l'avons littéralement copié, collé à l'intérieur de ce module. Revenons à Maya. Et allons-y. Alors disons, laissez-moi supprimer ce code. Créons simplement une plate-forme, disons un accessoire, soulignement, une plate-forme de culture. Imprimons ceci directement et voyons ce qui se passe. Nous avons une erreur, un module d'erreur d' attribut intéressant, ce qui signifie que Propp Rick n'a pas l'attribut create prop brick. Pourquoi ça ? C'est parce que nous avons déjà importé le module et nous l'avons modifié après l'avoir importé, après l'avoir importé, nous les avons tous ajoutés. Ce code n'est pas votre fonction, car nous avons déjà importé dans Maya. Maya, même si nous sommes en train de l'importer à nouveau, Maya essaie d'être intelligente et met en quelque sorte le module en cache dans sa mémoire et le réutilise simplement. Alors, comment demander à Maya d'actualiser, mettre à jour ou de recharger ce module ? C'est très facile. Nous pouvons simplement taper, il existe une fonction appelée reload. Donc, le type correspondrait au rechargement, le bon équipement. Mais cela va se produire, c'est forcer Maya à relire le fichier. Et une fois que je peux le mettre en cache, cliquez sur Enregistrer son contenu en mémoire ». Nous n'avons donc vraiment besoin de recharger fois chaque fois que nous apportons une modification. Exécutons donc ce code. Et maintenant, laissez-moi exécuter à nouveau cette déclaration imprimée. Excellent. Il a donc imprimé quelque chose, une petite fonction cryptique, créé une fonction probabiliste, ajouté un nombre aléatoire. C'est une bonne nouvelle. Cela signifie qu'il sait qu' il existe une fonction. Utilisons-le réellement. Je sais que je les passe en revue un peu lentement, mais créons simplement une routine. Nous savons que nous avons besoin de l'une de ces trois valeurs. Alors allons-y et disons, appelons cette fonction. Et en transmettant la valeur à laquelle nous savons déjà qu' il attend, créons un cube. Je vais juste exécuter cette ligne de code. Excellent. Tout cela vous est très familier. créé un cube en, vous a donné le nom du contrôle créé. Créons autre chose, c'est créer un cône. même offre vous a donné la variable qui a été créée, savoir le vin contrôlé, et il a créé un cornet. Et maintenant, toutes ces vies en dehors de moi, oui, nous n'écrivons pas tout ce code dans l'éditeur de script. Vous avez votre propre module sauvegardé par votre système de fichiers. C'est tellement plus facile de travailler avec. Maintenant, tout ce que vous avez à faire, nous n'avons pas besoin de recharger pour le moment car nous n' apportons aucune modification. Pour appeler vos fonctions, il vous suffit suivre ces quatre lignes de code, claires, simples et très, très évolutives. Félicitations, vous avez terminé votre premier projet. J'espère que les modules ont du sens. Nous allons l'utiliser beaucoup plus à l'avenir. Nous allons continuer à utiliser des modules, continuer à utiliser PyCharm, vous allez continuer à créer des fonctions. Ainsi, tout cela vous sera encore plus familier. Encore une fois, félicitations. Passons à l'étape suivante. 17. Plongée profonde - Fonctions: Examinons un peu plus en profondeur le fonctionnement. J'ai déjà dit que vous pouvez considérer une fonction comme un conteneur. Un contenant de quoi ? Dessinons un récipient très rapidement. Un conteneur d' instructions est en train d'être, les instructions étant du code exécuté à l'intérieur de cette fonction. Maintenant, comme il s'agit d'un conteneur, cela signifie également qu' il y a une lunette. Il s'agit d'un terme important. portée signifie essentiellement les limites de l'endroit où quelque chose peut exister. Et cela sera particulièrement important en ce qui concerne les variables. Certaines variables se situeront en dehors de la portée de la fonction et des variables seront situées à l' intérieur de la portée de la fonction. Cela peut parfois prêter à confusion pour les gens, mais nous allons voir un exemple dans un instant. Donc, la principale chose que vous voulez savoir sur les fonctions est ce qu'elles font réellement. Ainsi, comme nous l'avons déjà mentionné, une fonction peut éventuellement accepter une entrée. Imaginez donc qu'il s' agit simplement d'un conteneur qui exécute un ensemble d' instructions et qui prend une entrée. Facultativement, toutes les fonctions ne prennent pas d'entrée, mais vous pouvez faire en sorte que vos fonctions puissent entrer. Plus important encore, il y a toujours une sortie et cette sortie, si elle n'est pas définie explicitement, sera une valeur appelée None. Aucun ne ressemble à un objet nul. Mais vous pouvez également l' utiliser pour vérifier l'existence d' une valeur valide, par exemple, mais toujours, une fonction renverra au moins aucune valeur ou quelque chose qui a été explicitement défini comme sa valeur de retour. Donc, comme entrée le vocabulaire approprié, seront des arguments. Les arguments seront l'entrée et la sortie sera une valeur de retour. Donc, lorsque vous appelez une fonction, nous allons bientôt voir cela dans le code. Je suis juste en train de dessiner. Cela aura un petit aperçu, comme une vue de haut en bas de ce que font les fonctions. Disons que vous avez une fonction appelée, appelons-la ma fonction. Juste à titre d'exemple, pour exécuter une fonction, elle appelle la fonction coef. C'est le nom de l'exécution d' une fonction qui, selon vous, appellerait une fonction. Nous devons utiliser des parenthèses. Et au lieu de cette parenthèse l' un de ces arguments va disparaître. S'il y a des arguments, s'il y a une entrée, les parenthèses contiendront cette entrée. Une fois que vous aurez exécuté la fonction, vous obtiendrez une valeur de retour. Cela prête parfois à confusion pour les gens, car la façon dont les fonctions renvoient une valeur. Eh bien, dès que vous appelez une fonction en fournissant cette parenthèse, vous allez obtenir une valeur en retour. Et généralement, vous voudrez stocker cela dans une variable, sauf si vous ne vous souciez pas de ce qui a été renvoyé, moins que vous ne vouliez simplement que la fonction s'exécute. Les instructions sont un ensemble de fonctions , puis oubliez-le. Mais normalement, vous voudrez stocker cela dans une variable. Un de mes amis m'a dit qu'il est facile de se représenter ce genre de personnes en train de recevoir une pièce à la fin de l'exécution. Alors imaginez que vous exécutez la fonction. Et puis vous recevez une pièce, sorte de lumière, lorsque vous jouez à Mario Bros, recevez une petite pièce. Nous avons essayé de lancer des pièces. C'est une pièce très moche, mais j'ai imaginé que vous obteniez cette pièce en conséquence. Ensuite, vous pouvez déposer cette pièce dans votre variable. Encore une fois, les variables ne sont que des conteneurs d'une valeur. Vous pouvez donc y penser. Ainsi, si cela vous aide, vous obtenez cette petite pièce une fois que vous avez exécuté la fonction. Et cela peut être utilisé comme vous le souhaitez, normalement comme valeur à stocker dans cette variable. Créons donc une fonction. Créons une fonction appelée example. La création d'une fonction en Python s' appelle la définition d'une fonction. Et la façon de le faire est de taper def D-E-F, définir l'espace. Vous pouvez appeler la fonction comme vous le souhaitez. Et nous allons appeler mon exemple, parenthèses ouvertes et fermantes. Pour l'instant, ma fonction ne va pas accepter d' arguments ou d'entrées, puis deux points, puis appuyer sur Entrée. Maintenant, remarquez comment j'ai obtenu cette indentation. Il s'agit essentiellement de quatre espaces. C'est très important. est cette indentation qui détermine ce qui se trouve à l'intérieur de la fonction. Donc, pour l'instant, je vais juste écrire une passe. Passer, c'est essentiellement dire sauter toute exécution ou ne rien faire. Et je vais écrire une variable. Je vais imprimer quelque chose ici. En fait, au lieu d'écrire ça, tu dis quelque chose. Cela n'entre pas dans le cadre de la fonction. Ce chemin entre dans le cadre de la fonction. Nous avons maintenant parlé de la portée de quatre variables. Rendons cela un peu plus clair à l'aide d'un exemple. Allons-y, créons une variable appelée bar. Et je vais lui attribuer un numéro. Disons dix. Et créons une autre variable. Appelons cela inside, car c'est à l'intérieur de la fonction. Et attribuons le chiffre trois, l'absolu étant arbitraire, mais ce n'est qu'à titre d'exemple. Imprimons var. Génial. Nous avons donc obtenu la sortie de dix, qui est exactement la valeur de bar. C'est super. C'est parce que cela n'entre pas dans le cadre de la fonction. Maintenant, que se passe-t-il si nous essayons d'imprimer cette variable ici ? Nous recevons une erreur de nom. Il indique que le nom contenu n' est pas défini. Il n'est pas défini car il se trouve à l'intérieur de cette variable, de cette fonction, et imprimons-le à l'intérieur de la fonction. Imprimons cette impression à l'intérieur. Permettez-moi de supprimer cette ligne. Maintenant, rien ne s'est passé. Bien sûr, c'est parce que nous n'avons pas vraiment annulé la réception. Donc, encore une fois, pensez à exécuter une fonction, vous devez l'appeler. Est-ce qu'ils ouvriraient et fermeraient des parenthèses ? C'est ce que nous allons faire. Et voilà. Nous imprimons maintenant la valeur trois, qui est la variable de la variable à l'intérieur de cette fonction. Maintenant, si vous êtes curieux, vous voulez voir ce qui se passe. Si vous imprimez simplement la fonction sans l'appeler. Tu peux le faire. Et c'est pareil. Python vous dira que c'est une fonction. C'est ce qu'on appelle un exemple, et il réside dans ces nombres aléatoires, apparemment aléatoires. C'est ce qu'on appelle un pointeur vers la mémoire. Vous dites que la fonction ne se trouve dans aucun fichier pour le moment, elle est simplement conservée en mémoire pour la session sur laquelle vous travaillez. Ne vous inquiétez pas trop à ce sujet. C'est un détail un peu plus technique. Mais sachez que c'est possible, vous pouvez utiliser cette fonction telle qu' elle est, mais c'est moi qui l'appelle. Mais pour en obtenir la valeur, vous devez l'appeler. Maintenant, j'ai mentionné que les fonctions renvoient toujours une valeur. Permettez-moi donc de stocker cette valeur dans cette variable de sortie. Parlons-en. Et voilà. Ces trois sont donc extraits de cette déclaration imprimée ici. Permettez-moi donc de supprimer cette déclaration imprimée pour rendre un peu moins détaillée. Et voilà. Nous imprimons donc le résultat de la sortie. Et ce n'est rien. C'est parce que nous ne définissons aucune valeur de retour à partir de la fonction. Et aucune n'est la valeur par défaut. Comme je l'ai déjà dit. Maintenant, disons qu'au lieu de ne rien renvoyer, nous voulons en fait renvoyer cette valeur ici. Disons que nous voulons renvoyer cette variable à l'intérieur. Maintenant, nous pouvons soit en renvoyer trois directement, qui reviendrait ignorer cette variable ici. Vous pouvez également renvoyer cette variable. Pour l'instant. Restons simples et retournons cette valeur trois. Et voilà. Nous en imprimons maintenant trois à partir de cette variable de sortie. Encore une fois, comme je l'ai dit, comme mes amis l'ont dit, il est utile d' imaginer que vous recevez cette petite pièce et que vous déposez cette valeur ou cette pièce dans, dans une variable. C'est ce qui s'est passé ici. Vous n'obtenez que peu de valeur à mes résultats. Vous n' avez pas nécessairement besoin de mettre cette barrière, stocker cette valeur dans une variable, comme je l'ai déjà mentionné, vous pouvez simplement l' imprimer directement. Alors allons-y. Remarquez comment j' appelle la fonction. Et je ne fais que le souligner directement. Et c'est exactement le même résultat. C'est parce que nous allons obtenir cette valeur. Cela équivaut essentiellement à faire cela. Imprime trois, car dans ce cas, trois est la valeur renvoyée par cette fonction. J'espère donc que c'est clair. Maintenant, faisons quelque chose d'un peu plus complexe. Ajoutons des arguments ou des entrées à cette fonction. Ajoutons un argument appelé a et un argument appelé B. Revenons, appelons cette fonction, ajoutons, la fonction d'ajout car nous allons additionner ces valeurs ensemble. Disons que le résultat sera une lesbienne. C'est très simple et nous allons vous renvoyer leurs résultats. Nous pouvons appeler la fonction. Alors, que se passera-t-il si nous les appelons maintenant ? Vous obtenez une erreur, bien sûr, car elle indique que la fonction add prend exactement deux arguments, zéro étant donné. Nous devons donc maintenant présenter des arguments. Nous devons donner quelques valeurs, disons deux, puis deux virgules trois. C'est ainsi que vous fournissez ces arguments dans l'ordre. Ainsi, l'argument et deux correspondront à l'argument a, puis trois correspondront à l'argument be. Rien ne s'est passé car nous ne stockons pas cette valeur. Je vais encore une fois parler de sortie. Je vais l' imprimer, mais c'est excellent. Maintenant, nous obtenons le résultat qui est cinq, parce que c'est deux plus trois. Si nous devions faire dix plus trois, ce serait bien sûr 13. Il existe un autre type d' argument appelé argument de mot clé. Qu'avons-nous vu en ce moment ? C'est ce que l'on appelle des arguments positionnels. En effet, ces arguments n'ont pas de valeur par défaut, ce sont essentiellement des variables. Et encore une fois, c'est important. Ce sont des variables qui existent dans le cadre de cette fonction. Maintenant, remarquez que l'aide n' existe vraiment nulle part ailleurs en dehors de la fonction. R, c'est un peu comme une boîte vide. Je pense que c'est une boîte vide et un contenant vide. Cela est simplement appelé a dans le but de l'utiliser dans notre fonction. En gros, nous disons que chaque fois que vous obtenez une valeur, stockez cette valeur dans cette boîte, un conteneur appelé a, puis utilisez-la dans la fonction. Et la portée d'une variable ou cet argument qui devient essentiellement une variable ou est traité comme une variable, est simplement la portée de cette fonction. Une fois que la fonction est terminée, elle sort, c' est-à-dire lorsque nous revenons ou chaque fois que nous mettons fin à la fonction ou que nous y sommes. Ils n'ont pas patienté, alors cette variable n'existe plus en fait. Et le nom de cette variable, bien sûr, dépend de nous. On pourrait l'appeler ça. Et oh, par exemple, nous ajoutons des chiffres. On peut donc dire, on pourrait même dire premier et second. Ensuite, nous ferions le premier et le second. Et le résultat sera exactement le même. Tout dépend donc de nous, c'est à vous, en tant que développeur décider comment appeler ces variables. Encore une fois, tout est en ordre. Dix appartiendront à la rafale dans ce cas, et trois appartiendront à la seconde. Il existe un autre type d' argument appelé argument de mot clé. C'est ce qu'on appelle un argument de mot clé car au lieu de transmettre les arguments dans l'ordre, ils les transmettront par leur nom. Donc, par exemple , créons un nouvel exemple. Disons que nous voulons que la fonction détermine si quelqu'un peut conduire ou non, si quelqu'un est assez âgé pour conduire ou non. Donc, encore une fois, définissons une fonction, appelons-la can drive. Faites-le un peu descriptif. Maintenant, nous voulons connaître l'âge de la personne. Nous voulons savoir quel est l'âge limite pour pouvoir, quel est l'âge limite pour pouvoir en quelque sorte , un seuil, n'est-ce pas, pour pouvoir conduire. Disons donc que c'est l'âge minimum. Et ajoutons une valeur par défaut. Valeur par défaut. Disons que vous devez avoir 16 ans pour conduire, par exemple deux points. Sans les deux points, vous obtiendrez une erreur. Donc, deux points, appuyez sur Entrée, et maintenant nous sommes dans cette fonction. Donc, disons que si h est inférieur au minimum h, au minimum h, nous allons dire non. Nous n'allons pas dire non, nous allons renvoyer false, qui est une valeur booléenne dans ce cas qui dit essentiellement Non, cette personne ne peut pas enfoncer des boulons. Sinon, nous allons rentrer. Oui. Parce que cela signifie que la personne peut l'essayer. Excellent. Alors, appelons cette fonction. Maintenant, remarquez à nouveau, puisque j'ai fourni une valeur par défaut pour ce nombre, pour cet argument, je n'ai pas nécessairement besoin de fournir une valeur pour cela. Disons que quelqu'un a 25 ans. 25 ans, oui, peut conduire. Quelqu'un a trois ans. Ils ne peuvent pas conduire. Excellent. Et si nous voulions modifier l'âge minimum ? Mais vous pouvez le modifier ici ou vous pouvez le faire. Il y a, il y a deux façons de procéder, puisqu'il n'y a que deux arguments. Vous pouvez simplement le traiter comme un argument positionnel, c'est-à-dire dans l'ordre. Vous pourriez donc dire, d'accord, fixons le nouvel âge minimum à un an, un an. Maintenant, cette personne peut conduire, mais nous pouvons aussi le faire. On peut dire que le minimum h est égal à un. Voilà le fait que nous ajoutons, que nous l' associons à l'argument, faisons un mot clé. Arguments. Lorsque vous ajoutez un mot, lorsque vous échangez des arguments sous la forme d'un argument de mot clé, vous pouvez ignorer l'ordre, ce qui peut être un peu confus. Mais par exemple, si je devais dire que H est égal à 20 ans et que l'âge minimum pour conduire est de 22 ans, par exemple, remarquez maintenant comment h vient après la deuxième et la deuxième place et que l'âge minimum arrive en première place. Mais comme nous utilisons des mots-clés, des arguments de mots clés, la fonctionnelle saura comment l'attribuer à l' argument ou à la variable correspondant. Donc, dans ce cas, c'est faux comme prévu. Maintenant, si nous passons à 19, c'est vrai comme prévu. Mais si nous devions supprimer ces mots clés, il suffit de les laisser comme arguments de position. Maintenant, ils sont retournés. Maintenant, 19 appartiendront à H, et 20 représenteront le minimum H. J'espère que c'est clair. Si ce n'est pas le cas, essayons un autre exemple pour essayer de rendre les choses un peu plus claires. Créons un autre type de fonction. Créons une fonction qui accepte tous les arguments, qui a tous des arguments entièrement facultatifs, ce qui signifie que tous les arguments ont une valeur par défaut. Définissons-le donc. Ça s'appelle Deaf. Disons que c'est une fonction qui permet d'accueillir les gens. Je vais appeler ça une salutation. Maintenant. Il y aura un message. Le message aura une valeur par défaut appelée not cold, mais nous allons simplement dire des salutations, qui est une chaîne contenant des salutations. Maintenant, il va prendre un prénom. Le prénom aura valeur par défaut d' une chaîne vide. Peut-être ne voulons-nous pas avoir un argument prénom et nom de famille qui comportera également une chaîne vide sous forme de deux-points de type valeur. Et nous entrions dans l'enceinte de la réception. Maintenant, nous allons dire « message de lecture ». Commençons simplement une nouvelle variable. Le message sera, sera une chaîne. Nous allons dire, nous allons dire ouvrir et fermer les crochets bouclés ouvrir et fermer les crochets bouclés ouvrir et fermer les crochets bouclés. Ensuite, nous allons taper à la fin du format de chaîne par points. Maintenant, ce qui va se passer ici, c'est chacune de ces parenthèses bouclées, elle sera remplacée par tout ce que nous mettrons dans cette fonction de format de points. Nous allons donc dire le premier, le premier crochet sera remplacé par le message, le second par le prénom et le troisième par le dernier. Et puis j'ai simplement renvoyé un message. Maintenant, bien sûr, nous pouvons les renvoyer directement au lieu d'avoir à déformer en une variable totalement valide. Mais je pense que c'est un peu plus simple de créer une variable avec notre message. Permettez-moi d'agrandir un peu cette fenêtre. Créez une variable contenant notre message, puis renvoyez cette valeur. Voyons donc ce qui se passe ici. Maintenant. Encore une fois, nous avons trois arguments dans cette fonction. Pour créer une autre variable appelée sortie. Nous allons stocker la sortie de cette fonction dans cette variable. Je vais l'imprimer. Voyons donc ce qui se passe si nous appelons cette fonction sans aucun argument, mais en transmettant tous les arguments. Nous, ça dit des salutations, c'est excellent. Il y a donc des espaces vides parce que nous en avons ajouté. Mais c'est bon pour le moment. Ceci n'est qu'un exemple. Que se passera-t-il maintenant si nous adoptons un seul argument ? Eh bien, ce sera le cas, cela remplacera le premier argument ici. Disons simplement, disons bonjour. Au lieu de salutations. Et voilà. Bonjour. Et si nous faisions passer un second argument ? Nous allons dire FirstName, disons Josh. Bonjour, juge. Que se passe-t-il maintenant ? Cela se produit si nous transmettons des arguments par mot clé ? Remarquez donc qu'il s'agit du deuxième argument. Barbaric est en fait une colonnade LastName. En gros, nous disons, d'accord, utilisez cette valeur, cette chaîne en place ou LastName. Et voilà. Maintenant, c'est difficile à voir parce qu'il n'y a qu'un espace vide. Donc, si nous changeons la valeur par défaut du nom de la personne en un simple tiret. Mais nous verrons ce qui se passe ici. Remarquez comment nous transmettons notre prénom, en passant directement au nom de famille. Et puis nous avons Hello Josh. Génial. Maintenant, si nous transmettons le prénom, même si nous le faisons dans le désordre, tant que nous utilisons le mot-clé correspondant. Dis. Junior. Je sais. Je sais que c' est un peu rétrograde. Le nom de famille, juge, n' est pas un nom de famille. Mais disons que Junior sera son prénom. Bonjour, January Josh. Remarquez donc que même si c'est irrecevable, FirstName, nous utilisons des mots-clés. Il prend la place du prénom et le nom de famille prend la place du nom de famille. Maintenant, si nous nous débarrassons de ces mots clés en supprimant simplement nom de famille égal prénom égal. Nous en revenons aux arguments positionnels, ce qui signifie que l'ordre sera important dans ce cas. Alors exécutons-le. Vous voyez maintenant que la sortie est inversée. Excellent. Je voulais revenir aux valeurs de retour parce que j'ai mentionné que le retour marque la fin d'une fonction. Et c'est l'un des aspects les plus importants d'une fonction et quelque chose qui cause confusion, de la confusion chez les gens. Permettez-moi donc de revenir en arrière et faire beaucoup de choses et de revenir à mon exemple précédent. Voilà, vous pouvez vous draper. Donc, ici, nous utilisons l'instruction if else pour suivre la décision dicter le déroulement de cette fonction, n'est-ce pas ? Donc, à titre de rappel, nous demandions la personne avec ce h peut être une personne ayant moins de h minimum. Nous répondrons que le nœud ne peut pas conduire. Sinon, oui, ils peuvent conduire. Nous pouvons donc réellement lire cette autre déclaration qui n'est pas totalement nécessaire. La raison en est qu' une fois que vous avez atteint la valeur de retour, c'est la fin de la fonction. Alors laisse-moi recommencer. Supposons que cette personne 10 ans et ait le minimum h. Supprimons simplement cet argument et restons-en h. Supprimons simplement cet argument à la valeur par défaut. Donc, quelqu'un de 10 ans ne peut pas conduire. C'est excellent. Alors, que se passera-t-il si je retourne cet autre article ? David, et je supprime simplement l'indentation dans cette déclaration de retour également. Eh bien, le résultat est le même. Cette personne ne peut pas conduire. Ce qui se passe ici, c'est essentiellement dire que si cette personne n'a pas atteint la limite d'âge minimum, renvoie un faux, une fois que vous avez atteint ce point, la fonction est terminée. Je ne vais pas continuer. Ici en bas. Regardons un autre exemple. Permettez-moi de créer une nouvelle fonction qui dit simplement : appelons-la simplement test pour le moment. Et ils vont prendre et numéroter. Je vais juste dire l'argument num colon, entrez la fonction. Nous allons dire que si num est égal à un, allons-y, revenons. Rendons-en un. Juste une chaîne qui en dit un. Si num est égal à deux, cela est renvoyé. Sinon, revenons. Plus. Par exemple, ce dysfonctionnement n' est qu'un exemple, cela n'a pas beaucoup de sens. Alors exécutons-le. Disons tester. Commençons par le premier et je vais imprimer les résultats. Je ne vais pas le stocker dans une variable, je vais l'imprimer directement. Donc 12 ans, désolée. Si je dis 20, il en retournera plus. Excellent. Cela revient donc à dire si sinon, renvoyez plus. Mais encore une fois, comme l'instruction return marque la fin, elle quitte essentiellement la fonction. Ce dernier élément n'est pas nécessaire. C'est très puissant car cela signifie que vous pouvez, vous pouvez dicter le déroulement de votre fonction de cette façon. Nous pouvons avoir de nombreuses conditions, de nombreuses instructions. Et une fois que vous avez atteint une certaine condition, vous pouvez dire, d'accord, c'est tout ce dont nous avons besoin. Quittez la fonction pour renvoyer une valeur, n'importe quelle valeur que vous souhaitez, par exemple ici, nous renvoyons des valeurs différentes. Ici. Vous n'êtes pas obligé de renvoyer le même type de valeur. Vous pouvez même renvoyer un NAN, par exemple et dans ce cas, le 20 n'est ni un ni deux. Donc, je n'en renvoie aucun. Maintenant, encore une fois, c'est votre choix, c'est à vous de décider. J'espère que cela avait du sens. Les fonctions peuvent être un peu confuses et, en particulier les instructions de retour peuvent être un peu confuses pour les utilisateurs. Mais plus vous l'utiliserez, plus ils vous seront familiers. Une dernière chose avant nous. Nous allons terminer. Et c'est un sujet très important, savoir la documentation. Ce sont des docstrings. Encore une fois, comme je l'ai déjà mentionné, une docstring est essentiellement une chaîne que nous pouvons utiliser à l'intérieur d'une fonction qui fait office de documentation, où le nom dark strip. Docstring est un guillemet triple. peut s'agir de trois guillemets simples juste pour les ouvrir et les fermer. Ou trois guillemets doubles, je vais m'en tenir aux guillemets doubles dans ce cas. Maintenant, ce que font les docstrings, c'est fournir de la documentation, comme je l' ai déjà mentionné, je vais fournir une explication simple. Ici. C'est une description, désolé, pas une explication. Cette fonction. Et maintenant, c'est quelque chose de très important à inclure dans votre chaîne de document. Quel que soit le type de convention que vous suivez dans les docstrings, il est très important de fournir. Leurs arguments. Ou la convention que j'aime suivre consiste à appuyer sur args colon. Et en dessous, nous allons fournir les arguments qui font fonctionner l'optique, dans ce cas, sont cet argument num. Je sais que num sera un entier. Et j'aime fournir une description simple pour la deuxième année, le bon côté, par exemple, et puis si la fonction est renvoyée, j'aime également ajouter des retours. Tout comme une section sur le côté droit, le type renvoyé dans ce cas, nous savons qu'il s'agit d'une chaîne. Disons donc qu'il renverra une chaîne, entier de chaîne transmis. Il s'agit simplement d'une description de cette valeur de retour. Maintenant, écrire les docstrings peut être un peu fastidieux. Beaucoup de gens ne le font pas. Mais croyez-moi, c'est extrêmement important et cela vous sera très bénéfique. Et juste le fait que vous écriviez un pool docstrings. Si vous souhaitez poursuivre cette carrière de scénariste ou de programmeur, cela vous aidera énormément dans votre carrière. Alors, quel est l'avantage de ces docstrings ? Eh bien, l'une d'elles est qu'en un coup d'œil, lorsque vous examinez une fonction, vous pouvez simplement voir la documentation lorsque vous reviendrez lire votre code dans un an. Vous savez ce qui se passe quand quelqu'un d'autre veut utiliser votre fonction. Ils savent ce qui est attendu en tant qu'entrée et sortie. Mais même si vous n' avez pas accès directement à la fonction elle-même, vous pouvez y accéder, même si vous n'avez pas accès à la lecture du code source ou du contenu de la fonction. Imaginons que nous sommes ici. Nous ne savons pas vraiment ce qu'il y a à l'intérieur du test. Il existe une fonction intégrée à Python qui s'appelle Help. Vous pouvez le transmettre à votre fonction sans l'appeler. Remarquez que je ne mets pas la marque, je ne l'appelle pas simplement en passant le nom de la fonction. Permettez-moi d'effacer ma fenêtre de sortie. Laissons ça. Et le résultat de cette fonction de santé est exactement la docstring. Donc ça dit test. Ici, il est écrit « Aide aux tests d'une fonction » dans le module principal. Ne vous inquiétez pas de ce que cela signifie. Cela signifie simplement que y signifie simplement qu'il n' y a pas de module. Nous l'appelons simplement dans le Maine, qui est en quelque sorte l' endroit par défaut pour exécuter du code. Maintenant, le nom de la fonction est tests. Je prends en compte un argument appelé num. C'est la description que nous avons saisie au début, et ce sont les arguments et le type de retour que nous avons fournis. Maintenant, vous pouvez voir à quel point cela peut être utile si nous ne l'avions pas intégré, si n'avions pas la docstring et si nous exécutions les tests avec de l'aide au test. Voyons ce qui va se passer. Il indique Aide sur les tests de fonctions et d'autres domaines et vous donne le nom de la fonction, l'argument qui attend, puis rien, ce qui n' est pas du tout utile. Il est bien plus utile de disposer ces informations pour vous ou pour quelqu'un d'autre qui pourrait utiliser votre fonction. C'est donc une bonne habitude de prendre un peu plus de temps, mais ce n'est pas vraiment beaucoup plus de temps. Et vous et de nombreuses autres personnes vous remercierez immensément d'avoir écrit de la documentation. J'espère que ce sont des fonctions qui vous sont beaucoup plus familières. Ils sont extrêmement utiles, extrêmement importants en programmation. Et ils vous faciliteront la vie une fois que vous serez plus à l'aise avec eux. 18. Projet 2 - Outil de transfert de pose : introduction et panne: Bienvenue dans votre prochain projet, et nous allons créer un outil qui nous aidera à traduire les articles entre les caractères. Je vais vous en faire une démonstration. Au fait, pour cette démo, j'utilise cet appareil appelé Morpheus. C'est une plate-forme gratuite, c'est un incroyable Rick que j'ai créé par le juge Burden. Vous pouvez l'obtenir sur son site Web. Judge Horton.com Slash Projects Slash Morpheus dès que possible. C'est un Reagan génial, je le recommande vivement. Je vais l'utiliser pour cette démo. Mais tu peux utiliser ce que tu veux. Ces outils doivent fonctionner avec différents types de pauses. Nous les utiliserons parce que Jewish a eu la gentillesse de me les laisser les utiliser pour ces projets. Comme vous pouvez le voir, j'ai trois caractéristiques, trois plates-formes, ce sont toutes les mêmes. Ils ont l'air un peu différents. Morpheus me permet de modifier le montage, créer différentes versions du personnage, mais c'est le même équipement. Ils ont tous été mentionnés dans la scène. Et celui-ci a déjà été publié. Transférons donc cette pose aux deux autres tableaux. Sélectionnons, disons, ces manettes et peut-être aussi la tête. Transférons donc ces valeurs. C'est juste censé être réservé à ces autres personnages. Je vais sélectionner l'un d' entre eux et exécuter les deux. Et voilà. Maintenant, ils ont tous les deux pris la pose. Disons que je veux être transféré maintenant, faisons un changement et que ce personnage est là, juste devant. Je vais donc sélectionner, je dirais que je veux transférer cela dans ces deux personnages. Peu importe ce que je sélectionne, car je sais que je vais transférer les manettes que j'ai sélectionnées sur le premier personnage vers les deux autres personnages que j'ai sélectionnés. Et voilà. Excellent. Et bien sûr, cela fonctionne également pour un seul personnage. Si tu le voulais. Essayons ça très vite. Excellent. Donc ça fait deux. Maintenant, nous devons faire un peu de configuration. Parce qu'une fois que je l'ai déjà dit, ce sont tous les mêmes appareils. La raison pour laquelle cela fonctionne, et c'est une façon très courante de travailler avec ce type d'outils, est que les outils sont fabriqués sur ou autour de l'appareil. Et lorsque vous travaillez dans un studio ou un projet avec d' autres membres d'une équipe. Les risques sont généralement les mêmes. La géométrie peut être différente, le personnage peut sembler complètement différent. Comme vous pouvez le constater, entre ces deux personnages, ils sont très différents. Mais les contrôleurs de l' appareil sont pour la plupart les mêmes. Et c'est ce qui se passe ici. C'est ainsi que l'outil est capable de transférer une animation ou un post qui ne sont que des valeurs d'une semaine à l'autre. Comme nous travaillons dans le domaine des références de location, nous avons des espaces de noms. Comme vous pouvez le constater , chaque contrôleur possède un espace de noms. Ce personnage ici, puis le fait d'être Severus. La suivante est Minerva, et la dernière est Luna. Allons-y et créons configuration dont vous aurez besoin pour cela, je ne vais pas trop m'attarder sur le concept des espaces de noms. Si vous n'êtes pas familier avec les références et les espaces de noms, je vous recommande un rapide tutoriel en ligne, car je vais être très important et il est également très utile de savoir comment travailler avec des références et des espaces de noms en tant qu'animateur . Allons-y et procédons à la configuration. Je pars d'une nouvelle scène dans Maya. Il s'agit d'une scène complètement nouvelle. Lorsque vous accédez au menu Fichier et à l'éditeur de références. Encore une fois, pour que cela fonctionne, nous allons utiliser des références car les taux sont tous les mêmes Nous devons donc les référencer et les placer derrière cet espace de noms. Je vais jouer en cliquant sur le bouton Plus. Et j'ai déjà ces tarifs dans un dossier. J'ai la version féminine, la version masculine. Je vais donc les utiliser. C'est déjà là. Mais disons le premier, le mâle d'abord. L'ordre n'a pas d'importance. C'est pareil. Je vais juste faire cette première référence qui vous intéresse. Maintenant, Maya me donne automatiquement l' espace de noms, qui est plus de courrier de soulignement. Vous pouvez le laisser tel quel si vous le souhaitez. Je vais l'appeler Severus. C'est un peu plus amusant. Et ensuite, passons à l'autre. Je réfléchis un peu. C'est un engin lourd. Mais encore une fois, c'est un Rick vraiment sympa. Maintenant, la prochaine, appelons-la Minerva. Encore une fois, l'espace de noms n'a pas d'importance. Cela dépend de vous. Je choisis juste de le faire pour le rendre un peu plus intéressant. Excellent. Nous avons les deux plates-formes, Severus et Minerva. Je vais juste le faire maintenant. Mais cet outil fonctionnera avec deux ou plusieurs taux, selon vous. Je n'ai pas la texture chargée, mais ce n'est pas grave. Je ne vais pas trop m'inquiéter pour les textures. Dans ce cas, nous ne nous soucions que des contrôleurs, car quoi que vous décidiez d'utiliser, vous pouvez charger les textures ou non. L'outil ne s' en soucie pas. Je vais utiliser le matériau par défaut juste pour donner une teinte uniforme. Et pour une raison quelconque, il y a du noir. Allumons donc l'éclairage double face et recto verso. Et voilà. Ils ne sont pas aussi jolis, mais Tool. Ça va juste fonctionner sur la manette, donc ça va. Et voilà. Laisse-moi déplacer ça vers le haut. Et faisons simplement un test rapide sur l'outil. Partons de Minerva. Ça se sépare juste. Et voilà. Cela fonctionne. Excellent. C'est la configuration dont vous avez besoin. Encore une fois, si vous n'êtes pas très familier avec espaces de noms et les références dans Maya, je vous recommande vivement consacrer quelques minutes à vous renseigner à ce sujet. Ce n'est pas très compliqué, mais c'est très utile. Alors allons-y et passons au code. En fait, avant de passer au code, analysons ce qui se passe ici. Voyons comment, voyons les étapes que nous essayons d'automatiser. Permettez-moi donc de rassembler ces restrictions. Laisse-moi les mettre à zéro. OK. Qu'est-ce que cela signifie de transférer des postes ? Prenons ce contrôle de la poitrine, par exemple, pour que vous puissiez le voir, ils sont tous les deux identiques. Donc, une colonne vertébrale, une peau nulle, une épaule, des épaules, et c'est un nom un peu long, mais l'important, c'est qu'ils soient tous les deux identiques. Ils se trouvent juste derrière cet espace de noms. Donc, pour ce contrôle, ses serveurs et, par le biais de ce râteau, les espaces de noms Minerva. Alors, changeons la rotation de ce personnage. Disons juste 90. Parfait. Pour transférer cette pose, nous voulons essentiellement appliquer la même valeur à ce contrôleur ici, qui est à nouveau le même contrôleur, juste sous un espace de noms différent. Comment s'y prendrions-nous ? Ouvrons l'éditeur de script. Demandons une fois de plus à Maya de nous donner de précieuses informations. Encore une fois, je vais modifier cette valeur, c'est-à-dire faire pivoter x et voir ce qui se passe. OK, parfait. Mes yeux nous disent que c'est la commande qu' il exécute, a déclaré Adder. Ensuite, le nom du contrôleur, qui est le nom de l'objet, point sur le nom de l'attribut. OK, voici donc le nom complet de l'attribut. Cela signifie que la rotation x et ce contrôleur portent ce nom, qui est un contrôleur, qui est un espace de noms, un deux-points. Désolée, je ne voulais pas faire ça. Deux points dans l'espace de noms, le nom du contrôle, puis un point, puis le nom de l'attribut. Et il y a cette commande set R. Traduisons cela en Python. Je vais le faire, je dois importer cette bibliothèque. Donc, à partir de mon entrée, la bibliothèque CMBS fera du CMV en tant qu'additionneur de points. Et puis entre parenthèses. N'oubliez pas que le sous-code ici est un code olfactif, nous ne l'utilisons donc que comme guide, comme plan. Nous n'avons pas besoin du point-virgule en Python. Nous allons ouvrir et fermer des parenthèses. Le premier argument sera le nom, le nom complet de cet attribut. Et le deuxième argument sera la valeur que nous voulons attribuer à cet attribut. Alors voilà. C'est la base de la configuration de nos outils et de l' obtention des attributs. Définissons cet attribut avec quelque chose d'autre, disons 80. Laisse-moi le refaire. Vous pouvez donc voir le changement ici. Je suis désolée. Je sais que ça a l'air très douloureux. Je suis désolée, je suis Nerva. Je t'en prie, excuse-moi. Revenons à zéro. Donnons-lui un peu de soulagement sur le dos. Et voilà. Maintenant, faisons de même en modifiant simplement l'espace de noms. Maintenant, l'autre espace de noms est séparé, et définissons-le sur 80. Exécutons ce code. Et voilà. Comme vous pouvez le constater, nous ne changeons que l'espace de noms. Maintenant, nous devons savoir quelle est la valeur d'un contrôleur. Nous pouvons l'appliquer à la manette suivante, n'est-ce pas ? Laisse-moi mettre ça à zéro. Encore une fois. Ramenons-les à la pose par défaut. Permettez-moi d'appliquer une valeur à cette rotation. Et il se trouve qu'il existe un moyen d'obtenir cette valeur et c'est très intuitif. Ça s'appelle Get outer. Nous travaillerions de la même manière que je l'ai dit, adder, mais bien sûr, nous ne définissons pas d'attribut, nous n'avons donc pas besoin de transmettre d'arguments supplémentaires. Tout ce que nous faisons, c'est augmenter. Supposons que nous voulions obtenir l'attribut, la valeur de cet attribut de rotation, Minerva. Nous devons donc modifier cet espace de noms Minerva. Et nous dirons que la rotation est égale à cela. Imprimons simplement ceci. Voyons ce qui se passe ici. Imprimons la rotation. Permettez-moi de l'agrandir un peu et d'effacer l'historique de mes sorties. Ok, voilà. Bien. additionneur avec le nom complet de l'attribut vous donnera essentiellement la valeur que nous recherchons. Comme vous le devinez probablement, il ne nous reste plus qu' à définir l'attribut. Je vais appeler cette rotation x parce que c'est ce que nous faisons. Super. Nous stockons donc cette valeur dans la rotation x. Il suffit donc d' appliquer le même contrôleur, le même attribut sur les serveurs. Et voilà. C'est-à-dire que c'est essentiellement la base de notre outil. C'est très simple, ce qui est bien, simple, c'est toujours bien. Nous devons simplement faire tout cela par programmation, ce qui signifie que nous devons savoir quel est le personnage que nous sélectionnons, quelles manettes nous sélectionnons. Nous devons en obtenir les attributs, à partir de ces manettes, et les appliquer au personnage suivant. J'espère que c'est logique. Maintenant, allons-y et examinons le code. 19. espaces de noms et listes: Nous allons couper en dehors de moi, principalement dans PyCharm. Si vous n'avez pas vu la vidéo du patron, veuillez le faire à moins que vous n'utilisiez le texte de votre choix , etc., auquel cas c'est bon. Mais dans la vidéo de PyCharm, je explique comment configurer le projet. Nous avons configuré le projet dans dossier de scripts Maya de vos documents. Et la raison en est que Maya sait déjà comment lire le code de ce dossier. Nous allons donc écrire nos modules ou code ici afin que Maya puisse y accéder facilement. Essayons avec notre module. Je vais créer un nouveau fichier, ce simple fichier texte. Nous pouvons le faire dans PyCharm, bien sûr, mais je vous l'ai déjà montré manuellement. C'est ce que nous allons importer. Je vais l'appeler posts Transfer point au lieu de dx, dy point p-y ou Python. Windows me demandera de confirmer. Je vais dire oui. Maintenant, si je vais sur PyCharm et que ce n'est pas un graphique circulaire, c'est un terme pi. Vous verrez ce fichier apparaître ici. Et bien sûr, il est vide. Mais maintenant, nous pouvons commencer à coder. Que devons-nous faire d'abord ? Eh bien, l'essence de l'outil est que, comme je l'ai mentionné, nous travaillons beaucoup avec les espaces de noms. Little dit essentiellement que le transfert s'oppose à un espace de noms vers un autre espace de noms. Nous devons donc être en mesure d'obtenir les espaces de noms avec lesquels nous voulons travailler. C'est l'une des premières étapes. Pour être capable de le faire. Nous devons travailler avec la sélection, car nous obtenons que l'espace de noms est basé sur la sélection. Je sélectionne un personnage puis le suivant, puis je transfère les messages sélectionnés du personnage un au personnage. Alors allons-y, travaillons d'abord à obtenir cet espace de noms. Ensuite, nous travaillerons pour obtenir ces élections. Comment obtenir l'espace de noms ? Si tu sélectionnes quelque chose ? Vous verrez ici dans la boîte des chaînes qui se trouvent même ici, comme celle que j'ai déjà sortie. Le nom du contrôleur est une chaîne de caractères. Ou on peut le considérer comme une chaîne. Au moins. Il contient l'espace de noms , comporte deux points, puis le nom du contrôleur. Mettons donc cela dans une variable. Nous avons essentiellement besoin de comprendre la première partie. Et pour ce faire, nous pouvons diviser la chaîne par cette colonne. Nous pouvons contrôler la division par points. Il s'agit d'une fonction fournie avec des chaînes. On peut parler de contrôle qui divise. Nous voulons le diviser dans la colonne. Imprimons simplement ceci. Allez-y et imprimez directement ceci. Super, et voilà. Comme vous pouvez le voir, nous avons la première partie , puis la deuxième partie. Maintenant, il avait l'habitude de faire comprendre l'exemple. Et si on séparait les traits de soulignement ? Eh bien, vous obtenez plus de pièces. Vous obtenez tout ce qui se trouve avant et après chaque trait de soulignement. Mais pour nos besoins, tout ce dont nous avons besoin est de le diviser par le, par les deux points. Nous obtenons donc une liste, le résultat de cette fonction de division. C'est une liste avec toutes les parties qui ont été divisées. Et celle qui nous intéresse est la première partie. Comme je l'ai déjà mentionné. Nous en apprendrons davantage sur la liste dans ce projet. Notre liste n'est qu'une collection d'objets, d'objets, tout ce que vous pouvez, ce que vous voulez. Il peut s'agir de chaînes, d'entiers, de fonctions elles-mêmes, tout ce que vous voulez. Et nous commençons à compter ces éléments à zéro. Donc, ce premier article, permettez-moi de me lancer dans la peinture pour celui-ci. Vous pouvez voir une liste. Vous pouvez, vous pouvez en quelque sorte imaginer une liste comme celle-ci. C'est ce qu'on appelle également un tableau. D'ailleurs, certaines personnes les appelleront des tableaux, mais nous les appellerons des listes. Alors imaginez que c'est une liste. Simplifions-nous les choses. Il s'agit d'une liste de quatre éléments. Trop. 3,4. Nous commençons à compter à zéro. C'est zéro, l'élément, c'est un, c'est deux. C'est vrai. Et si vous souhaitez obtenir le deuxième élément d' une liste tout en utilisant l' index numéro un, lequel de ces éléments est appelé index ? Si vous souhaitez obtenir le premier élément d'une liste, vous devez utiliser l'indice zéro. Si vous souhaitez obtenir la liste différente du deuxième élément, vous utilisez l'index un, et ainsi de suite. Alors allons-y. La syntaxe pour obtenir un élément de la liste est un autre crochet ouvert et fermé. Disons que nous voulons obtenir le premier, qui en est un. Lancez-le et nous en trouverons un. Excellent. Disons que nous voulons obtenir le troisième. Une fois de plus, nous partons de zéro. Nous allons donc obtenir le deuxième indice. Excellent. Sauvegardons cette division dans une variable. Appelons cela des pièces de commande. Et maintenant, imprimons, permettez-moi de supprimer ceci. Imprimons cette variable. D'excellents mois, encore une fois, c'est une liste. Passons maintenant au premier élément, qui, encore une fois, marque des crochets, des zéros, un index. Et c'est ce que nous recherchons. Cela signifie que l'espace principal de notre espace de nommage sera ce premier index. Nous pouvons combiner tout cela. Par ici. Nous pouvons dire que l'espace de noms sera le premier élément de cette division. Super, c'est ainsi que nous obtenons l'espace de noms. Maintenant, ce que nous devons obtenir avant de pouvoir obtenir un espace de noms, ce sont ces contrôleurs en fonction de la sélection ? Alors allons-y et faisons-le. 20. Sélection et boucle pour: Sélection. Nous avons à nouveau besoin de cette bibliothèque CMBS. Laissez-moi donc suivre mon impulsion. Oui, il existe une fonction appelée ls qui signifie list. Remarquez dans une liste Python comme celle que nous avons vue jusqu'à présent. Mais j'ai vu une fonction qui vous donnera une liste des objets de la scène, par exemple si vous voulez obtenir toutes les caméras de la scène, vous pouvez importer une bibliothèque. Laissons ça. Vous voyez que vous obtenez les caméras de la scène à partir des résultats respectifs des caméras. Avec certains appareils photo, vous pouvez obtenir des lumières, par exemple , mais je n'en ai pas pour le moment. C'est donc une liste vide. Attendez-vous à cela. Vous pouvez obtenir une sélection. Comme je n'ai rien sélectionné, j'ai une liste vide. Mais dès que je sélectionne quelque chose, laisse-moi effacer ma fenêtre de sortie. Dès que je sélectionne quelque chose, j'obtiens une liste avec ces objets sélectionnés électriquement. Et comme vous pouvez le voir, c'est le nom que nous recherchons. Donc, si j'en sélectionne plusieurs, disons que ce bras me contrôle, il suffit d'imprimer. Et voilà. Je reçois donc une liste de tous ces contrôleurs avec leur espace de noms et leur contrôle. Nous pouvons maintenant commencer à appliquer cette technique pour extraire l'espace de noms de toute la sélection. Allons-y et passons au terme pi pour commencer. Dans notre module post-greffe, la partie que nous venons de créer, nous allons créer une fonction l'espace, définir la fonction, la sélectionner. Espaces de noms, parenthèses ouvertes et fermées, colonne. Mais tout d'abord, commençons par faire la sélection. Nous pouvons donc stocker cette sélection comme je vous l'ai déjà montré dans une variable appelée sélection. La sélection sera égale. Et en fait, je n'ai pas importé ma bibliothèque depuis Maya, important CMBS. Ils seront affichés en rouge. C'est parce que Python ne sait pas où obtenir le CMB en tant que bibliothèque. Mais peu importe, car PyCharm n'exécute pas le code. Dans ce cas, maya exécutera ce code. Donc tant que Maya y a accès, c'est bon. La sélection est donc égale à Cmd S point ls. La sélection est égale à vrai. Cela nous donnera les commandes sélectionnées. Que se passe-t-il donc si rien n'est sélectionné ? Nous pouvons vérifier la longueur d'une liste. Donc, encore une fois, ce sera une liste. Nous pouvons vérifier combien de temps j'ai listé avec une fonction de rappel fonctionnelle appelée Len L-E-N. La sélection par stylet vous indiquera essentiellement combien d'éléments se trouvent dans une liste. Maintenant, j'ai déjà mentionné que vous commencez à compter à zéro. Mais dans le cas de la longueur, cela vous indique en fait le nombre de choses à l'intérieur de la liste. Cela ne comptera donc pas à zéro si la liste contient trois éléments. Land, on va t'en donner trois. Nous voulons dire si len est égal à zéro, cela signifie qu' il n'y a rien dans la liste. Eh bien, nous ne pouvons pas obtenir d'espaces de noms à partir de rien , nous ne pouvons donc pas continuer, nous pouvons donc revenir ici. Mais nous sommes en train de créer une fonction qui renverra des espaces de noms. Restons donc cohérents et renvoyons une liste vide. Avant de continuer, définissons les attentes de cette fonction dans la docstring. Encore une fois, je vais appuyer sur 33 guillemets doubles. Nous dirions que je vais écrire une petite description de la fonction. Obtenir la liste des sélectionnés. Obtenez maintenant la liste des espaces de noms pour la race sélectionnée. Et il renverra une liste. Excellent, donc s'il n' y a rien de sélectionné, nous renvoyons une liste vide. Sinon, nous allons devoir parcourir cette sélection pour obtenir les espaces de noms que nous venons de voir. Comment faisons-nous cela ? Nous devons utiliser une boucle for pour cela. La syntaxe est pour, appelons-le item. En sélection. Nous allons récupérer le code que nous venons de recevoir. Nous étions ici. Permettez-moi de le coller ici. En fait, appelons-les contrôle. Appelons ce contrôle plutôt qu'élément. Dans ce cas, nous n'en avons pas besoin ici car c'est codé en dur. Nous ne voulons pas travailler avec cette commande unique. Travaillez dans tout ce qui a été sélectionné. Pour contrôler la sélection. Obtenez l'espace de noms, ce que nous faisons encore une fois en divisant le contrôle par deux points , puis en obtenant le premier élément. Et maintenant, pour stocker nos espaces de noms, nous allons commencer une liste vide. Les espaces de noms correspondent à une liste vide. Alors, comment ajouter cet espace de noms à cette liste d'espaces de noms, appelons-le réellement in space list. Un peu plus explicite. Vous pouvez dire espace de noms, liste, ajout de points et espace de noms. Maintenant, vous remarquerez probablement que les listes peuvent être modifiées. C'est ce qu'on appelle la mutabilité. La liste est immuable, c'est-à-dire qu'elle peut être modifiée. Il existe un autre type de données, ce type de données appelé tuple qui agit comme une liste, mais qui ne peut pas être modifié. C'est immuable. Mais nous y reviendrons un peu plus tard. Pour l'instant, il est important de savoir que cela peut au moins être modifié sur place. Ainsi, chaque fois que nous ajoutons un espace de noms ici, nous modifions cette liste ici. Donc, une fois cela fait, retournons cette liste d'espaces de noms. Permettez-moi d'ajouter quelques commentaires. Permettez-moi de dire que nous allons extraire l' espace de noms du contrôle. Ici, nous allons parcourir la sélection en boucle. C'est très redondant, mais c'est la première fois que nous cherchons des boucles. Nous allons donc ajouter quelques commentaires, puis ajouter un noms pour répertorier les espaces de noms. Encore une fois, très redondant. Vous n'êtes pas obligé d' ajouter ce commentaire, mais simplement pour être un peu plus explicite. Excellent. Voyons donc ce que cette fonction nous donne. Importons ce module de transfert de publications et utilisons simplement notre fonction. Revenons donc à Maya. Ouvrons un nouvel onglet Python. Et maintenant, importons la pose, transférons. Moi, agrandissez un peu la police. Laissons simplement cela. Maintenant, si je surligne le nom du module et je le lance, vous savez que c'est, il vous indique qu' il provient de ces documents de localisation, d'un script Maya, supposons un transfert, excellent ou sur la bonne voie. Utilisons simplement notre fonction. Stockons l' ajustement du résultat dans cette variable. Ça va s'appeler «  post-transfert ». Premièrement, je vais l' appeler, nous allons appeler la fonction après le transfert et elle s'appelle get selected namespaces. Nous allons donc d'abord tester le cas où rien n'est sélectionné. Désolé, je ne l'ai pas imprimé. Imprimons donc les espaces de noms. Super, une liste vide comme prévu. Maintenant, si je sélectionne un contrôle, nous obtenons cet espace de noms. Si je sélectionne deux caractères, sélectionnons le premier et le second REG. D'accord, nous obtenons tous les espaces de noms, mais ils se répètent. Donc, ce n'est pas nécessairement redondant. Nous avons un bug. Voyons ce qui s'y passe. Supposons que je sélectionne un contrôle pour chaque personnage. C'est maintenant le résultat que nous voulons. Ce qui se passe maintenant, c'est que nous obtenons l'espace de noms plusieurs fois par personnage. Alors allons-y et corrigeons ce problème. Revenons à PyCharm. C'est vrai. Nous ajoutons donc l'espace de noms à chaque fois. Mais ce que nous voulons, c'est ajouter à cette liste la liste des espaces de noms uniquement si elle ne figure pas déjà dans la liste. Nous pouvons donc simplement dire si ce n'est pas un espace de noms dans la liste des espaces de noms, ce que vous vouliez, et alors vous travaillez réellement. C'est correct, mais il est généralement plus courant de l' écrire de cette façon. Si ce n'est pas le cas, c'est un espace de noms, pas un spécialiste. Il s'agit d'une vérification très simple pour voir si quelque chose se trouve dans la liste complète. Si ce n'est pas le cas, nous avons ajouté « excellent ». Revenons à Maya. Permettez-moi de recharger ce module car nous avons apporté quelques modifications. Rechargeons-le. Exécutons à nouveau ce code. Excellent. Alors, que se passe-t-il si nous sélectionnons plusieurs manettes ? Vous n'obtenez toujours qu'un seul espace de noms par caractère. Incroyable, c'est exactement ce que nous voulons. C'est sélectionner d' autres choses. Je vais donc tout désactiver sauf les courbes nerveuses pour la sélection. Super, c'est exactement ce que nous voulons. Notre première fonction est donc prête. Docstring est prêt. Super, passons à la fonction suivante. 21. Aperçu des loops: Avant de passer à la fonction suivante, je tiens à clarifier ce que fait la boucle for , car il s'agit d'un nouveau concept et nous allons l'utiliser beaucoup plus. Cela va donc vous être très familier. Mais jetons un coup d'œil à ce qui se passe réellement. Une fois de plus, nous avions notre liste. Créons une liste d'exemples. Je vais l'appeler liste de tests. Maintenant, j'évite d' appeler cette liste. C'est valide. Vous pouvez appeler cette liste de variables. Mais au moins, il s'agit en fait d'un type intégré à Python ou d'une fonction, ce qui signifie que vous pouvez transformer quelque chose en liste. En faisant cela, par exemple, vous pouvez transformer une chaîne en la plus haute, contournant dans cette fonction. C'est pourquoi j'évite de remplacer cela, car si j'appelle ma liste de variables, je la remplacerai et c'est généralement une mauvaise idée. n'est peut-être pas une mauvaise idée, mais ce n'est pas une bonne idée de remplacer les types intégrés dans Python. Je vais donc l' appeler cette liste, et ce ne sera qu' une simple liste de chaînes. Nous allons donner le même exemple que précédemment, 123. Maintenant, la boucle for va passer en boucle sur ces éléments ou itérer sur chacun de ces éléments. Nous allons dire pour numéro dans la liste, liste, numéro d'impression. Exécutons ce code. Excellent. Donc, comme vous le voyez, il s'agit simplement d'imprimer chacun de ces éléments à l'intérieur de cette liste. Maintenant, le nombre est une variable que j'ai choisie, que vous choisissiez le nom de cette variable. Et vous dites essentiellement que pour chacun de ces éléments, cette liste les enregistre dans ce numéro variable. Et puis à l'intérieur de cette boucle, vous pouvez utiliser ce numéro. Par exemple, nous pouvons, nous pouvons faire des nombres entiers, disons 235. Va en parler. Mais on pourrait aussi dire imprimer le nombre de fois deux, par exemple, ils devraient s'imprimer ou 6.10, n'est-ce pas ? Et voilà. C'est donc ce qui se passe. En gros, nous disons store, parcourez chacun de ces éléments stockés dans une variable, puis cette variable vous sera accessible à l'intérieur de cette boucle. Et nous le faisons essentiellement à partir de la sélection qui fonctionne dans la bibliothèque CMBS. Pour compléter cet exemple, allons-y et utilisons celui qui a précédé l'onde S. Laissons simplement le nombre variable. Ce n'est pas un bon nom pour ce que nous utilisons ici, mais il est valide. Et voilà. Donc, comme vous pouvez le voir , il suffit d'itérer sur chaque élément qui sera sélectionné. J'espère que c'est clair, mais ne vous inquiétez pas, nous allons continuer à utiliser quatre boucles tout au long de ce cours. Passons donc à la fonction suivante. 22. Obtenir des attributs: La prochaine chose que nous devons faire est obtenir les attributs que nous voulons transférer, n'est-ce pas ? Donc, cet outil dit essentiellement obtenir les contrôleurs sélectionnés, obtenir les attributs. Nous allons également devoir stocker les valeurs de chacun de ces attributs. Nous allons passer à cela ensuite. Mais nous devons d'abord obtenir les attributs nécessaires pour pouvoir les transférer à la semaine prochaine. Alors, comment transférer les attributs ? OK, eh bien, retravaillons avec cette commande . Mettons-le ici. Disons que nous travaillons avec ce contrôle. Désormais, le nom du nœud inclut l'espace de noms. C'est important car c'est ainsi que Maya sait de quel personnage il s'agit. Le contrôle appartient à ce qui est contrôlable par les poumons par eux-mêmes. Il s'agit du nom de la base, du nom de base du contrôle. Mais à l'intérieur de la scène, il se trouve sous cet espace de noms. Il est donc important de le garder là-dedans. Il existe une fonction appelée ajout de liste. Et voyons ce qu'il fait dans la documentation. Je l'ai ici. Ajouteur de liste, vous pouvez simplement le rechercher. Elle indique que cette commande répertorie les attributs d'un nœud. Si aucun flux ou aucun flux n'est spécifié, tous les attributs sont listés. D'accord, passons aux exemples. Il semblerait que si vous ne lui donnez le nom d'aucun nœud, il listera les attributs des notes sélectionnées. Mais si vous lui donnez le nom d'un nœud, il listera les attributs de ce nœud. Essayons donc ça. C'est ce qu'on appelle le nœud de contrôle. Nœud. Appelons cela, stockons cela dans une variable appelée attributs, et imprimons cette variable. OK, super. C'est donc beaucoup d'attributs, une très longue liste. Certains d'entre eux sont ce que nous voyons ici en détail. Nous allons probablement assister à une rotation, à une translation. Mais nous voyons également beaucoup de choses qui sont probablement héritées d'autre chose. Maintenant, il y a en fait des limites, bien sûr, quelques contraintes devraient nous inquiéter, par exemple nous ne voulons pas que les attributs soient verrouillés. Par exemple, nous ne voulons obtenir que les attributs que nous sommes en mesure de définir. Donc, si vous consultez la documentation, vous verrez qu'il existe quelques options que vous pouvez transmettre à cette commande. Vous ne pouvez vous débarrasser que des attributs d' acte. Vous pouvez obtenir des attributs qui sont des croquettes, qui sont verrouillés. Et vous pouvez obtenir ceux qui le sont. Alors voilà, paramétrable. Jetons un coup d'œil à ce que cela va nous donner. Réglable est égal à vrai. D'accord, cela ne semble pas trop différent. Je l'ai montré, je sais que c'est différent. Commence par l'encaissement plutôt que par un message. C'est quand même beaucoup. Comme vous pouvez le constater, la liste est plus petite, mais elle est encore longue et il y a des choses qui ne nous intéressent peut-être pas. Alors, que diriez-vous de nous concentrer sur les attributs de la boîte de canaux. Pour cela, il existe une autre fonction. C'est une fonction appelée CMBS, permet de créer un bol. Regardons maintenant dans la liste de documentation animable comment j'ai trouvé ce bonus pour consulter les forums sur Internet et rechercher le meilleur moyen d'obtenir des attributs depuis la boîte des chaînes. J'ai fait ce travail dès le départ pour vous et maintenant je ne fais que vous donner la réponse. Sinon, il lui faudrait beaucoup de temps. Cette commande répertorie donc les attributs animables d'un nœud permet le filtrage par le manipulateur ou le nœud actuel . D'accord ? Nous pouvons probablement utiliser cet actif sans aucun argument. Les formes ne nous intéressent pas vraiment. On s'en fout. Tapez. Ils s'envolent solidement, ils ne sont plus soutenus. Nous n'avons pas à nous inquiéter à ce sujet. Affecté uniquement par le manipulateur actuel. Je ne veux certainement pas faire ça. Cela signifie que si votre manipulateur est en mode traduction, vous n'obtiendrez que les attributs de traduction. Nous ne voulons certainement pas le faire. Passons simplement ce nœud et remplaçons notre additionneur de liste par notre fonction d'animation de liste. Imprimons ça. OK, ça a l'air très différent. Pour le rendre un peu plus facile à lire. Jetons un coup d' œil à cette liste. Supposons donc que pour une loutre dans les attributs, imprimez à chaud. Maintenant, c'est juste à des fins de visualisation. Je voulais juste voir la liste au lieu d'avoir une liste plate. Oui, voilà. Il est présenté sous la forme d'une liste réelle. Ce que nous voyons ici, c'est en fait le chemin complet de ces attributs ou le chemin complet de ces contrôleurs. Donc, comme vous le voyez, c'est le démarrage de ces nœuds entièrement animés. Ensuite, il entre dans le groupe des plates-formes. Et puis il y a un autre groupe appelé Butter Regroup, qui descend en flèche. À la fin de chacune d'entre elles, il y aura le nom du contrôleur. Et à la fin se trouvera le nom de l'attribut. C'est ce qui nous tient vraiment à cœur. Et c'est ce que nous voyons dans la boîte à canaux : translation x, y et z, rotation et largeur ou largeur. C'est super. C'est ce que nous voulons réellement. Tout cela ne nous intéresse pas vraiment. Pour être honnête, c'est très verbeux et légèrement ennuyeux. Alors, nettoyons ça. Si vous examinez attentivement cette voie, nous pouvons faire plusieurs choses. Mais quelque chose que nous avons déjà appris à faire est de diviser des chaînes de caractères. Nous pouvons donc simplement diviser par le point. Notez qu'il n'y a pas d'autres points ici. Vous pourrez donc le faire s'il y a une porte dans votre appareil. C'est peut-être un cas légèrement différent. Dans ce cas, nous pouvons toujours obtenir le dernier élément de la chaîne. OK, imaginons que c'est le cas. Travaillons donc avec cet exemple. Supposons que nous voulions obtenir le nom de cet attribut à partir de cette très longue liste. Très bien, alors travaillez normalement sur un onglet Python distinct et collez-le ici. Tout cela est extérieur. Le nom sera égal à ces très longues chaînes. Alors, que se passera-t-il si nous divisons par points ? Allons-y et faisons-le dans son ensemble. Permettez-moi de rendre cette variable un peu plus courte, juste médiocre. Pour faciliter la saisie. Complet. Ajout d'une division par points. Qu'au lieu de diviser par deux points, nous allons diviser par un point. Nous allons appeler cela des pièces. Nous allons imprimer ces parties. Comme nous le savons, ce sera une liste des pièces avant et après tout doute qu'elle trouvera dans les grandes parties. Et voyons combien de pièces nous avons. Nous pouvons imprimer la longueur de cette liste. Pièces pour stylos. Très bien, il y en a deux. Il y a donc une très longue première partie, qui est le nom de la manette. Puis, à la fin, c'est le nom de l'attribut qui nous intéresse. Maintenant, j'ai mentionné ce qui se passe s' il y en a un autre... sous ce nom, pour une raison ou une autre. Mettons un .in ici juste à titre d'exemple. Très bien, allons-y. Maintenant. La longueur de notre liste est de trois. C'est parce que, bien sûr, nous trouvons un autre point et une autre période. Et maintenant, nous avons trois parties. Mais celui qui nous tient à cœur est toujours celui qui se trouve à la fin. Si nous supposons qu'il n'y en a pas, il n'y en a qu'un. Dans le nom, nous pouvons simplement dire, d'accord, eh bien, le nom de l'attribut sera le second. Que se passe-t-il s' il y en a plus d'un ? Eh bien, nous devons obtenir le dernier index, non ? Comment faisons-nous cela ? Il y a deux manières de procéder. D'une façon, nous savons déjà combien d'éléments se trouvent dans la liste. Nous pouvons donc simplement dire, d'accord, il y a trois éléments que nous voulons le troisième élément, parce que nous commençons à compter à zéro. En fait, nous pouvons simplement dire, d'accord, nous voulons le nombre d'éléments moins un. Parce que le troisième élément, si vous comptez à zéro, sera le numéro 20 sera le premier, 11 sera le second, 12 sera le troisième, n'est-ce pas ? Nous pouvons donc utiliser cela à notre avantage. Pièces. Supposons que le numéro de pièces soit la longueur de la liste de chaînes de pièces. Et puis le nom de l'attribut. Appelons-le simplement adder. L'additionneur sera composé d'arts et le numéro index sera le dernier index possible, c' est-à-dire le nombre de pièces moins un. Alors imprimons en entier. Et voilà. C'est ça. C'est ce qui nous tient à cœur. Maintenant, il existe un moyen plus simple de l'obtenir. Et c'est simplement en disant moins un. Sans même savoir combien d'articles se trouvent dans votre liste. Nous pouvons simplement dire, donnez-moi l'indice moins un, qui sera le dernier indice. Comment est-ce que cela fonctionne ? Allons-y et analysons tout cela avant de continuer. Comme je te l'ai déjà montré. Imaginons à nouveau avec quatre objets comme je vous l'ai déjà montré. Le premier élément est l'indice zéro, le second l'indice un. Le troisième sera deux. l'avenir, un sera trois, etc. Il y a aussi des indices négatifs. Ainsi, le tout dernier index de la liste sera l'index moins un. Désolé, c'est ainsi que l'index inverse moins un. L'avant-dernier sera de moins deux. L'avant-dernier, bien sûr, moins trois, et ainsi de suite. De cette façon, sans savoir combien d' éléments se trouvent dans la liste, vous pouvez simplement dire, d'accord, donnez-moi le dernier. Ou si tu veux que je sois l'avant-dernière. Permettez-moi donc de vous en montrer un exemple. Revenons à Maya. Ouvrons un nouvel onglet Python. Faisons une nouvelle liste d'exemples. Disons que c'est un exemple. Disons 123. Comme d'habitude, nous sommes déjà habitués à cet exemple. Donc, si je dis exemple, donnez-moi l'indice des zéros. Eh bien, laisse-moi trouver ça. C'est imprimé. L'indice zéro de l' exemple sera un. Apportons le troisième. Le deuxième indice sera, ce qui équivaut au troisième élément. Ça fait trois. Maintenant, si je dis « donnez-moi le dernier indice moins un », c' est la même chose. Maintenant, donnez-moi un indice moins deux. C'est équivalent, le même. C'est donc une autre façon pour vous d'obtenir le dernier élément de cette liste, quel que soit le nombre de points que vous aurez ici. C'est un peu plus une preuve d'échec d'une certaine manière, parce que nous savons que la dernière partie sera liée à nos attributs. Et voilà. Réunissons très rapidement tout cela. Je vais copier ce bout de code. Nous savons déjà comment obtenir ces longs noms d'attributs à partir d'un contrôle. Et je vais coller le reste de notre code ici. Agrandissez-le. D'accord ? Nous savons que les attributs contiendront ces noms très longs. Et nous savons déjà comment obtenir le nom simple ou le nom abrégé de cet attribut en divisant ses parties et en obtenant la dernière partie divisée. OK, allons-y, combinons-les. Comme nous l'avons dit, nous n'avons pas vraiment besoin de savoir combien d'éléments se trouvent dans la liste du sprint. Nous pouvons faire tout cela à l'intérieur de cette boucle. Puisque nous avons déjà ce code ici. Mettons ce code et collons-le dans cette boucle. Nous savons maintenant que la liste des attributs comportera ces longs noms d'attributs. Appelons donc cet additionneur complet. Et puis les verbes sont essentiellement placés en boucle au-dessus de chacun de ces très longs noms que nous avons obtenus grâce à la fonction animable de la liste ou qu'ils le divisent en plusieurs parties. Nous obtenons le nom abrégé, qui est la dernière partie que nous avons divisée, et c'est le nom de nos attributs. Soyons donc plus explicites. Appelons ce nom. Supprimez ceci. Ok, voilà. C'est un peu plus propre. On peut l'activer par nom, pas par nom. Nous pouvons en fait créer une liste de ces autres noms de la même manière avec les espaces de noms. Nous pouvons dire des noms d'additionneurs, ajouter des points. Si vous vous demandez, devons-nous vérifier si nous avons déjà l' attribut dans d'autres noms ? On pourrait. Mais cette fonction vous donnera une liste d'attributs uniques, attributs et un contrôleur, généralement unique. Je ne m'inquiéterais donc pas vérifier s'ils figurent déjà dans la liste ou non, car il y a de fortes chances qu'ils soient uniques. OK, allons-y, voyons comment ça se passe. Une fois de plus, nous avons commencé avec une manette. Dans ce cas, nous codons en dur le nom de la manette. Nous obtenons ces longs noms d' attributs à partir de la fonction mesurable d'écoute. Nous commençons une liste vide pour stocker nos noms courts. Sont-ils simplement les noms des attributs ? Maintenant, nous répétons, nous repassons en boucle tous ces noms longs, puis nous commençons à les diviser. Ensuite, une fois que nous avons trouvé le nom abrégé qui nous intéresse, avons ajouté ici, nous l'avons ajouté à cette liste. Et puis, pour l'instant, nous pouvons simplement imprimer cette liste. Et voilà. C'est la liste qui nous intéresse. Allons-y et transformons cela en fonction qui ne code pas en dur les noms, une fonction qui ne code pas en dur les noms, mais qui prendra en compte n'importe quel nœud de contrôle arbitraire et vous en donnera les attributs. Permettez-moi de copier ceci et de le mettre dans notre module sous forme de diagramme circulaire. Mais Clara, la fonction finale, obtient quand même des sorties depuis le nœud. OK, collons ça dans cette fonction. Comme nous voulons pouvoir le faire pour n'importe quel nœud donné, nous pouvons en fait utiliser une passe qui entre comme entrée. Alors cela signifie que nous n'en avons plus besoin. Nous allons passer dans le nœud de contrôle. Nous obtiendrons les attributs. Maintenant, que se passe-t-il s' il n'y a aucun attribut ? Eh bien, c'est une bonne question. Donc, comme nous le faisons ici, si rien n'est sélectionné, nous renvoyons une liste vide. Allons-y et faisons-le. Si les attributs len sont égaux à zéro, nous renverrons une liste vide, comme nous l'avons fait avec les espaces de noms. Parfois, ces fonctions dans Maya renvoient, s'il n'y a rien, une valeur différente de zéro. Ce qui n'est pas génial. Pour être honnête, cela devrait être cohérent. La valeur de retour doit être une liste vide. Mais cela arrive parfois. Donc, si tel est le cas, aucun n' échouera vraiment si vous essayez de le faire. Nous avons donc besoin d'une autre alternative. Comment vérifier si quelque chose est, ce n'est pas là, si quelque chose de vide est faux. Disons ce que nous avons vu auparavant. Nous pouvons dire que s'il ne s'agit pas d'attributs, renvoyez une liste vide, cela fonctionnera pour les deux si ce n'est pas le cas. Donc, si c'est le cas, si les attributs renvoient un non, cela fonctionnera. Mais si l'attribut renvoie une liste vide, cela fonctionnera également, ce qui est très bien. Et par coïncidence, il s'agit d'une chaîne vide, par exemple cela fonctionnera. Voilà, la syntaxe est en fait très utile car vous n'avez pas besoin de savoir exactement à quel type vous vous attendez. Vous pouvez simplement dire que s'il s'agit d'un type vide, faites quelque chose. Ce que je dis, si ce n'est pas vide, alors fais quelque chose. Cela signifie que nous pourrions également faire de même ici. Nous pourrions dire : Si ce n'est pas une sélection, renvoyez une liste vide. Dans les deux sens, sur un pilote, si vous savez pertinemment qu'il s' agira d'une liste, vous pouvez utiliser Len. Sinon, vous ne pouvez pas utiliser la variable. Nous savons que la sélection est en effet une liste, nous n'allons donc pas nous inquiéter à ce sujet. Nous allons laisser cela tel quel. Une fois de plus, nous obtenons les attributs du nœud de contrôle. S'il n'y a aucun attribut, renverra une liste vide. Sinon, nous initialisons une liste vide pour stocker nos attributs. Nous divisons les noms de ces attributs et nous obtenons simplement le nom qui nous tient à cœur. Vous vous demandez probablement si nous pourrions combiner ces deux lignes en une seule ? Oui, on pourrait. Nous pourrions simplement dire : obtenez le dernier élément directement à partir de cette division et dire que le nom réel de l'attribut sera celui-ci. Et supprimez complètement cette ligne. Et voilà. Maintenant, ici, au lieu d'imprimer, nous voulons renvoyer cette liste d'attributs. Et avant de partir, ajoutons notre docstring. Obtenez les noms d'attributs à partir du nœud. En fait, désolé, cela provient d'un seul nœud, je ne sais pas que c'est un nœud de contrôle pluriel. Nous attendons une chaîne. Nœud ouvert. Nous allons renvoyer une chaîne, non, désolé, une liste. Ou renvoyez une liste de noms d'attributs simples. Disons en fait des lunes à attributs courts. C'est ce que c'est. Très bien, parfait. Testons rapidement notre fonction. Nous avons importé ce module ici. Rechargeons donc à nouveau après le transfert , car nous avons apporté quelques modifications. Et puis tiens-le. Obtenez des erreurs à partir du nœud, obtenez des flèches à partir du nœud. Passons ce nœud. Pour l'instant. Encore une fois, nous attendons une chaîne et elle s'appelle les adders. Imprimons. Et voilà. C'est ce à quoi nous nous attendions. Excellent. 23. Stocker la dose - Intro aux dictionnaires: Maintenant que nous avons obtenu les attributs qui nous intéressent, l'étape suivante consiste à établir un mappage de ces attributs avec les valeurs que nous voulons leur attribuer. Parce qu'encore une fois, l'objectif de cet outil, et laissez-moi simplement définir quelques valeurs et ce contrôleur, est d' obtenir les attributs des contrôleurs. Nous avons sélectionné les valeurs de ces attributs et appliqué ces attributs et ces valeurs au contrôleur équivalent d'un autre appareil. Alors, comment générer cette cartographie ? Sur la base de ce que nous avons vu ? Pour ce faire, nous pouvons simplement utiliser deux listes. Disons que nous avons une liste d'attributs. Appelons cela otters translate X, par exemple ardoise. Pourquoi ? Utilisons-en deux pour l'instant. Ensuite, nous pouvons avoir une liste de valeurs. On pourrait dire que ce sera le cas, je suis juste en train de copier cette valeur ici pour traduire x sera cette valeur moins dix points. Ensuite, traduire Y sera -3,90, 54. Donc on pourrait, ça pourrait fonctionner. Nous pouvons dire, d'accord, eh bien, le premier élément de la liste de valeurs appartiendra au premier élément la liste d'adresses. Pareil pour le second. Et c'est une façon de créer une cartographie, n'est-ce pas ? Cependant, il existe une meilleure façon de procéder. Il existe un type de données en Python appelé dictionnaires. Un type de données est simplement un type qui vous permet de stocker des données, au moins ici. Il s'agit d'un type de données. La chaîne est un type de données. Le dictionnaire, ou **** en abrégé, est un type de données semblable à une liste, mais chaque élément du dictionnaire contiendra un mappage entre une clé et une valeur. Maintenant, la façon dont nous créons un dictionnaire est d'utiliser les accolades. Vous pouvez voir un dictionnaire , un peu comme un annuaire téléphonique. Alors laisse-moi, laisse-moi supprimer ça. Et avant de créer un véritable dictionnaire, supposons que nous voulions créer un annuaire téléphonique plus complet. Ou Ashley, je veux dire, comme un dictionnaire lui-même. Le dictionnaire contient un mot, puis une description. Description du monde. Ou encore une fois, l'exemple de l'annuaire téléphonique. Disons que nous avons Rachel et que nous avons son numéro. Disons que nous avons des rangées et que nous avons son numéro. Maintenant, pour traduire cela en un véritable dictionnaire Python, appelons-le téléphones. Encore une fois, nous allons utiliser les crochets, la liste utilise les crochets. Nous allons utiliser les bretelles frisées ici. Comme je l'ai dit, chaque élément du dictionnaire aura une clé. Dans ce cas, la clé sera Rachel, puis deux points, puis la valeur, qui sera son numéro, puis une virgule, pour séparer les éléments. Voici donc le premier élément du dictionnaire. Le deuxième élément sera bien sûr colon de Ross pour séparer cela. Et puis 9876. Et voilà. C'est donc l'équivalent de cet exemple d'annuaire téléphonique que nous avons créé ici. Comment accéder au numéro de téléphone de Rachel ? Appelons ça. Dessinons cela dans une variable appelée nombre. syntaxe est similaire à celle de la liste que nous ouvrons et fermons entre crochets. Mais au lieu d'utiliser un index, vous allez utiliser la clé dont vous souhaitez obtenir la valeur. Cette affaire sera Rachel. Apportons ça. Et voilà. Nous obtenons le numéro. Maintenant. Nous avons Ross. Nous savons que Ross est le numéro. Excellent. Voici donc comment créer des mappages en Python. Avant de créer notre dictionnaire d'attributs actuel, qui ressemblerait à ceci. Ce cas sera Translate. X serait la valeur que je crée ici manuellement, mais bien sûr, nous allons le faire en fonction de la sélection. Y sera cette valeur ici. Et puis appelons cela le dictionnaire des attributs sont des loutres. Et laissez-moi en tirer la valeur. Je suis juste en train de changer les noms des variables. Cela n'a pas d'importance. J' essaie juste de le rendre un peu plus évident. Très bien, c'est génial. J'ai fait une erreur. Ross n'est pas une clé dans ce dictionnaire, bien sûr, parce que nous avons changé les clés. Si vous essayez d'obtenir une valeur à partir d'un type qui n'existe pas, vous obtiendrez cette erreur. Alors laisse-moi en trouver un qui puisse exister. Et voilà. Avant de créer notre véritable dictionnaire, il souligner quelques points à propos des dictionnaires les clés doivent être uniques. Qu'est-ce que je veux dire par là ? Supposons que je souhaite ajouter une nouvelle touche Translate Y. Et la valeur sera, appelons-la simplement 100. Maintenant, si vous m' intéressez , ne prenez qu' un seul d'entre eux et le premier est ignoré. Encore une fois, c'est parce que si vous ajoutez la même clé plusieurs fois, elle sera remplacée car les clés doivent être uniques. Excellent. Je suppose donc que nous devrions examiner certaines des fonctionnalités des dictionnaires. Encore une fois, pour obtenir une valeur, vous utilisez les crochets. Permettez-moi de retirer cette clé, cette clé, le support central, puis vous utilisez la clé dont vous voulez obtenir la valeur. Si vous voulez obtenir toutes les clés d'un dictionnaire, vous pouvez simplement utiliser les touches à points du dictionnaire. Cela vous donnera la liste des clés. Maintenant, si vous voulez obtenir une liste des valeurs, vous devez utiliser les valeurs par points du dictionnaire. Ensuite, vous obtenez une liste de valeurs. Mais le plus souvent, vous utiliserez simplement le nom de la clé ici pour obtenir les valeurs. Maintenant, comment ajouter des éléments à un dictionnaire ? C'est la même syntaxe, la même manière que vous obtenez une valeur. Mais au lieu de simplement écrire une valeur en cosinus, nous ajouterons une valeur similaire à la façon dont nous stockons des valeurs dans une variable. Vous allez stocker la valeur d'une clé dans un dictionnaire. De la même manière, vous allez spécifier une clé. Permettez-moi de dire que c'est une nouvelle clé. Et nous dirons que la valeur sera 123, par exemple si je devais imprimer la cellule du dictionnaire, elle serait en fait imprimée auparavant. Ajoutons ensuite une nouvelle valeur pour Cuba , puis imprimons-la ensuite. Comme vous le voyez, nous avons notre nouvelle clé, mais une nouvelle valeur, et puis les deux enfants plus âgés que nous avions déjà. Vous remarquez également que ce n'est pas dans l'ordre ou qu'une nouvelle clé a apparemment été ajoutée au début. Il n'a pas vraiment été ajouté au début. Les dictionnaires n' ont aucun ordre. Ils ne suivent pas les listes de commandes. Gardez une trace de l'ordre dans lequel vous y ajoutez des articles. Les dictionnaires ne le font pas. C'est parce que vous accédez aux objets par clé. Il y a d'autres raisons à cela. C'est parce que les dictionnaires sont en fait très efficaces lorsqu'il s'agit d' accéder aux données qu'ils contiennent via ce qu'on appelle un HashMap. Mais ne t'inquiète pas pour ça. Ce sont des détails techniques n'ont pas vraiment d'importance pour le moment. Sachez simplement que les dictionnaires ne sont pas en ordre, mais cela n'a pas d' importance car vous obtenez toujours les valeurs par le biais des clés. Maintenant, que se passera-t-il si vous l'annulez ici ? Si vous voulez annuler, je m'en tiens à ce que vous donniez simplement le nom de cette clé. Donc, au lieu de -3,90, 54, nous allons remplacer cette valeur par 123. Comme vous pouvez le voir ici. Dans ce cas, ces deux documents sont imprimés dans le même ordre, mais il n'est pas nécessairement impossible d'ordonner le dictionnaire. Nous ajoutons donc ici et nous l'annulons , cette valeur pour cette clé. OK, j'espère que c'est logique. Les dictionnaires sont très amusants et très utiles. Créons-en un avec nos attributs. Créons le dictionnaire que nous voulons réellement et qui ressemblera à cet attribut, puis à sa valeur. Mais n'oubliez pas que nous allons utiliser, et laissez-moi supprimer ces lignes de code. Nous allons utiliser les fonctions externes et externes définies. Permettez-moi de définir un attribut pour que ma jambe ipsos, cette information très utile. N'oubliez pas que Maya va être enceinte ou que Masaryk a été renvoyé. Notre fonction attendra le nom complet de l' attribut, puis la valeur. Il semble donc c'est ce que nous devons définir, n'est-ce pas ? Notre dictionnaire pourrait donc ressembler davantage à ceci, mais nous devons prendre en compte le fait que nous voulons stocker le contrôleur, ses attributs et ses valeurs indépendamment de l'espace de noms car nous voulions transférer des valeurs d' une plate-forme sous notre espace de noms vers une autre plate-forme. Le dictionnaire lui-même ne veut pas ou n'a pas besoin de connaître l'espace de noms. Cela signifie que notre dictionnaire ressemblera davantage à ceci, qui sera le nom du contrôleur, puis le nom de l'attribut. Quelqu'un pourrait soutenir que c'est superflu et nous n'avons donc pas besoin de le faire. Nous pourrions simplement dire que nous pourrions simplement stocker les attributs que nous voulons, puis ajouter le nom du contrôleur plus tard. Cela pourrait aussi fonctionner, mais je pense que c'est plus simple de le faire de cette façon. Nom du contrôle, nom des attributs sans l'espace de noms. Ainsi, une fois que nous aurons défini les attributs, nous fournirons le nom complet des attributs, y compris l'espace de noms. Nous pouvons donc toujours placer l'espace de noms par parent, fournir le nom complet de l'attribut, puis simplement l'utiliser pour obtenir la valeur de notre dictionnaire, qui ressemblera à ceci. C'est donc une très longue ligne de code, mais elle ressemblera à ceci. En gros, je pense que vous avez saisi l'idée. Nous allons simplement obtenir cette valeur et l'appliquer immédiatement. OK, c'est le dictionnaire que nous voulons vraiment. Commençons à le construire. 24. Stocker la dose - Construire le dictionnaire de la dose: Pour obtenir le dictionnaire que nous voulons, nous devons tenir compte de quelques éléments. Nous savons ce que nous voulons obtenir en fonction de la sélection. Mais nous devons être prudents car nous savons que nous voulons obtenir le dictionnaire des attributs et contrôleurs uniquement à partir du premier caractère que nous avons sélectionné. Parce que nous avons décidé que le flux de travail de l'outil serait de sélectionner les contrôleurs que vous souhaitez transférer, puis de sélectionner n'importe quel contrôle sur votre équipement ou vos nervures cibles. Nous devons donc d'une manière ou d'une autre filtrer les contrôleurs qui ne sont qu'une partie de la première semaine que nous sélectionnons. Comment faisons-nous cela ? Il y a plusieurs façons de procéder. Je vais me lancer dans PyCharm et commencer à bloquer ma fonction. Alors laissez-moi créer une fonction, appelons-la dictionnaire get pose ou simplement le deck. Faisons d'abord un blocage rapide avant d'écrire du code. Nous savons que nous devons obtenir la sélection. Soit il nous sera fourni, soit nous pouvons nous lancer dans cette fonction. Nous savons que nous devons obtenir les attributs que nous avons déjà définis ici. C'est-à-dire que c'est fait. Nous devons préparer la sélection. Ensemble, une sélection avec les attributs que nous avons obtenus. Ensuite, nous devons créer un dictionnaire, puis le renvoyer. Nous devons donc obtenir la sélection, mais nous devons également filtrer la sélection. Au fait, juste une passe rapide. Nous, c'est une bonne façon de commencer à bloquer. Votre fonction décide du déroulement que vous souhaitez donner à votre fonction. Une autre chose que vous remarquerez peut-être, c'est que nous maintenons des fonctions très spécialisées, très séparées les unes des autres. Et c'est généralement un bon moyen d'organiser votre code. Rendez vos fonctions aussi simples, presque aussi spécialisées que possible. Je ne devrais pas le dire inutilement, mais faites en sorte qu'ils soient aussi spécialisés que possible. Donc, si vous remarquez ici, cette fonction ne fait qu' obtenir un espace de noms. Ce n'est rien d'autre. Cette fonction ne fait que vous donner une liste d'attributs. Maintenant, on pourrait dire que ma première fonction, l'espace de nommage de la fonction, ne se contente pas d'entrer dans des espaces, elle permet également d'obtenir une sélection. Et je dirais qu'un bon moyen simplifier encore les choses est qu'Ashley fournisse la sélection à la fonction afin que la fonction n'ait pas besoin fonctionner avec aucune sélection. Je pense que c'est en fait un bon moyen d'améliorer cette fonction. Mais ne vous inquiétez pas, pour le moment, nous pouvons revenir et refactoriser. Ce refactoring implique de réécrire la fonction. Donc, réorganiser ou coder, c'est quelque chose d' important à savoir. Il est très utile de planifier à l'avance la manière dont vous souhaitez structurer votre code et vos fonctions. Et essayez généralement de bloquer votre code ou organiser de manière à ce que vos fonctions soient très spécialisées, comme je l'ai déjà dit, mais vous n'avez pas non plus à vous inquiéter ou à essayer de les perfectionner du premier coup. Parce que vous pouvez toujours revenir , les réorganiser et les améliorer. de mes professeurs m'a dit à l'université que l'un des la 3D est que la peinture ne sèche jamais, ce qui signifie que lorsque vous travaillez avec des supports traditionnels, par exemple peinture, vous ne pouvez pas revenir un mois plus tard et réparer quelque chose de très petit car la peinture est déjà sèche et il est plus difficile de la réparer. Mais avec la 3D, la peinture ne sèche jamais. Vous pouvez toujours apporter des modifications. Et c'est pareil pour le code, la peinture, qui ne sèche jamais. Vous pouvez toujours revenir et améliorer votre code. Surtout lorsque vous apprenez au début, votre objectif devrait être de faire quelque chose, même si ce n'est pas génial, même si ce n'est pas parfait, simplement de le faire, faire fonctionner, puis de revenir et de le corriger. Cela ne signifie pas que vous ne devez pas planifier. Tu devrais planifier à l'avance. Mais ne vous limitez pas à créer quelque chose de parfait. Cela étant dit, comme je l'ai dit, je peux améliorer cela en proposant une sélection, mais je vais m'en tenir à cela pour le moment. Et plus tard, peut-être pourrons-nous revenir et l'améliorer. Quoi qu'il en soit Pour en revenir à notre fonction de dictionnaire, comment procéder au filtrage ? Nous pourrions obtenir la sélection ici, déjà filtrée et simplement croire qu'elle est filtrée. Ou nous pouvons obtenir la sélection et les espaces de noms et simplement utiliser l'espace de noms du prénom dans notre sélection. Nous pouvons donc obtenir les espaces de noms et utiliser le premier comme filtre. Mais je pense que nous pourrions rendre les choses encore un peu plus simples en recevant un espace de noms. Cette fonction attendra donc un espace de noms. Nous allons avoir la sélection. Ensuite, nous allons filtrer la sélection en fonction de l' espace de noms fourni. Essayons ça. n'est peut-être pas le meilleur design, mais essayons-le. Première étape, organisons cette élection. Nous savons déjà comment obtenir la sélection. Nous l'avons fait ici. Alors, saisissons-le à nouveau. Cmbs, la sélection ls est égale à vrai. Nous savons maintenant que nous voulons faire une vérification. Si rien n'a été sélectionné, nous n' avons rien à faire. Nous allons donc taper, sinon sélectionner. Nous faisons quelque chose de légèrement différent avant de vérifier la longueur de la sélection. Vous pouvez le faire si vous le souhaitez ou vous pouvez faire la même chose que nous avons fait ici, disant simplement : « Si ce n'est pas quelque chose, revenez ». Mais puisque nous attendons un dictionnaire, maintenons le type de retour cohérent et renvoyons un dictionnaire vide. Un dictionnaire vide n'est que deux accolades. Et c'est tout. Génial. Donc, si rien n'est sélectionné, nous n'avons rien à faire. Continuons. Nous pourrions dire contraire et continuer votre code dans l'else Bob, car nous savons que le retour marque la fin de la fonction. Nous n'avons pas vraiment besoin de l'autre déclaration. Nous pouvons simplement continuer ici. Parce que si nous saisissons l'instruction if, nous renverrons une fonction de sortie. Il n'aura donc pas accès à qui n'atteindra rien après ce retour. Cela signifie que nous pouvons simplement continuer à ce niveau d'indentation. La prochaine chose que nous devons faire est donc de travailler sur cette élection. Nous allons utiliser une autre boucle pour contrôler la sélection. Voici maintenant où nous allons effectuer le reste de nos étapes. Nous savons que nous devons filtrer la sélection, obtenir des attributs et créer un dictionnaire. Nous allons donc faire tout cela dans notre boucle for. Comment filtrer en fonction de l' espace de noms fourni ? Comme les contrôleurs se trouvent dans la sélection ou dans les chaînes, les chaînes ont une fonction spéciale qui vérifie si quelque chose commence par une sous-chaîne, qui est une autre chaîne, ou se termine par une autre chaîne. Permettez-moi de vous donner un exemple dans Maya. Je vais prendre cette chaîne, par exemple la supprimer. Par exemple, ici, je veux vérifier si cela commence par Minerva, qui est l'espace de noms que nous avons ici. Je vais juste l'imprimer. Cette fonction renverra un booléen, vrai ou faux, commençant par Minerva. Oui, exactement. On pourrait également dire que cela commence par l'infarctus du myocarde, par exemple, et ce sera vrai. Mais si nous voulions dire « est-ce que ça commence par Los Angeles Example », cela ne dira pas faux. Nous allons l'utiliser pour filtrer nos espaces de noms. Si le contrôle commence par l'espace de noms qui nous a été fourni. Nous allons y appliquer le reste de notre logique. Cela signifie que tout ce qui construit le dictionnaire devra se faire à l'intérieur de cette instruction if. Maintenant, ce n'est pas un problème, mais je préfère généralement avoir moins d'indentation. Je pense que c'est plus propre et que c'est généralement plus facile à lire. Alors, comment éviter cette indentation ? Il existe un mot clé qui fonctionne pour les boucles ou les boucles en général, qui s'appelle continue. Cela signifie que si vous disiez simplement si vous entrez dans cette boucle, passez à l' élément suivant de la liste, dans la liste sélectionnée, liste sélectionnée ce qui signifie que tout ce qui se trouve après la poursuite sera complètement ignoré. Cela signifie également que nous devons inverser cette logique. En gros, nous disons que si ce n'est pas le cas, le contrôle commence par l'espace de noms, puis passe à l' élément suivant de cette élection. Et ne vous inquiétez pas de ce qui se passe ci-dessous. Cela signifie que nous pouvons simplement continuer sans avoir à indenter à l'intérieur de cette déclaration if. Nous avons donc déjà filtré la sélection. Et laissez-moi faire quelques commentaires ici. Sélection, espace. Bonne sélection, c'est génial. L'étape suivante consiste à obtenir les attributs. Celui-ci devrait être facile. Nous avons déjà une fonction pour cela. Nous pouvons donc simplement copier cette fonction, le nom de cette fonction. Et on peut dire animé, animable. Les attributs sont des loutres et seront adressés par le nœud. Et puis savoir que nous travaillons avec, c'est le contrôle. Pour garder une trace de cela au cas où cela serait un peu confus. N'oubliez pas que la sélection vous donne , la commande de sélection, vous donne exactement cela, l'espace de noms et le nom du contrôle. Permettez-moi de grouper aussi rapidement. Nous allons imprimer, sélectionner une manette. Quand imprimer la commande ls. C'est ce avec quoi nous travaillons dans la boucle for. Permettez-moi de présenter cela sous forme de diagrammes circulaires afin que nous puissions suivre ce qui se passe ici. Nous savons que ce contrôle, chaque contrôle sera quelque chose comme cet espace de noms, le nom carré du contrôleur. Encore une fois, c'est pourquoi ils commencent par chèque, ça va marcher. Et maintenant, nous obtenons les attributs de ce nœud de contrôleur qui ressemble essentiellement à ceci. Excellent. Maintenant, nous avons besoin d'un autre chèque. Eh bien, laissez-moi venir ici et obtenir des attributs. Nous avons besoin d'une autre vérification pour savoir s'il n'y a aucun attribut, car nous savons que s'il n' y a aucun attribut, nous obtiendrons une liste vide. Nous pouvons le faire de deux manières. Nous pouvons dire que si la longueur des attributs animables est nulle, nous pouvons continuer à nouveau. Donc, même idée que ci-dessus. S'il n'y a aucun attribut, nous allons simplement annuler les vérifications de la boucle for et passer à l' élément suivant de la sélection. Maintenant, pour faire simple, je ne vais pas utiliser la longueur de la liste. Je vais simplement dire, s'il ne s'agit pas d'attributs numériques, s'il n'y a rien dedans, s'il n'y a rien dedans, de sauter ce qui suit et de passer à l' élément suivant de la sélection. Excellent. Eh bien, la prochaine étape consiste à créer le dictionnaire. Et pour cela, nous devons initialiser un dictionnaire vide. Sinon, nous n'avons rien à peupler, non ? Je vais l'appeler dictionnaire Pose Dict. Et ce sera un dictionnaire vide. Encore une fois, un dictionnaire vide n'est que deux crochets. Permettez-moi de citer l'exemple. Nous devions savoir exactement ce que nous essayions de construire. Ce que nous essayons de construire est quelque chose comme ça. En gros, la clé, laissez-moi mettre cela derrière un commentaire. La clé sera le nom du contrôleur sans point dans l' espace de nommage le nom de l'attribut. Ensuite, la valeur de cette clé sera la valeur de cet attribut. Et encore une fois, nous travaillons avec des manettes de la sélection qui ressemblait à ceci. Alors gardons-le ici, juste pour l'utiliser comme référence. Pendant ce temps, nous devons parcourir en boucle les attributs que nous avons obtenus ici. Pour ajouter d'autres variables animables, le nom de variable est très long, mais ce n'est pas grave. Des erreurs médicales ? La première chose à faire est de trouver ce nom. Nous devons supprimer le nom de l'attribut réel. Désolé, le nom du contrôleur séparé de l'espace de noms. Appelons ce troll par le nom. Sera divisé par points de contrôle. Comme nous l'avons déjà fait. Nous pouvons faire cette plaque sur le, sur cette colonne. Encore une fois, nous allons le partager. N'oubliez pas que la division nous donnera essentiellement le premier élément et le dernier élément, de la même manière que nous l'avons fait avec les espaces de noms ci-dessus. Mais maintenant, au lieu d'obtenir le premier article que nous voulons, nous voulons le dernier. Nous allons dire, donnez-nous le dernier élément de cette division. Ce sera le nom du contrôle. Ensuite, nous voulons rassembler le nom complet de l'attribut, qui se trouve ici. Et ce sera, disons, un additionneur complet. Ce sera maintenant essentiellement le nom du point de contrôle, le nom de l'attribut. Donc, encore une fois, nous pouvons utiliser cette fonction de format pour remplacer ces espaces réservés par autre chose. Nous allons les remplacer par un nom contrôlé. Et le second sera composé des attributs ou l'autre des attributs animables que nous avons déjà. Excellent. La prochaine étape consistera donc à obtenir la valeur de l'attribut. Maintenant, pour cela, nous allons l' utiliser comme nous l'avons déjà fait. Nous allons donc utiliser get outer. Bourgeon. N'oubliez pas que si je reviens à mon application ou une seconde, Get Adder s'attend vraiment à ce qu'il s'améliore. OK, eh bien, écrivez-le. Sortez ou attendez le nom complet du contrôle avec le, avec les attributs. Bien sûr, car il doit savoir à quel espace de noms appartient l' attribut. Nous devons donc construire le nom complet du contrôle plus l'attribut. Nous devons donc transmettre cela à get adder. Allons-y et faisons-le. Que nous fassions un modèle similaire à celui du format. Mais maintenant, dans ce cas, nous devons transmettre le contrôle complet issu de la sélection, qui se trouve sous cette variable appelée contrôle. Et puis nous allons dire point. Et puis les attributs, non ? Même idée, format point. Nous allons maintenant utiliser le contrôle complet, non le nom du contrôle que nous avons séparé. Nous allons utiliser un contrôle total. Et nous allons utiliser l'éditeur d'attributs, qui est l'attribut que nous avons obtenu. La valeur sera essentiellement la suivante : si cela prête un peu à confusion, laissez-moi le séparer. Permettez-moi de le mettre dans une nouvelle variable. Disons que c'est le contrôle total. Et trouvons le nom. C'est ça. Obtenons la valeur de cette largeur, est incontrôlable. Manière. Et voilà. Nous avons maintenant la valeur. Il ne reste plus qu'à remplir le dictionnaire lui-même. N'oubliez pas que notre dictionnaire s'appelle post decked. Alors disons pose. Maintenant, souvenez-vous, la clé sera l'attribut par défaut nommé sans l'espace de noms. Ce serait donc ça ici. Si cela prête un peu à confusion, nous pouvons le rendre encore plus explicite. Sans NS, sans espace de noms. Il s'agit du nom de la variable Bread Long. Mais ça l'est, c'est bon pour ces fins. Full Adder sans vraiment me laisser le nommer. Espace de noms connu de l'ajout complet. Et voilà. C'est un peu plus court. Connaissez l'espace de noms. Et la valeur de cette clé sera la valeur de l'attribut. Rendons cela un peu plus explicite également. Et appelons-le ou soulignons, soulignons la valeur. Ce sera la valeur de notre valeur t. Encore une fois, nous sommes en train de le construire ici même. C'est ce que fait cette ligne. Permettez-moi d'ajouter un commentaire ici. Nous dirons essentiellement que ce sera la largeur du contrôle, les attributs. Et la clé sera la valeur de l'attribut. Excellent. Nous sommes en train de remplir notre dictionnaire. Permettez-moi de le supprimer ici car nous n'en avons plus besoin. Je vais dire que je vais ajouter un commentaire ici en disant simplement remplir le dictionnaire ou créer un dictionnaire. Et à la fin, il ne reste plus qu' à renvoyer le dictionnaire , appelé score de pose, pour retourner à Maya et le tester. Avant de revenir en arrière et d' ajouter nos docstrings, permettez-moi de copier le nom de cette fonction. Revenons à Maya. Et je l'ai ici après le transfert. Alors faisons-le à partir de zéro. Les publications importantes soulignent le transfert. Maintenant, si vous n'avez pas redémarré Maya, vous l'avez fait, souvenez-vous que mon type de logiciel met en cache ou conserve les dernières données que vous avez saisies. Donc, si nous voulons l'actualiser ou le recharger, nous pouvons dire Recharger après le transfert. Depuis, nous y avons apporté quelques modifications. Alors on peut dire pose, mais c'est le dictionnaire. Nous allons donc dire que la pose est égale à la pose, soulignement, au transfert, au point, à la réception, à la publication. Encore une fois, le nom de la variable dépend de vous. On pourrait appeler ça des pauses comme ça. Vous pouvez simplement l'appeler posts si vous le souhaitez. Cela dépend de vous. Je vais être plus explicite et appeler ça pose. Allons, imprimons ceci. Les deux soulignent. Lancez-le et voyons ce qui se passe. Oh, bien sûr, il faut exactement un argument. Nous allons donc dire que nous voulons filtrer par mon nom nerveux. Nous allons donc dire Nerva. Et je vais juste sélectionner une commande sur cet appareil. Et voilà. C'est exactement ce à quoi nous nous attendions. Comme vous le voyez, ce contrôle ne contient que trois attributs que j'ai sélectionnés pour la traduction et qu'ils sont tous à zéro. Nous avons donc contrôlé le nom, traduisons z, x et y, et ils sont tous à zéro. Nous allons maintenant tester notre filtrage. Donc, encore une fois, je vais sélectionner cette manette et je vais sélectionner quelques manettes de l'autre plate-forme. Nous avons donc sélectionné un contrôleur dans Minerva et quelques-uns dans Severus. Mais n'oubliez pas que nous filtrons par Nerva, donc le résultat devrait être le même. Nous n'obtenons donc que les contrôleurs appartenant à cet espace de noms. Et bien sûr, c'est agnostique, comme si le résultat était un dictionnaire contenant les contrôleurs et les attributs de ce contrôleur, désolé, de ce personnage, mais il est indépendant de l'espace de noms de ce personnage. Parce que nous pouvons maintenant l'utiliser et l'appliquer à n'importe quel autre personnage possédant les mêmes attributs. Si tu veux voir ça un peu plus beau, tu ne le feras pas. Permettez-moi de sélectionner quelques contrôleurs supplémentaires pour obtenir un dictionnaire plus grand. Et voilà. Il s'agit donc d'une force beaucoup plus importante. Je te l'ai déjà montré. La fonction d'impression, nous pouvons dire à partir de Pip print, print, p, print, signifie une jolie impression. On peut dire imprimer, poster. Tout cela fera l'affaire est imprimé de manière lisible par l'homme. C'est-à-dire, désolé, je ne l'ai pas importé. Ce qui ne fera que rendre la lecture plus facile et plus agréable. Voici donc le dictionnaire que nous attendons. Nous pouvons maintenant l'utiliser et appliquer toutes ces valeurs à un autre personnage. Maintenant, juste pour nous assurer que cela correspond réellement aux valeurs qui nous tiennent à cœur. Je vais le modifier pour qu'il ne soit pas simplement nul. Et voilà. Il existe donc quelques valeurs différentes. Maintenant, si je réexécute ce morceau de code, le tour est joué. Ce sont les valeurs qui appartiennent à ce contrôle. Excellent. La prochaine étape sera d'appliquer ce message à l' autre personnage. Mais avant cela, n' oublions pas les chaînes de documents. Encore une fois, des codes triples, des doubles codes, une petite description, une pose à une pose, un dictionnaire sans espaces de noms. L'espace de noms dont nous savons que nous attendons une chaîne. Je vais donc taper une chaîne et une petite description de ce que fait réellement cet argument. Filtrez la sélection en fonction de cet espace de noms. Excellent. Et puis la valeur de retour, bien sûr, sera un dictionnaire. Restons-en là. Eh bien, j' ai ajouté une description ci-dessus, donc soyons cohérents, à l' exception de ce dictionnaire de contrôles avec des attributs et leurs valeurs. Excellent. 25. Appliquer la pose: OK, nous en avons donc presque terminé avec la fonction uniquement pour vous deux. Maintenant que nous pouvons enregistrer une pose sous la forme d'un dictionnaire. L'étape suivante consiste à appliquer cette pose. Voyons rapidement ce que cela impliquerait. Si nous devions le faire manuellement, laissez-moi effacer ma fenêtre de sortie. Je vais sélectionner la manette, cette manette thoracique. Encore une fois, je ne vais voir qu'à quoi ressemble le dictionnaire de poses. Encore une fois, nous avons les attributs avec les contrôleurs, avec les attributs et les valeurs. Alors, que devons-nous faire pour appliquer cela à ce personnage ? Eh bien, vraiment, tout ce que nous aurions à faire si nous le faisions manuellement serait de définir un attribut. Alors, Cmd S, réglons l'additionneur. Nous savons que nous voulons. Supposons que nous définissions la valeur de rotation et que nous devions définir les valeurs réelles. C'est donc cette valeur que nous avons ici. Je dis normalement une chose qui indique à la commande dont l' espacement de noms applique cette vérité. Donc, tout ce que nous aurions à faire, c'est quel est le nouvel espace de noms ? Il cible l'espace de noms. Et laissez-moi le réduire un peu et exécuter cette ligne de code. Et voilà. Nous appliquons cette valeur à la rotation. Permettez-moi d'appliquer quelque chose d'un peu plus extrême, un changement un peu plus important, qui sera alterné. Et voilà. Nous appliquons maintenant ce volume. Excellent. C'est donc essentiellement ce que nous allons faire. Prenez les attributs de ce dictionnaire de la pose. Nous y avons enregistré l'espace de noms, puis nous y avons appliqué la valeur. Entrons dans PyCharm et commençons à cartographier, en bloquant notre fonction suivante. Disons que c'est des posts appliqués. Nous savons que pour jouer une pose, nous devons connaître les valeurs réelles des poses qui se présentent sous la forme d'un dictionnaire. Appelons-le post dict pour rester cohérent avec les noms. Et nous savons quand il n'avait pas besoin de connaître l'espace de noms cible. Vous pouvez nommer cet espace de noms cible ou simplement des cibles. Mais je pense que Namespace en lui-même a du sens. Ensuite, dans la docstring, nous pouvons spécifier un peu plus à ce sujet, à quoi cela sert. Excellent. Commençons donc par bloquer en fonction. Nous savons que nous devons obtenir les noms des attributs. Nous savons que nous devons y ajouter l'espace de noms. Ensuite, nous devons simplement définir l'attribut. Mais maintenant, il se peut qu'il y ait un problème. Une seconde et essayez de voir si vous pouvez penser à ce qui pourrait mal tourner ici. Qu'est-ce qui pourrait être un bogue potentiel ? Que se passe-t-il si les personnages ne sont pas exactement les mêmes ou si la race n'est pas la même ? Dans mon exemple, je sais que ces deux sont exactement les mêmes parce que j'ai utilisé le même taux. Mais imaginez maintenant que, disons, mon personnage source ait un accessoire supplémentaire. Disons qu'elle a un chapeau, et nous sélectionnons le chapeau. Et nous avons essayé d'appliquer cette valeur à l'autre personnage. Et les autres personnages qui avaient la casquette échouaient, provoquaient une erreur parce que, je dirais , cette manette ou cet objet n'existent pas. Pourquoi l' attribut est-il verrouillé ? Par exemple, s'il est verrouillé, nous pouvons le configurer. Maya va donc également nous donner une erreur. Cela signifie que nous devons vérifier un peu les erreurs. Écrivons simplement cela, juste vérification des erreurs ou des vérifications d'erreurs. Et nous penserons aux chèques dans une seconde. Commençons d'abord par écrire la fonctionnalité de base. La première chose à faire est d'obtenir les noms des attributs. Cela signifie que nous devons parcourir en boucle les clés du dictionnaire qui représentent essentiellement le nom de ces attributs. Disons, appelons-leur son nom, chacun d'eux étant un acronyme dans Post Underscore Dict. Désormais, les dictionnaires ont une fonction. Clés froides. Keys vous donnera la liste des clés du dictionnaire. Laisse-moi te le montrer très rapidement. À l'intérieur de moi, supprimez-le ici, et trouvons un nouveau dictionnaire avec lequel jouer. Je vais sélectionner cette manette. Nous savons que ce contrôleur ne possède que trois attributs. Ce sera donc un petit dictionnaire. Et je vais très bien imprimer ce dictionnaire. Et voilà. Donc, si je devais imprimer les touches de dictée après le soulignement, comme vous pouvez le voir, j' obtiendrais une liste de ces touches, qui ne représente en fait que la manette. Les noms du contrôleur avec les attributs. Il existe une autre fonction appelée valeurs qui, comme vous pouvez probablement le deviner, me donnera simplement une liste de ces valeurs. Maintenant, il y en a un autre appelé items, qui me donne, me donnera au moins les élèves. Comme je l'ai déjà dit, une liste pôle à pôle est comme une liste que vous ne pouvez pas modifier et qui est faite à l'aide de parenthèses régulières. Et les éléments du dictionnaire vous donneront essentiellement une liste avec les paires de clés et de valeurs pour chaque élément du dictionnaire. Mais pour l'instant, nous voulons utiliser des clés pour parcourir tous ces noms de contrôle avec leurs attributs. Passez par-dessus cette liste de clés. Obtenons la valeur de cette clé. N'oubliez pas que pour obtenir une valeur, vous utilisez un dictionnaire et vous obtenez la valeur à partir d'une clé. Ouvrez et fermez donc les crochets. Et nous utiliserons l'autre nom, qui est la clé que nous parcourons en boucle. Ce sera donc la valeur de l'attribut. Appelons donc cette valeur extérieure. Et voilà. Nous obtenons la clé et la valeur. Maintenant, n'oubliez pas que nous devons assembler l'espace de noms et le nom de l'attribut. Appelons ce complément par son nom complet. Et ce sera l'espace de noms suivi de deux points, car c'est la convention dans Maya. Et nous allons utiliser le format point. Ce sera un espace de noms. Ensuite, le deuxième titulaire sera remplacé par le nom. Et voilà. La prochaine chose à faire, c'est que nous l' avons déjà fait. Nous devons ajouter un espace de noms. Alors laissez-moi, laissez-moi déplacer ça ici. Au fait, très vite, si vous vous demandez comment je passe si rapidement d'une ligne à l'autre, il existe quelques touches appelées qui fonctionneront n'importe où dans Windows. Si vous appuyez sur la touche Ctrl, vous pouvez passer d'un mot à l'autre. Il doit appuyer sur Control et Shift. Vous pouvez le faire, mais en surlignant en même temps. Et si vous utilisez la tabulation, vous allez mettre en retrait. Mais si vous utilisez Shift Tab, vous ferez le contraire. Cela se fera en sens inverse. C'est ainsi que je suis capable de me déplacer si rapidement. Mais ce ne sont que des touches de raccourci. Ne t'inquiète pas trop pour eux. Il est cependant très pratique vous permet de taper un peu plus rapidement. Mais de toute façon, pour en revenir à notre code, nous avons des surnoms. Nous avons ajouté l'espace de noms et nous devons maintenant définir l'attribut. Disons ceci, définissons l'attribut. L'attribut que nous connaissons est celui d'un ensemble de points CMBS, d'un additionneur. Ensuite, nous leur transmettons le nom complet de l'attribut, le nom de l'erreur. Et la valeur que nous voulons définir, qui est notre valeur. Et voilà. Là, vous appliquez essentiellement votre message à votre nouveau personnage. Maintenant c'est fait, il nous manque les vérifications d'erreur. Mais pour l'instant, testons cela pour voir ce qui se passe, pour voir si cela fonctionne réellement. Revenons-en à Maya. Comme j'ai apporté quelques modifications au code, je vais recharger le module. Et voilà. Utilisons une nouvelle manette. Nous avons trop utilisé cette commande d'échecs. Je vais utiliser ce bras, ce dispositif de contrôle du coude, ici même. Appliquons-y simplement quelques valeurs. Lève-nous après le dictionnaire. Nous allons obtenir des messages pour Minerva à partir du contrôle sélectionné. Imprimons-le pour voir ce que nous avons. Nous y voilà. C'est la pose que nous essayons de transférer. Appliquons donc cette pose à l'autre personnage. Publiez un trait de soulignement, transférez. Appliquez la pose. Et nous savons que nous attendons un post-dictionnaire et un espace de noms. Fournissons le dictionnaire de poses que nous avons déjà créé. Et l'espace de noms cible l'espace, qui dans ce cas sera Severus. Là-bas. Maintenant, c'est quelque chose d'autre que nous pouvons vérifier. Si l'espace de noms est même valide. Et si je fournissais un run, par exemple cela n'existe pas dans la scène, donc cela pourrait échouer. Mais peut-être pouvons-nous vérifier cela directement dans les commandes. Alors, testons cela pour le moment. Permettez-moi de montrer le bras de cet autre personnage afin que nous puissions appliquer cette pose. Tout ce code. Et voilà. Comme vous pouvez le constater, nous appliquons les valeurs. Dans ce cas, il ne s'agit que d'une rotation, mais c'est très bien, car il ne s'agit que d'une commande du coude. Alors maintenant, cela fonctionne. Maintenant tu peux t'arrêter ici parce que ça fonctionne déjà. Mais comme je l'ai dit, imaginez que ces attributs étaient verrouillés, qu' ils n'existaient pas, ou peut-être que le personnage n'avait pas ce contrôle. Nous devons faire ce genre de vérification. Allons-y et simulons ce type d'erreur pour voir comment nous pouvons prévenir ou comment nous pouvons vérifier, anticiper ce type de problèmes. J'ai ajouté un accessoire à ce personnage. J'ai ajouté le fichier de base de l'appareil. Maintenant, ce que nous devons faire, c'est recharger cette référence. Comme vous le savez déjà, c'est la beauté des références. Vous pouvez apporter des modifications à la plate-forme elle-même et à tout ce qui y fait référence. Nous recevrons ces mises à jour, ce qui est plutôt sympa. Permettez-moi de recharger cette référence. Et nous devrions voir un nouvel accessoire, un nouveau chapeau apparaître ici dans une seconde. Et voilà. Nous avons l'accessoire. Donc, il est clair cet autre personnage ne l'a pas. Ce même contrôle. Il existe un nouveau contrôleur appelé Hat dans l'espace de noms Nervosa. Essayons maintenant de transférer la pose de ces manettes à d'autres personnages comme nous l'avons fait avec le bras. Et voyons ce qui va se passer. Permettez-moi de faire plus de place ici. Créons donc un nouveau post-dictionnaire. Et maintenant, voici le chapeau. Essayons maintenant d'appliquer cela à Severus. Et voilà. C'est l'erreur à laquelle nous nous attendons. L'erreur est qu'aucun objet ne correspond au nom, plusieurs heures plus tard, rotation des points. C'est parce que tout le monde n'a pas de tête. Allons-y et essayons de faire face à ce type d'erreurs. La première chose à vérifier est de voir si le contrôleur lui-même existe, non ? Mais il existe également d'autres types de contrôles que nous pouvons effectuer. Allons-y et cartographions cela. Bloquons-le ici. Vérifiez donc s'il s'agit d' un objet, d'un kyste. Vérifiez si l'attribut est séparable. Nous pourrions vérifier directement s'il n'est pas verrouillé, nous pourrions vérifier s' il est animable. Mais je pense que si nous vérifions si c'est paramétrable, c'est largement suffisant pour ce que nous devons faire ici. Mais avant même de vérifier si un attribut peut être défini, nous devons vérifier s' il existe. Supposons donc que l'attribut check existe. Ça va ? Donc, vérifier si un objet existe est très simple dans Maya. Commençons par cela. Il existe une fonction dans cette bibliothèque appelée Cmd S dot OBJ. C'est très simple. Et pourquoi vous le faites, c'est de fournir le nom de cet objet. Voyons donc si Severus a reçu une alerte spoiler. Nous savons que ce n'est pas le cas, ce n'est pas le cas. Mais imprimons le résultat de cette fonction. Maintenant, si nous faisons cela avec Minerva, eh bien, la réponse est oui, excellente. Nous pouvons donc le faire. Mais pour cela, nous avons besoin du nom de l'objet lui-même sans les attributs, non ? Eh bien, ça ne l'est pas. L'objet est, plus exactement, le nœud. Allons-y et trouvons ce nœud. Nous savons maintenant que nous obtenons le nom complet de l' attribut ici. Donc, en gros, nous faisons cela sans le nom de l'attribut réel à la fin, qui est séparé par un conduit. Encore une fois, juste à titre de référence, introduisons ceci. C'est essentiellement ce avec quoi nous travaillons. Extraire son nom est essentiellement le suivant, qui est l'espace de noms et un attribut Controller Dot. Nous voulons donc en extraire la première partie. Nous pouvons le faire très simplement avec notre ami point split. Comme nous l'avons déjà fait à plusieurs reprises. Nous pouvons dire que le nœud sera un nom extérieur complet, divisé, divisé par un point. Et nous savons que cela divisera la liste en deux parties. Nous voulons donc obtenir la première partie, qui est l'espace de noms plus le jour. Je vais contrôler le nom et c'est le nœud. Le premier élément de la liste sera donc le numéro d'index zéro. C'est donc le nom du nœud. Nous pourrions dire que si Cmd S point OBJ existe, vérifiez s'il existe, sachez qu'il existe. Ashley, désolée, nous voulions vérifier le contraire, non ? Eh bien, encore une fois, nous pouvons le faire, cela dépend de la façon dont vous voulez que la logique fonctionne. Si vous souhaitez appliquer cette logique ou définir l'attribut uniquement si l'objet existe, nous pouvons simplement utiliser la dentine et cela fonctionnera. Si l'objet existe, définissez l'attribut. Faisons-le pour le moment. Permettez-moi d'écrire un commentaire ici. Au fait, si vous vous demandez également comment j'arrive à la fin de la ligne, j'utilise le N E, que vous trouverez sur votre clavier. Et la touche Accueil vous amène au début d'une ligne. Si vous l'utilisez avec la touche Shift, vous pouvez sélectionner l'ensemble de la lumière. C'est très sain. Nous allons donc dire que nous sommes en train de vérifier ici. Excellent. Nous vérifions si l'objet existe, s'il définit l'attribut, testons-le. Je vais supprimer cette ligne ici. Et je vais déplacer ces deux vérifications supplémentaires ici parce que c'est toujours notre tâche. C'est un peu notre liste de choses à faire pour le moment. Alors, testons cela d'abord. Encore une fois parce que j'ai apporté quelques modifications. Je suis en train de recharger après le transfert. Assurons-nous qu'il est sélectionné et qu'il l'est. Et voilà. Rien ne s'est passé, et c'est exactement ce que nous voulions, car le seul contrôle que nous avons sélectionné n'existe pas vraiment. Maintenant, essayons avec deux manettes. C'est un peu plus compliqué. Déplaçons le bras. Sélectionnons le chapeau et appliquons à nouveau le message. Maintenant, seul le bras a été appliqué et le manche a été ignoré parce qu'il n'existe pas. Excellent. Comment vérifier si un attribut existe réellement ? Parce que l'objet existe peut-être au moment où nous vérifions ici, mais il se peut qu'il ne possède pas l' attribut que nous essayons de définir. Comme d'habitude, la bibliothèque de symboles dispose d'une commande ou d'une fonction qui peut nous y aider. C'est ce qu'on appelle une requête attributaire. Voyons donc comment l'utiliser à l' aide de la documentation. Passons à la requête d'attribut de style de documentation. Et voilà. Ainsi, dans la description, il est indiqué qu'il renvoie informations sur la configuration d'un attribut. Il semblerait que c'est ce que nous voulons faire. Allons-y et examinons les exemples ci-dessous. Déterminez le statut masqué de l'attribut de sélection. Cela a été déterminé. D'accord, il semblerait que vous transmettiez l' attribut que vous souhaitez, puis que vous déterminez si un attribut est curable. Mais c'est peut-être quelque chose que nous voulons faire. Potentiellement. Vous transmettez le nom du nœud , puis vous transmettez les attributs souhaités. C'est donc un peu en arrière par rapport à la façon dont Get out or works fonctionne, ce qui est dommage. J'aimerais que cela soit un peu plus constant. Mais n'oubliez pas que get out ou il obtient le nom complet de l'attribut, qui est le point de contrôle de l'attribut. Dans ce cas, nous devons le décomposer. Nous devons obtenir le nœud ou le contrôleur et l' attribut séparément , puis vérifier ce que vous souhaitez tester ou enregistrer dans l'attribut. Donc, dans ce cas, je sais qu'il existe un indicateur ou un argument pour voir si un attribut existe. Il devrait exister. Oui, vous y voilà. C'est un attribut booléen, renverra vrai si l'attribut existe, accord. Nous devons donc obtenir le seul nom de l'attribut. Ensuite, en passant le nœud dans lequel nous voulons récupérer l'attribut. Super, donc, où que le poulet indique en se séparant ce week-end, et maintenant nous devons trouver le nom exact de l'attribut. Appelons-le le nom court de l'attribut, par opposition au nom complet de l'attribut. Nous savons qu'en divisant le nom complet de l'adder, nous obtenons les deux, n'est-ce pas ? Nous divisons par point, ce qui signifie travailler sur cette partie. Et nous obtenons également cette partie, qui est le nom abrégé de l'attribut que nous voulons. Nous pourrions donc simplement le faire. Le nom court extérieur est égal à copie, c'est-à-dire à cette division. Mais maintenant, au lieu d' obtenir le premier article, nous voulons obtenir le second. Voici donc la note, et voici le nom abrégé de l'attribut. Mais il y a une, il y a une meilleure façon de procéder. Puisque nous savons que nous obtenons une liste avec deux éléments, vous pouvez en fait attribuer ces deux éléments de la liste à deux variables à fois sur une seule ligne en Python, procédant comme suit. nom court extérieur est égal à la liste de ceux que nous avons obtenus à partir de la scission. Voyons donc comment cela fonctionne dans Maya au cas où cela serait un peu confus. Alors allons-y. Prenons, eh bien, l'exemple que nous utilisons. Prenons le nom complet de l'attribut. Utilisons un nouvel onglet Python. Nous savons que nous voulons diviser ce point par le nom du point split. Appelons ça, en fait, appelons-le, c'est une liste divisée. Imprimons la liste des scores divisés par cellules. Et voilà. Vous obtenez donc les deux objets. Comme je l'ai dit, vous pouvez attribuer cela à variables en disant que le premier nœud, le premier est le nœud et le second est l'attribut réel égal à la liste divisée. Et maintenant, vous pouvez imprimer un nœud. Vous complétez l'attribut d'impression C. Et voilà. Maintenant, cela fonctionne parce que nous savons que la liste comporte deux éléments. Si la liste contient plus d'éléments. Et c'est, par exemple, remplaçons la liste divisée par notre propre liste. Ils disent juste 12,3. Si nous l'exécutons maintenant, la liste comporte trois éléments. Nous essayons d'assigner à un thread de 22 variables deux variables. Ce que nous allons avoir est plus restreint parce qu'il y a trop de valeurs à déballer. Cela ne fonctionne que parce que nous savons que la scission nous donne deux éléments. Génial. Allons-y et vérifions si l'attribut existe. Permettez-moi d'apporter cette ligne ici, c'est là que nous en avons besoin. Commençons par poser des questions à ce sujet. C'est l' existence des attributs. Disons que si CMBS est un point, laissez-moi le taper. Attribut, requête, parenthèses ouvertes et fermantes. Maintenant, souvenez-vous que nous avons le nom abrégé des attributs. Et encore une fois, nous suivons la documentation ici. L'exemple suivant montre le nom de l' attribut, puis le nœud. Maintenant, si nous voulions voir à quoi servent les arguments de cette note , laissez-moi la rechercher. Allons-y. Notez le nom des personnes. Utilisez tous les attributs du nœud nommé name. OK, c'est un peu trompeur. Il n'existe aucun nom de nœud. Et cela nous indique qu'il a besoin d'une valeur de type name qui n'existe pas. Cela signifie en fait une chaîne. Il est donc un peu dommage que parfois la documentation de mon S ne soit pas très cohérente. Il y a des suppositions éclairées selon lesquelles il faut parfois faire comme ça. Dans ce cas, le nom doit simplement deviner ou supposer que cela signifie une chaîne. Cela dit, la documentation est toujours extrêmement précieuse, c'est pourquoi j'y reviens sans cesse. Disons que le nœud est égal au nom. Non, désolé, désolé, nœud est égal à nœud, qui est le nœud que nous avons obtenu en séparant. Ensuite, ce que nous devons vérifier , c'est voir si l'attribut existe, s' existe est égal à vrai, ou s'interroger sur l'existence de l'attribut. Hein ? Et voilà. Appelez longuement pour terminer cette instruction IF. Et maintenant, nous insérons cela. Ce que vous remarquerez probablement, c'est que l'indentation devient trop importante. Nous avons 12 niveaux d'indentation et nous allons en avoir un de plus car nous devons vérifier si l'attribut est séparable. Allons-y et nettoyons tout ça avant de faire la dernière vérification. Quelque chose que vous pouvez faire à la place de l'indentation. Nous avons évité d'imiter ici en utilisant le mot clé continue, continue. On pourrait le faire. On pourrait dire si aucun objet n'existe. Poursuivre. Et puis laissez-moi le détailler. Encore une fois, c'est pareil. Si aucun attribut n'existe, nous pouvons simplement dire Continuer. Et puis, comme nous sautons, nous utilisons la fonction continue pour éviter l'indentation. Nous pouvons simplement ajouter le même niveau que tout ce qu'ils ont dit attribuer. Et maintenant, faisons notre dernière vérification. Nous devons vérifier si un attribut est paramétrable. Maintenant, vous pourriez penser que vous pouvez connaître ces informations à partir d'une requête attributaire. C'est une très bonne supposition. Ce n' est malheureusement pas le cas. Pour voir si un attribut est défini parmi tous, nous devons utiliser la fonction set, sorry, they get adder. Jetons donc un coup d'œil à cela dans la documentation. Sortez ou vous pouvez vérifier si quelque chose est évolutif. Vous pouvez également vérifier si quelque chose est paramétrable. Et encore une fois, cela renverra un booléen ou un booléen que, dans ce cas, nous pouvons échanger en tant que booléen. Alors allons-y et faisons-le. Allons-y ou vous voulez essentiellement ce nom d'attribut get adder. Mais maintenant, par opposition à la fonction de requête d' attribut, nous avons en fait besoin du nom complet de l'attribut. Encore une fois, ces fonctions ne sont parfois pas très cohérentes les unes avec les autres. Mais ce n'est pas grave. Vous n'avez qu'à vous fier à la documentation ou à votre expérience. Plus vous utilisez ces fonctions, plus vous savez comment les utiliser. Et ça cesse d'être un problème. Ce n'est jamais vraiment un problème. Génial. Alors allons-y. Supposons que Get out ou le nom de l'attribut et définissons le double égal à true pour vérifier si notre attribut est séparable. Donc, si les CMBS ne sont pas ajoutés. N'oubliez pas que dans ce cas, nous voulons le nom complet de l'attribut. Il indiquera donc le nom complet. Homer, paramétrable est égal à vrai. Donc, si ce n' est pas le cas, l'attribut est saturable, donc si l'attribut n' est pas séparable, nous voulons continuer. Nous ne voulons donc pas, nous voulons simplement ignorer tout ce qui se trouve avant ou après cela et passer à la valeur suivante de la boucle. Super, alors testons cela et voyons si cela fonctionne réellement. Une fois et je vais revenir à mon onglet. Puisque nous avons apporté quelques modifications, je vais recharger mon module. C'est génial. Et je vais à nouveau appliquer certaines valeurs au bras. Encore une fois. Alors, procurez-vous la pose, le dictionnaire de poses, et appliquez cette pose à notre carte cible. Et voilà. Seul le bras a été appliqué et le bras a été ignoré car, bien entendu, il n'existe pas. C'est super. Maintenant, c'est bon, cela fonctionne, mais il existe un autre moyen de condenser ce code et de le rendre un peu plus propre. Laissez-moi vous montrer comment procéder à l'aide de l'opérateur OR. Opérateur. L'opérateur vous permet essentiellement d'enchaîner ce type de contrôles. Nous pouvons donc dire que si aucun objet n'existe ou non, requête d'attribut existe ou non, l'attribut est paramétrable. Maintenant, c'est devenu une très longue file d'attente, ce qui n'est peut-être pas génial non plus. Mais laissez-moi vous montrer comment cela fonctionne. Donc, en gros, nous disons que si l'objet n' existe pas, continuez. Donc, si cette condition est remplie, nous saisissons essentiellement l'instruction if. Mais supposons que l' objet et ses ensembles existent. L'objet existe donc, super. Ou si cet attribut n'existe pas. Alors fais-le. Supposons donc que l'objet existe et que l'attribut existe. Ensuite, nous passerons à notre prochaine vérification, ou ce qui serait le cas, ou si l'attribut n'est pas séparable, nous continuerons. C'est la même chose que nos contrôles à trois niveaux, mais tous sur une seule ligne. Maintenant, il existe une autre version qui est à l'opposé, et vous pouvez donc dire que si nous pouvions inverser la logique, si nous pouvions inverser la logique, je voulais simplement vous montrer ces deux options afin que vous connaissiez les options qui s'offrent à vous. Nous pourrions inverser la logique des listes. L'objet existe. Je ne vais pas le faire, en fait, je vais taper le bon code. Nous pouvons donc dire si l'objet deux existe et si l'attribut existe, par exemple imaginons que ce sont toutes les vérifications que nous voulons faire. Nous pouvons dire que si l'objet existe et que l'attribut existe, alors nous pouvons utiliser notre additionneur d'ensembles, par exemple en inversant la logique en utilisant l'opérateur AND. Mais nous essayons d' éviter l'indentation. Nous faisons donc le contraire en utilisant l'opérateur OR. Si l'objet n'existe pas, ou si l'attribut n'existe pas, ou si l'attribut n' est pas séparable, nous continuons à ignorer la définition de l'attribut et à passer à l'élément suivant de la boucle. OK, pour terminer cette fonction, nous devons la nettoyer. Nettoyez-le. Nous savons que nous n'avons pas besoin de cette ligne. Celui-ci est juste au moment où nous développons pour nous aider. Nous allons supprimer ces commentaires ici, mais nous allons mettre un commentaire ici disant « check ». Appelez cela simplement des vérifications d'attributs. Ensuite, nous avons défini l'attribut. Excellent. Maintenant, avant d'oublier chaînes de documents de nos amis, c' est très important. Nous allons donc définir la docstring, disons appliquer la pose fournie pour lui fournir un espace de noms, par exemple, nous savons maintenant que cette pose est censée être un dictionnaire. Dictionnaire avec des valeurs de pose ou des données de pose, disons des données de pose, c'est-à-dire les clés, les valeurs et l'espace de noms. Nous savons que c'est une chaîne. Mais soyons explicites ici et disons noms cible auquel s'appliquer. Peut-être un peu verbeux, mais n'hésitez pas à condenser cette phrase si vous le souhaitez. Et dans ce cas, nous ne retournerons rien. Je vais donc supprimer cette ligne. Et ça suffit. Parfait. Notre fonction est agréable et ordonnée. C'est très petit, ce qui est génial. Comme je l'ai dit, je peux les petites fonctions spécialisées sont généralement la solution. Essayons cela. Avant de passer à l'assemblage de tous ces éléments. Je vais supprimer l'empreinte. Encore une fois, je vais reprendre mes excuses. Ce n'est pas ce que je voulais faire. Nous allons recharger mon module. Et je vais opter pour un dictionnaire opposé. Faisons quelques manettes supplémentaires cette fois. Donc, l'opposé, le bras. Faisons les hanches, par exemple les hanches, la poitrine et le bras. Et j'ai sélectionné quelques manettes supplémentaires, mais ce n'est pas grave. Et le chapeau, juste pour vérifier le test, ce sont des chèques. Et super. Nous allons donc en tirer le post-dictionnaire , puis l'appliquer au Cerbère. Nous y voilà. Excellent, ça marche. Nous avons donc presque terminé. Alors que votre code est pratiquement terminé. Maintenant, la prochaine chose que nous devons faire est de l'adapter au flux de travail que nous voulons. À ce stade, toutes les fonctionnalités sont séparées en fonctions spécialisées et petites. Vous êtes donc maintenant libre de décider quel flux de travail vous voulez, ce que vous voulez en faire, ce que vous voulez utiliser avec cet outil. Nous faisons quelque chose de très valide, qui consiste simplement à taper le nom de notre espace de noms cible. Si c'est ainsi que vous voulez que cela fonctionne, c'est génial. Supposons que vous souhaitiez créer une interface utilisateur. Vous voulez que l'utilisateur saisisse l'espace de noms auquel il est associé, s'il le souhaite. Mais ce que nous voulons, comme je l'ai mentionné au début, c'est utiliser la sélection. Et c'est qu'il utilise la sélection pour obtenir les espaces de noms et les oppositions en même temps. Alors, créons une fonction qui fasse cela. Et réunit tout cela en une seule fonction qui fera tout cela pour nous. 26. Créer la fonction "Transfert" principale: Très bien, créons une fonction qui rassemble tout. La première question est donc savoir où placer cette fonction en haut du fichier, au milieu du fichier, à la fin du fichier. Jusqu'à présent, nous l'avons fait de haut en bas. Et c'est très bien. Nous pouvons simplement le mettre à la fin et ce n'est pas un problème. Mais il y a quelque chose que je voudrais mentionner à propos de Python. C'est un fait intéressant. Ou si ce n'est pas intéressant, c'est au moins bon à savoir. Python est donc un langage interprété. Permettez-moi de l'écrire ici. Interprétez-le plutôt que d' être un langage compilé. Vous avez probablement déjà entendu ce terme avant d'être compilé. Cela signifie que votre code source, qui est vraiment le code, le texte que vous écrivez. Tout ce code source est traduit en quelque chose que la machine peut réellement exécuter. Au plus bas niveau d' exécution de mon ordinateur. L'ordinateur est vraiment en tête des zéros et des uns. Entre ces zéros et ces uns. Et le code source que vous écrivez comporte quelques étapes de différents types de code. C'est ce qu'on appelle code objet ou code machine. Et ce sont différents niveaux de traduction pour arriver à ces zéros et ces uns. Ainsi, dans des langages comme C ou C plus plus, avant de pouvoir exécuter votre code, vous devez le compiler et effectuer cette étape manuellement ou parfois vous l'automatisez, mais vous devez effectuer l'étape avant de pouvoir exécuter votre code. Mais cela signifie que le code en cours d' exécution est plus proche de ce que la machine lit réellement au niveau d'exécution le plus bas, ce qui signifie qu'il est plus rapide. Le code que vous exécutez lorsque vous compilez quelque chose est donc plus rapide. D'un autre côté, comme je l'ai mentionné, Python est interprété. Cela signifie que vous n' avez pas besoin de le compiler. Vous pouvez simplement apporter une modification et l' exécuter comme nous l'avons fait jusqu'à présent. Je dois dire que ce n' est pas vrai à 100 %. Le fait que Python soit interprété ne signifie pas exactement qu'il n'est pas compilé. Il y a toujours un certain niveau d' achèvement, mais des différences sont apportées à chaque fois que vous exécutez le code. Cela signifie que vous pouvez simplement apporter des modifications et exécuter le code. Mais cela signifie également que le code que vous exécutez en Python sera généralement plus lent que le code que vous exécutez en C plus, et que la même opération en Python sera plus lente que la même opération en C plus plus. Pour le simple fait que C plus plus est compilé à l'avance. Et le code est exécuté plus directement en fonction de ce que l' ordinateur comprend. Cela dit, la différence dans la plupart de nos activités en animation n'aura pas vraiment d'importance. C'est pourquoi tous les pipelines de tous les studios auxquels vous pouvez accéder utiliseront Python. Parce que comme vous n' avez pas à le faire, cette étape de compilation est très rapide à développer. Vous pouvez apporter des modifications très rapidement. La syntaxe est très similaire à celle de l'anglais. Vous l'avez donc vu jusqu'à présent et vous n'avez pas besoin de le compiler. Comme je l'ai mentionné, le fait qu'il soit légèrement plus lent que les autres langues ne fait pas vraiment de différence. Et c'est de l'agilité dans le développement. C'est un avantage par rapport au manque de vitesse. Ce qui, encore une fois, est quelque chose que vous ne remarquerez jamais. L'Esprit n'est pas très perceptible par les humains, à moins que vous ne fassiez quelque chose très, très lourd en informatique. Pourquoi est-ce que je le mentionne ? C'est parce que le fait que Python soit interprété signifie que le code est lu et exécuté de haut en bas. Donc, une pratique que beaucoup de gens font est d'écrire la fonction stop en bas. Donc, si je dois avoir besoin de cette fonction plus tard, je vais d'abord l'avoir puis l'appeler ici, par exemple maintenant, bien que cela soit logiquement vrai, le cas des fonctions, n'est pas nécessairement le cas, je pourrais l' être si j'avais une fonction. Donc, par exemple, si j'appelle cette fonction ici, cela va échouer. Même par charme, cela me dit que la fonction n'existe pas. Cela va échouer car la fonction n'a pas encore été déclarée. Mais si je le place dans une autre fonction, ce n'est plus le cas. En effet, Python examinera d'abord les noms des fonctions, les enregistrera toutes, puis vous aurez accès à n'importe quelle fonction, même si elle se abord les noms des fonctions, les enregistrera toutes, puis vous aurez accès à n'importe quelle fonction, même si trouve en dessous de celle que vous appelez, car elle se trouve à l'intérieur d'une autre fonction. C'est-à-dire que vous pouvez placer la fonction que nous allons écrire où vous le souhaitez. En règle générale, puisqu'il s'agit d'une fonction avec laquelle nous allons interagir, c'est le point d'entrée de notre outil. Je place généralement ce type de fonctions au début du fichier afin que la première chose vous voyez soit cette fonction. Et à partir de là, vous commencez à comprendre ce qui se passe dans le reste de la pile. Cela dit, après tout ce discours, j'espère qu' il était intéressant, utile et peu clair. Mais allons-y et écrivons la fonction proprement dite. Il s'agit d'une fonction qui agit lorsque notre bouton clique pour nous, il effectuera l' ensemble du flux de travail. Souvenez-vous que nous l'avons dit, nous voulons sélectionner deux personnages ou plus et appliquer le message du premier aux autres personnages cibles. Je vais donc appeler cela le transfert sélectionné. Aucune entrée pour le moment. Commençons par le bloquer. La première chose à faire est d'obtenir les espaces de noms sélectionnés. Ensuite, nous devons valider la sélection. Parce que, comme je l'ai dit, nous devons sélectionner au moins deux personnages. Sélection de date donc valide. Ensuite, nous devons obtenir le dictionnaire de poses à partir du premier caractère, l'espace FirstName pour le premier caractère. Parce que Rick, disons, applique ensuite la pose aux espaces de noms cibles, aux médicaments cibles. Appelons donc ce dictionnaire à partir de la source et appliquons des cibles. Très bien, je pense que c'est logique. Je pense que c'est le flux que nous recherchons. Commençons donc à le remplir. Obtenons les espaces de noms. Celui-ci est simple, nous avons déjà une fonction pour cela. Maintenant. Nous avons en fait une fonction pour tout ce que nous devons faire dans cette fonction. Ou peut-être appelons-nous cette variable espaces de noms égaux, obtenons les espaces de noms sélectionnés, ce qui est notre fonction ici. D'excellents noms. C'est pourquoi il échoue. Espaces de noms. Vous y voilà. Maintenant, nous devons valider notre sélection. Comme nous l'avons dit, nous voulons opérer sur deux caractères sélectionnés ou plus dans des espaces de noms sélectionnés. Disons donc que si je dois utiliser la fonction de longueur L-E-N, espaces de noms len sont inférieurs à deux. Nous pouvons simplement quitter leur fonction ici et ne rien faire en retour. Mais j'aimerais le rendre un peu plus convivial. Je voudrais expliquer à l' utilisateur pourquoi rien ne s'est passé, au lieu de le laisser dans l'ignorance. Nous pouvons donc utiliser la bibliothèque C&DH pour cet avertissement CMBS, très bien nommé, qui nous permettra d'avertir l'utilisateur. Il ne fait que prendre une chaîne comme message et l' afficher à l'utilisateur. Nous pouvons donc dire Veuillez sélectionner deux tarifs ou plus. Maintenant, laisse-moi te montrer ça. Je suis sûr que vous avez déjà vu ce type d'avertissement. Cela ressemble tout simplement à ça. Est-ce cet avertissement jaune qui apparaît en bas de Maya. Excellent. Nous pourrions donc améliorer un peu ce point. Nous pouvons en fait faire en sorte que si rien n'est sélectionné, vous demandiez à l'utilisateur de sélectionner quelque chose. S'il n'y en a qu'un. Laissez-moi le faire, s'il vous plaît. Donc, si la longueur des espaces de noms est nulle, nous pouvons dire Veuillez sélectionner quelque chose. Dans le cas contraire. Sinon, si la longueur des espaces de noms est d'un, on peut dire matin. Veuillez en sélectionner plusieurs. Hein ? Si tel est le cas, nous pouvons simplement revenir et quitter la fonction. C'est donc à vous de décider. Vous pouvez utiliser l'instruction if simple ou l'instruction double if. Le if et l'elif sont Terminus. Je l'ai fait ici. Je vais m'en tenir à celui-ci. Encore une fois, si mes chèques ne sont pas réussis, nous revenons et ne faisons rien. Sinon, nous voulons obtenir la source, le dictionnaire à partir de la source , puis l'appliquer aux cibles. Puisque nous avons des espaces de noms, cet espace de noms source, source, appelons-le simplement source. En fait, non, désolée, soyons plus explicites. Espace de noms source. Nous savons que ce sera le premier espace de noms sélectionné. Nous pouvons donc simplement dire espaces de noms, crochets ouverts et fermés, crochets. L'indice zéro sera le premier. Ensuite, nous voulons appliquer cela au reste des espaces de noms avant d'y arriver, car cela introduira en fait un nouveau concept dans Enlist. Permettez-moi de le faire avec un seul objectif. Ignorons donc tout, sauf deux appareils sélectionnés pour le moment, nous allons y remédier. Très bientôt. Je vais appeler cela un espace cible, ce seront des espaces. L'index numéro un, qui est le deuxième élément de la liste. Et nous savons que nous en avons assez parce que nous vérifions que nous en avons au moins plus d'un, au moins deux dans ce cas. Génial. Passons donc au post-dictionnaire. Disons que post dict est égal à GET post deck. Comme nous le savons, nous demandons un espace de noms pour cette fonction. Et ce sera notre espace de noms source , espace de noms source, dictionnaire. Ensuite, il ne nous reste plus qu' à appliquer la pose. Fournissez, appliquez la pose. Nous pouvons fournir le dictionnaire de publication et fournir l'espace de noms cible. Très bien, testons ça. Ensuite, nous pourrons revenir et le faire pour plus de deux plates-formes si cela fonctionne. Très bien, passons à Maya. Encore une fois, parce que nous avons apporté quelques modifications. Nous allons recharger le module. Permettez-moi de nettoyer mon éditeur de script parce que c'est un peu en désordre. Et nous n'avons plus besoin de stocker aucune de ces variables. Nous allons donc dire transfert, non, désolé, transfert postal, fois en ce qui concerne le transfert de port, le transfert. Sélectionnez-le. Et puis appelons cette fonction. Alors, testons d'abord nos chèques. Laisse-moi exécuter ce morceau de code. Les index sont organisés, OK, j'ai un bogue en ce moment. En train de jouer à 13. L'indice est hors de portée. OK, je vois ce qui se passe. Tu as fait une erreur, mais c'est génial. Donc, comme vous pouvez voir mon avertissement, ils exploseraient. Mais ensuite, mon code a continué à s'exécuter. Et nous essayons d'obtenir le premier espace de noms à partir de la liste des espaces de noms. Mais Python me dit que l'index de la liste est hors de portée. Cela signifie qu'il n'y a rien dans les espaces de noms. Et j'essaie d' obtenir quelque chose à partir de rien, ce qui , bien sûr, ne fonctionnera pas. Alors, réparons ça. Revenez à Pi Term. C'est donc un problème, c'est que nous en sommes arrivés là. La longueur des espaces de noms était nulle. Nous lançons un avertissement. Et nous y sommes quand même allés parce que nous n'y sommes pas revenus dans cette déclaration. Permettez-moi donc de vous montrer que si je ne sélectionne qu'un seul espace de noms, nous allons entrer ici. Nous allons recevoir cet avertissement, puis nous allons sortir sans erreur. Laisse-moi le faire très rapidement. Sélectionnez l'un d'entre eux et exécutez-le. Vous y voilà. Nous avons reçu l' avertissement mais aucune erreur. Alors, comment résoudre ce problème ? C'est très simple, on peut simplement revenir ici, quitter la fonction ici. Cela signifie également que l' instruction if n'est pas vraiment nécessaire. Nous pouvons simplement dire que si cela ne se trompe pas, cela fonctionnera dans les deux sens. Mais maintenant, comme nous quittons la fonction de toute façon, nous ne savons pas, nous n'avons pas besoin de l'autre dans ce cas. Très bien, cela devrait corriger notre bogue. Permettez-moi de tout désélectionner pour que nous recevions le premier avertissement. Veuillez sélectionner quelque chose. Excellent. Maintenant, ne sélectionnez qu'une seule chose. Dites Veuillez sélectionner plus d'un Rick. Excellent. Et maintenant, faisons le transfert proprement dit. Laisse-moi déplacer les hanches vers l'arrière. Vous y voilà. Laisse-moi sélectionner mon personnage cible. Et voilà, le poste est transféré. Maintenant, nous avons dit, eh bien, laissez-moi le tester avec l'accessoire qui n'existe pas dans la cible. Et voilà, aucune erreur n'est survenue. La pose est la même. Des sons. Cela fonctionne. Génial. Maintenant, faisons en sorte que cela fonctionne avec plusieurs personnages. Et pour cela, je dois ajouter un personnage de plus à la scène. Je suis allé de l'avant et j'ai reproduit notre personnage de Minerva. Il y a donc une autre plate-forme de référence dans la scène, et je vais modifier son espace de noms pour qu'il soit faible. Maintenant. Donne-moi juste une seconde pour répondre. Nous y voilà. Nous avons donc maintenant trois personnages référencés dans la scène. Laisse-moi déplacer celui-ci ici. Et appliquons à nouveau un post. Mais maintenant, essayons de l'appliquer à deux personnages au lieu d'un seul. Vous y voilà. Donc, comme prévu, cela n' a fonctionné que dans le second que nous avons sélectionné, car nous avons mis cette limitation en place. Mais maintenant, allons-y et rendons le message plus polyvalent afin de pouvoir appliquer le message à autant de personnages que nous le souhaitons. Pour que cela fonctionne, nous devons obtenir une liste des espaces de noms cibles. Je vais donc modifier cela pour cibler les espaces de noms. Maintenant, au lieu d'une seule chaîne, il doit s'agir d'une liste de chaînes. Et nous le faisons en effectuant ce que l' on appelle le découpage de listes. Nous devons découper une liste et tout prendre sauf le premier élément de la liste. Et nous pouvons le faire en utilisant cette syntaxe. C'est donc toujours entre ces parenthèses de score. Nous utiliserons cette colonne. Ce sera sur le côté gauche. Laisse-moi faire de la place ici. Sur le côté gauche. Il s'agira du premier élément ou du premier index à partir duquel vous souhaitez commencer la copie de la liste que vous créez. Ce sera donc indexé numéro un. Et puis ici, ce sera le dernier index auquel vous souhaitez vous arrêter. Maintenant, le truc avec celui-ci, c'est qu'il n'est pas inclusif. Cela signifie que si vous souhaitez vous arrêter à l'indice numéro deux, vous devez en fait fournir l'indice trois. Cela peut être un peu confus. Cela signifie que nous allons commencer à l'index un et terminer à l'index deux. Ou dans ce cas, pour le moment, nous voulons aller jusqu'à la fin de la fonction. Vous pouvez donc simplement laisser ce champ vide. Donc, pour notre objectif, nous pouvons utiliser leave this empty. Cela signifie donc que nous allons tout obtenir depuis le deuxième élément, qui est l'index numéro un, jusqu'à la fin de la liste. Permettez-moi de vous montrer cela dans Maya avant de continuer. Parce que cela peut être un peu confus. Alors, obtenons en fait une liste d'espaces de noms. Les espaces de noms sont égaux à publier un trait de soulignement , à transférer, à sélectionner. Il y a un espace de coordonnées qui dit « laissez-moi déplacer ça ici », des espaces de noms. Et allons-y et imprimons ça. OK, voilà. Nous en avons donc trois, ces trois espaces de noms. Donc, en fait, mettons cette liste ici pour qu' elle soit plus évidente. D'accord ? Nous imprimons donc cette liste. Nous avons ces trois espaces de noms. Si j'imprime, si je le fais, par exemple, je découpe la liste. Mais si je n' inclus aucun indice, cela se fera du tout début de la liste jusqu'à la fin de la liste. Donc, en gros, faire une copie complète de la liste. Maintenant, souvenez-vous que je vous ai dit que les listes peuvent être modifiées. Cela signifie que vous pouvez modifier les espaces Britney du nom encore et encore. Lorsque vous faites cela, vous en faites une copie. C'est donc comme une liste séparée. Et si vous modifiez la copie, vous n'affecterez pas l'original. Donc, dans ce cas, nous imprimons essentiellement une copie de cette liste. Comme je l'ai dit, nous voulons tout sauf le premier. Nous pouvons donc commencer par l'indice, le deuxième élément, qui est indice numéro un parce que nous commençons à compter à zéro. Voyons donc ce que cela nous donne. Vous y voilà. Nous avons Severus et Linda. Et si nous ne voulions que le dernier ? Eh bien, pour AC, nous pouvons commencer à l'indice deux et nous n' obtenons que cette merveille. Maintenant, j'ai mentionné que vous pouvez, vous pouvez dire que le découpage de la liste fonctionne pour arrêter. Dans ce cas, si nous voulions arrêter ? Deuxièmement, disons que nous voulons tout, de zéro jusqu'au deuxième élément. Le deuxième élément devrait logiquement être l'index numéro un. Mais si je le fais, je n'en aurai qu'un. C'est parce que, comme je l'ai dit, la deuxième place après les deux points n'est pas inclusive. Cela signifie que vous devez y aller une fois de plus. Donc, si je fais l'indice numéro deux parmi, je vais essentiellement obtenir l'indice numéro zéro et l'indice numéro un jusqu'à un avant le numéro deux. Je sais que cela peut être un peu confus. Même pour moi. Parfois, j' oublie lequel est inclusif, lequel est exclusif ? Mais c'est ainsi que fonctionne Python et il y a quelques raisons à cela, quelques raisons à cela, mais nous n'avons pas besoin d' entrer dans le vif du sujet pour l'instant. Mais encore une fois, si je laisse ce champ vide, je vais obtenir, en fait, je vais commencer par l'index 1. Je vais aller jusqu' au bout. Je vais donc le laisser vide. Vous y voilà. Si vous êtes curieux, si vous pouvez utiliser l'indice moins un, vous le pouvez. Cela fonctionne de la même manière que si vous écriviez l'index numéro quatre dans ce cas. Il s'agit donc de l'index 01.2, désolé, de l'index numéro trois. Si vous écrivez l' indice numéro trois ici, vous obtiendrez 12.3. Sera-t-il ignoré moins un ? Parce que, comme nous l'avons dit, moins un est égal au dernier indice. Moins un, c'est essentiellement la même chose que trois. Vous en aurez donc un. Et c'est tout. De toute façon, elle n'aura que des serveurs. J'espère que ce n'était pas très confus. Nous passerons en revue les listes plus en détail après ce projet. Pour l'instant, tout ce dont nous avons besoin, c'est de savoir que nous voulons une copie de la liste, omettant le premier élément, afin de garder l'index zéro. Donc, en commençant par l'index 1 jusqu'à la fin de cette liste. Revenons et faisons-le. Eh bien, nous ne l'avons déjà pas fait. Nous avons une nouvelle liste de cibles, d'espaces de noms, qui sont les espaces de noms cibles. Donc, ce que nous pouvons faire maintenant, est parcourir ces espaces de noms cibles en boucle. Donc je vais appeler ça, je vais dire « cible ». Dans les espaces de noms cibles. Nous allons simplement parcourir cela en boucle et appliquer la publication à chacun des espaces de noms cibles. Au lieu des espaces de noms d'espace d'arguments. Vous y voilà. Alors allons-y et testons cela. Comme d'habitude, je vais recharger le module car j'ai apporté quelques modifications. Nous n'en avons plus besoin, je vais donc le supprimer. Et testons notre fonction. Allons-y , reprenons notre test. Donc, si je n'ai rien sélectionné, nous recevons un avertissement. Si je n'en ai sélectionné qu'un, nous recevons un avertissement. Et maintenant, si nous, changeons la pose. Disons ceci. En fait, sélectionnons également le chapeau. Nous allons appliquer toutes les manettes que j'ai sélectionnées. 21,2 appareils de forage. Exécutez le code. Il passe en revue ces hommages et parfait, et voilà. Donc, même le chapeau sur l'autre référence pendant la fourniture, parce qu'il a découvert que le contrôleur a trouvé cet attribut. Gardons la casquette de ce personnage ici. Toutes mes excuses pour mes horribles posts. Je sais que ce n'est pas très attirant, n'est pas une très belle silhouette. Mais comme vous pouvez le constater, toutes les poses sont exactement les mêmes, c'est ce que nous recherchons. Vous l'avez donc. Vous avez créé le backend de votre outil. Le back-end désigne la fonctionnalité de l'outil. Maintenant, j'ai dit que nous allions créer une interface utilisateur qui servira de frontend à l'outil car même si c'est amusant d'exécuter du code, il est encore plus amusant d' appuyer sur un bouton. Alors allons-y et parlons de la façon dont nous allons aborder l'interface utilisateur. 27. Intro aux interfaces d'apprentissage: Revenons à la peinture et au design ou à l'interface utilisateur. Nous avons donc besoin d'une fenêtre qui soit le contenant principal de nos outils. Dessinons rapidement ceci. Ce sera une fenêtre. Maintenant, pour ce dont nous avons besoin. Nous n'en avons pas vraiment besoin de trop pour cet outil. Nous aurons besoin d'un bouton, mais c'est bien trop simple. Ajoutons donc un peu plus qu' un bouton n'aura ce bouton ici qui aura un petit titre. C'est ce qu'on appelle une étiquette qui dit « suppose un transfert », quelque chose comme ça. Doit-il être parfait ? C'est juste une maquette du fil. Essayons donc de reproduire cela dans le code. Comme je l'ai mentionné, le point de départ c'est vous, avez-vous besoin d'une fenêtre ? Il existe donc une commande provenant de la même bibliothèque. Permettez-moi de l'importer comme d'habitude. Mes entrées dans le S, il y a une commande de fenêtre que nous pouvons utiliser pour créer une fenêtre, puis vous devez afficher une fenêtre. Donc, avant de poursuivre, jetons un coup d'œil à la documentation. Cette disposition de fenêtre pour cette fenêtre fonctionne, désolé. OK, il s'agit donc d'une fonction de fenêtre. Passons aux exemples et voyons si nous pouvons en tirer quelque chose. OK, ici, crée une nouvelle fenêtre. Ça a l'air passionnant. Quelques boutons. Copions ce code et voyons si nous pouvons commencer à partir d'ici. Et nous collons le code ici. Allons-y et exécutons-le. Très bien, on y va. Nous avons une fenêtre, quelques boutons. Nous avons un titre à leur sujet qui ne fait rien et un bouton qui ferme l'interface utilisateur. OK, voyons ce qui se passe ici. Ignorons les arguments pour le moment. Nous y reviendrons dans une seconde. Tout d'abord, nous créons une fenêtre et nous stockons cette fenêtre dans cette variable de fenêtre. Voyons donc quelle est cette variable de fenêtre, il va simplement exécuter la commande window et imprimer la variable. D'accord ? C'est donc un bout de ficelle. En effet, tout comme les objets sont des notes dans Maya, par exemple, si vous travaillez avec un contrôleur, si je sélectionne ce contrôleur, nous interagissons avec le contrôleur par son nom. Ce nom représente n'importe quel objet qui se trouve à l'intérieur de Maya. Il en va de même pour nous. Vous avez un nom et vous interagissez avec ces deux yeux par leur nom. Dans ce cas, sans lui donner de nom, nom explicite, l'homme nous a donné sa créatinine. Ensuite, nous commençons ce nom dans la variable de fenêtre, qui ne sera en réalité qu'une chaîne. Et à la fin de ce code, nous montrons cette fenêtre en utilisant son nom. Nous pouvons, si vous le souhaitez, lui donner un nom, par exemple mon interface utilisateur. Et si je l'exécute et que je l'imprime, le nom que j'ai donné s'affichera. Mais pour l'instant, ne nous en inquiétons pas. Ce n'est pas nécessaire pour cet exemple. OK, allons-y et voyons ce qui se passe d'autre ici. Ensuite, nous allons créer une mise en page. La mise en page est très importante. Les mises en page sont essentiellement les conteneurs qui gèrent l'interface utilisateur. Et laissez-moi essayer d' expliquer ce concept. Voici des indépendants. Il existe donc deux principaux types de mises en page. Il existe des dispositions en colonnes et une disposition en lignes. Il existe d'autres types, mais ce sont les principaux que vous allez utiliser. Une disposition en colonnes se déroulera vers le bas sous la forme d'une colonne de haut en bas. Donc, si vous ajoutez un widget avec Jerry, quelque chose comme un bouton, comme un texte TextField. Donc, si vous ajoutez une disposition en colonnes, il y aura un flux vers le bas. Si vous ajoutez des widgets à une disposition en lignes , ils circuleront horizontalement de gauche à droite. Ce concept est donc essentiellement la façon dont les interfaces utilisateur sont gérées dans Maya, mais aussi la façon dont elles fonctionnent dans d'autres frameworks d'interface utilisateur tels que q, D. Par exemple, elles seront appelées entités horizontales et verticales, vos yeux, mais c'est un concept similaire à celui des mises en page en colonnes et en lignes. Et à quel point il est important de savoir que vous pouvez intégrer la mise en page à l'intérieur de toutes leurs autres mises en page. C'est ainsi que vous pouvez créer des interfaces utilisateur plus complexes. Imaginez donc que vous ayez une disposition en grandes colonnes, par exemple une disposition en colonnes. Il circule à nouveau de haut en bas et vous y ajoutez des boutons. Et puis tout à coup, laissez-moi changer de couleur. Vous y ajoutez une disposition en lignes. Ensuite, vous ajoutez des boutons à cette disposition en lignes. Donc, encore une fois, cela circulera de gauche à droite. Les boutons arriveront par là. Ensuite, vous ajoutez une autre disposition de ligne. Et maintenant, c'est là que ça se complique. Et à l'intérieur de cette disposition en lignes, vous ajoutez des mises en page en colonnes. Vous ajoutez trois mises en page de colonnes qui s' étendent de gauche à droite. Mais lorsque vous ajoutez des boutons ou des widgets à l'intérieur de ces mises en page de colonnes. Ces widgets circuleront à nouveau de haut en bas. Voici comment créer ce flux sur des interfaces utilisateur plus complexes à l'intérieur de Maya. Gardez donc ce concept à l'esprit lorsque nous travaillons avec des mises en page. Revenons à Maya. Nous ajoutons donc une disposition en colonnes. Maintenant, à l'intérieur de cette disposition en colonnes, nous avons deux boutons. Ensuite, nous définissons le parent. Gardons ça pour le moment. J'y reviendrai dans une seconde. Ensuite, nous montrons la fenêtre. Alors, que se passe-t-il si nous exécutons tout sans afficher la fenêtre ? Votre interface utilisateur sera créée. Mais cela n'a pas été montré. Vous pouvez l'afficher ultérieurement, mais dans ce cas, vous devez exécuter la fenêtre d'affichage pour l'afficher. Comme vous pouvez le constater, comme je l'ai mentionné, étant donné que nous sommes dans une disposition en colonnes, les boutons circulent de haut en bas. Donc, si j'ajoute quelques boutons supplémentaires, ils remonteront vers le bas. Maintenant, et si je devais insérer une disposition en lignes ici, cmd S point layout. Ajoutons-le. Disposition pour trop d'enfants. D'accord, je pense que nous devons définir le nombre d'éléments pour la disposition des lignes. Jetons un coup d'œil à cela dans la documentation. Déploiement. Voilà. OK, voyons voir. Les exemples sont généralement une bonne indication de ce qu'il faut faire. Disposition des lignes, nombre de colonnes. OK, on y va. Je pense que le nombre de colonnes est ce que nous recherchons. Nous ajoutons donc, ajoutons simplement deux boutons. Juste pour prouver. Pour montrer cet exemple, supposons que le nombre de colonnes est égal à. Montre-le. OK, voilà. Nous avons donc la première disposition, disposition en colonnes de haut en bas, puis une disposition en lignes allant de gauche à droite. Ajoutons maintenant une autre disposition de colonne juste après, puis deux autres boutons. Permettez-moi de laisser un peu d'espace pour qu'il soit un peu plus facile de voir et d' ajouter des commentaires. Ce sera donc une ligne, ce sera une colonne. Et la première couche ici, ça va, c'est aussi une couche de colonnes. OK, maximisons cela. Mais voyez ce qui se passe ici. Disposition pour trop d'enfants. C'est parce que nous ajoutons la disposition en colonnes à cette disposition en lignes. Cette disposition en colonnes est donc un autre enfant de cette disposition en lignes. Donc, si nous disons que nous voulons trois colonnes dans cette disposition en rangées, elle devrait accueillir ces enfants supplémentaires. Enfant supplémentaire. Voilà. C'est donc ce qui se passe ici. Permettez-moi de faire une capture d'écran rapide pour pouvoir le faire, dessiner dessus. Ce qui se passe ici, c'est que nous avons d'abord une disposition en colonnes, allant de haut en bas, une disposition en colonnes. Et puis nous avons la disposition des lignes, qui est celle-ci ici, qui va de gauche à droite. Mais maintenant, à l'intérieur de cette disposition en lignes pouvez insérer une autre disposition en colonnes, qui circule à nouveau de haut en bas. Cela nous ramène à l'idée dont j'ai parlé de mises en page à l'intérieur d'autres mises en page. Maintenant, qu'arrive-t-il à cette fonction parent définie ici ? Chaque fois que vous créez une mise en page, mise en page sans mise en page sera le parent actuel. Ainsi, tout ce que vous ajouterez par la suite, juste après cette mise en page sera placé dans dernière couche que vous avez créée. Donc, cette disposition en lignes a en fait été ajoutée à cette disposition en colonnes. Et cette disposition en colonnes est ajoutée à ce rouleau. Oui, donc la partie actuelle est cette disposition en colonnes. Alors imaginons, laissez-moi recommencer. Disons que nous voulons cette disposition en colonnes. Ces deux boutons doivent donc continuer à circuler vers le bas de cette façon pour sauter par-dessus la disposition des lignes. Pour ce faire, utilisez cette fonction définie. Nous créons donc d'abord notre disposition en colonnes, nous ajoutons deux boutons, puis nous créons une disposition en lignes. Le parent actuel est en cours de déploiement. Maintenant, avant d'ajouter la disposition de la colonne suivante, nous voulons modifier le parent actuel pour qu'il y figure déjà. La mise en page de la première colonne, dans laquelle nous voulons en ajouter une nouvelle. C'est donc ce que cela fait. Si je dis set parent dot-point, c'est la syntaxe très spécifique de Maya. Pour revenir à la partie précédente. Vous pouvez donc dire ignorer le parent actuel et passer par-dessus le dernier modèle et faire en sorte que le parent actuel soit le parent précédent. Nous allons donc indiquer le parent actuel est la disposition en colonnes. Maintenant, cette nouvelle disposition de colonne doit être ajoutée à la disposition d'origine, d'origine ou de première colonne. Voyons à quoi cela ressemble. Voilà. Permettez-moi donc de prendre une autre capture d'écran. Parfait. Donc, encore une fois, juste pour que cela soit aussi clair que possible. Nous avons une disposition en colonnes. Ashley. J'exagère. Désolé, je n'exagère pas. Je n'ai pas tout à fait raison. Comme si tout cela était une disposition en colonnes. Ensuite, à l'intérieur, nous ajoutons ces boutons. Et puis à l'intérieur de cette disposition en colonnes, nous avons ajouté cette disposition en lignes. Ensuite, nous, le parent actuel lorsque nous créons cette disposition de ligne, est cette disposition, mais la disposition des lignes est le parent actuel. Mais n'oubliez pas qu'en utilisant set parent ici, nous changeons le parent actuel pour qu'il redevienne la mise en page principale. C'est alors que nous créons une autre disposition en colonnes. Et c'est à ce moment que nous ajoutons les nouveaux boutons. J'espère donc que cela a du sens. Cela peut être un peu confus. Mais, encore une fois, une fois que vous aurez compris l'idée des mises en page, la façon dont vous créez des interfaces utilisateur sera beaucoup plus efficace. Revenons maintenant en arrière et voyons à quoi servent ces arguments. Donc, dans la fenêtre, nous avons un titre, c'est le nom du titre de la fenêtre. Appelons ça. Changeons cela en titre de la fenêtre, qui est simplement une chaîne. Ensuite, nous avons le nom de l'icône. Voyez ce que c'est dans la documentation. Oh, intéressant. Cela n'apparaît pas vraiment. C'est très dommage, pour être honnête, je n'ai jamais utilisé cet argument auparavant, donc je ne suis pas vraiment sûre de savoir à quoi il sert. Cela ne semble pas nous donner d' icônes dans la fenêtre. Je vais donc simplement le supprimer. Maintenant, avec la hauteur, c'est, comme je l'ai déjà mentionné, un tuple. s'agit simplement d'une liste qui ne peut pas être modifiée et qui comporte deux éléments. Ce sera la largeur, ce sera la hauteur. C'est-à-dire que ce sont des pixels qui indiquent que la fenêtre aura une longueur de 200 pixels et une hauteur de 55 pixels. C'est pourquoi, lorsque nous l'avons créé pour la première fois, il n'affichait pas tous les boutons car nous que si je supprime cet argument, il n'y ait aucune contrainte de taille et il affichera simplement tous ces boutons. Excellent. Donc, toutes les colonnes sont égales à vrai. Que se passe-t-il si c'est faux ? Mettons-le simplement sur false et voyons ce qu'il fait. Bien, nos boutons ne s'agrandissent pas avec la fenêtre. Ils ne sont pas de taille fixe. C'est donc ce que fait je viens de doubler la colonne. Cela permet de régler les boutons ou les widgets qu'il contient. À l'exception de la disposition des lignes. Parce que la disposition des lignes doit gérer ses propres widgets extensibles. Alors allons-y, continuons. Où est ma fenêtre ici ? Fermez toutes ces copies. Bon, maintenant nous avons les boutons. étiquette est simplement le texte qui va apparaître dans le bouton. Et la commande est une partie du code qui sera exécutée lorsque vous appuierez sur le bouton. Maintenant, une commande peut être une chaîne et, dans l'exemple, elle utilise des parenthèses, mais ce n'est pas nécessaire. Il peut s'agir d'une chaîne, dans ce cas d'une chaîne qui supprime la fenêtre. Il s'agit d'une commande permettant de supprimer une interface utilisateur. Et nous transmettons le nom de la fenêtre que nous avons créée. Nous sommes donc en train de diluer cette fenêtre. Disons, créons ce bouton ici, faisons quelque chose. Disons, faisons quelque chose. Et je vais y ajouter une commande. La commande sera simplement une instruction d'impression, mais elle sera désormais au format d'une chaîne. C'est donc une sorte de code enveloppé dans une chaîne. Nous allons donc dire que l' impression fait quelque chose, par exemple, faisons-le. Maintenant. Notez que j'utilise les deux types de guillemets, les guillemets simples et les guillemets doubles. C'est parce que si je devais utiliser des guillemets simples ici, Maya penserait que c' est la fin de ma chaîne. Donc, ce que je fais, n' oubliez pas que j'ai mentionné que pour créer une chaîne, vous devez faire correspondre le début et la fin de la chaîne, le type qui doit être le même. Donc, en gros, je dis, d'accord, à l'intérieur de cette chaîne se trouve cette chaîne extérieure. Il y a une ficelle à l'intérieur, c'est ce que je suis en train de transmettre dans cette déclaration imprimée selon laquelle j'utilise un sacrement. Alors exécutons-le. Laisse-moi cliquer sur le bouton qui dit de faire quelque chose. Et tu dois maintenant faire du sprint, faire quelque chose. Passons maintenant à cette commande. Vous pouvez également transmettre une fonction. Alors laissez-moi vous montrer ce que c'est, à quoi cela ressemble. Si j'appelle ma fonction, fais quelque chose, par exemple que ce ne soit pas le cas, appelons-la simplement test, test de fonction. Et je vais faire cette impression, simplement imprimer, en faisant quelque chose depuis l'intérieur de la fonction. OK, donc au lieu de transmettre une chaîne, je peux en fait transmettre une fonction. Mais je peux transmettre la fonction sans l'appeler. Remarquez que je n' utilise pas les parenthèses. Si j'utilise une parenthèse, j'appelle la fonction et je donne l'argument de commande, le résultat, la sortie, le retour de cette fonction, qui dans ce cas est un non, car je ne renvoie rien. Ce que je voulais faire, c'est donner cette commande des arguments par fonction réelle sans les deux-points. Cela signifie que lorsque j'appuie sur le bouton, Maya prend ma fonction et l'appelle elle-même. Voyons donc ce qui se passe dans ce cas. Avant de faire ça, laisse-moi nettoyer ça. Je ne pense pas que nous ayons besoin de ces boutons supplémentaires car nous avons déjà parcouru l'exemple. Faisons en sorte que ce soit simple. Fais quelque chose. D'accord, il fait quelque chose mais n' est pas exactement ce à quoi nous nous attendions. Voyons ce qui se passe ici. Cela signifie que la fonction de test ne prend aucun argument, mais que l'un d'entre eux a été donné. Laisse-moi fermer la fenêtre. C'est donc vrai. Je n'accepte aucun argument. Mais d'une manière ou d'une autre, lorsque j' appuie sur le bouton, mes yeux passent en argument à ma fonction de test, une seule. Alors inspectons-le et voyons ce que c'est. Je peux simplement saisir cet argument en transmettant un argument à ma fonction. Appelons-le x. Imprimons simplement, imprimons x. Voyons ce que fait le mien. Est-ce que c'est faux ? Il semble donc que c'est mon oui, en transmettant un booléen à la fonction. Pour une raison ou une autre. Je ne sais pas vraiment pourquoi. Maintenant, le truc, c'est que nous n'en avons pas vraiment besoin. Ça ne nous intéresse pas vraiment. Il y a donc deux façons de gérer cette situation. L'une d'entre elles, comme je l'ai fait ici, est d'accepter un argument parce que vous savez, vous vous attendrez à cela de la part de Maya et ne l'ignorez pas. Ne faites simplement rien à ce sujet. Vous pouvez l'accepter, mais ne pas l'utiliser dans la fonction. Comme tu le vois. Voilà, mon bouton fonctionnera. Une autre façon de procéder consiste à utiliser une syntaxe spéciale qui se présente comme suit. Vous créez un astérisque ou une étoile, une étoile, une étoile, un nouveau type, des arguments. Maintenant, vous pouvez utiliser n'importe quel mot, mais par convention, vous verrez des gens se disputer. Ce que cela fait. C'est un peu comme un fourre-tout pour tous les arguments que vous jetez dans la fonction. Vous y avez accès si vous le souhaitez. La plupart du temps, les gens l'utilisent pour ignorer les arguments auxquels ils peuvent s'attendre mais qui ne sont pas nécessaires. Alors laissez-moi vous montrer comment cette étoile indique que les syntaxes fonctionnent. Donc, si je dis que si j'appelle ma fonction test et que je passe 1234 arguments, cela fonctionnera. Donc, cette syntaxe capture essentiellement tout ce que je lui lance. Et je ne m'en sers pas vraiment. Mais maintenant, voyons ce qui se passe réellement. Imprimons ces arguments. OK, très bien. C'est donc ce qui se passe. Donc, cette syntaxe en arc d'étoile permet essentiellement de saisir tous les arguments que je lui donne. Je les mets dans un tuple. Encore une fois, n'oubliez pas qu'un tuple est comme une liste chez cyclist, mais que vous ne pouvez pas le modifier. Cela signifie que je peux réellement obtenir, par exemple le premier argument qui a été passé, qui a été transmis, dans ce cas, sera le numéro un. Je peux simplement l'imprimer . Voilà. Donc, dans des cas comme celui-ci où l'interface utilisateur, pour une raison ou une autre, Maya vous donne un argument alors que vous n'en avez pas besoin. Je recommande d'utiliser cet index. Vous pouvez utiliser cette syntaxe avec d'autres arguments, exemple si vous vous attendez à un véritable argument, bien sûr, attendez un bébé, puis tout ce qui pourrait être lancé à votre fonction. Ceci est également, également valable. D'accord ? Cela étant dit, revenons en arrière. Revenons à la simple utilisation ce type d'arguments en étoile fourre-tout et à les transmettre à notre commande pour le bouton. C'est faire quelque chose. D'accord, parfait, alors utilisons ceci comme point de départ pour notre interface utilisateur actuelle. 28. Créer l'interface utilisateur: D'accord, nous n'avons plus besoin de cette fonction de test. Nous n'avons pas besoin de ce commentaire. Je pense que c'est un bon point de départ. Changeons le titre de notre fenêtre. Disons que c'est un outil de transfert. Ce sera le nom de notre fenêtre. Et faisons en sorte que les colonnes que j'ai juste soient toutes « oui », car nous voulons que les boutons puissent s' étendre avec les colonnes. Nous n'avons pas besoin de deux boutons, nous n'en avons besoin que d'un. Et disons que l'étiquette doit être transférée. OK, et commande, allons-y, laissons la commande de côté pour le moment. Nous y ajouterons une fonction dans une seconde. En fait. Disons que ce transfert est sélectionné. Voilà, un seul bouton. Nous ne pouvons pas voir le nom, le titre de la fenêtre. Ce serait donc agréable à voir. Nous pouvons utiliser l'argument largeur, hauteur que nous avions auparavant. Ou je sais aussi que la fenêtre comporte arguments de poids et de hauteur individuels. Nous pouvons donc simplement ajouter la largeur. Nous pouvons dire qu' il faut le faire à 300 pixels, par exemple peut-être un peu plus grand pour 100. C'était trop, disons 350. OK, ça a l'air génial. Maintenant, nous avons notre bouton. Le bouton est un peu fin. Agrandissons donc également le bouton un peu. Nous pouvons avoir un argument de hauteur dans le bouton. Faisons en sorte qu'il mesure 20 pixels de haut. Ce n'est pas suffisant. Doublons-le 40. OK, ça me semble un peu mieux. Maintenant, j'ai également dit que nous voulions ajouter une petite étiquette sur le dessus, comme un morceau de texte. Il y a un composant d'interface utilisateur texte là-dedans, dans cette bibliothèque, qui est simplement appelé texte. Disons ceci. Passons aux exemples. Vous y voilà. C'est tout ce dont nous avons apparemment besoin à ce sujet. Nous pouvons donc ajouter une étiquette et aligner le texte. Allons, prenons cet exemple. Copions à partir de cet exemple. Je vais ajouter ce texte. Et l'étiquette sera, disons, en majuscules après le transfert. Alignons-le à gauche et à droite, que se passera-t-il ? Ce n'est pas génial. Gardons-le au centre. Et il est également très petit. Le texte est très petit. Voyons si nous pouvons faire quelque chose à ce sujet. Peut-être pouvons-nous également en modifier la hauteur. Disons 60 pixels. Disons 50. Et réduisons légèrement le bouton. Faisons le bouton 30. Le texte est un peu correct. Je suis désolée. Je vais reprendre le relais à ce stade. Je joue juste avec les chiffres. Ce n'est pas aussi important, mais n'hésitez pas à jouer avec les tailles que vous souhaitez. Hum, je pense que c'est plutôt content. Nous avons donc nos textes, nous avons notre bouton. Et avant de transférer cela dans PyCharm, je voudrais vous montrer quelque chose qui vous sera très utile. Et ce sont des infobulles. Maintenant, une info-bulle, également connue sous le nom de clip d'outil, mais dont le nom officiel est incliné , représente les textes qui apparaissent lorsque vous passez la souris sur un élément de l'interface utilisateur. Comme vous pouvez le voir lorsque je passe la souris sur ces boutons, vous obtenez un peu d'aide. Et aussi, ici, dans cette barre d'état, vous pouvez obtenir un peu d'aide qui vous indique essentiellement à quoi va servir le bouton. Nous pouvons donc l'ajouter à tous nos éléments d'interface utilisateur. C'est ce qu'on appelle une annotation. L'argument correspondant s' appelle donc annotation, mais son nom réel est info-bulle ou clip d'outil est également appelé dans Maya. Donc, si vous ne le voyez pas comme moi, exemple lorsque vous passez la souris sur quelque chose, si vous ne le voyez pas, vous devez accéder à Windows, aux paramètres, aux préférences, aux préférences. Maintenant, sous les éléments de l'interface utilisateur, désolé pour leur santé, il y a de l'aide sur l'interface. Sur leur aide contextuelle. Vous verrez deux clips s' afficher. Vous voulez que cette case soit cochée. Si vous ne l'avez pas coché, vous ne le verrez pas. OK, alors voilà. Nous pouvons donc les ajouter. Encore une fois avec l'annotation. Argument. Donc, l'annotation est égale, je vais appuyer sur Entrée ici. C'est-à-dire que c'est valable d'ailleurs. Si j'appuie sur Entrée, c'est valide et Python ne se plaindra pas. Je vais parler d'annotation, de transfert entre personnages. Ce sera l' annotation sur le texte. En fait, je vais revenir en arrière, revenir à cette seule ligne. Et puis l'annotation dans le bouton. Nous serons une annotation égale à sélectionner deux caractères ou plus. Voici donc l'aide. Donc, dans ce cas, puisque c'est le genre d' instructions pour le total, je vais écrire quelque chose d'un peu plus détaillé. Transférez les posts de la brique sélectionnée dans la forêt vers le reste de la sélection. D'accord, ce n'est peut-être pas un peu long, mais ça va. Maintenant, lorsque nous survolons ces boutons, vous verrez que le péage vous aide un peu. Et vous le voyez également ici dans la barre d'état. Parfait, donc notre bouton ne fait rien. Déplaçons cela dans une fonction de PyCharm dans notre module afin qu'elle se trouve dans le fichier. Ensuite, nous pouvons connecter le bouton. Très bien, laissez-moi copier ceci et créer une fonction ici. En haut du fichier. Je vais l'appeler Show UI. D'ailleurs, c'est généralement une bonne idée de garder votre backend, comme je l'ai déjà mentionné, qui est votre fonctionnalité séparée de votre front-end, qui est votre interface utilisateur. Normalement, j'aurais cette fonction dans un module séparé à côté de ce module de post-transfert. Dans ce cas, comme il s'agit d'une interface utilisateur très simple, je vais la laisser ici et c'est juste pour ce premier projet. Mais dans la prochaine, vous allez voir la séparation entre la fonctionnalité et l'interface utilisateur, ce qui est généralement une bonne pratique à suivre. Ainsi, vous pouvez appeler directement vos fonctions et votre interface utilisateur peut être complètement séparée, totalement indépendante de vos fonctionnalités réelles. Mais pour l'instant, comme je l'ai dit, gardons-le ici. Je vais simplement coller mon code d'interface utilisateur ici. Et testons-le très rapidement. Disons importer, poser, transférer. D'accord, et si vous n'avez pas redémarré votre Maya, encore une fois, vous souhaitez recharger le module. Laisse-moi recharger ça. OK, voilà. Et je peux dire que les posts soulignent le transfert, points indiquent l'interface utilisateur des autres scores. Et appelons cette fonction. Vous y voilà. D'accord. Maintenant, la dernière étape consiste à connecter le bouton. Et le bouton ici prendra cette commande. Je vais appuyer sur Entrée, comme je l'ai déjà dit, si vous avez quelque chose plusieurs lignes, peu importe. Python ne se plaindra pas. Vous pouvez placer chaque argument sur une ligne différente si vous le souhaitez. Faisons donc cela pour les besoins de l'exemple. commande est égale à ce sera la fonction que j'ai sélectionnée pour le transfert. Vous y voilà. Maintenant, testons cela. Transfert d'erreur sélectionné. D'accord, d'accord. Bien sûr, nous venons d'en parler. Nous avons besoin, je vais utiliser ces arguments stellaires. C'est une sorte de syntaxe fourre-tout pour saisir l'argument. Et pendant que j'y suis, je vais ajouter une docstring que j'ai oublié d'écrire. Transférer la pose de la forêt sélectionnée vers le reste de la sélection. Star Args est un jeu spécial, nous n'avons pas vraiment besoin d'ajouter une description pour cela, mais Ashley, nous le faisons parce que cela a un but. Appelons ça un piège. Les quatre arguments que j'ai avancés ne nous rapportent rien. Nous ne laissons donc pas passer cela. Oui. D'accord. Et maintenant, plus pauvre, je peux simplement ajouter une simple docstring. Afficher l'interface utilisateur de l' outil basé sur l'outil, mxnet, moins d'explications, mais ajoutons-la quand même. OK, allons-y. Permettez-moi de fermer cet outil. Nous y voilà. Maintenant, ça marche. Veuillez sélectionner plus d'un appareil. Si rien n'est sélectionné, cela nous indique de jouer à sélectionner quelque chose. Enfin, permettez-moi de créer un article plus agréable, afin de tester correctement notre outil. D'accord, nous avons une meilleure pose, pas un chef-d'œuvre neurologique incroyable. Je suis sûr que tu peux faire mieux que moi, mais c'est mieux que ce que nous avons connu auparavant. Soumettons donc l'outil à un test plus utile que plus agréable. Nous allons donc sélectionner tous ces contrôleurs. Je ne veux pas sélectionner le rôle du sous-sol, car cela ne fera que déplacer les personnages vers cette position. Et voilà, sélectionnez toutes mes commandes, cible, une, cible aussi. Passons au transfert. Le processus passe actuellement par de nombreux contrôleurs et est un peu lent. Mais voilà. Nos poses, laissez-moi modifier les courbes. Ils ont exactement la même apparence. Voilà, vous l'avez volé pour votre première année, je le partage avec vos amis, utilisez-le pour votre travail. Il s'agit d'un véritable outil de travail dont vous pouvez bénéficier. 29. Recap de projet: Maintenant, pour clore le projet, j'aimerais faire un petit récapitulatif de ce que nous avons appris. Permettez-moi de l'écrire ici. Nous allons donc apprendre beaucoup de choses. Découvrira les listes et les tuples. Nous allons en apprendre davantage sur les dictionnaires, sur les boucles, manière d'itérer entre les éléments d'une liste. Nous allons en apprendre davantage sur la gestion des chaînes de caractères. Nous en apprendrons davantage sur les instructions if en savoir plus sur les fonctions. Nous avons appris à évaluer la manière de manipuler et de gérer les éléments de l'interface utilisateur à l'aide de mises en page. Nous allons apprendre à interagir avec les objets et les notes de la scène. Comment définir et obtenir des attributs, comment interagir avec les plates-formes et vraiment comment séparer les choses afin d'obtenir les informations et les données dont nous avons besoin. C'est l'un des principaux points à retenir de ce projet. Cela utilise maintenant ces deux types de données et ce sont les principaux types de données pour le stockage des données. Vous savez désormais comment interroger, stocker et manipuler des données pour n'importe quel usage . Rappelez-vous maintenant que nous utilisons la liste pour interroger et stocker des sélections, pour créer des listes de contrôles, des listes d'espaces de noms, d' attributs, etc. Pouvons-nous utiliser des dictionnaires pour créer un mappage entre les attributs et leurs valeurs ? Ce sont donc des concepts très simples, mais ils sont extrêmement puissants et ils se traduiront pour vous par des cas d'utilisation plus complexes. Félicitations pour avoir terminé le projet, et vous êtes maintenant prêt pour le prochain. 30. Plongée profonde: Nous allons en apprendre davantage sur les cordes. En termes simples, les chaînes sont une séquence de caractères. Vous pouvez les considérer comme du texte. Vous pouvez donc créer des chaînes avec des guillemets. Il peut s'agir de guillemets simples, guillemets doubles ou de guillemets triples. Dans ce cas, il y a trois guillemets triples, soit trois guillemets simples, soit trois guillemets doubles. Donc, par exemple il s' agit d'une chaîne, et trois guillemets simples sont également une chaîne. Mais les guillemets triples sont généralement réservés à des blocs de texte ou à des docstrings. Ils sont généralement réservés uniquement aux docstrings. Mais vous pouvez créer, créer des blocs de textes. Ainsi, lorsque vous avez des guillemets simples et doubles, la chaîne un, par exemple chaîne deux, vous ne pouvez créer cette chaîne que sous la forme d'une seule ligne. Mais lorsque vous avez une chaîne de document, tant qu'ils ouvrent et ferment cette chaîne, vous pouvez y écrire. Et là, les nouvelles lignes seront préservées pour vous. C'est donc un peu comme un bloc de texte. Et il en sera de même avec les cordes simples et triples. Donc, je vois en quelque sorte que tant que les guillemets de début et de fin sont du même type temporel, la chaîne sera valide. Et avec la même logique. Si vous voulez avoir des guillemets à l'intérieur de votre chaîne. Alors laisse-moi, laisse-moi juste imprimer ceci. D'abord. Imprimons cette chaîne. Donc, comme vous le voyez, il s'imprime sans les guillemets. Disons que je veux l'imprimer avec des bottes. Je peux y mettre des guillemets doubles. Voilà. Si je voulais utiliser des guillemets simples, il y a deux façons de le faire. Premièrement, je peux inverser les guillemets. Ou deux, je peux ignorer les guillemets. Laissez-moi vous montrer ce que cela signifie, ce que cela signifie. Que se passe-t-il si je mets un devis ici ? Eh bien, Python va penser que vous êtes dans la nouvelle chaîne ici. Cela va, il s'agit essentiellement d'une chaîne vide et cela vous donnera une erreur. Alors, comment puis-je faire en sorte que je puisse avoir des guillemets simples tout en ayant toujours des guillemets simples à l'intérieur ? Vous pouvez échapper à ces guillemets simples en utilisant une barre oblique inverse. Et cela fonctionnera tout de même. Donc, en gros, vous dites à Python ce n'est pas la fin de ma chaîne, et ce n'est pas non plus la fin de ma chaîne. Vous échappez en contournant ces citations. Mais autant que possible, il est plus facile et simpliste de mélanger les types de citations. Cette barre oblique inverse a un autre objectif. Il existe des types spéciaux de personnages appelés personnages d'évasion. Ces barres obliques inverses et notez simplement qu'il ne s'agit pas d'une barre oblique avant, c'est une barre oblique inverse qui définit le personnage d' évasion. Laissez-moi vous montrer ce que je veux dire par là. Le caractère d'évitement le plus courant est la barre oblique inverse n, qui créera une nouvelle ligne pour vous. Alors laisse-moi te montrer ce que je veux dire. Tapons la première ligne, barre oblique inverse sur la ligne pour éviter d'imprimer ceci. Vous voyez donc que nous n'imprimons pas la barre oblique inverse là où nous obtenons une nouvelle ligne. C'est ainsi que si je n' avais pas de barre oblique inverse, j'aurais une seule ligne. C'est donc l'un des personnages d'évasion les plus courants. Une autre est la barre oblique inverse d, qui signifie onglet. Vous êtes en quelque sorte en retrait comme si vous appuyiez sur la touche Tab. Vous pouvez également les mélanger. Nous pouvons avoir une nouvelle ligne, barre oblique inverse n et une tabulation, une barre oblique inverse, une barre oblique inverse t. Et puis vous aurez quelque chose comme ça. Si elle voulait avoir plus d'indentation, vous pouvez bien sûr faire plus de thé et d'autres T. Et si vous vouliez réellement imprimer une barre oblique inverse n ? Supposons que vous souhaitiez faire imprimer ces chaînes exactes. Donc, pour le moment, si je l'exécute , je vais obtenir une nouvelle ligne entre ces deux sous-chaînes. Une sous-chaîne est simplement un morceau de chaîne. Donc, dans ce cas, la ligne deux est une sous-chaîne. première ligne est une sous-chaîne, et le caractère d'échappement n est également une sous-chaîne. Disons donc que nous voulons imprimer exactement cela. Eh bien, vous pouvez réellement vous échapper, échapper à votre personnage et vous le faites en utilisant la même barre oblique inverse. Ce qui va se passer, c'est cette barre oblique inverse. La première barre oblique inverse indiquera à Python de ne pas le lire car le caractère d'échappement est un caractère spécial simplement sous forme de chaîne brute. Donc, si j'ai imprimé, maintenant, vous l'aurez compris. C'est ainsi que vous pouvez y échapper. Il existe désormais un autre moyen de sauter, échapper ou d'ignorer un caractère spécial. Donc, si je l'imprime à nouveau, j'obtiens une nouvelle ligne. Si je tape un R avant cette chaîne, cela me donnera le même résultat. Maintenant, ils sont généralement réservés à ce que l'on appelle les rejets. Il s'agit d'un type d' expression spécial pour la recherche de chaînes de caractères. Mais dans ce cas, ils le sont, cela signifie qu'il s' agit d'une chaîne de lignes. Cela signifie qu'il n'y aura aucune interprétation des caractères spéciaux. Il sera rho, simplement tout ce qui se trouve à l'intérieur de la chaîne sera imprimé tel quel. C'est donc une autre façon d'y échapper. C'est donc particulièrement utile lorsque vous traitez des parties à l'intérieur ou à l'intérieur de Windows, le chemin du fichier peut ressembler à ceci. Par exemple, laissez-moi créer une nouvelle variable. Un chemin de fichier peut ressembler deux points C, à un tiret vers un fichier, point dx dy, par exemple There you go. Disons qu'il s'agit d'un dossier ou d'un chemin de fichier. Donc, quelques dossiers ou répertoires, puis notre fichier, si je devais l'imprimer, il imprimait exactement ce que j'ai tapé. Et la raison en est que j'utilise la barre oblique. C'était donc ma faute. Je suis désolée pour ça. Permettez-moi de changer rapidement cette barre oblique inverse. Comme vous pouvez le constater, l'utilisation de la barre oblique avant est totalement sûre, mais la barre oblique inverse sera interprétée différemment. Vous voyez donc que mon, mon a été changé. Passons à ces personnages. Ensuite, après le chemin, nous avons l'onglet qui est t. Ensuite, la barre oblique inverse F tournait vers cet autre caractère. Ce n'est clairement pas ce que nous voulons. Vous pouvez donc simplement échapper à ces personnages, mais vous devez deviner ou savoir lesquels. Nous devons sauter. R, nous n'avons pas besoin d'échapper à P-I. Nous devons y échapper et nous devons échapper à F. C'est donc le résultat que nous voulons. Ou nous pouvons utiliser des chaînes brutes. Il suffit de mettre un RB loin derrière la corde et nous obtenons le même résultat. Les chaînes sont donc utilisées pour de nombreuses choses, pour accéder aux chemins de fichiers, pour créer des variables, pour déclarer des noms ou étiqueter des objets. Mais l'opération la plus courante que vous ferez avec des chaînes, ou l'une des opérations les plus courantes est appelée concaténation, ce qui signifie essentiellement assembler des chaînes. Alors laissez-moi vous montrer à quoi cela pourrait ressembler. Appelons cela une variable appelée S. Nous allons la démarrer sous la forme d'une chaîne vide. Et je vais dire que S plus est égal à bonjour. Et je vais le dire ici : plus est égal à l'espace et S plus est égal au monde. Maintenant, laissez-moi imprimer S. Maintenant, il est écrit Hello World. Alors, que se passe-t-il ici ? Cette notation plus égale, c'est fondamentalement équivalent à dire S perdu, bonjour. C'est ce qui se passe ici, c'est que nous obtenons la valeur précédente de S, qui est une chaîne vide, et nous y ajoutons bonjour. Ensuite, nous stockons cela. Nous annulons essentiellement la variable S. Ensuite, ici, cela équivaudra à répéter la même chose, en reprenant la valeur précédente de S, ce que nous venons de faire. Et encore une fois, la narration, qui prime fondamentalement sur cette même variable. Ainsi, en utilisant le signe plus, vous pouvez assembler des chaînes, mais il existe d'autres moyens d' assembler des chaînes. L'une des méthodes les plus courantes, et je dirais les plus puissantes de concaténation de chaînes consiste utiliser la fonction de format point. Voyons comment cela fonctionne. Créons donc une chaîne. Laisse-moi faire deux bretelles frisées, puis un trait de soulignement, puis des bretelles frisées pour les tumeurs. Ce qui va se passer, c'est ces bretelles bouclées deviendront des espaces réservés ou remplaceront quelque chose. Maintenant, si je devais imprimer S maintenant, nous obtiendrons exactement cela, et c'est ce que nous venons de taper. Mais si je fais plutôt du format point, ce format est une fonction intégrée aux chaînes. Et je transmets deux variables, disons deux chaînes, bonjour et encore une fois. Maintenant, imprimons-le. vous pouvez le voir dans ce format, nous utiliserons les accolades comme espaces réservés pour les remplacer par ce que j'ai mis ici. Et cela peut être quelque chose, quelque chose d'autre qui n' est pas une chaîne. Cela peut être un nombre, par exemple si je tape le nombre 100 , ce format est remplacé. Il est assez intelligent pour savoir qu'il le peut, il peut le faire avec des cordes. Si je devais ajouter en utilisant le signe plus, une chaîne et un nombre 100, j'obtiendrai une erreur car Python ne peut pas concaténer une chaîne et un entier. Mais la fonction de format point est suffisamment intelligente pour le savoir. Il existe une autre façon d'utiliser le format point en utilisant des variables. Nous pouvons spécifier des variables à l'intérieur de ces accolades. Je peux dire que la variable 1 sera élevée. La variable deux sera, disons simplement, un nombre. Disons que c'est engourdi. Donc, si je l'exécute maintenant, nous allons avoir une erreur car elle va se plaindre d'une erreur de clé , car nous ne disons pas à la fonction laquelle de ces deux valeurs appartient à quelle clé. Alors réparons ça. Je peux dire que salut, bonjour sera élevé, donc haut équivaut à bonjour et num sera 100. Voilà. Cela signifie donc que puisque nous utilisons ces arguments de mots clés, cela signifie que même si nous inversons l'ordre, vous vous mettrez au travail. Bonjour, cent. Ce qui est vraiment cool, c'est que vous pouvez réutiliser les mêmes variables que vous, celles que vous avez ici. Supposons donc que vous vouliez dire bonjour plusieurs fois dans cette chaîne. Vous pouvez simplement dire qu' il n'est pas nécessaire que ce soit souligné. Mettons juste un espace. Et je vais utiliser la hauteur. Nous remplaçons donc maintenant quatre emplacements différents. Mais nous n'utilisons que deux variables. Donc, la variable hi, gros, nous l'avons placée à l'intérieur de ces espaces réservés. Si nous n'avions pas ces mots-clés, Python s'en plaindrait. Permettez-moi donc de revenir à la façon dont nous avions cela à l'origine. Dis bonjour. Cent. Python se plaindra car nous n'avons pas fourni suffisamment de remplacements pour ces espaces réservés. Donc, dans ce cas, nous devrions dire bonjour et bonjour, ce qui demande beaucoup de saisie. Vous pouvez donc constater la puissance de l'utilisation des mots clés. Il existe maintenant une autre façon d' utiliser la fonction de format. Et c'est en utilisant, en utilisant des indices. Permettez-moi donc revenir rapidement à deux espaces réservés. Je pourrais donc le refaire et il sera simplement remplacé dans l'ordre. Mais je pourrais aussi utiliser des indices. Et ce que ces chiffres représenteront. Cela représentera l'ordre dans lequel vous placez vos variables ici. Et nous commençons à compter à zéro de la même manière que nous le faisons avec les listes. Vous pouvez voir que c'est le même résultat. Maintenant, si je devais inverser les indices, nous inverserions l'ordre. Et maintenant, nous pouvons faire la même chose qu'avec les mots clés. Je peux dire que je veux te dire bonjour ici. Par endroit qui a mis un indice zéro. Disons encore une fois bonjour. Mettons le chiffre 100. Voilà. Donc, encore une fois, en utilisant simplement deux variables, nous pouvons mélanger et faire correspondre en utilisant les numéros d'index. Maintenant, laissez-moi vous montrer une autre façon de concaténer des chaînes. Et c'est un peu la façon classique de procéder. Je vais écrire des signes de pourcentage en laissant un espace et je vais simplement taper monde. Maintenant, ce sera notre espace réservé. Et pour le remplacer, je vais laisser un espace, mettre un signe de pourcentage, puis je vais taper autre chose. Disons encore une fois bonjour. Vous pouvez maintenant voir que tout ce que je tape ici à droite sera remplacé par ce signe de pourcentage s. Par tapez un nombre qui sera remplacé. Maintenant, je pourrais aussi en faire plusieurs. Nous voyons le sinus S. Mais dans ce cas, je dois fournir une liste ou un tuple. Je vais donc utiliser un tuple. Je peux te dire bonjour. Les planètes Palmer, cette affaire. Et chacun d'entre eux sera remplacé par h, l'un de ces éléments du tuple. Ils vous donnent donc tous le même résultat. Je préfère utiliser format point, car il vous permet de faire de nombreuses combinaisons différentes et vous donne un peu plus de flexibilité. Mais vous pouvez choisir ce qui vous convient en fonction du code que vous écrivez. Maintenant, sous le capot, une chaîne est un peu plus qu'une simple séquence de caractères. C'est un objet itérable. Cela signifie que vous pouvez le parcourir de la même manière que nous le faisons avec les listes. Alors laisse-moi te montrer ce que je veux dire. Permettez-moi de créer une autre chaîne. Appelons-la Barcelone, par exemple maintenant, de la même manière que nous l'avons fait avec les listes, je peux. Fournissez un index en utilisant ces crochets. Et je vais obtenir, si je fournis l'indice zéro parce que nous commençons à compter à zéro, j'obtiens la lettre b. Si je donne l'indice numéro deux, j'obtiendrai le petit r parce que c'est le deuxième indice. Si je demandais mon index moins un, qui est le dernier index la liste ou, dans ce cas, la chaîne. Ensuite, je vais obtenir la lettre a. Maintenant, selon la même logique, nous pouvons itérer sur la chaîne en utilisant une boucle for. Nous pouvons donc dire pour ins, imprimer i, et chacune des lettres de cette chaîne sera imprimée. Donc, sous le capot, une chaîne ressemble plus à un tableau ou à une liste. se trouve que chaque objet qu' il contient est un personnage. Et c'est également spécial en ce sens que nous pouvons effectuer des types d'opérations spécifiques, comme nous l'avons vu avec la concaténation et d'autres. Opérations spécifiques intégrées aux chaînes de caractères. Permettez-moi donc de vous montrer certaines de ces opérations. Une chose que vous pouvez faire avec les chaînes est de vérifier ou de sous-chaînes. La sous-chaîne est essentiellement une partie d'une chaîne ou quelque chose que vous pouvez vous attendre à trouver à l'intérieur d'une chaîne. Permettez-moi de renommer cette chaîne variable. Permettez-moi de créer une nouvelle variable appelée sous-chaîne. Appelons, créons cette sous-chaîne, la sous-chaîne, elle est prêtée ou affaissée dans ce cas. Ensuite, je peux utiliser le mot clé in pour faire une comparaison. Je peux dire sous-chaîne dans une chaîne. Cette opération me donnera donc un booléen. Nous dirons soit vrai si la sous-chaîne se trouve dans cette chaîne, soit faux si ce n'est pas le cas. Permettez-moi donc de stocker ce résultat dans une variable appelée résultat et d'imprimer ce résultat. Voilà. C'est vrai parce que la sous-chaîne se trouve à l'intérieur de Barcelone. Maintenant, Barcelone n'a pas de H. Alors laisse-moi m'en occuper. n'y a pas de h à Barcelone, donc je prends des coups de gueule. Une autre façon de vérifier la présence de sous-chaînes consiste à utiliser une fonction intégrée dans les chaînes appelée starts with. Alors laissez-moi m'appeler Stirling Bar. Et permettez-moi de remplacer cette opération par une chaîne commençant par une sous-chaîne. Cela vérifiera donc si la chaîne Barcelona commence par bar. Encore une fois, nous obtenons un booléen à partir de cela. C'est vrai. Si je le remplace par high, par exemple il indiquera faux car il ne commence pas par ça. Notez maintenant que cela distingue également les majuscules des minuscules. Donc, si je fais une barre en minuscules, vous direz faux parce que ça ne s'installe pas avec ça. Et il y a l'extrémité opposée de cette équation qui se termine par. Maintenant, laisse-moi exécuter ça. C'est faux parce que Barcelone ne se termine pas par bar, mais Barcelone se termine par NA, par exemple, donc ce sera vrai. Il s'agit donc de deux fonctions intégrées pour les chaînes de caractères. Vous pouvez également changer le boîtier d'une ficelle. Il existe deux autres points intégrés. Il existe de nombreuses fonctions intégrées pour les chaînes de caractères, mais je ne vous montre que les plus courantes et les plus utiles. Un autre est Opera. Cela transformera votre chaîne en majuscule. Dessinons donc cela dans la même variable. Opera sera en majuscules et minuscules feront l'inverse, c' est-à-dire en minuscules. Donc, dans ce cas, il n'y a qu'une seule lettre majuscule. Cela va donc le transformer en minuscules, en minuscules. Et selon la même convention, il existe une fonction appelée title. Cela créera votre chaîne sous la forme d'un titre. C'est très utile pour des choses comme FirstName, par exemple si nous voulions dire John Smith, titrer chaque majuscule ou chaque première lettre de la chaîne. Il est suffisamment intelligent pour connaître les espaces. Par exemple, aura une majuscule. Comme je l'ai mentionné, il existe de nombreuses fonctions intégrées dans les chaînes, mais laissez-moi vous en montrer quelques autres. Avant de terminer. Vous pouvez remplacer des parties d'une chaîne. Vous pouvez dire string dot replace. Cette fonction prendra en compte deux arguments. La chose que vous voulez remplacer, disons que nous voulons remplacer ce nom de famille. Et la sous-chaîne que vous souhaitez remplacer de cette largeur. Disons que nous allons le remplacer par Williams, par exemple le remplacer. Ceci est très utile pour supprimer des éléments tels que des espaces. Par exemple, si vous souhaitez remplacer un espace, pouvez saisir un espace. Éliminez simplement l'espace. Vous pouvez le remplacer par une chaîne vide, par exemple et j' éliminerai simplement l'espace. La dernière chose que je veux vous montrer c'est comment séparer les chaînes. Imaginons donc que nous voulions séparer le nom d'ailleurs, cet espace ici. Utilisons cette fonction de division. Et comme premier argument, il prendra le caractère par lequel vous souhaitez séparer, qui est un espace. Donnons-lui donc un espace. Exécutons le code. Donc je reçois une chaîne, désolée, je reçois une liste. Je dois énumérer tout ce qui s'est passé avant et après cet espace. Maintenant, si j'ai plus d'espaces, disons que je tape autre chose ici. Nous avons maintenant trois espaces, ce qui signifie que nous avons quatre sections. Maintenant, s'il n'y avait aucun espace, il ne trouverait rien à séparer. Cela me donnera donc simplement la même chaîne, la chaîne d'origine, mais sous forme de liste. Et cela fonctionnera avec tous les personnages avec lesquels vous choisissez de vous séparer. Disons que j'ai quelques règles et que je souhaite les répartir en fonction de celles-ci. Maintenant, je reçois les quatre mêmes sections. Maintenant, cette fonction prend un autre argument, à savoir le nombre d' occurrences que vous souhaitez diviser. Donc, par défaut, ils les feront toutes. Chaque période trouvée dans ce cas sera divisée. Mais je peux vous demander de simplement faire le premier, par exemple, il divisera le premier et ignorera le reste. Je ne peux lui demander d'en faire que deux. Et voilà. Les deux premiers seront séparés et le dernier, nous resterons tels quels. Ce n'était donc qu'une brève introduction aux cordes. Vous pouvez faire bien d'autres choses avec eux. Je vous encourage vraiment à expérimenter et à jouer avec eux. Et je vous recommande également vivement lire la documentation en ligne pour Python, elle contient beaucoup de choses. Encore une fois, ce n'était qu' une simple introduction, mais je vous ai montré certaines des opérations les plus courantes que vous pouvez effectuer avec des chaînes de caractères qui vous aideront dans votre codage quotidien. J'espère donc que vous connaissez mieux les cordes et j'espère que c'était suffisamment clair pour que vous soyez beaucoup plus à l' aise avec elles. 31. Plongée profonde - Loops: Très bien, apprenons-en plus sur les boucles en Python. boucle signifie essentiellement faire quelque chose plusieurs fois encore et encore. Il existe deux principaux types de boucles en Python. L'une d'elles est une boucle pour, l' autre est une boucle complète. Passons donc en revue la boucle pour. Étudiant de première année pour la boucle. C'est très simple. Vous utilisez le mot clé pour vous. Nous dirons pour quelque chose ou pour chaque article. Supposons donc que pour un élément de la liste, créons une liste. Nous avons juste une liste de nombres, 12.3, puis vous avez deux points. Et puis, à l'intérieur de cette boucle, vous avez cette indentation. À l'intérieur de cette boucle, vous allez effectuer un certain type d'opération. Donc, pour l'instant, imprimons simplement l'article, par exemple, laissez-moi l'exécuter. Comme vous pouvez le voir, nous en imprimons 123. Donc, ce qui se passe, c'est que nous disons essentiellement que chaque élément de cette liste sera stocké dans cette variable appelée item. Maintenant que j'ai choisi cette variable, vous pouvez l'appeler autrement. Vous verrez généralement quelque chose comme I. Donc, pour moi, dans la liste, nous pouvons imprimer I. voilà. Il s'agit donc simplement parcourir chacun d'eux et de le remplacer par la valeur de cet élément à l'intérieur de la liste. Modifions cela un peu et disons 12.3. Maintenant, même résultat. Supposons maintenant que nous voulions imprimer les nombres de 1 à 100. Il existe donc une fonction appelée plage qui vous donne essentiellement une plage de nombres. Disons que nous voulons 100 numéros. Imprimons I dans la plage 100. Imprimons qu'il s'est passé quelque chose, nous en aurons 99. Voyons pourquoi. En fait, réduisons un peu la taille de cette clé. Disons cinq, par exemple, nous obtenons les chiffres de 0 à 4. C'est donc parce que la fonction de plage commence à compter à zéro. On pourrait arranger ça. On pourrait dire que nous pourrions transmettre une vraie clé à molette. Si vous ne transmettez qu'un seul chiffre, il commencera à compter à zéro jusqu'au chiffre précédent, le nombre que vous avez fourni. Mais si nous donnons 1 à 5, dans ce cas, nous allons obtenir un à quatre parce que ce nombre, le second, ne l'est pas, c'est exclusif. Cela signifie que vous devez en ajouter un pour obtenir le nombre souhaité dans la plage que vous souhaitez. Donc, si nous disons que la plage de un à six nous donnera en fait un à cinq, cela peut être un peu confus, mais c'est ainsi que fonctionne cette fonction. Il y a des raisons à cela, bien sûr, mais il suffit de savoir que c'est ainsi que cela fonctionne. Excellent. La succursale va donc nous en donner un à cinq. Maintenant, si vous vouliez voir à quoi servent réellement les clés, il suffit de créer une liste de ces numéros, nous travaillons toujours simplement avec une liste. Excellent. Nous stockons donc la valeur de chacun de ces nombres dans cette variable I, mais cela ne signifie pas que nous devons l'utiliser. Disons que nous voulons imprimer Hello Friend 100 fois. Nous pouvons simplement dire, donnez-moi une gamme de 100 chiffres. Je m'en fous de ce qu'ils sont parce que je n'en ai pas besoin. J'ai juste besoin de la liste pour pouvoir la parcourir 100 fois et imprimer cette chaîne 100 fois. Bonjour, imprimez, et voilà. Mais nous pourrions aussi faire quelques calculs. Nous pourrions dire Bonjour fois deux, par exemple pour que chaque élément de la gamme soit multiplié par deux. Nous l'imprimons. Et voilà. Vous obtenez donc ce résultat. La boucle for utilisera donc un objet itérable, quelque chose sur lequel elle peut itérer. Il peut s'agir de LED, généralement d'une liste, mais aussi d'un tuple, par exemple au lieu d'une liste, créons un tuple, qui ressemble à une liste, mais vous ne pouvez pas le modifier. Il va donc l'imprimer trois fois. Ou nous pouvons également utiliser une chaîne, par exemple nous pouvons dire a, b, c, d. Nous pouvons, nous pouvons itérer sur une chaîne. Et que va-t-il se passer ? Permettez-moi d'imprimer r dans ce cas, c' est-à-dire qu'il passera simplement par chacun de ces caractères de la chaîne. Selon la même logique, nous pourrions en fait imprimer tout ce que nous voulons et utiliser cette chaîne comme étant l'élément qui nous donnera le nombre de boucles que nous allons faire avec notre boucle for. C'est ainsi que fonctionne la boucle for. Maintenant, la boucle while ne prend pas quelque chose que vous pouvez utiliser, un objet sur lequel je peux itérer, elle prend une condition. Donc, ce que cela signifie, c'est que tant qu'une condition est vraie, alors que quelque chose est vrai. Fais quelque chose à l'intérieur de cette boucle. Donc, dans ce cas, je pourrais imprimer à nouveau, bonjour mon ami. Maintenant, si je le fais, si j'exécute ce code maintenant, nous entrerons dans ce que l'on appelle une boucle infinie. C'est parce que le vrai sera toujours vrai. Cela n'arrêtera donc jamais quelque chose dont vous devez tenir compte. Et vous devez faire attention à cela lorsque vous utilisez While Loops, c'est-à-dire que vous devez vous assurer de mettre à jour votre condition à un moment donné. Alors, faisons quelque chose que nous pouvons mettre à jour. Disons que nous voulons commencer à compter les chiffres. Nous allons commencer le décompte à zéro. Et nous allons dire, tant que le nombre est moindre, désolés. Pendant le décompte, oui, tant que le nombre est inférieur à cinq, par exemple, imprimez Hello Friend. Maintenant, comme dans la série actuelle, ce code s' exécutera à nouveau pour toujours. Ce sera une autre boucle infinie car comptage de ce cas sera toujours inférieur à cinq. À moins que je ne mette à jour ma variable. Je peux dire que le nombre est égal au nombre plus un. En gros, j'en ajoute un au décompte. Chaque fois que nous terminons, nous faisons une boucle, nous entrons dans cette boucle. Donc, ce qui va se passer ici c'est que la boucle while vérifiera le nombre, compte est inférieur à cinq. Oui. Effectuez ensuite ces opérations ici. Maintenant, après avoir imprimé Bonjour mon ami, nous allons en ajouter un pour compter. Cela en fera un compte, n'est-ce pas ? Nous allons donc entrer à nouveau dans la boucle, ou la boucle while se vérifiera à nouveau Le compte est-il inférieur à cinq ? Oui, imprimez Bonjour mon ami. Ensuite, nous en ajouterons un de plus pour compter, et ainsi de suite jusqu'à ce que nous arrivions à cinq. Ensuite, la boucle while vérifiera que son nombre est inférieur à cinq. Non. Ensuite, il sortira et continuera avec ce qui se trouve après la boucle. Alors laisse-moi imprimer quelque chose après la boucle. Juste pour rendre cet exemple un peu plus clair. Et exécutons simplement ce code. Permettez-moi d'effacer ma fenêtre de sortie ici. Exécutons ce code. Comme vous pouvez le constater, rien ne s'est passé. Pourquoi ça ? Eh bien, parce que j'ai oublié de réinitialiser le compte car le compte est de cinq. Donc, le cumul demande si le compte est inférieur à cinq ? Non, en fait, ça ne fait rien. Et il passe directement à l' impression de la boucle complète. Remettons donc le compte à zéro et réexécutons le code. Et voilà. Alors maintenant, nous imprimons Hello Friend 12345 fois, puis nous quittons. Vérifions donc cette variable de décompte. Vous pouvez voir que cela commence à 01234. Il s'exécutera cinq fois pour la dernière fois, ce qui signifie que la boucle n'entrera pas. Excellent. Ensuite, nous imprimons le, tout ce qui vient après la boucle. Au fait, je peux, je peux simplifier un peu cette ligne de code. Mais dire que plus est égal à un, c'est une façon abrégée de dire qu'il suffit d'ajouter un à cette variable et cela fonctionne de la même manière. Ce sont donc des boucles complètes. Encore une fois, ils travaillent avec cette condition. Vous devez donc faire attention à mettre à jour cette condition chaque fois vous êtes dans la boucle while. Sinon, vous risquez de créer une boucle infinie, ce qui provoquera un crash de votre application. Parce qu'au bout d'un moment, la mémoire sera épuisée ou qu'elle connaîtra ce que l' on appelle une erreur de segmentation, ce qui signifie qu'elle essaie d'accéder à la mémoire à laquelle vous ne devriez pas avoir accès Elle va donc tout simplement se bloquer. Ce n'est pas la fin du monde, cela arrive à tout le monde, cela vous arrivera à un moment ou à un autre. Il ne vous reste plus qu'à recommencer votre travail. Donc, le moyen d'arrêter la boucle while est à nouveau d'utiliser la condition. Mais il existe un autre moyen d'arrêter la boucle. Disons que, pour une raison ou une autre, nous voulons arrêter le compte. Si le compte est égal à trois, nous voulons arrêter. Nous pourrions donc simplement dire que si le nombre est inférieur à quatre, arrêtez. Mais on pourrait aussi dire que si le compte est égal à trois, cassez. Maintenant, exécutons-le. Et voilà. Alors maintenant, nous nous arrêtons à trois heures. Vous pensez peut-être que cela signifie que nous n'avons pas besoin de cette maladie. Nous pourrions simplement dire : Bien que c'est vrai. Exécutez tout ça. Si le compte est égal à 33, nous cassons simplement. Maintenant, tant que nous incrémentons toujours la variable de comptage, cela fonctionnera. Maintenant, c'est bizarre. Ce n'est pas vraiment une belle boucle, mais je l'utilise juste comme exemple pour vous le montrer. Techniquement, cela devrait durer indéfiniment. Mais la rupture, cette instruction de rupture, sortira essentiellement de la boucle. Voyons cela en action. Et voilà. Nous avons imprimé, nous avons imprimé Hello Friend trois fois. C'est parce que j'ai supprimé mon instruction print pour la variable count. Permettez-moi d'ajouter cela. Nous ne voulons donc pas 0123 et nous faisons simplement une pause. Donc on ne le fait pas, on n'en imprime pas trois par la suite. Nous pouvons maintenant utiliser la même instruction break pour arrêter la boucle ascendante. Permettez-moi donc de recommencer et de mettre à nouveau en boucle 100 numéros pour I dans la plage de 100. Et imprimons-le. Je laisse, laisse-moi le faire 20, pour que ça ne prenne pas trop de temps. Nous allons donc imprimer à partir des chiffres de 0 à 19. Ensuite, nous imprimerons cette chaîne. Ça change ça pour dire. Donc, si nous voulons arrêter la boucle for à un numéro de station, nous pouvons dire si I est égal à dix, par exemple nous pouvons faire une pause. Et voilà. Donc, une fois que nous aurons neuf ans, le suivant j'en aurai dix, puis nous sortirons de la boucle. C'est donc une autre façon de mettre un terme à la boucle. Un autre mot clé très utile est la clé, cette déclaration, et c'est une déclaration continue. Maintenant, cela va fonctionner à la fois pour les boucles et pour les boucles entières. L' instruction continue arrête l' exécution du code à ce arrête l' exécution du code à moment-là, revient à la boucle et passe à l'itération suivante de la boucle. Donc, ce que cette pente est censée faire , c'est un sprint tous les chiffres de 0 à 19. Mais nous allons cocher cette case si l' itération actuelle est dix, continuez, ce qui signifie que nous n' allons pas entrer dans cette déclaration imprimée. Voyons donc comment cela fonctionne. Nous y voilà. Nous allons au 01 234-567-8910, et nous allons au 11. Maintenant, rendons les choses un peu plus évidentes. Disons que nous voulons uniquement imprimer des nombres divisibles par deux. Disons donc que si I modulo deux n'est pas égal à zéro, cela signifie que le nombre n' est pas divisible par deux. Nous allons passer à la prochaine itération, sans imprimer ce numéro. Et voilà. Nous avons donc 0246810. Vous voyez que pratiquement tous les autres nombres sont ignorés car ils ne sont pas divisibles par deux. Maintenant, cela revient à dire que si le nombre est divisible par deux, si je modulo deux, le résultat est zéro. Loyer. Sinon, je ne fais rien. Oui, vous pouvez voir que c'est le même résultat. Le résultat est donc le même. Nous utilisons simplement l'instruction continue pour inverser cette logique. Et vous vous demandez peut-être pourquoi, pourquoi faisons-nous cela ? Eh bien, imaginez que vous vouliez simplement continuer à écrire du code ici. Donc plus de code, puis de plus en plus. Cela vous permet donc de ne pas avoir à vous occuper de l'indentation et de simplement effectuer une vérification rapide pour arrêter de simplement effectuer une vérification rapide pour arrêter l'exécution du code à tout moment. Revenez en arrière et passez au point suivant : quelle que soit la maladie, dans ce cas, c'est une liste de chiffres. Vous l'avez donc. Pour les boucles et les boucles While, il s'agit de concepts très simples, qui consistent à faire quelque chose encore et encore. Mais ils sont extrêmement utiles, extrêmement puissants, et vous les utiliserez beaucoup dans votre parcours de codage. 32. Plongée profonde - Listes, Tuples, ensembles: Parlons des listes. Les listes sont une collection d'objets. Et ce que j'entends par objet, c'est n'importe quel type d'objet Python. Il peut s'agir d'une chaîne, d'une fonction, d'un entier, d'un nombre flottant. Il peut même s'agir d'une autre liste. Vous pouvez avoir des listes imbriquées les unes dans les autres. Je vais te le montrer. Et je voulais également parler de deux autres types qui sont les tuples et les ensembles. Nous allons donc parler de ces trois. Ces trois éléments peuvent être considérés comme similaires en ce sens qu' ils stockent tous une collection d'objets. Et ce que vous pouvez accomplir avec des tuples et des ensembles. Vous pouvez également le faire avec des listes. La plupart du temps, vous pouvez simplement utiliser des listes. Et ils sont vraiment l'un des types de données les plus utilisés en Python pour traiter des collections d'objets. Vous pouvez donc vous en tenir à moins que ce que vous pouvez accomplir. La même chose que vous pouvez accomplir avec un boulon et des ensembles. Cela dit, sous le capot, ils se comportent très différemment et ont des cas d'utilisation très uniques. Permettez-moi donc de commencer par les listes , puis nous passerons aux tuples et aux ensembles. Créons notre liste. Il existe deux manières de créer une liste. Je vais créer une variable appelée mylist. Maintenant, je n' appelle pas volontairement ma liste de variables car list est le type de liste réel dans Python I, et je ne veux pas le remplacer. Je vais vous le montrer dans une seconde. Je vais donc appeler cela ma liste. Et je vais créer la liste. Ainsi, pour créer un alias, vous utilisez crochets, puis vous séparez vos éléments par une virgule. Ils ont donc soudainement fourni des chiffres. Compteur irlandais, sprintez sur MyList. Vous y voilà. Maintenant, l'autre façon de créer une liste consiste à intégrer quelque chose dans une liste. la même manière, vous pouvez le faire avec des chaînes ou un entier, par exemple, il existe un type de liste et vous pouvez mettre quelque chose à l'intérieur d'une liste. Donc, comme vous le savez peut-être déjà, sous le capot, les chaînes se comportent un peu comme des listes. Nous pouvons donc réellement convertir une chaîne dans une liste. Nous allons le stocker dans une variable appelée a. Je vais juste l'apporter. Ce qui va se passer, c'est que la chaîne sera divisée en plusieurs parties, ses caractéristiques, et le résultat sera une liste. Voici donc deux manières de créer une liste. C'est pourquoi j'évite d' appeler ma liste de variables. Parce que si je le faisais, je l'annulerais simplement et tout serait complètement cassé. Il existe des moyens de résoudre ce problème. D'ailleurs, laissez-moi vous montrer que si je devais le faire, je vais avoir une erreur car maintenant je remplace essentiellement la fonctionnalité de ce mot clé de liste. Si cela vous arrive, vous pouvez dire supprimer la liste. Ils vont faire une liste. Et maintenant, ils devraient fonctionner à nouveau car nous pouvons réinitialiser cette fonctionnalité. Génial. Alors, que pouvons-nous faire avec les listes ? La première chose que nous pouvons faire avec les listes est de les parcourir en boucle ou d'itérer sur leurs membres. Nous pouvons donc dire « pour moi » dans la liste, imprimer « I », et le tour est joué. Nous pouvons accéder à chacun de leurs membres simplement en utilisant un for-loop. Ce sera quelque chose de très courant. Vous allez d' ailleurs parcourir des listes en boucle. Mais vous pouvez également vérifier si quelque chose se trouve dans notre liste. Nous pouvons dire : créons une variable appelée résultat. Et disons, vérifions si le numéro deux est dans la liste. Pour s'enrôler. Nous pouvons imprimer le résultat. Vous y voilà. Cette vérification nous donnera donc une valeur booléenne, vraie ou fausse. Nous pouvons également l'utiliser dans une instruction if. On peut dire qu'il y en a deux dans ma liste. Imprimons simplement la liste. Maintenant, si nous cherchons autre chose, disons le numéro dix, qui ne figure pas dans la liste. Il n'imprimera rien. Supposons donc qu'il faille ajouter une autre instruction et disons imprimer, pas dans une liste. Génial. Comme je l'ai mentionné, votre liste peut contenir n' importe quel type d'objets. Vous pouvez avoir des chiffres, une chaîne, des flottants. Par exemple, vous pouvez même avoir une liste à l'intérieur de cette liste. Permettez-moi donc de créer une autre liste avec simplement deux chiffres. Passons en revue cette liste. Ou dans ma liste. Bonjour. Vous y voilà. Donc, comme vous pouvez le voir, nous avons cette chaîne et nous avons même la liste à l'intérieur de cette autre liste. Il sera très utile de vérifier si quelque chose se trouve dans votre liste. Mais vous pouvez également obtenir des éléments de votre liste. Permettez-moi donc de créer une liste plus simple car celle-ci est un peu compliquée. Permettez-moi d'ajouter trois chaînes, 1, s, et puis juste le chiffre trois, pour obtenir le résultat. Donc, pour obtenir un élément d'une liste, nous le faisons en utilisant l'index, c'est-à-dire en utilisant les crochets. Permettez-moi d'expliquer les indices d'une manière plus visuelle. Alors imaginez que vous avez votre liste ici. Disons que nous avons une liste contenant quatre éléments. Chaque élément a un index, et tout est essentiellement ordonné de gauche à droite, et nous commençons à compter à zéro. Cela peut parfois prêter à confusion, mais le premier élément de la liste est le numéro d'index zéro est l'élément zéro. Le second en sera un. Le troisième sera de s'en payer un, ce sera trois. Il existe maintenant un autre moyen d'obtenir des indices en utilisant des nombres négatifs. Alors laisse-moi annuler ça. Permettez-moi de mettre ces index en bas de page. Nous pouvons le faire dans l'ordre inverse. Nous pouvons dire que le dernier de la liste sera un index moins un. Ensuite, l' avant-dernier sera de moins deux. L'avant-dernier moins trois. Moins quatre. Nous ne partons pas à zéro parce que nous ne pouvons pas dire moins zéro, bien sûr. Donc, si vous voulez obtenir le premier index ou le premier élément de la liste, il vous suffit de dire zéro. Si vous voulez obtenir le dernier élément de la liste, vous pouvez soit savoir quel est le dernier index, soit le nombre d'éléments de la liste. Dans ce cas, le nombre d'éléments de la liste est quatre éléments moins un, car nous commençons à compter à zéro. Et ce sera votre dernier index, qui sera le dernier élément. Vous pouvez également simplement taper moins un sans connaître le nombre d'éléments contenus dans la liste. Revenons donc à notre code pour obtenir les éléments à l'aide des index. Nous utilisons la notation entre crochets. Et à l'intérieur de ce crochet, nous mettons l'index et nous voulons, donc si nous voulons notre élément, laissez-moi le stocker dans une variable. En fait, laissez-moi l' imprimer directement. Je vais imprimer le premier élément de la liste, qui sera la chaîne 10. Si je veux le deuxième élément, ce sera le premier numéro d' index un par un. Le troisième sera l'index numéro deux. Maintenant, si je passe en revue les indices, disons que je veux le quatrième, mais qu'il n'y en a pas de quatrième dans la liste, alors je vais obtenir une erreur indiquant que l'indice est riche en fer. Maintenant, selon la même logique que je viens de vous montrer, vous pouvez obtenir le dernier, qui sera moins un, soit trois. Nous passons à l' avant-dernier, ce sera moins deux, et ainsi de suite. Il existe deux manières de connaître vos limites, d' atteindre la limite ou d' atteindre la fin de votre liste. Il s'agit, bien sûr, obtenir le dernier élément en utilisant l'indice moins un. Mais vous pouvez également vérifier la longueur de votre liste. Je peux dire que je peux utiliser la fonction appelée Len L-E-N. Passez-y ma liste. Permettez-moi d'imprimer la longueur du résultat. Cela m'en donnera trois, car il y a trois éléments dans la liste. Si j'en ajoute un de plus, il y en aura maintenant quatre. Vous pouvez donc l'utiliser pour obtenir le dernier article ou simplement pour savoir combien d'articles vous attendez. Parce que parfois, vous avez une liste de centaines ou de milliers d'articles et vous ne pouvez pas toujours en tenir compte. C'est donc une façon de toujours interroger cette valeur. Donc, ce que nous pouvons faire maintenant, c'est établir ma liste. Pour obtenir le dernier élément, je peux obtenir la longueur moins un car nous commençons à compter à zéro. Cela nous en donnera donc quatre. Vous y voilà. Vous pouvez également obtenir non seulement un élément de la liste, Bora, mais aussi un ensemble d'éléments de la liste, c'est ce que l'on appelle le découpage. Vous pouvez découper votre liste et obtenir une partie de cette liste sous forme copie pour me permettre de vous montrer comment cela fonctionne. Pour ceux-ci, nous utilisons également la notation entre crochets et nous utilisons également des indices commençant à compter à zéro. Mais maintenant, comme nous utilisons une plage, nous utilisons les deux points entre crochets. Nous allons donc demander : «  Obtenons une copie ou obtenons une liste de listes » sont les trois premiers éléments de notre liste. Cela signifie que nous voulons passer de l'indice zéro à l'indice numéro deux. Nous allons donc demander à partir de l'index zéro comme premier index et passons à l'index numéro deux. Maintenant, stockons cela dans une variable appelée range. Maintenant, je n' appelle pas volontairement cette clé variable car il existe une autre fonction appelée range et elle est intégrée à Python. Je vais vous le montrer très rapidement, mais c'est le cas. C'est ce qu'on appelle une clé. Et je vais demander une série de cinq chiffres. Cela me donnera donc une liste de cinq nombres de zéro à quatre, car nous commençons à compter à zéro. Donc, si je devais appeler cette plage variable, je la remplacerais. Et c'est généralement non, ce n' est pas un problème. Si je n'ai pas vraiment besoin la fonction de plage dans mon code, ce n'est pas un problème, mais il est généralement recommandé de ne pas la remplacer. Les fonctions intégrées sont des types intégrés à Python. Revenons donc à notre découpage. Permettez-moi d'imprimer par orange. Donc, encore une fois, nous demandons depuis l'index zéro jusqu'à l'index deux. Nous devrions donc obtenir ces trois éléments qui, logiquement, ont du sens, n'est-ce pas ? Mais nous l'avons fait. Nous avons les deux premiers. La raison en est que dans ce découpage, le premier index que vous fournissez sera inclus. Mais le second index que vous fournirez ne sera pas inclusif, mais exclusif, ce qui signifie que vous obtiendrez tout ce qui se trouve avant cet index. Donc, si nous voulons obtenir le troisième élément qui est l'index deux, nous devons en ajouter un. Et maintenant, nous obtenons ce que nous voulons. Cela peut parfois être un peu confus. Et il y a bien sûr plusieurs raisons pour lesquelles cela fonctionne de cette façon. Mais avec de la pratique, cela deviendra une seconde nature pour vous. Il y a un autre élément que nous pouvons ajouter au découpage, et c'est l'étape. Si nous ajoutons une autre colonne entre crochets, par défaut, l'étape sera une et l'étape consiste simplement à renvoyer la copie de la liste que vous demandez. Par exemple, laisse-moi faire ça. Donc, par défaut, cette étape est une, ce qui signifie que nous obtiendrons chaque article de la gamme demandée. Si je devais suivre la deuxième étape, nous obtiendrons essentiellement un article sur deux. C'est donc aussi ainsi que vous pouvez gérer ce découpage. Une chose que je voulais également vous montrer, c'est que vous n'avez pas nécessairement à fournir des indices par défaut. Si vous ne le savez pas, si vous ne fournissez pas de numéro d'index. La première place ici, ce sera le tout premier index. Et par défaut, ce sera la fin de la liste. Donc, si je devais simplement le faire, j'obtiendrais une copie de la liste avec chaque élément qu'elle contient. Vous y voilà. Maintenant, si je devais dire que je veux tout sauf le premier, je pourrais commencer par le premier index et laisser celui-ci vide dans le second et simplement obtenir le voyant à la fin de la liste. Et l'inverse est le même. Nous pouvons simplement en taper trois et nous irons de haut en haut jusqu'au deuxième index de la liste. Bien, parlons de l'une des principales propriétés des listes. Ce qui rend une liste très unique, c'est qu'elle est immuable. Maintenant, ce que signifie mutable, c'est qu'ils peuvent être modifiés sur place. Et il y a quelque chose que vous devez faire attention à propos de cette propriété et en tenir compte. Permettez-moi donc de créer une liste vide, ces crochets, c'est une liste vide. Et permettez-moi d'ajouter quelque chose à cette liste. Pour ajouter quelque chose à la liste, vous pouvez ajouter un point. Ajoutons une chaîne plus simple. Je peux, disons un. Et imprimons ce résultat. C'est imprimé. Imprimons donc une liste. Avant d'ajouter un nombre, devons-nous ajouter un élément, puis après avoir ajouté l'élément. Après avoir clarifié cela, nous réexécutons le code. Comme vous pouvez le voir, nous obtenons d'abord une liste vide. Et puis nous avons ces listes avec un seul élément. C'est logique, non ? Maintenant. Que se passe-t-il si j'ajoute une autre variable et que j'assigne une à cette variable ? Maintenant, imprimons a et B. A et B. Ajoutons quelque chose à a, et imprimons à nouveau a et B. Alors laissez-moi, imprimons, donnons-lui une petite étiquette. Nous savons donc lequel est lequel, disons B, B. Et faisons de même ici. Encore une fois, je crée une liste vide. J'assigne à cette entrelacée une variable appelée a. Ensuite, je crée une variable appelée B, et j'assigne a à B. Jusqu'ici, tout va bien, donc a et B devraient être essentiellement des listes vides. Ensuite, j'imprime ces centralistes. Permettez-moi d'effacer ma fenêtre de sortie. Ensuite, j'ajoute quelque chose à un arrêt pendant une seconde et je pense à ce qui se passera selon vous lorsque nous imprimerons à nouveau a et B. Maintenant, un possède, contient un élément. Mais que se passe-t-il ? Intéressant. Donc, a et B sont d'abord vides, puis a et B ont tous deux un élément. Maintenant, rendons les choses encore plus claires. Maintenant, je vais ajouter quelque chose à être. Je vais juste pointer du doigt, désolé, une chaîne qui dit deux. Imprimons cela à nouveau. Donc, a et B sont identiques. C'est bizarre parce qu'on pourrait penser que a et B seraient indépendants. Maintenant, c'est quelque chose que vous devez considérer très attentivement lorsque vous utilisez des listes car elles peuvent vous prendre au dépourvu. C'est ce qu'on appelle un pointeur. Il y a toujours un pointeur en mémoire vers la liste que vous avez créée. Donc, a devient un pointeur de bassin. Et quoi que vous fassiez à a, même si vous l'attribuez à b, b n'est fondamentalement pas une nouvelle liste. B pointe vers a. Ainsi, tout ce qui arrive à a sera reflété dans B. Parce que B revient simplement au pointeur a d'origine. est très utile car cela vous permet de suivre un grand nombre de données, modifier où vous le souhaitez, tout en conservant la même liste d'éléments en mémoire. Mais cela peut être source de confusion si vous vous attendez à ce que deux listes différentes fonctionnent avec deux listes différentes. Maintenant, pour résoudre ce problème, si vous vouliez deux listes différentes, il vous suffit de créer deux listes vides. Et puis c'est ce à quoi vous pouvez vous attendre. A et B se comportent maintenant séparément. C'est-à-dire que c'est de la mutabilité. Comme vous l'avez vu, nous commençons avec une liste vide, puis nous la modifions sur place. Cela signifie donc que nous pouvons y ajouter des éléments en y ajoutant des éléments. Et cela signifie également que nous pouvons supprimer des éléments de la liste. Revenons à une seule liste vide appelée a. Disons, en fait, non, ne la rendons pas vide. Donnons-lui quelques cordes à l'intérieur. Alors maintenant, a a deux chaînes. Nous pouvons me supprimer des choses en utilisant la fonction Supprimer. Supprimons-en deux, puis imprimons. D'accord. Vous y voilà. Donc maintenant, a ne contient que 11 chaînes. Maintenant, si vous essayez de supprimer quelque chose qui ne figure pas dans la liste, par exemple supprimant cette chaîne trois, cela vous donnera une erreur car cela indique que x, qui est ce que vous essayez de supprimer, pas dans le symbole de la liste. Chèque. Ou un moyen simple d'éviter cette erreur est de dire s' trois dans une liste, puis de la supprimer, sinon de ne rien faire. Supposons donc que nous voulions en supprimer un à la place. Vous y voilà. Maintenant, l'un d'entre eux a disparu. Je voudrais vous montrer deux autres fonctions très utiles dans une liste. Revenons donc à notre liste et tapons. Ajoutons-y quelques chaînes supplémentaires. C'est un zéro. Ajoutez un nom, disons John Sample. Vous pouvez trouver l' index auquel vous êtes l' élément que vous recherchez grâce à une fonction appelée index. Et vous transmettez l'élément que vous essayez de trouver. Par exemple, si nous cherchons la chaîne zéro, même si elle s'appelle zéro, elle ne sera pas à l'indice zéro, n'est-ce pas ? Son index numéro deux car c'est le troisième élément de la liste. Mais si vous ne le saviez pas, vous pouvez le demander. Vous pourriez dire, d'accord, indice zéro. Dessinons ce résultat dans une variable appelée résultat. Et imprimez. Vous y voilà. Deuxièmement, si je demande John, nous obtenons l'indice numéro trois. Maintenant, si je demande autre chose, quelque chose qui n'existe pas, nous obtenons la même erreur car quelque chose ne figure pas dans la liste. Dans ce cas, nous ferions également une instruction if pour vérifier si quelque chose se trouve dans un, puis nous le ferions de la même manière, comme nous l' avons fait auparavant. Maintenant, la dernière fonction que je veux vous montrer est similaire à append. Une liste plus petite que dans ce cas, un point ajouté. Nous ajouterons un nouvel élément à la liste à la fin de la liste. Donc, si je fais cela et que j'imprime un, vous verrez que le nouvel article se trouvera à la fin. Et si je voulais l'ajouter au début ? Il existe une autre fonction appelée Insérer. Ensuite, vous lui donnez l'index dans lequel vous souhaitez insérer, puis les éléments. Ils inséreront donc le nouvel élément au début. Maintenant, si vous le vouliez à la deuxième place, disons que nous le voulons après une. Ensuite, nous pouvons dire, d'accord, insérer à l'index numéro un. Et maintenant, ce sera un , puis le nouvel élément, puis le reste de la liste. C'est ainsi que vous pouvez insérer des choses, ce que vous voulez dans la liste. Et par la même méthode, autre chose que je pourrais vous montrer est que vous pouvez supprimer éléments de la liste par index. Je vous l'ai donc montré, supprimez la fonction de télécommande, qui supprimerait un élément en utilisant son nom. Dans ce cas, nous allons supprimer la chaîne appelée one. Mais si vous souhaitez supprimer par index, vous pouvez utiliser la fonction appelée pop. Par défaut, pop supprimera le dernier élément de la liste. Donc, dans ce cas, le dernier élément de la liste est John. Pub va supprimer John. On fait apparaître deux fois, supprime John, puis on supprime zéro. Il ne nous reste donc plus que ces deux éléments. Vous y voilà. Mais maintenant, vous pouvez également transmettre un argument à pop, et ce sera l'index. Supposons que vous souhaitiez supprimer le premier élément, qui est cette chaîne. Cela dit une chose, l'indice zéro. Et maintenant, travaillez avec ça. Donc, si vous souhaitez supprimer deux des premiers éléments, les deux premiers éléments de la liste. Vous pouvez faire pop deux fois avec l'indice zéro car la première fois, cela supprimera le numéro un , il nous reste cette liste. Maintenant, le premier élément sera d'écrire, donc nous ajoutons à nouveau zéro et deux, c' est-à-dire que le premier élément aura disparu. Il ne nous reste donc plus que zéro et John, activé. Nous y voilà. Et bien sûr, selon la même logique, vous pouvez simplement supprimer, disons que nous voulions supprimer cette chaîne de deux. Nous faisons apparaître l'indice numéro un, et il ne nous reste plus que ce résultat. Bien, avant de terminer, je voulais vous montrer quelque chose qui peut être source de confusion pour certaines personnes. Avoir une liste à l'intérieur d'une liste. Parce que, comme je l'ai mentionné, tout peut être mis dans une liste , y compris une autre liste. Alors laissez-moi le faire. Disons que nous avons une liste avec un élément, puis une autre liste avec un autre élément. Alors, que se passe-t-il ici ? Notre liste principale. Vous pouvez donc voir que ces crochets contiennent deux éléments, et chacun de ces éléments est une liste. Et si je veux accéder à la première liste ? C'est très simple. Je dis simplement, d'accord, donnez-moi le premier élément de la liste a. Et cet élément, bien sûr, sera la liste qui contient cette chaîne qui en dit un. Et si je voulais obtenir le premier élément de cette liste ? Vous pouvez simplement suivre la même convention. Vous pouvez obtenir le premier élément de cette liste, et maintenant ce sera un. Maintenant, si je devais modifier, permettez-moi de modifier cette liste par rapport à sa liste initiale. J'y ai mis trois éléments, juste trois chiffres, 12,3. Que pensez-vous qu'il va juste être imprimé ? C'est ? En imprime un. Et si je voulais être numéro deux ? Ensuite, je reçois, je reçois le, je dois obtenir la première liste de la MainList, en contournant l'index zéro. Et puis, une fois que j'aurai reçu cette liste, je veux obtenir le premier élément de cette liste, qui sera le numéro deux. Et voilà. Et si je voulais accéder à cette chaîne ici ? Eh bien, je dois obtenir le deuxième élément de la liste principale, qui serait la liste à laquelle j'essaie d'accéder. Ce sera donc l'indice numéro un. Et à partir de cette liste, je veux obtenir le premier élément, le seul et unique élément, qui serait un indice élevé zéro. Maintenant, cela fonctionne avec autant de niveaux que vous le souhaitez, et c'est là que cela peut devenir un peu confus. Maintenant, imaginez que cette liste interne contient une autre liste avec un autre élément, juste un seul numéro. Maintenant, pour y arriver, nous devons obtenir la première liste puis le type du premier élément de notre liste principale, puis le premier élément de cette liste de commande. Ce n'est que de la récursivité, niveau après niveau. Nous obtenons maintenant le premier élément de la liste principale, qui sera cette liste ici. Ensuite, obtenez le premier élément de cette liste, auquel nous serons présents, le niveau suivant de la liste. Et puis nous en obtenons le premier élément, qui est la chaîne que nous voulons, qui est celle-ci. Vous y voilà. Je voulais vous montrer cela parce que c'est logique. Mais voir ce type de syntaxe peut être un peu confus. Et ce sera source de confusion tant que vous n'aurez pas plus de pratique. Alors n'ayez pas peur. Ne le faites pas, ne vous découragez pas de l'essayer. Juste parce que c'est un peu énigmatique. C'est parfaitement logique une fois que vous l'avez fait plusieurs fois. C'est donc la liste. Maintenant, laissez-moi vous montrer très rapidement ce que les tuples et les ensembles vont faire. Similaire aux listes. Ils stockent des éléments à l'intérieur d'eux. Vous pouvez donc faire des choses très similaires, mais avec un tuple. La différence est maintenant qu' un tuple utilisera parenthèses au lieu de crochets. Alors laissez-moi imprimer, laissez-moi obtenir le premier élément de ce tuple. Même convention qu'avec la liste crochets obtiendront le premier élément. La principale différence est que les tuples ne peuvent pas être modifiés et qu'ils ne le peuvent pas, nous n'avons pas le même concept que les pointeurs avec sommet. Donc, si je devais attribuer une variable b, la valeur de a, qui est notre tuple. s'agirait essentiellement de deux copies différentes du même tuple. Comme je l'ai déjà dit, les listes peuvent être modifiées sur place, mais pas les tuples. Donc, si vous essayez d'ajouter quelque chose à un tuple, cela vous donnera une erreur si je corrige ma faute de frappe, car les tuples n'ont pas d'attribut, ajoutez. Utilisez donc un tuple chaque fois que vous savez que vous n'avez pas à modifier votre liste. Sinon, analyste de dualité simpliste. Maintenant, l'autre élément que je veux vous montrer est ce qu'on appelle un ensemble. Vous pouvez maintenant initialiser un ensemble de cette façon. Ou avec des crochets frisés. Cela peut prêter à confusion car les crochets sont également des dictionnaires utiles. Je vous recommande donc de taper dans set. Maintenant, c'est un set vide. Laisse-moi l'imprimer. C'est un set vide. Maintenant, on dirait que vous pouvez les modifier, vous pouvez aussi ajouter quelque chose. J'ai dit qu'il n'y avait pas de méthode appelée append. Si j'essaie ça, ça va te donner un ou. Il existe une autre méthode appelée add. Vous pouvez ajouter quelque chose à un ensemble. Vous y voilà. J'en ai donc ajouté un. Maintenant, la différence avec les ensembles, c'est que ce qui le rend unique, c'est que chaque valeur qu' ils contiennent doit être unique. Si je devais avoir une liste, faisons-en une liste vide. Permettez-moi d'ajouter deux fois la même valeur dans une liste. Imprimons ça. Ma liste s'appelle donc B et devrait comporter deux chaînes, disons une. Vous y voilà. Cela est valable dans les listes. Si j'ai essayé de faire de même avec les sets, vous verrez que je n' ai que 11 articles dedans. Et cela est très utile pour conserver un ensemble unique d'éléments. Vous pouvez maintenant reproduire cette largeur avec des listes, par exemple, supposons que vous ajoutiez quelque chose à une liste. Disons que vous avez votre liste et que vous essayez d'ajouter de la valeur. Disons que la valeur est la chaîne contenant ces nombres. Vous pouvez imiter ce que j'ai dit en disant que si valeur ne figure pas dans la liste, qui est la liste a, vous pouvez l'ajouter. Vous n'ajouterez cette valeur que si elle ne figure pas dans la liste. C'est donc un comportement un peu similaire à celui des ensembles. Mais une autre chose que vous pouvez faire avec un ensemble est de lui donner une liste. Et cela réduira la liste jusqu'à ce qu'elle ne contienne que des valeurs uniques. Alors laisse-moi te montrer ça. Disons que je lui donne une liste. Et je dirais que je vais lui donner une liste avec quelques valeurs dupliquées, une à deux. Vous y voilà. Donc, une fois que j'aurai imprimé, laisse-moi me débarrasser de ces pétitions. Une fois que j'aurai imprimé cela, vous affinerez mon arbre de recherche et ma liste ne contiendra que des valeurs uniques. Encore une fois, cela peut être très utile lorsque vous ne souhaitez pas avoir à répéter des valeurs dans votre collection d'éléments. Et vous pouvez aussi, en fait, non, désolée, vous ne pouvez pas. Une autre particularité des ensembles est que vous ne pouvez pas obtenir éléments d'un ensemble de la même manière que vous le feriez avec des listes et des tuples. Vous pouvez parcourir un ensemble valide. Vous pouvez vérifier chaque élément d'un ensemble en utilisant une boucle for, mais vous ne pouvez pas obtenir les éléments d'un ensemble en utilisant des indices. La raison en est que, comme dans les dictionnaires, les ensembles ne sont pas ordonnés. Il y a une raison technique à cela s' appelle en fait HashSets. Et ils utilisent des pointeurs. Mais ils sont fondamentalement très efficaces. Vous pouvez trouver des éléments dans un ensemble beaucoup plus rapidement que dans une liste. Mais cela signifie également que vous ne conservez pas les indices, vous ne les suivez pas. Vous ne pouvez donc pas faire ce type d'opération. Donc, si vous devez accéder à quelque chose par un index, utilisez une liste. Si tu ne le fais pas. Mais si vous souhaitez conserver une très grande collection d'éléments et qu'ils soient tous uniques, vous pouvez utiliser un ensemble à cette fin. Voilà, des listes, des tuples et des ensembles. Ce sont des types de données très puissants qui vous aideront beaucoup lorsque vous codez. Et j'espère avoir pu vous aider à mieux les connaître. 33. Plongée profonde - Dictionnaires: Parlons des dictionnaires Python. Vous pouvez maintenant penser à un dictionnaire, une sorte de mappage entre deux choses, entre une clé et une valeur. C'est un peu comme dans un vrai dictionnaire où vous avez récompense et une définition de ce mot. La clé serait la pupille, la définition serait la valeur de cette clé. Ou comme un annuaire téléphonique, par exemple, disons que nous avons un nom. Nous avons Rachel et nous avons le numéro de téléphone de Rachel. Nous avons des rangées, des roses. Numéro de téléphone, par exemple Rachel serait la clé et Ross serait la clé, les lignes seraient une autre clé et les numéros de téléphone ou les valeurs de chacune de ces touches. Traduisons donc cela dans un véritable dictionnaire Python. La syntaxe de création de dictionnaires utilise des crochets. Alors laisse-moi traduire ceci. Rachel Rose inscrit les numéros de téléphone dans un dictionnaire. Vous devez donc utiliser les crochets bouclés ou les accolades bouclées. Et puis à l'intérieur de celui-ci, vous aurez chaque élément d'un dictionnaire, qui sera une paire de clé et une valeur. Et cela est séparé par deux points. Vous avez une valeur de deux points clé. Ce sera le premier élément du dictionnaire. Ensuite, vous séparez chaque élément, élément par une virgule. Vas-y. Et si nous voulions ajouter un numéro de téléphone supplémentaire sans avoir à le faire dans vos lignes. D'ailleurs, ils peuvent tous se trouver sur une seule ligne. Alors allons-y de cette façon. Ajoutons un nouveau numéro de téléphone et un commentaire triste, Monica, puis un autre numéro de téléphone. Il s'agirait donc d'un dictionnaire. Et stockons-le dans une variable appelée téléphones. Laisse-moi juste l'imprimer, voir à quoi ça ressemble. Il ressemble exactement à ce que nous venons de taper. Quelle est donc la particularité des dictionnaires ? La première chose est que, comme nous l'avons dit, nous pouvons en avoir une cartographie, proposer des clés et des valeurs. Et vous pouvez accéder à ces clés et valeurs. Vous pouvez donc accéder à ces valeurs simplement en accédant à la clé. Disons que nous voulons le numéro de téléphone de Rachel. Disons simplement que Rich et nous voulons son numéro de téléphone. Vous pouvez accéder à la valeur d' un numéro de téléphone à l'aide de la touche. ce faire, nous utilisons la notation entre crochets, même manière que nous accédons aux indices de la liste. Mais au lieu d'un nombre, au lieu d'un index, nous fournissons une clé. Donnons donc à Rachel, par exemple permettez-moi d'appeler ce numéro Rachel, par exemple imprimons simplement ce numéro. Et voilà. C'est ainsi que nous répondons au numéro de téléphone. Nous pouvons faire la même chose avec Ross. Et cela fait la distinction majuscules/minuscules. Au fait. C'est le faux numéro de téléphone de Ross. Si je ne suis pas le boîtier, si c'est en minuscules, par exemple je vais avoir un message d'erreur indiquant qu'il n'y a pas de clé, clé nommée Ross dans ce dictionnaire. Encore une fois, en raison de la distinction majuscules/minuscules, c'est ainsi que vous pouvez lire les valeurs d'une touche. Comment écrire une nouvelle clé ? Supposons que nous souhaitions y ajouter un nouveau numéro de téléphone. Disons que nous le voulons, imprimons le dictionnaire tout de suite. Tout d'abord, laissez-moi effacer ma fenêtre de sortie. Ajoutons un nouveau numéro de téléphone. Les téléphones utiliseront donc la même syntaxe, la syntaxe entre crochets que nous utilisons pour obtenir des valeurs. Mais maintenant, tu peux écrire ta nouvelle clé. Nous allons donc ajouter Joey. Maintenant, si nous le faisons maintenant, nous essaierons d'obtenir une valeur à partir de la clé de jointure. Mais si vous faites des valeurs égales et un nouveau numéro de téléphone dans ce cas, saisissez un nouveau numéro de téléphone dans ce cas, nous allons créer une nouvelle entrée dans le dictionnaire. Nous allons créer une nouvelle clé et une nouvelle valeur. Ajoutons donc de la joie. Imprimons ensuite à nouveau le dictionnaire. C'était avant l'ajout de Joey, et puis c'est après l'ajout de Joe. Maintenant, Joe est là, Joe est maintenant à la fin. Vous remarquez que le dictionnaire n' est pas nécessairement dans l' ordre dans lequel nous l'avons créé. Par exemple, nous avons ajouté Rachel au début, mais elle est arrivée à la deuxième place. Pourquoi ça ? La raison en est que les dictionnaires sont créés de manière à les rendre très efficaces. Ils n'ont pas besoin de suivre la commande car il existe un mappage et, sous le capot, c'est ce qu'on appelle un pointeur. Les clés. Pointent directement vers la valeur qu'ils ont. Et il y a une, il y a une explication technique que nous n'avons pas besoin d'aborder pour le moment. Mais cela signifie que vous n'avez pas besoin l'ordre des clés, mais que vous n'avez pas besoin de garder les clés dans l' ordre, car vous pouvez simplement accéder à la valeur par la clé, que soit l'endroit où se trouve cette clé dans le dictionnaire. Cela étant dit, les dictionnaires possèdent trois propriétés principales , ce qui les rend uniques en Python. L'une d'elles est, comme je viens de le dire, qu'elles ne sont pas ordonnées, ce qui signifie que les clés ne sont pas en ordre. L'autre, c'est que les touches indiquent que ce n'est pas dans l'ordre. L'autre est que les clés sont uniques. Voyons un exemple de cela. Ajoutons à nouveau Joey. En fait, essayons d' ajouter une nouvelle, une nouvelle Rachel. Je vais juste taper 0000 pour que ce soit évident. Maintenant, exécutons ce morceau de code. Comme vous pouvez me voir, nous n'avons pas à le faire. Celle de Rachel, il n'y a qu'une seule Rachel. Ce que nous avons fait, c'est annuler cela. Et dans ce cas, c' est devenu un entier. Il ne s'agit donc que d'un seul zéro, car plusieurs zéros n'ont aucun sens. C'est donc un chiffre réel. Mais si je transforme cela en chaîne, nous verrons tous les zéros que nous avons ajoutés. Donc, comme vous pouvez le constater, nous avons remplacé Rachel, nous n'avons pas créé de nouvelle clé Rachel. C'est donc la deuxième propriété importante du dictionnaire. Les clés sont uniques et la troisième propriété importante est que les dictionnaires sont mutables, ce qui signifie que nous pouvons les modifier au fur et à mesure. Comme nous l'avons vu, nous avons créé un dictionnaire, puis nous modifions le dictionnaire d'origine. C'est ce qui les rend mutables Vous pouvez les modifier, les ajouter, supprimer des clés et des valeurs dans un dictionnaire. Maintenant, autre chose à laquelle il faut faire attention quand quelque chose est mutable. Si vous avez vu à quel point les listes sont modifiables et que vous gardez toujours un pointeur vers celle-ci, c'est celle que vous êtes en train de modifier. Laissez-moi vous en montrer un autre exemple. Je vais créer un dictionnaire vide appelé a, stocker dans une variable a. Et je vais créer une nouvelle variable B. Je vais dire que B est égal à a. Donc a est un dictionnaire vide. Et un dictionnaire vide, simplement ces deux crochets ondulés. Vous pouvez également taper, dicter, taper coché et ouvrir et fermer des parenthèses. Cela vous donnera le même résultat. Donc a est un dictionnaire vide, b est égal à a. Maintenant, ajoutons une valeur, une clé et une valeur à a. Disons que a est égal à un. Et imprimons A, et imprimons B. Alors, qu'en pensez-vous ? Prenez un moment pour essayer de réfléchir à ce qui va se passer. Mais en ajoutant une clé et une valeur à un ou à OneNote, techniquement, nous ne faisons rien pour être correct. Alors, exécutons ce code et imprimons le résultat. Maintenant, comme vous pouvez le voir, a et B sont exactement les mêmes. Un autre aspect important de la mutabilité des dictionnaires est qu'ils sont créés une seule fois et que vous pouvez toujours suivre le même dictionnaire. Donc, même si nous l'attribuons à plusieurs variables, même si je l'attribue, créez une variable appelée c et attribuez-la à V2. Et puis j'imprime c. Ils sont toujours le même dictionnaire, même si vous avez trois variables, ils ont le même dictionnaire. Par exemple, si je prends maintenant C et que j'y ajoute une nouvelle clé, et je dis C. Donc, trois, depuis la troisième lettre de l'alphabet, laissez-moi l'imprimer à nouveau. Comme vous pouvez le constater, a, B et C ont tous reçu la même mise à jour car ils suivent tous le même dictionnaire. Si vous voulez éviter cela, si vous voulez qu'ils soient des dictionnaires indépendants, il vous suffit d' initialiser ou créer un dictionnaire pour chacune de ces variables. Vous y voilà. Vous pouvez maintenant voir a a une clé unique, que B est vide, puis voir, parce que nous avons ajouté une clé C a ses propres valeurs. Ce sont donc les trois principales propriétés dont vous devez vous souvenir à propos des dictionnaires. Encore une fois, les clés ne sont pas en ordre. C'est parce que vous obtenez des valeurs à partir des noms des clés nettoyés, non à partir de l'ordre du dictionnaire. Les clés sont uniques , c'est ainsi que vous pouvez obtenir une valeur à partir d'une clé. Si vous avez plusieurs clés et que vous ne pouvez pas vraiment savoir quelle valeur obtenir à partir des clés, n'est-ce pas ? Nous devons donc les garder uniques. Et mutable signifie que vous pouvez modifier le dictionnaire à la volée. Pour cela, pour chaque dictionnaire, une seule copie est toujours modifiée, même si vous l'attribuez à d'autres variables. Bien, je vais maintenant vous montrer quelques opérations courantes concernant les dictionnaires. Permettez-moi de créer un nouveau dictionnaire avec certains. Clés et valeurs qu'il contient. Disons a, un, b, deux et c. La valeur de c sera trois. Excellent. Vous pouvez donc vérifier si quelque chose se trouve dans un dictionnaire. la même manière que nous pouvons vérifier si certains analystes de l'actualité, nous pouvons demander si, par exemple , un dictionnaire a, permettez-moi de changer le nom de ce dictionnaire. Appelons-le, appelons-le simplement diction, dictionnaire. Dictionnaire. Si a se trouve dans le dictionnaire, imprimez-le. Oui Sinon, imprimez. Non. Vas-y. Donc, a est dans les dictionnaires et nous obtenons oui. Disons f. Sinon, ce n'est pas un dictionnaire, alors nous dirons « Non ». Excellent. Que se passe-t-il donc si vous essayez d' obtenir la valeur d'une clé qui n'existe pas ? Nous l'avons déjà vu, disons si ce que nous savons ne figure pas dans le dictionnaire. Essayons d'imprimer cette valeur directement. Nous allons avoir une erreur. Et cette erreur est une erreur clé car F ne figure pas dans le dictionnaire. Il existe deux manières de vérifier s'il existe une clé dans le dictionnaire et, si c'est le cas, d'en obtenir la valeur. L'une des solutions serait, comme nous l'avons déjà fait ici, dire si f est dans le dictionnaire, puis d'imprimer la valeur de f. Alors laissez-moi me débarrasser de l'instruction else. Nous n'essaierons donc d'accéder à la valeur que si f se trouve dans le dictionnaire. Nous pouvons maintenant le faire avec un document dont nous savons qu'il se trouve déjà dans le dictionnaire. Ensuite, nous obtenons la valeur. Il existe maintenant un autre moyen d'obtenir une valeur. Et c' est un peu infaillible. Les dictionnaires ont une fonction appelée get. Maintenant, get est identique, fait essentiellement la même chose que la notation entre crochets. Je peux dire, stockons cela dans une variable appelée valeur. Je peux obtenir la valeur de la clé. Et je peux l'imprimer, ce qui en est une, comme nous le savons déjà. Mais si la clé n'existe pas, get vous donnera une valeur par défaut. Donc, dans ce cas, puisque f n'existe pas, nous obtiendrons une valeur par défaut de None. Mais vous pouvez également fournir une valeur par défaut pour cela. C'est donc un peu comme un interrupteur et disons, si la clé existe, donnez-moi la valeur de la clé, sinon donnez-moi une autre valeur. Dans ce cas, je pourrais dire que les valeurs par défaut seront une chaîne avec un seul tiret, par exemple et voilà. Donc, puisque f n'est pas dans le dictionnaire, nous allons obtenir la valeur par défaut, qui est le tiret. Maintenant, nous allons imprimer celui-ci ici cause de la déclaration if ici. Et voilà, nous avons le tiret. Donc, juste pour clarifier les choses. Cela revient à dire : disons que nous avons une clé et que nous voulons que les enfants soient f. Peut dire que si clé, le dictionnaire peut imprimer la valeur de cette clé à partir de notre dictionnaire. Maintenant, la clé sera cette variable que nous avons créée. Sinon, imprimez une valeur par défaut Dans ce cas, créons-la en tant que variable La valeur par défaut sera un tiret. Donc, si les clés du dictionnaire impriment la valeur à partir de cette clé, sinon, imprimez la valeur par défaut. Laissons ça. Nous obtiendrons une valeur par défaut. Cette fonction dot get fait exactement la même chose que ces quelques lignes de logique. Grille. C'est ainsi que nous pouvons accéder à des valeurs à partir de clés et comment écrire de nouvelles clés dans un dictionnaire. Maintenant, comment supprimer des clés d'un dictionnaire ? Simplifions ce dictionnaire ici. Laissons simplement la clé A. Et laissez-moi, titre d'exemple, ajouter une nouvelle clé qui sera B. Encore une fois, même syntaxe. Mais maintenant, nous sommes égaux à. Alors maintenant, la clé B sera égale à. Maintenant, permettez-moi de supprimer un du dictionnaire. Pour supprimer une clé, il existe une fonction appelée pop. Pop supprimera un, prendra le nom d'une clé, et nous la supprimerons du dictionnaire. Imprimons donc ce dictionnaire. Maintenant, souvenez-vous que nous initialisons le dictionnaire avec une seule clé, c'est a. Nous ajoutons b, puis nous faisons apparaître , il en supprimera a. Alors maintenant, notre nouveau dictionnaire est en cours de création. Maintenant, il y a un petit effet secondaire à pomper. C'est-à-dire que vous obtenez la valeur de la clé que vous supprimez, que vous avez supprimée. Donc, si je stocke le résultat de pop dans cette variable, je vais obtenir la valeur de a, qui est celle que nous avons supprimée du dictionnaire. C'est la valeur 1. Maintenant, il faut savoir que si vous fournissez à pop une clé qui n'existe pas, par exemple f. Encore une fois, pop va vous donner une erreur de clé parce que la clé n'existe pas. Ainsi, lorsque vous utilisez Pub, il est bon de vérifier si votre clé se trouve dans le dictionnaire, puis de la supprimer. Mais pop possède une autre fonctionnalité qui vous permet de ne pas avoir à vérifier si une clé se trouve dans le dictionnaire. Et c'est en fournissant un argument distinct. Deuxième argument, désolée. Encore une fois, si nous l' exécutons tout seul, nous obtenons une erreur car F n' est pas dans le dictionnaire. Mais si nous fournissons un deuxième argument, la même manière que GET a une valeur par défaut, pub obtiendra une valeur par défaut de quatre. Donc, si je tape non, par exemple I. Imprimer supprimé, j'imprime la variable distante. Cela ne va pas se plaindre et cela va en fait me donner cette valeur par défaut. Nous essayons de le fournir. n'y a donc pas de clé nommée f. Elle prend donc cette valeur par défaut. Si je le remplace par un autre tiret, par exemple comme avant. Eh bien, il y en aura, puisque f n'existe pas, ce sera la valeur par défaut. Mais si nous essayons de faire apparaître un, nous obtiendrons la valeur de a parce que a existe réellement. Cela n'a pas fonctionné c'est parce que je n'ai pas exécuté tout le code. Je suis désolée, je dois exécuter l'intégralité du code. Vous y voilà. Maintenant, supprimée, la valeur par sprint est la valeur de a. Deuxième impression, le résultat dans le dictionnaire après avoir ouvert un. Mais encore une fois, nous pouvons maintenant exécuter l'ensemble du code. Si je supprime F, le dictionnaire résultant contient toujours à la fois un , puis la version bêta que nous avons ajoutée. Ensuite, nous avons imprimé la valeur par défaut de la clé que nous n'avons pas pu supprimer. La dernière chose que je veux vous montrer à propos des dictionnaires est de savoir comment obtenir une liste de clés et de valeurs. Permettez-moi donc de supprimer le reste de ce code et d'ajouter quelques clés supplémentaires à mon dictionnaire. Encore le même exemple. Disons donc que je veux savoir quelles clés se trouvent dans le dictionnaire. Imaginez que ce dictionnaire contienne des milliers d'éléments. Les dictionnaires ont une fonction appelée touches. Et cela vous donnera une liste des valeurs de ces clés. Maintenant, désolé, cela vous donnera une liste des clés du dictionnaire. Donc, si nous stockons cela dans une variable et que nous l' imprimons, laissez-moi effacer ma fenêtre de sortie. Vous y voilà. Vous obtenez donc une liste des clés à l'intérieur de ce dictionnaire. Vous pouvez donc utiliser cette liste pour accéder à des valeurs à partir de celle-ci. Ou si vous voulez une liste simple de valeurs sans les clés, il existe une fonction appelée valeurs. Et je vais simplement vous donner une liste des valeurs du dictionnaire. Maintenant, n'oubliez pas que les dictionnaires n'ont pas d'ordre. Ainsi, l'ordre de ces valeurs, ainsi que l' ordre des touches, ne feront pas suivront pas ce à quoi vous pourriez vous attendre. Dans ce cas, nous avons imprimé les valeurs, mais vous pouvez constater qu'elles ne sont pas dans l'ordre dans lequel nous les avons saisies, ce qui est très bien. s'agit simplement d'une liste de valeurs, mais nous souhaitons généralement interroger des valeurs à partir d'une clé, pas directement à partir d'ici. Et il y a une autre fonction que je veux vous montrer, appelée items, mais les îles vous donneront une liste contenant les paires de clés et valeurs sous forme de tuples. Permettez-moi donc de l'enregistrer dans une variable appelée items et de l'imprimer. Vous avez donc une clé, désolé, vous avez une liste. Et à l'intérieur de cette liste, vous avez ces paires, qui sont des tuples. Et vous avez la clé et la valeur de cette clé. Clé et valeur, clé et valeur. Ainsi, vous pourriez parcourir en boucle toutes les clés du dictionnaire. Clés du dictionnaire. Ce sera donc quatre clés dans les touches à points du dictionnaire. Et il imprimerait toutes les clés du dictionnaire. Maintenant, si nous faisons une valeur et disons que pour la valeur, dans les valeurs, ce sont des valeurs triées et non un style de volume comme le mien. Quelle est mon erreur ? Pour les valeurs de volume ? Ensuite, nous repassons ces valeurs en boucle. Maintenant, vous pouvez également faire de même avec les objets. Mais maintenant, souvenez-vous de ces objets. Si je me contente d'imprimer des éléments, je me souviendrai de chacun de ces éléments, chaque élément de la liste, la clé et de la valeur. Tu peux le déballer. C'est ce qu'on appelle déballer. Lorsque vous avez plusieurs valeurs dans un tuple ou une liste, vous pouvez les décompresser directement dans la boucle for. Vous pouvez dire pour la valeur d'une virgule clé. Donc, en gros, pour chaque élément de la liste. En fait, laissez-moi d'abord vous montrer ceci. Imprimons chaque élément de la liste. Donc, comme vous m'avez vu, supprimez ceci. Comme vous pouvez le constater, chaque élément est une paire, une paire composée d'une clé et d'une valeur. Nous pouvons donc dire que nous pouvons les décompresser pour obtenir une valeur de virgule clé. Dans chaque élément du dictionnaire. Nous pouvons en fait l'imprimer séparément. Valeur du point G. Nous en avons donc un et nous en avons un. Nous verrons où il y en a trois. Ou nous pouvons les rassembler dans la déclaration imprimée. Comme ça. Et alors que nous obtenons le même résultat parce que nous imprimons un tuple. Mais laissez-moi le faire sous la forme d'une chaîne de caractères, valeurs d et c que nous pouvons utiliser comme fonction de format point. Et cela devrait être un peu plus clair. Donc, la clé a est et la valeur de a est un. Encore une fois, il s'agit d'utiliser la fonction du fer à repasser et déballer chacun de ces objets en tant que clé et valeur. Ce sont des dictionnaires. Je crois vous avoir montré certaines des principales choses que vous pouvez faire avec eux. Mais bien sûr, ils ne se limitent pas à cela. Ils constituent un outil formidable pour gérer les données. Je vous encourage vivement à jouer un peu plus avec eux. Cela dit, vous devriez maintenant avoir suffisamment de connaissances pour pouvoir les utiliser plus efficacement dans votre codage quotidien. 34. Projet final - Bibliothèque de Poses : Intro: Dans ce projet, nous allons créer une bibliothèque de publications. Pour cette bibliothèque d'articles, qui ressemble à ceci. Nous avons déjà écrit les fonctionnalités dont nous aurons besoin et qui ont été créées dans le projet précédent. Vous allez apprendre à créer un tout nouvel outil qui tire parti du code écrit par vous ou par quelqu'un d'autre pour un autre projet. La principale chose que nous devons construire en plus de cet autre code est la possibilité d' enregistrer des poses dans des fichiers. Vous allez donc apprendre à gérer des fichiers. La deuxième partie du travail sera consacrée à la création de l'interface utilisateur. L'interface utilisateur est un peu plus complexe. Il est doté d'une section repliable. Nous allons prendre en compte les informations de l'utilisateur et il y une liste de poses remplie à partir de fichiers sur le disque. Maintenant, l'avantage de sauvegarder les fichiers du processus 2 est que nous pouvons désormais les partager entre mes sessions ou même avec d'autres personnes sur différents ordinateurs. Je vais donc vous montrer comment fonctionne cet outil. J'ai déjà enregistré quelques articles à l'avance. Nous pouvons les appliquer à un seul personnage comme nous l' avons déjà vu auparavant, ou à plusieurs personnages. J'ai des postes assis. Et nous pouvons également enregistrer des poses de la scène. Disons que nous voulons garder une pose pour cet accessoire. Posons le chapeau par terre. Nous allons le nommer, nous l'avions sur le terrain. Enregistrez la pose. Et quand je sauvegarde cette pose, vous voyez qu'elle est apparue ici tout de suite. Et cela est enregistré dans un fichier. Ainsi, encore une fois, il peut être partagé entre sessions ou entre ordinateurs avec d'autres personnes. Ensuite, je peux continuer et appliquer cette pose à ces personnages. C'est donc un outil que nous allons créer. 35. Créer le package Python: La première chose que nous allons faire est de créer la structure de fichier pour notre code. Revenons donc à PyCharm et nous avons ici les autres modules de nos autres projets. Maintenant, je vais en créer un nouveau, mais je vais créer un répertoire car celui-ci nécessitera plus de pièces que les autres projets. Je vais donc cliquer avec le bouton droit sur la racine de notre projet, puis cliquer sur Nouveau. Je vais créer un nouveau package Python. Ensuite, nous lui donnons un nom. Je vais l'appeler bibliothèque Pose Underscore. PyCharm a maintenant créé un nouveau dossier ou un nouveau répertoire contenant un fichier. Je vais revenir à ce dossier dans un instant. Mais si vous regardez le dossier lui-même, c'est tout simplement qu'il agit d'un répertoire de scripts pour votre Maya dans le dossier Maya de vos documents. Et à l'intérieur de celui-ci, il y a ce répertoire avec un seul fichier appelé underscore, underscore, underscore point PY. Ensuite, je vais créer un autre fichier, juste un seul fichier Python. là que nous allons structurer ce code ou que ce projet va séparer les fonctionnalités de l'interface utilisateur. Il s'agit généralement d'une bonne pratique. Nous avons déjà créé l' interface utilisateur directement dans le module de post-transfert, qui contient une fonctionnalité. J'ai choisi de le faire parce qu'il y avait un premier outil que nous utilisions pour créer une interface utilisateur. C'était également un peu plus simple, mais il est généralement recommandé de séparer votre interface utilisateur de vos fonctionnalités. Cela vous donne la possibilité de réutiliser les fonctionnalités, ce que nous allons faire avec ce projet, et de garder votre interface utilisateur complètement séparée. Cela vous donne également la possibilité de créer plusieurs interfaces utilisateur qui tirent parti des mêmes fonctionnalités à partir d'un seul endroit. Je vais donc créer un fichier Python. Je vais l'appeler « core ». J'appelle, je l'appelle core parce que ce sera la fonctionnalité principale de la bibliothèque. Et je vais créer un autre fichier appelé UI goes. Notre code d'interface utilisateur sera affiché ici. Maintenant, revenons en arrière. Ajoutons quelque chose au module de base. Ajoutons simplement une fonction de test afin que nous puissions la tester et nous assurer qu'elle fonctionne. Je vais taper Hello Core Four, Pose Library. Super. Maintenant, à quoi sert un fichier ? Si on le regarde, il est en fait complètement vide. Il s'agit simplement d'un fichier texte appelé double soulignement init, double soulignement point p-y. Si je n'avais pas ce fichier, Maya nous donnerait une erreur ou Python nous donnerait une erreur car c'est le fichier qui indique à Python de traiter le répertoire comme un module. Permettez-moi donc de supprimer ce fichier. Cela va se refléter ici dans PyCharm. Essayons d'importer cette fonction. Permettez-moi de revenir à Maya. Ouvrons l'éditeur de script. C'est ce que nous appelons la bibliothèque postale. Nous allons donc dire à partir de la bibliothèque de poses, importer le noyau. Et nous savons que Core possède une fonction appelée hello qui affichera simplement notre message de bonjour. Alors laisse-moi l'agrandir un peu. Exécutons le code. Vous pouvez voir Python ne dit aucun module nommé bibliothèque de poses. Maintenant, que se passe-t-il si nous ajoutons ce fichier d'initialisation par kin ? Créons un nouveau fichier Python. Je ne vais pas créer de package Python. D'ailleurs, lorsque vous dites package Python, pycharm semblera simplement créer un répertoire avec ce fichier d'initialisation. Mais dans ce cas, je vais créer un fichier Python. Je vais juste l' appeler underscore, underscore init, underscore, underscore point p-y. Essayons de le lancer encore une fois. Et voilà. Maintenant, notre code fonctionne et nous recevons ce message de notre fonction. C'est donc ce qui est important dans les dossiers des Inuit. Vous n'avez rien à y mettre. Tu peux, si tu veux. Mais ils doivent être présents pour le répertoire soit traité comme un module. Si vous avez des sous-modules, ce sera pareil. Appelons-le, appelons ce nouveau module. Il s'agit d'un exemple. Vous voyez qu'il y a un fichier d'initialisation dedans. Ensuite, vous pouvez ajouter d'autres fichiers Python dans votre nouveau module. Encore une fois, il s'agit simplement de dire à Python de traiter ce répertoire comme un module afin qu' il puisse être importé. Super, laisse-moi supprimer ça. Et voilà. Nous avons donc la structure que nous allons utiliser pour créer nos deux cœurs qui comporteront toutes les fonctionnalités, et l' interface utilisateur contiendra tous les éléments de l'interface utilisateur. 36. Travailler avec des fichiers: Comme je l'ai déjà mentionné, nous allons réutiliser la majeure partie du code du projet précédent. Mais un élément clé que nous devons y ajouter est la possibilité de sauvegarder des fichiers. Apprenons donc à travailler avec des fichiers. Avant de commencer à enregistrer des poses. J'ai créé un répertoire ici. C'est juste en dessous de mon lecteur C. Il y a un dossier de démonstration en python , puis un dossier de bibliothèque de publication. Je vais enregistrer mon fichier ici. Commençons par un simple fichier texte afin apprendre à créer des fichiers à partir de zéro. Je vais appeler, je vais indiquer mon chemin vers mon répertoire comme leur chemin. Je vais ajouter un r ici. Je ne crois pas qu'aucun de ces personnages ne sera évadé. Connaître. Mais si vous deviez avoir, par exemple une bibliothèque de nez de type N, votre personnage s'échapperait. Comme vous pouvez le voir, le tiret est une barre oblique inverse, n est le caractère de retour. Cela vous donnera une nouvelle ligne. Il s'agit donc en fait de diviser le chemin en deux lignes. Donc, si, pour une raison quelconque, votre chemin se trouve dans votre répertoire contient un caractère spécial appelé caractère d'échappement. Et l'autre d'entre eux serait T, par exemple, une bibliothèque. Cela vous donnerait un onglet. Ou un a vous donnera un caractère supplémentaire. Donc, une façon d'éviter cela est d'échapper à ces personnages qui échappent. Par exemple, revenir à la bibliothèque Nose, qui revient à la barre oblique inverse n est une nouvelle ligne. Si j'ajoute une nouvelle barre oblique inverse, elle y échappera. Ou vous pouvez faire une barre oblique vers l'avant. Et cela évitera également le problème. Cependant, lorsque vous copiez/collez des parties depuis Windows, vous obtenez généralement cette barre oblique inverse. Donc, remplacer le tout par deux barres obliques peut parfois être un peu fastidieux. Donc, un moyen simple de le faire est de mettre un r devant cette chaîne. Et cela le transformera en ce que l'on appelle une chaîne brute. chaîne de flèches signifie essentiellement ignorer les caractères d'échappement. Ces finalités. Maintenant, le R est également utilisé pour quelque chose appelé rejets, qui est un langage d'expression que vous pouvez utiliser pour analyser des chaînes. Mais nous n'allions pas y toucher ici. C'est juste bon de savoir que R est en fait destiné aux rejets. Mais nous pouvons l'utiliser pour éviter des problèmes tels que, par exemple, le fait d'avoir cette nouvelle ligne composée de personnages d'évasion. OK, alors permettez-moi de reprendre mon parcours actuel. Maintenant, j'ai besoin d'un nom de fichier. Nom du fichier, nous allons l' appeler text point TXT. Et ça doit être une chaîne, non ? Donc, en fait, nous le pouvons, unissons-nous. Je vais te montrer quelque chose. Je vais utiliser le module OS. Je vais donc taper import OS. Et je vais dire que le chemin complet est égal au chemin point du système d'exploitation. Donc, c'est toujours l'abréviation de système d'exploitation. Il s'agit donc d'une bibliothèque qui traite des actions du système d'exploitation. Il contient un module de chemin qui vous aide à définir les chemins de fichiers. Et il existe une fonction de jointure qui vous permet de joindre plusieurs chemins. Donc, si vous avez plusieurs répertoires et que vous souhaitez les réunir, nous pouvons simplement le faire, par exemple tester ce dx dy. Ou nous pourrions aussi parler de votre perte de chemin. Par exemple, il nous manque la barre oblique inverse et le nom du fichier. Mais ils ont toujours eu Path Join qui nous donnera automatiquement cette barre oblique inverse et nous nous assurerons que le chemin est valide. Et s'il y a des personnages qui s'évadent, il leur échappera également pour nous afin que nous n'ayons pas à inquiéter de ce qui se passe sur le chemin. Je vais dire que leur chemin est un coma, un nom de fichier. Joignez-vous à ces deux-là pour moi. Nous allons imprimer le chemin complet. Et voilà. Il s'agit d'un chemin complet vers notre fichier, fichier. Je vais donc réellement appeler ce chemin de fichier. Génial. Alors maintenant, ce fichier n'existe évidemment pas encore. Nous allons le créer. Pour créer un fichier, nous utilisons une fonction appelée open. Appelons ça. Appelons cela F. Appelons le fichier f. Je ne l'appelle pas fichier car le fichier est une autre fonction intégrée à Python. Et je ne veux pas le remplacer. Je pourrais donc l'appeler fichier de soulignement, mais dans ce cas, je vais simplement l'appeler f. Maintenant, nous voulons l' ouvrir par un chemin. Ensuite, lorsque vous ouvrez un fichier, vous devez choisir le mode, le mode dans lequel vous souhaitez l'ouvrir, et il s' agit d'une seule chaîne. Les principaux modes que vous souhaitez. J'ai décidé d'écrire dans le fichier ou de le lire. Dans ce cas, nous voulons écrire un nouveau fichier. Nous allons donc dire Fichier ouvert, ouvrez le chemin du fichier en mode écriture. Alors nous allons dire point F, n'est-ce pas ? Ainsi, ce que vous obtenez lorsque vous ouvrez un nouveau fichier est en fait un objet de fichier. Voyons donc à quoi cela ressemble. Si j'imprime simplement f cela me dira qu'il s'agit d'un fichier ouvert. Serait en mode écriture à une adresse en mémoire. Si je dis, donnez-moi le type, voilà, cette fonction vous donnera le type d'un objet. Cela me dira que ce type est un fichier, c'est pourquoi je ne voulais pas nommer mon fichier, mon fichier variable, car je remplacerais cette date. Génial. Nous savons donc maintenant que f est un objet de fichier. Un objet est en fait n'importe quel type en Python, par exemple les chaînes sont des objets, les listes sont des objets. Donc, tout comme ceux-ci, ces objets de fichier ont une fonction appelée write. La fonction d'écriture sera kin, du texte ou une chaîne avec du texte et des textes pour mon fichier. Excellent. Maintenant, quelque chose de très important à retenir avec les fichiers est qu'une fois que vous ouvrez un fichier, vous devez le fermer. Pour fermer un fichier. Dans ce cas, vous pouvez faire f, fermer le point, puis appeler cette fonction. Si vous ne le faites pas, votre fichier risque rester ouvert, d' être corrompu et de se casser. Il est donc généralement dit que c'est toujours une très bonne idée, bonne pratique, de fermer vos fichiers. Alors laissez-moi exécuter ce code. Et allons-y et voyons ce qui s'est passé. Excellent, nous avons donc un nouveau fichier texte avec les textes que nous avons écrits à l'intérieur. Génial. L'étape suivante consiste à lire les fichiers. Permettez-moi donc de modifier ce fichier avec de nouveaux textes afin qu'ils puissent être lus à partir de Python. Allons-y, écrivons un nouveau texte. Lisez à partir de Python. Sauvegardons ce fichier. Pour ce qui est de la lecture, c'est très similaire à l'écriture. Tout cela reste le même. Nous voulons toujours ouvrir le fichier, mais nous voulons l' ouvrir en mode lecture. Ce serait notre même chemin de fichier ouvert ou que le mode. Et maintenant, au lieu d'écrire, nous voulons lire ce fichier. Je vais donc supprimer tout cela et utiliser la fonction point droit. Eh bien, désolé, lisez la fonction. Et je vais stocker le rouge, tout ce que nous lisons dans le fichier dans une variable appelée content. Et read vous donnera une chaîne avec le contenu du fichier. Et encore une fois, après avoir lu, nous voulons fermer ce fichier. Ensuite, je vais imprimer des continents. Et voilà. Le contenu est donc exactement la chaîne que nous avons obtenue du fichier. C'est la base de l' utilisation de fichiers. C'est très simple, c'est très simple. La principale chose à retenir est de fermer votre dossier. Maintenant, si vous ne voulez pas vous soucier de fermer le fichier, car il est très facile de l'oublier. Il existe une autre façon de procéder, et je vous recommande vraiment de le faire de cette façon. Je vais utiliser ce que l'on appelle un gestionnaire de contexte. Maintenant, saisissons la largeur, le chemin du fichier ouvert. C'est la même chose que celle dont nous avons parlé plus haut. Nous allons ouvrir le fichier en mode radian. Vous tapez f, puis deux-points. Et à l'intérieur de cette déclaration de largeur, je vais dire que le contenu est égal à f point lu, comme avant. Donc, ce qui se passe ici c'est que nous ouvrons toujours le fichier en mode radian, où il l'enregistre toujours dans la variable f. Mais nous le faisons dans ce gestionnaire de contexte. Un gestionnaire de contexte garantit que quelque chose se passe avant que votre code ne soit exécuté. Donc, avant de lire le dossier, quelque chose va se passer. Et cela garantit également qu'une fois votre code exécuté, quelque chose se produira avant de passer aux lignes de code suivantes. Dans ce cas, nous n'avons plus besoin de fermer le fichier car le gestionnaire de contexte le fermera pour nous. Et puis nous n'avons pas non plus besoin de cette diapositive. Maintenant, voyons si nous obtenons les mêmes résultats que nous avons obtenus. Nous avons obtenu exactement le même résultat. Nous pouvons donc faire de même lorsque nous écrivons dans un fichier. Nous pouvons le faire passer dans le bon mode. Et bien sûr, nous n'avons pas besoin d'utiliser f comme variable. Nous pouvons utiliser FYI si nous le voulons ou tout ce que vous voulez, tant que c'est le cas, cela dépend de vous. À condition, bien sûr, de réutiliser cette variable dans votre code. Alors ouvrez le fichier et appelez-le ainsi, vous ferez quelque chose que nous sommes en train d'écrire. Écrivons donc un nouveau texte. Exécutons ce code. Et si nous vérifions le fichier, notre nouveau texte y a été écrit. Vous pouvez donc le faire de toute façon. Vous pouvez ouvrir le fichier manuellement et le fermer manuellement si vous le souhaitez. Mais je recommande vivement d'utiliser simplement ce modèle, qui est le gestionnaire de contexte. 37. Enregistrer des poses dans des fichiers JSON: Nous savons comment créer des fichiers. Nous sommes donc maintenant prêts à enregistrer des poses. Nous allons utiliser un format spécial pour les fichiers appelé Jason. Jason, le format JSON est très similaire à l'apparence des dictionnaires. Il existe une bibliothèque en Python conçue pour fonctionner spécifiquement avec ce type de fichiers. Alors, levons-nous dans la pose que nous pouvons enregistrer. Nous allons utiliser notre code de transfert des publications. Et nous allons conserver toutes ces séries. Permettez-moi de faire une pause et de parler de transfert de pose. Et notre fonction s'appelait GET post deck. Et nous devons transmettre un espace de noms. Super, alors, publions le post pour cette casquette ici. Et l'espace de noms de ce personnage est Luna, une. C'est un nouveau personnage que je viens d'ajouter. Appelons donc cette pose. La pose est égale au post-transfert qui est publié. Voyons à quoi cela ressemble. Laisse-moi juste prendre cette pose. OK, voilà. C'est ce dictionnaire avec quelques valeurs. Ce petit dictionnaire. C'est super, rien que pour le chapeau. Nous voulons maintenant enregistrer ce fichier. Maintenant que nous utilisons le format JSON, je vais continuer et le conserver comme nom d'extension pour ce fichier. Et nous allons le faire, nous allons également utiliser le gestionnaire de contexte. Je vais l'appeler F, encore une fois, par souci de simplicité. Mais maintenant, au lieu d' utiliser des épitaphes, d' accord, nous allons utiliser quelque chose. Nous allons utiliser la bibliothèque JSON que nous avons importée. Donc, encore une fois, importez JSON et c'est Jason sans JSON. Et nous allons utiliser cette bibliothèque pour écrire le fichier. Maintenant, la bibliothèque JSON l' appelle dumped. Ils vont essentiellement vider un dictionnaire dans un fichier. Maintenant, nous devons le faire, nous devons transmettre par la poste. Permettez-moi d'être plus explicite et de l'appeler post dict. Nous allons y déposer le post dict pendant que nous devons encore ouvrir le fichier et le fermer. Maintenant, nous allons passer cet objet de fichier dans JSON Dot Dump. Laissons ça et voyons à quoi ça ressemble. Nous accédons à notre dossier ici. Nous avons ce fichier texte, toujours avec notre dictionnaire. Et c'est exactement ce que nous voulons. Nous avons donc maintenant nos publications enregistrées dans un fichier. Maintenant, une autre chose que j' aimerais faire est formater le fichier un peu plus facilement maintenant. Mais l'avantage d'utiliser la bibliothèque JSON est que c'est exactement ce que vous pouvez faire. Il existe un argument appelé indent. Je vais dire que je veux ou que je participe à une supplémentation. Donc, si je réexécute ce code, il réécrira ce dictionnaire dans le fichier. Cette fois, bien formaté. Il y a quatre espaces d'indentation ici, et c'est plus facile à lire de cette façon. Allons-y et créons le code qui va vous permettre d'économiser. Ou peut-être que la façon dont nous allons travailler avec cela est le nom du fichier, sera le nom des publications. Et bien sûr, le contexte du fichier sera celui des valeurs réelles de la publication. Passons donc à PyCharm et passons à notre module de base. Repartons de zéro. Nous allons avoir besoin, nous allons avoir besoin du module OS. Nous aurons besoin de la bibliothèque JSON ou ce seront toujours une bibliothèque et une bibliothèque JSON. Réunissons en fait tout cela dans un graphique à secteurs. Génial. Nous devons donc savoir, puisque ce sera le code, le code de notre outil, nous allons vouloir savoir où nous enregistrons les poses. Je vais donc en faire une variable globale. Tu l'appelles root là-bas. Maintenant, ce que je veux dire par variable globale, c'est que cette variable sera accessible à tout ce qui se trouve à l'intérieur de ce module. Même si nous créons une fonction. Disons que nous avons cette fonction ici. Nous pouvons utiliser une variable globale à l'intérieur de cette fonction car elle n'entre pas dans le cadre de cette fonction. Maintenant, si je devais créer une autre variable ici, cette variable n'est disponible qu' à l'intérieur de cette fonction en raison, encore une fois, de la portée. C'est donc un avantage à propos des variables globales. Et comme ils sont mondiaux, la convention est de les mettre tous en majuscule. Maintenant, ce n'est plus nécessaire. Cela ne cassera pas votre code si vous avez des minuscules ici. Mais comme convention pour montrer clairement qu' il s'agit d'une variable globale, c'est une variable importante définit une valeur que vous souhaitez voir constante. Nous le fabriquons. majuscules. Génial. Nous voulons donc également connaître l'extension. Nous allons donc écrire une extension. Faisons simplement EXT. L'extension sera dot json. Excellent. Nous devons donc créer une fonction pour écrire des octets. Tapons def, à droite, pose dans un fichier. Nous devons maintenant savoir quel sera le nom du message. Nous allons nous disputer après la naissance. Nous devons connaître le contenu du fichier, n'est-ce pas ? Nous avons donc besoin de ces dictionnaires. Excellent. Donc, dans ce cadre, nous allons essentiellement faire ce que nous avons fait dans Maya avec quelques modifications. Le chemin du fichier sera donc le répertoire racine, qui est une sorte de répertoire global pour nos besoins , défini ici. Ainsi, quiconque utilise cette fonction n'a pas besoin de savoir où enregistrer les publications. C'est ce que nous définissons dans l'outil. Mais nous avons besoin de connaître le nom. Maintenant, le nom de la pose ne contient pas l'extension, car nous ne voulons pas que quiconque utilise cette méthode. Nous voulons simplement qu'ils nous donnent le nom des publications. Nous nous occuperons de cette extension. Alors appelons, créons une nouvelle variable appelée filename. Et nous allons simplement associer ce nom et l' extension. Permettez-moi de mettre fin à cette période et à la prolongation. Nous nous en occuperons dans le cadre de cette fonction. Ce sera donc le nom du message, l'extension point, nom de la pose en premier lieu, puis extension EXE point. Génial. Et maintenant, nous pouvons joindre le répertoire racine et le nom du fichier, et ce sera notre chemin de fichier. Excellent. Ensuite, le post-dictionnaire nous est fourni . Nous n'avons pas besoin de l'obtenir. Ensuite, nous enregistrons simplement le fichier. Et c'est tout. C'est génial. Testez-le très rapidement. Revenons donc à Maya. Et créons un nouvel onglet Python. Nous allons importer depuis la bibliothèque de photos. Importez le noyau. En fait, je vais nommer son noyau en tant que noyau de bibliothèque, juste pour le rendre un peu plus explicite, noyau de la bibliothèque écrit des articles par points dans File. Et nous avons besoin d'un dictionnaire des oppositions. Alors laissez-moi, laissez-moi, laissez-moi importer, importer le transfert de soulignement des articles. Et obtenons les deux dictionnaires de la même manière que nous le faisions auparavant. Faites-en deux ou plusieurs, collez-les ici. Nous devons donc nommer la pose que sera, appelons-la simplement première pose. Et nous devons fournir le dicton du dictionnaire. Génial. Permettez-moi donc de m'assurer que ma sélection est toujours là. Sélectionnez le chapeau. Nous allons obtenir le dictionnaire des poses. Vous pouvez ensuite l'écrire dans un fichier. L'objet n'a aucun attribut, n' est-ce pas ? Publier un fichier. Bien sûr, comme nous ne l'avons pas fait, nous ne l'avons pas rechargé. Rechargeons. Parce que nous avons ajouté du code, nous devons recharger ce module. Et voilà. Maintenant, si nous consultons notre fichier, nous en avons un nouveau. J'ai fait une faute de frappe. Je suis désolée, tout d'abord, je suppose que cela devrait être le premier, mais nous avons le contenu de l'article dedans. Génial. Nous pouvons donc maintenant écrire deux fichiers de publication. 38. Lire les poses de fichiers JSON: Nous devons maintenant lire les poses à partir d'un fichier ou un post à partir d'un fichier. Créons donc une nouvelle fonction appelée red hose from file. Et tout ce dont nous avons besoin ici, d'ailleurs, c'est de laisser deux espaces entre mes fonctions, juste pour rendre les choses un peu plus nettes ou plus organisées. Tout ce dont nous avons besoin pour cette fonction est un chemin de fichier. Maintenant, cela se fait de la même manière que l'écriture de fichiers, mais nous devons faire le contraire. Bien sûr, nous devons le lire. Nous allons donc utiliser le gestionnaire de contexte. Nous allons ouvrir le fichier en mode radian. Et nous allons à nouveau utiliser la bibliothèque JSON, mais pour lire le fichier. Maintenant, dump téléchargera un dictionnaire dans un fichier et load chargera un dictionnaire à partir d'un fichier. Maintenant, tout ce que nous devons fournir à la fonction de chargement est le fichier à partir duquel nous voulons charger. Et nous allons enregistrer cela dans une variable que nous pouvons appeler elle extrait des données parce que c'est ce que c'est. Ou post dict. Nous allons en tirer un dictionnaire. Le gestionnaire de contexte se chargera de fermer le fichier pour nous, bien sûr, puis nous pourrons retourner la pose. Maintenant, ce qui est cool avec les gestionnaires de contextes , c'est que même si vous y retournez, ce qui signifie que nous mettons fin à la fonction, le fichier fermera tout de même avant de quitter la fonction. C'est donc l' avantage des gestionnaires de contexte : quoi que vous fassiez avantage des gestionnaires de contexte , ils s'assureront que tout ce qui doit être fait lorsque vous aurez terminé l'exécution du code qu'ils contiennent se produira. Super. Nous y sommes, nous pouvons maintenant lire un fichier. Testons cela rapidement. Nous voulons donc lire. Faisons-le ici. Pose à partir du fichier, sera égale au cœur de la bibliothèque. Lisez de la prose, des articles à partir d'un fichier. Et le chemin du fichier, bien sûr, est celui de ces fichiers que nous voulons lire dans le premier article, par exemple , alors laissez-moi copier ceci. Fournissons ce chemin de fichier. Je vais juste l'écrire. Pour un conjoint, y compris ma faute de frappe. Nous sommes censés placer des points JSON. Ensuite, nous pouvons imprimer la pose à partir de la bile. Et bien sûr, comme nous avons apporté quelques modifications, nous devons recharger notre module. Ensuite, je peux utiliser ma fonction. Maintenant, il indique un nom de fichier non valide. OK, c'est mon personnage d'évasion. OK, permettez-moi simplement d'ajouter le r devant cette chaîne pour éviter les caractères qui s'échappent. Et voilà. Maintenant, publier depuis un fichier est le répertoire est un dictionnaire provenant directement du contenu de ce fichier. Excellent, nous pouvons maintenant lire et écrire des fichiers. Avant de passer à autre chose, je ne veux pas oublier de faire mes chaînes de documents. Je suis désolée pour ça. Faisons donc en sorte que Ride doive des données dans un fichier. Le nom du message sera alors une chaîne du fichier résultant. Exemple. Encore une fois, ce que vous mettez dans le document dépend de vous. Tant que c'est suffisamment descriptif et utile. Faites une pause, l'acte sera un dictionnaire et nous dirons le contenu de la pose. Et nous ne retournons rien dans ce cas. Faisons ensuite de même pour la fonction de lecture. Bridge, pose des données. Dossier. Le chemin du fichier sera une chaîne. Je pense que celui-ci est très explicite. Ajoutons simplement un fichier à lire. Ensuite, la valeur de retour sera un dictionnaire. Un dictionnaire. La prochaine chose que nous devons faire est de connaître les poses que nous avons dans le répertoire afin de pouvoir les remplir dans la bibliothèque. Cela signifie que nous devons récupérer tous les fichiers dans le répertoire racine que nous avons choisi. Donc, comme je l'ai dit, le nom du fichier sera le nom de la pose et le contenu du fichier sera les valeurs du message. Allons-y et récupérons les fichiers dans ce répertoire. Nous pouvons à nouveau utiliser la bibliothèque du système d'exploitation. Laisse-moi y retourner. Permettez-moi de supprimer tout ce code dont nous n'avons plus besoin. Quittons simplement la bibliothèque du système d'exploitation. Le répertoire avec lequel nous travaillons. Remettons-le ici. Il y a une fonction à l'intérieur de la bibliothèque du système d'exploitation appelée list. Ce qu'il faut, c'est un chemin de répertoire, et il vous donnera une liste de tout le contenu de ce répertoire. Nous pouvons donc dire que puisqu'il s'agit d'une liste, nous pouvons parcourir cette liste en boucle. On peut dire que pour, pour l'article, il y a toujours quelque chose d'irréfléchi. Imprimons simplement cet article. Et voilà. Donc, les trois fichiers que nous avons créés jusqu'à présent sont deux poses et un fichier TXT. Maintenant, nous ne voulons pas que ce soit un fichier C, nous voulons uniquement les fichiers JSON. Et nous voulons également connaître les chemins de fichier de ce, de ce fichier, n'est-ce pas ? Donc, pour le moment, nous avons le fichier, le nom du fichier, mais nous voulons obtenir le chemin complet du fichier. Donc, ce que je vais faire, c'est créer une fonction qui aura un dictionnaire portant le nom de la pose, disons le nom de la publication. Et il aura également le chemin d'accès au fichier contenant le contenu de ce message. Revenons à PyCharm et commençons à écrire cette fonction. Mettons-le ici en haut. Puisque nous allons obtenir un dictionnaire à partir de cette pose, je vais l'appeler dictionnaire des poses. Maintenant, encore une fois, je vais ajouter la docstring parce que je sais à quoi je m'attends. Bon dictionnaire avec un très bon niveau. Moïse. Et je vais donner l'exemple. Le dictionnaire ressemblera à quelque chose comme ça. Nous aurons le nom du message comme clé et le chemin d'accès à la pose comme valeur, cinq. Mais maintenant, cela signifie également que les fichiers doivent être uniques puisque nous nous basons sur le nom du fichier comme nom de la pose. Nous limitons également l'outil pour ne pas pouvoir dupliquer les poses. Mais je pense que c'est bon. Désolé, pas de pulsations dupliquées. Vous pouvez dupliquer la pose, vous ne pouvez pas dupliquer le nom de la pose. Nous allons rendre un dictionnaire. OK, donc encore une fois , nous voulons répertorier tout le contenu de notre répertoire racine. Nous allons donc dire une fois de plus, pour chaque élément de notre liste, que nous allons utiliser notre répertoire racine. En fait, je vais appeler ce fichier par son nom. Puisque c'est avec cela que nous travaillons. Nous travaillons avec des volumes. Maintenant. Initialisons un dictionnaire vide. Nous allons dire que c' est un dictionnaire vide. Et nous devons d'abord obtenir le nom des posts. Comme je l'ai dit, le nom d'hôte sera le nom du fichier sans l'extension. Et comme je l'ai dit, nous voulons uniquement obtenir les poses qui se terminent par point json, car c'est le format que nous avons choisi. Donc, dans ce cas, si nous avons ce fichier TXT, nous voulons l'ignorer. Alors, commençons par enregistrer ce chèque. Disons que si le nom du trait de soulignement du fichier se termine par une extension, qui est x, faisons l'inverse. Si ce n'est pas le nom de fichier et l'extension de sueur que nous avons choisis, c'est Jason. Nous allons simplement continuer et ignorer ce fichier. Excellent. Nous pouvons maintenant publier le nom à partir de ce fichier. Il s'agit encore une fois du nom du fichier sans l'extension. Nous pouvons donc le faire en divisant le nom de fichier par points. Nous allons diviser par point et par point. Cela nous donnera le nom du fichier, associé au nom du fichier et à l'extension. Et nous voulons uniquement le nom du fichier, qui est le premier élément de cette liste. Nous avons donc le nom du message, et maintenant nous voulons le chemin complet du fichier. Nous voulons que le chemin du fichier soit joint au répertoire et au nom du fichier. Il y aura donc toujours une trajectoire ponctuelle l'articulation, comme nous le faisions auparavant. Nous allons rejoindre le répertoire racine. Et le fichier, le fichier que nous avons obtenu en inspectant le contenu de ce répertoire racine. Et voilà. Ce sera donc le chemin du fichier. Disons que j'espère que ça n'ira pas trop vite. Imprimons ce que nous avons jusqu'à présent. Disons que le nom d'hôte sera, voyons ce que nous obtiendrons comme nom de poste. Permettez-moi de dupliquer cette ligne. Nous allons imprimer la pose. Le chemin du fichier sera le chemin du fichier. Et là, assurons-nous de sauter correctement. Nous allons donc dire que c'est sauter. Et disons le nom du fichier. Ce que nous sommes en train de sauter. Ce que je fais ici, c'est dans le cadre de la déclaration imprimée. Je mets une virgule et vous pouvez imprimer plusieurs choses ensemble de cette façon. Revenons donc à Maya. Utilisons notre fonction appelée « bons articles qui la chargent ici. Une fois de plus, puisque nous avons apporté quelques modifications, rechargeons notre module. Et lançons simplement la bibliothèque sur le cercle, soulignons le point central et publions. Je n'ai pas besoin de post-greffe pour le moment. Super. Et voilà. Nous obtenons donc, supposons que JSON ou obtenons le nom de l'article à partir de celui-ci en divisant le nom du fichier et en ne prenant que la première partie. Et nous ignorons également test.txt parce qu'il ne se termine pas par Jason, n'est-ce pas ? Ce sont donc les valeurs que nous voulons pour le dictionnaire. Nous voulons le nom de la pose que nous prenons. Et nous voulons le chemin d'accès au fichier qui contient le contenu. ne me reste donc plus qu'à supprimer ces deux lignes ainsi que cette déclaration imprimée. Il ne reste plus qu'à remplir notre dictionnaire. Notre dictionnaire vide pose donc ici. Désormais, les clés du dictionnaire seront les noms du nom du message et la valeur de chaque clé sera le chemin de soulignement du fichier. C'est tout ce que nous devons faire. Ensuite, nous devons rendre ce dictionnaire. Alors testons cela. Exécutons ce code, rechargeons le module et exécutons la fonction. Rien ne s'est passé parce que nous n'imprimons pas, bien sûr. Nous pouvons donc le montrer dans une variable appelée poses. Et imprime cette variable. Laissez-moi vider ma fenêtre de sortie. Et voilà. Nous avons maintenant un dictionnaire avec plusieurs valeurs, qui ne concernent que les politiques qui nous intéressent. Donc, testez la pose, un chemin vers le fichier. Première pose et chemin d'accès au fichier. Vous pouvez maintenant voir que nous obtenons des barres obliques inverses doubles. C'est parce que nous utilisons la fonction, le 0 est un chemin d'accès à la fonction. Il va donc s'assurer que vous obtenez un chemin de fichier valide et cela ne posera aucun problème. Donc, avoir ces deux barres obliques inverses n' est pas du tout un problème. Nous pouvons lire des fichiers qu'ils contiennent. Et voilà. Maintenant que nous pouvons le savoir, nous pouvons l'utiliser pour remplir notre bibliothèque. 39. Créer l'interface utilisateur: Maintenant que nous disposons des fonctionnalités dont nous avons besoin, nous pouvons créer l'interface utilisateur. Maintenant, cette interface utilisateur est différente de la précédente. Non seulement cela, c'est un peu plus complexe, mais pas vraiment tant que ça. Mais principalement parce que nous recevons maintenant des informations de l'utilisateur, fois via la sélection de cette liste et à partir d'une saisie de texte. Quand ils sont serbes, ils obtiennent le nom du message à enregistrer. Découvrons rapidement la composition de cette interface utilisateur. Je vais faire une capture d'écran pour pouvoir dessiner dessus. N'oubliez pas que nous avons parlé des mises en page et de la façon dont les mises en page constituent essentiellement ce que sont réellement les interfaces utilisateur. Donc, dans ce cas, nous avons la liste des poses et nous avons ce bouton ici. Cela signifie que nous avons besoin d' une mise en page qui s' étend de haut en bas. Ce serait une disposition en colonnes. Cette première section sera une disposition en colonnes. Ensuite, nous avons cette section pliable. Et il se trouve que c'est une autre mise en page qui contient une mise en page. Maintenant, la raison pour laquelle nous avons besoin de ces éléments dans votre mise en page est que la section suivante que la section suivante se déroule également de haut en bas. Comme vous pouvez le voir, nous avons cette ligne ici. Et puis nous avons la pose, le bouton de pose sûre. Ce sera donc une autre disposition des colonnes. Mais à l'intérieur de cette disposition en colonnes, nous avons ce texte à côté. Nous avons ce champ de saisie qui aura besoin d'une disposition en lignes car il circule de gauche à droite. Ce n'est donc pas vraiment si compliqué. Ce ne sont que quelques mises en page qui créent le flux de cet outil. En gros, nous avons une disposition en colonnes, une disposition , une disposition en lignes, puis une disposition pliable supplémentaire. s'agit donc que de compléter cet outil pour les mises en page. Allons acheter à terme et commençons à travailler sur notre code. Donc, encore une fois, la façon dont nous organisons notre code est que nous avons ce module de base qui a la fonction principale. Et nous avons un module complètement séparé qui sera destiné à l'interface utilisateur. Ainsi, tout ce qui est nécessaire uniquement pour l'interface utilisateur sera là. Tout ce qui concerne les fonctionnalités et tout ce qui peut être utilisé indépendamment de l'interface utilisateur doit rester en dehors de ces modules d'interface utilisateur. Je vais probablement entrer dans le noyau. Donc, quelque chose que nous devons faire qui est également différent pour ce type d'interface utilisateur, c'est que nous demandons des informations ou que nous recevons des informations de l'utilisateur via l'interface utilisateur. Nous devons nommer nos éléments d'interface utilisateur très précise, pas spécifiquement, mais de manière unique. Nous devons donner un nom unique à notre fenêtre afin de pouvoir interroger les éléments de cette fenêtre. Et nous devons donner un nom spécifique à tous leurs éléments d'interface utilisateur afin de pouvoir obtenir des informations de leur part. Commençons par créer la fenêtre dont nous avons besoin. Les Mayas ont cette bibliothèque, c'est ton épaule. Donc, à partir de l'entrée Maya, de la bibliothèque CMBS, nous voyons le S. Et je vais créer une fonction appelée show you why. Maintenant, j'utilise ce nom pour rester cohérent avec l'autre fonction de nos deux autres fonctions. À l'intérieur, nous devons créer une fenêtre, comme la dernière fois. Donnons-lui un titre. Le titre est égal à la bibliothèque de poses. Et puis, comme vous vous en souvenez, nous devons montrer cette fenêtre. Donc, Cmd S dot show window. Permettez-moi de m'assurer que je ne suis pas sûr de la fenêtre. Ensuite, nous devons transmettre le nom de la fenêtre que nous affichons. Donc, la dernière fois, pour l'autre outil, nous avons laissé mon autre fenêtre latérale, le nom interne de la fenêtre, et nous avons laissé Maya nous le donner, commencer à le stocker dans cette variable. Ensuite, nous le montrons simplement. Maintenant, la façon dont cet outil fonctionne est que vous pouvez réellement ouvrir plusieurs copies de cette fenêtre. Et c'est très bien. Mais pour ce qui est de la bibliothèque postale, nous voulons qu'elle soit unique. Nous voulons qu' une seule copie de la fenêtre soit ouverte à la fois. C'est pourquoi je vais donner un nom unique à notre fenêtre. Je vais créer une autre variable globale, d' accord, une variable de niveau. Je vais l'appeler un nom de fenêtre. Il s'agira du nom interne de la bibliothèque d'interface utilisateur. Ui. Maintenant, comme je l'ai déjà mentionné, je choisis toutes les majuscules pour les variables globales car cela indique qu'il s'agit d'une valeur constante dans tout le code. Nous allons donc créer notre fenêtre en utilisant ce nom unique au lieu de me laisser choisir un nom pour nous. Ensuite, je vais montrer le nom de cette fenêtre. Correct. Allons donc voir Maya et voyons à quoi cela ressemble. Nous allons donc importer depuis la bibliothèque de publications, importer l'interface utilisateur et y apporter des modifications. Préparons donc notre commande de rechargement. Disons que l'interface utilisateur n' affiche pas, souligne l'interface utilisateur. Vous y voilà. La fenêtre est vide bien sûr, mais nous avons le titre que nous avons choisi. Maintenant, si je recommence. Sans fermer la fenêtre, vous verrez que nous obtenons une erreur. Nous disons que l' interface utilisateur de la bibliothèque de publications n'est pas unique. Ce qui se passe ici, c'est que lorsque je ferme cette fenêtre, le nom disparaît. Mais quand je l'ouvre et que j' essaie de le relancer, je ne peux pas créer la fenêtre. Vous pouvez voir que lorsque nous essayons de créer la fenêtre, elle se plaint que le nom existe déjà. Il y a donc quelque chose que nous pouvons faire à ce sujet, c' est-à-dire simplement supprimer l'interface utilisateur. Pour que nous puissions, nous pouvons ajouter une vérification avant de créer une fenêtre. Nous pouvons vérifier si l'interface utilisateur existe. Nous pouvons dire si la fenêtre à points CMBS, puis le nom de la fenêtre, désolé, le nom fenêtre entre parenthèses ouvertes et fermantes existe. Parce que c'est vrai. Nous sommes donc en train d'interroger, en fait, nous devons interroger cette valeur. Ou je peux simplement dire que la requête est égale à vrai. Vous pouvez également écrire q égal à vrai si vous le souhaitez, mais je vais écrire le nom complet de l'argument. La requête est égale à vrai. En gros, si la fenêtre existe, nous allons la supprimer. Cela se fait via la commande CMBS Dot Delete UI. Et nous allons supprimer le nom de cette fenêtre. Nom de la fenêtre. Génial. Donc, ce qui va se passer, c'est que si cette fenêtre existe déjà, nous allons la supprimer complètement et en créer une nouvelle à partir de zéro. Voyons donc comment cela fonctionne. Vous y voilà. Nous pouvons maintenant exécuter ce code plusieurs fois. Nous ne recevons aucune erreur. Excellent. Ensuite, nous devons créer la partie supérieure, qui est la partie utilisée pour appliquer les poses. Nous avons donc besoin d'une liste et d'un bouton qui se trouveront à l'intérieur d'une grille de disposition en colonnes. Appelons donc cette section des applications des publications. Nous avons besoin d'une disposition en colonnes. Supposons la disposition des colonnes à points S. Si vous vous souvenez de la dernière fois, nous avons créé une colonne ajustable égale à vrai afin que les widgets s'étendent automatiquement avec la fenêtre. Nous allons donc l'utiliser également dans ce cas. C'est juste que la double colonne est égale à vrai. Et n'oubliez pas que lorsque nous créons une interface utilisateur, je précise que la mise en page devient le parent actuel du Parlement pour tout ce que nous créerons par la suite. Nous savons donc que nous devons créer un bouton. Celui-là est facile. Nous connaissons le fond. Nous savons que le texte en bas se trouve sous l'argument label. Nous allons donc dire que l' étiquette est égale à la pose appliquée. Et nous devons ajouter une commande au bouton, mais notre approche sera la suivante : créons d' abord le squelette de l'interface utilisateur. Ensuite, nous établissons toutes les connexions pour les fonctionnalités réelles dont nous disposons. Nous avons donc un bouton et nous avons besoin d'une liste. Maintenant, pour créer ce type de liste que nous voulons, il existe une commande appelée Liste déroulante de texte. Maintenant, comment puis-je le savoir ? Moi, j'ai fait des recherches en ligne, j'ai trouvé quelques exemples en ligne. Et c'est le meilleur widget que j'ai trouvé pour ce que nous voulions faire. Passons donc aux exemples. Scroll, c'est Tech Scroll, c' est cette documentation. Voyez ce que nous pouvons faire. Nombre de lignes uniquement, sélection multiple. Nous pourrions peut-être simplement le créer vide. Alors, créons simplement la liste et voyons à quoi cela ressemble. Ce sera donc CMBS, la liste déroulante de textes artistiques. La prochaine liste déroulante, appelons-le. Et voyons à quoi cela ressemble jusqu'à présent. Le code, et voilà. Nous avons une liste et nous avons des ampoules à boutons. Excellent. Laissons cette section comme ça pour le moment. Passons à la section de la session suivante. Encore une fois, nous essayons de terminer le squelette le plus rapidement possible. Ensuite, nous y retournerions et les polissions. La fonctionnalité plus que tout autre détail dont nous pourrions avoir besoin. Pour notre prochaine section, nous devons indiquer clairement où, dans la section suivante nous avons besoin de ces mises en page pliables. Maintenant, il s'agit d'un type de mise en page appelé disposition du cadre. Cadre aménagé. Regardons la documentation à ce sujet. Je vais passer encore une fois directement aux exemples. C'est généralement le moyen le plus rapide d'obtenir un exemple de cette disposition de cadre. Avec une étiquette. Nous avons besoin d'une étiquette parce que nous voulons, nous voulons qu'elle reste pour nous donner le nom de cette section. Ainsi, cette étiquette de mise en page du cadre est égale à une chaîne. Cette section sera donc enregistrée. Section de pose. Excellent. Donc, disposition du cadre à points CMBS. Et nous allons dire que l'étiquette est sûre. Pose. Excellent. Et puis, dans cette mise en page, nous avons parlé d' une disposition en colonnes. Créons la disposition des colonnes que nous allons utiliser dans cette deuxième section. Et en fait, réutilisons ce que nous avons ici. Parce que nous avons besoin du même type de mise en page. Nous souhaitons également qu'il soit ajustable afin qu'il s'étende automatiquement. Maintenant, en dessous, nous savons que nous voulons cette disposition de ligne avec un nom, étiquette appelée nom et un champ de texte. Donc, le pardon actuel est cette disposition en colonnes, n'est-ce pas ? Nous voulons donc ajouter une disposition en lignes sous cette disposition en colonnes. Et nous voulons qu'il contienne deux éléments. En fait, souvenez-vous encore une fois, notre précédent exemple, ce n'était pas dans le tabouret, c'était dans un autre exemple. Nous devons, nous devons spécifier le nombre d' éléments qui le sont, le nombre de colonnes qui figureront dans la disposition des lignes. Voyons comment cela se fait. Nous allons à l' exposition de documentation en cours de déploiement. Nous l'avons fait. Il indique le nombre de colonnes. Le nombre de colonnes est égal au nombre d'éléments souhaités dans cette couche. Excellent. Le nombre de colonnes sera donc égal à deux, car nous n'avons besoin que d' un texte, d'un morceau de texte et du champ de texte. Génial. Maintenant que la disposition de nos lignes est le parent actuel, nous pouvons ajouter notre étiquette ou un morceau de texte. Et si vous vous souvenez encore une fois de l'outil précédent, nous pouvons le voler. Nous pouvons donc voler la commande de textes avec l'étiquette. Nous pouvons faire en sorte que ce soit simple. Texte simple avec une étiquette et l'étiquette indiquera le nom. Génial. Et puis à côté de ce texte, étiquette, ceci en haut. À côté de cette étiquette de texte, nous avons besoin d'un champ de texte. Pour le champ de texte, il existe un widget très pratique appelé champ de texte, qui est celui-ci ici. Tout ce qu'il fait, c'est vous donner un espace pour taper. Et nous pouvons également rechercher des informations à partir de ce champ de texte. Jetons donc un coup d' œil aux exemples. Il semble que nous puissions simplement l'appeler et cela nous donnera ce champ de texte. Alors allons-y et créons ce champ de texte. Vous y voilà. Voyons donc ce qui se passe, quoi cela ressemble jusqu'à présent. Revenons à Maya et réexécutons notre interface utilisateur. OK, super. C'est comme s'il y avait des progrès, ce n'est pas étonnant. Notre section pliable ne s'effondre pas réellement. Cela ressemble juste à une autre étiquette. Et pour une raison ou une autre, notre champ de texte n'occupe pas tout l'espace. Ok, on peut arranger ça. Mais finissons d'ajouter tous les boutons, puis nous reviendrons et rendrons cette section pliable. La dernière chose à ajouter est donc le bouton de publication sécurisée. Cela devrait être facile. Nous pouvons dire que le bouton CMBS est un point, l'étiquette équivaut à la sauvegarde. Maintenant, si nous l'exécutons maintenant et voyons à quoi cela ressemble. Trop d'enfants dans la disposition, la disposition en rangées. D'accord ? Donc, encore une fois, comme je l'ai mentionné, le parent actuel est ce déploiement. Nous pourrions donc résoudre ce problème en donnant au Rowley un enfant supplémentaire ou une colonne supplémentaire à ajouter. Et ça ne le sera plus jamais. Mais maintenant, le bouton de pause sécurisé est là et nous ne voulons pas qu'il soit là. Nous le voulons dans cette section, n'est-ce pas ? Ce que nous devons faire, c'est changer le parent de la disposition des lignes actuelle à la partie précédente, qui est la disposition des colonnes. Comment faisons-nous cela ? Nous le faisons en utilisant cette commande actuelle, ce toupper et cette fonction. Et il y a une notation très précise qui indique que mes jambes et elles sont composées de deux points. Je vais faire un commentaire ici. Disposition en tant que nouveaux parents. Encore une fois, la mise en page actuelle ou actuelle. Le parent actuel est la disposition des lignes. Nous avons donc défini le nouveau parent comme étant la disposition de colonne précédente. Et maintenant, notre bouton devrait être dans la colonne et non dans la ligne. Encore une fois. Vous y voilà. Cela ressemble davantage à ce que nous recherchons. Revenons donc maintenant et faisons en sorte que cette section s'effondre réellement. Encore une fois, cette section pliable est la disposition du cadre. Donc, si nous allons dans la documentation, rechercherons cette disposition de cadre. Il existe un argument appelé Collapse. En fait, désolé, ça s' appelle pliable. Il gère la pliabilité de la disposition du cadre. C'est logique. Nous pouvons donc simplement intégrer un booléen. On peut donc simplement dire pliable. Pliable, c'est vrai. Et cela devrait régler ce problème. Rechargez notre code et réexécutez-le. Et voilà. Maintenant, nous sommes en train de nous effondrer. Nous avons une section qui peut être réduite. Excellent. Cela fonctionne donc car, encore une fois, la disposition des colonnes est placée sous cette disposition de cadre et tout le reste cette section se trouve sous cette disposition de colonne. Nous sommes donc vraiment en train de réduire cette couche de colonnes. Maintenant, la prochaine chose que nous avons ici est cette section, cette section classique a une couleur différente. ne fait pas encore quelques heures, alors changeons cela. Ensuite, nous voulons corriger ce TextField trop court. Nous voulons qu'il prenne tout l'espace disponible. Voyons comment modifier la couleur de la disposition de notre cadre. Revenons à la documentation. Il existe un argument appelé Couleur d'arrière-plan. Et il est indiqué que c'est la couleur de fond du contrôle. Le contrôle de ce cas signifie un élément d'interface utilisateur. Les arguments correspondent au rouge, au vert et au bleu, puisque pour les valeurs RGB, chaque composant a une valeur de 0 à 1. Donc, comme vous le savez, ou comme vous le savez peut-être, RGB va de 0 à 255, fait , fait, affiche une plage de valeurs pour le RGB. Maya veut que vous traduisiez cela en une plage de zéro à un, ce qui est très facile à faire. Et il demande une liste. Dans ce cas, il peut s'agir d'une liste ou d'un tuple avec les valeurs R, G et B, rouge , vert et bleu. Allons-y et utilisons cet arrière-plan d'argument. Fond, couleur égale, je vais utiliser un tuple. Maintenant, ce seront des valeurs 0-1 et ce sont des nombres flottants, comme vous pouvez le voir ici dans la documentation, c'est un nombre flottant car il y a une virgule décimale dedans. Donc, la première chose que je vais faire est de trouver une couleur qui me plaise. Vous pouvez choisir n' importe quel ensemble de valeurs RGB. Ce que j'aime faire, c'est chercher en ligne un sélecteur de couleurs RGB. Par exemple, Google en a un ici. J'ai choisi un peu comme une couleur bleu clair. Alors laisse-moi trouver quelque chose comme ça. Et voici les valeurs RGB. Nous pouvons donc prendre ces valeurs et les convertir à partir, encore une fois, de la plage allant de 255. Il s'agit donc de la valeur maximale et la valeur la plus faible sera zéro. Nous pouvons donc convertir ces nombres à partir de cette valeur pour transformer cette clé en une plage de zéro à un. Permettez-moi de le copier et de le coller dans Maya. Je vais utiliser Python pour effectuer cette conversion. Nous devons donc faire quelques calculs car il s'agit de compression, mais ce sont des calculs très simples. Supposons donc que si notre valeur RGB est nulle, l'équivalent de celle comprise entre zéro et un serait zéro, n'est-ce pas ? Si votre valeur RGB est de 255, la valeur maximale est de 255, l'équivalent dans la plage de zéro à un serait un, ou dans ce cas, 1,1. Cela signifie donc que tout ce que nous avons à faire est de diviser notre valeur par 255, et cela nous donnera cette plage. Donc, dans ce cas, j'ai ceci. Voici ces trois chiffres. Tout ce que j'ai à faire pour connaître l'équivalent de cette valeur entre zéro et un, je peux simplement diviser par 255,0 parce que je veux obtenir un flottant. Et voici le résultat. Faisons donc cela de manière plus efficace et créons une boucle for simple pour ces valeurs. Donc, pour la valeur à cet endroit via ce tuple de nombres, je vais dire la valeur d'impression divisée par, divisée par 255,0. Cela me donnera les valeurs que nous voulons, tel ou tel arbre. Copions-les et intégrons-les dans notre code. Maintenant, ils ont beaucoup de décimales, mais nous n'avons pas vraiment besoin de tout cela. C'est ce que nous faisons. Les adresses e-mail devraient suffire. Ce sera donc notre rouge. Ce sera notre bleu. Désolé, notre vert, notre G, rouge, notre vert et notre bleu. Vous y voilà. Revenons à Maya et voyons à quoi cela ressemble. Ce n'est pas le bon code. C'est le code que je veux exécuter. Vous y voilà. Alors maintenant, cette section est un peu plus belle. Je n'aime pas l' apparence du texte. Je vais donc choisir une couleur légèrement plus foncée. Et comme nous avons déjà le code pour faire cette traduction, nous pouvons simplement l'exécuter ici. Incluons cela très rapidement dans notre code. Je vais donc juste prendre les deux premières décimales. Je vais juste le taper à la main. Il est donc dix heures. Le suivant est 0,54, et le suivant sera 0,67. Allez-y, revenez en arrière, réessayez. Et c'est mieux comme ça. Nous pouvons maintenant voir le titre de cette section et nous avons une couleur différente. Bien sûr, vous pouvez choisir la couleur de votre choix. C'est votre outil, vous avez le contrôle. Maintenant, la prochaine chose à laquelle nous voulons nous occuper est la taille de ce TextField. Maintenant, un moyen simple de le faire serait de lui donner une largeur fixe, disons 400 pixels. Et ça règle le problème. Le problème est que nous ne pouvons pas maintenant, nous ne pouvons pas redimensionner la fenêtre en dessous 400 pixels maintenant, ce qui est un problème. Ainsi, au lieu de cela, nous pouvons gérer le dimensionnement via la mise en page. La plupart du temps, lorsque vous devez gérer, tailles et la façon dont les widgets sont ajustés dans l'interface utilisateur contrôlée par des mises en page. Il y a donc de fortes chances que nous ayons quelque chose pour nous en ce qui concerne la disposition des lignes . C'est juste ici. C'est le premier argument que nous voyons, colonne ajustable. Voyons donc ce qu'il dit. Spécifiez, spécifiez quelle colonne a une taille ajustable qui change en fonction de la taille de la mise en page. C'est exactement ce que nous voulons et cela prend un entier comme argument. Alors allons-y et utilisons-le. Je viens de doubler la colonne pour obtenir le nombre de colonnes. Supposons donc que nous supprimions cela du champ de texte. Nous ne voulons pas modifier la taille de la disposition des lignes. Nous voulons dire que la colonne ajustable est égale à. Maintenant, ce seront les mises en page qui commenceront à compter à un, et non à zéro. Ce sera donc la première colonne. Le premier élément se trouverait ici. Le second serait ce que nous voulons ajuster. Nous allons donc dire que la double colonne est égale à vrai égale deux. La deuxième colonne doit être redimensionnable, vous savez, et le tour est joué. C'est ce que nous voulons atteindre. Excellent. L'interface utilisateur prend forme. Nous pouvons en rester là si vous le souhaitez, mais je pense que nous pouvons apporter quelques ajustements pour le rendre un peu plus agréable. Ils ont appliqué le bouton de pause. Il pourrait être un peu plus grand, puisque c'est le bouton principal que nous avons. Il peut y avoir un petit espace entre nos éléments. Ajustons donc l'espacement, la disposition des colonnes sous la forme d'un argument appelé espacement des lignes. Réglons-le à dix pixels, par exemple, c'est un peu trop. Coupons-le de moitié à cinq. Et pour le bouton, disons une hauteur de 60 pixels. Voyons à quoi cela ressemble. C'est trop, mais je pense que l'espacement est un peu plus agréable. Disons donc que c'est la hauteur en 30 minutes. OK, c'est un peu mieux. Et je pense que le bouton Safe Post pourrait également être légèrement plus grand. Je vais donc prendre cet argument et l'ajouter à ce bouton de pause sécurisé, mais je vais le faire mesurer à 25 pixels. C'est un léger changement, mais je pense que c'est plutôt bien. La dernière chose que nous voulons faire avant de passer à l'intégration des fonctionnalités de l'interface utilisateur est de nous assurer que la liste ne contient ne peut sélectionner qu'un seul élément à la fois. Maintenant, voyons comment cela fonctionne maintenant. Nous pouvons donc préremplir cette liste à des fins de test. Si vous regardez les exemples, nous pouvons ajouter, allons, volons cet argument, par exemple append. Nous allons sûrement nous contenter des trois premiers éléments. Donc, si nous disons que l'ajout est égal à au moins des éléments, nous allons les ajouter, nous allons les ajouter à la liste de l'interface utilisateur. Donc, si je devais actualiser cela, nous avons maintenant tous ces éléments. Il se trouve qu' il n'en faut déjà qu'un. Donc, 11 sélections à la fois, ce qui est génial. Si vous vouliez que ce soit un double à sélection multiple. Il existe une option pour ce qui est autorisé : la sélection multiple est égale à vrai. Maintenant, si pour une raison quelconque, pour cet outil ou pour un autre, vous vouliez qu'il soit multiple. Pour avoir une sélection multiple. Vous pouvez autoriser une sélection multiple égale à vrai. Et lorsque nous interrogeons la requête sur la sélection, vous obtenez une liste des objets sélectionnés. Mais dans le cas de cet outil, nous ne voulons appliquer qu' un article à la fois. Je vais donc être explicite et dire qu' autoriser la sélection multiple équivaut à faux. Maintenant, le comportement par défaut est bien sûr faux, mais je pense que l'avoir explicitement sera un bon ajout. Mettons-le côte à côte. Je pense que cela ressemble beaucoup. C'est à peu près ce que nous voulons. Laissons donc l'interface utilisateur comme ça. Commençons à connecter la fonction. Tout ce que nous faisons. 40. Connecter la fonctionnalité et partager vos outils: D'accord, nous pouvons commencer à travailler sur les fonctionnalités de l'interface utilisateur maintenant. Permettez-moi de rafraîchir mon code. Donc, pour le moment, à des fins de test , nous ajoutons des éléments , faites-le, mais nous ne voulons pas le faire. Nous voulons le remplir en fonction des fichiers existants dont nous disposons. Nous allions créer une fonction appelée Ajouter une pose. Au fait, je suis désolée, je n'ai pas ajouté de docstring à ma fonction show UI. Afficher la pose, la bibliothèque, l'URL. Celle-ci s'explique davantage par elle-même, donc elle n'a pas vraiment besoin de docstring, mais je veux m'assurer de conserver les bonnes habitudes. Nous allons donc ajouter une pose à la liste déroulante. Et de cette façon, nous obtiendrons notre nom de publication. Et nous allons l' ajouter à la liste. Comment faisons-nous cela ? Eh bien, nous pouvons utiliser la même commande. Beaucoup de ces commandes, pour nous, mais aussi pour gérer les nœuds, vous permettent de créer, modifier et d'interroger des informations en utilisant toutes ces commandes. Je vais donc utiliser la même commande. Mais maintenant, nous devons savoir quelle liste doit être modifiée , n'est-ce pas ? Donc, la façon dont je vais procéder sera similaire à la façon dont nous négocions la fenêtre. Nous allons créer un nom unique pour cette liste déroulante afin pouvoir l'utiliser tout au long du code. Je vais donc créer une nouvelle variable globale appelée nom de liste de texte. Et je vais lui donner un nom unique. Ces noms, textes, listes qui devraient être suffisamment uniques. Et désolé, j'ai oublié d'attribuer la valeur. Alors maintenant, lorsque je créerai la liste déroulante de texte, je vais la créer avec ce nom unique. Et cela se fait en passant simplement le nom comme premier argument à cette fonction de liste. Cela signifie que lorsque j' essaie de modifier cette liste, je peux utiliser le même nom pour cibler la même grille de liste. Maintenant, lorsque je modifie une liste, si je le fais maintenant, Maria essaiera de créer une nouvelle liste portant le même nom. Ce que nous voulons modifier dans cette liste, je vais dire que Modifier est égal à vrai. Et comme vous le savez, en fait, je vais le laisser, alors finissons-en et je vous montrerai quelque chose dans la documentation. Ce que je veux modifier, ce sont les, les éléments de la liste. Je souhaite donc ajouter de nouveaux éléments à la liste. Ce que je veux faire, c'est ajouter ce nom de pose. Maintenant, c'est ce que je veux vous montrer. Passons à la documentation et examinons cet argument. Nous sommes dans la documentation des listes à défilement technique. Et si nous cherchons l'argument append, nous pouvons voir qu'il a ces couleurs et ces lettres ici. C est pour créer. Vous pouvez créer une liste tout en y ajoutant quelque chose. Vous pouvez modifier, ce qui signifie que vous pouvez ajouter des éléments à une liste existante. Et m est polyvalent. Voyons ce que cela signifie. Cela signifie que plusieurs arguments peuvent être transmis au vol , sous forme de tuple ou de liste. D'accord, c'est logique parce que nous attendons une liste. Et si nous voyons, nous voyons le type attendu. C'est en fait très trompeur. Il attend une chaîne. Mais dans l'exemple, nous voyons qu'il s'agit d'une liste. Il se trouve que vous pouvez faire les deux. Vous pouvez fournir une liste d' éléments ou fournir un seul élément. Donc, dans ce cas, nous allons fournir un seul élément sous forme de chaîne. Et faisons-le simplement pour le tester. Mais avant cela, ajoutons la docstring. Vous publiez le nom dans la liste. Nous savons que le nom du message est une chaîne. Et je pense que le nom est très explicite, donc je vais sauter la description pour cela. Et voilà. Alors allons-y, testons-le. Ajoutons-y donc quelques poses. Une fois que tout est créé, en fait, même après avoir affiché la fenêtre, nous pouvons ajouter quelques poses, allons ajouter la suivante. Nous allons également ajouter un test, par exemple, assurons-nous que cela fonctionne. Donc, quand je recharge, j'ai ces deux poses. Excellent. C'est donc la première étape. Nous savons maintenant comment modifier notre liste. Et je veux dire, nous pourrions également faire de même ici. Nous pouvons faire, nous pouvons dire UI, l'Ajouter une pose et appeler cela un autre test. Et cela met à jour la liste pour vous. Super. Nous voulons maintenant créer une fonction qui remplira automatiquement toutes les poses pour nous lorsque nous démarrons la bibliothèque. La première chose que nous voulons faire est effacer cette liste afin de pouvoir la remplir à nouveau. C'est un peu comme une fonction de rechargement. Il existe donc un argument appelé tout supprimer. Supprimez tout. Cela effacera simplement la liste. Alors allons-y, allons-y. Appelons, en fait, cette fonction. On peut appeler cela des poses de population. Des poses, ou on peut appeler ça du rechargement. Reload est un nouveau et meilleur nom. Rechargez. Rechargez les poses. La première chose à faire est de vider la liste afin qu'elle soit vide. Et laissez-moi voler cette ligne de code. Donc, encore une fois, nous allons cibler la même liste. Nous allons le modifier. Mais maintenant, nous voulons tout supprimer. Et comme vous pouvez le constater, nous pouvons utiliser cet argument lorsque nous créons la liste ou lorsque nous modifions la liste. Supprimons donc tout ce qui est égal à vrai. Et cela devrait effacer la liste, faire un commentaire. Et maintenant, nous voulons rassembler les noms des publications que nous avons enregistrées dans ce système. Nous avons donc déjà une fonction pour cela. N'oubliez pas que nous avons créé cette fonction qui vous donne accès à un dictionnaire contenant toutes les politiques mises à votre disposition. Nous devons donc importer notre module de base. On peut donc dire qu'à partir d'une bibliothèque, importez Core, qui sera celui-ci ici. Maintenant, à partir de ce module de base, nous voulons obtenir le dictionnaire de post-diction. Ce dictionnaire sera égal à core, point, get poses, detect, get poses. Et comme vous pouvez le constater, PyCharm se complète automatiquement pour moi car je suis dans le même projet. Excellent. Donc, si vous vous en souvenez, ce dictionnaire aura le nom des publications comme clé, puis le chemin du fichier pour cette publication. Ce qui nous intéresse dans ce cas, c'est le nom de ces poses. Comment faisons-nous cela ? En récupérant toutes les clés du dictionnaire. Les deux noms sont égaux à des poses, à des touches de dictée. Cela nous donnera donc une liste des clés de ce dictionnaire, qui seront tous les noms qui nous intéressent. Excellent. ne nous reste plus qu'à les ajouter à notre liste afin de pouvoir faire une boucle for pour, appelons-la simplement name pour name in names. Ajoutez des messages de soulignement. Et nous allons transmettre ce nom de chaîne. Et ils devraient, ils devraient en prendre soin. Populaire dans les dépôts, cela signifie que nous n'avons plus besoin de ce code de test. Et nous pouvons simplement, je vais ajouter un commentaire, appeler ça remplit les poses. Quand puis-je simplement appeler notre fonction de rechargement, recharger, publier ceci. Une fois que tout a été créé. Et voilà. Nous allons le tester. Et voilà. Ce sont les politiques que nous avions précédemment lors de nos tests. Maintenant, si vous voulez les avoir par ordre alphabétique. Il existe une autre fonction appelée sorted. Ou vous pouvez aussi dire des noms de pose, trier par points. La différence, c' est que cette épée à points triera votre liste sur place. Et la fonction de tri vous donnera une toute nouvelle liste. Utilisons donc celui-ci. J'ai trié ces noms. Je vais appeler cette liste triée. En fait, certains noms ont été triés, je vais les appeler par certains noms. Nous voulons maintenant parcourir les noms triés en boucle. Maintenant, ils devraient être classés par ordre alphabétique. Fait référence au code. Oh, en fait, nous assistons un autre test parce que je l'ajoute ici par accident. Cela ne devrait donc pas être là. Mais maintenant, lorsque je rafraîchis le code, nous ne devrions pas voir un autre test car il y a eu un accident. Mais nous devrions voir les autres politiques issues des fichiers par ordre alphabétique. Maintenant, vous voyez que la première pose avec ma faute de frappe arrive en premier, puis le test vient ensuite. Nous sommes donc en train de remplir l'interface utilisateur. Avant de passer à autre chose, la docstring rassemble des poses à partir de fichiers et les remplit, les répertorie. Nous ne retournons rien. Je peux donc simplement laisser cela comme une lampe unique. Et voilà. La prochaine chose que nous devons faire est d'obtenir la sélection de l'utilisateur afin pouvoir appliquer cette pose au personnage. Il existe un argument appelé select item dans la liste déroulante que vous pouvez utiliser lorsque vous interrogez modifiez ou créez. Cela signifie que nous pouvons interroger cet argument directement à partir de cette liste. Je vais donc créer une nouvelle fonction ici, l'appeler get selected pose. Alors maintenant, au lieu de modifier la liste, nous voulons toujours cibler la même liste, mais maintenant nous voulons interroger quelque chose. Et la chose que nous voulons interroger sera un élément supprimé. Donc, lorsque vous demandez quelque chose, vous vouliez simplement dire à mon père oui, vous voulez demander supprimer Je suis désolée, non supprimer l'écriture de l'élément sélectionné. Nous pouvons l'utiliser pour sélectionner quelque chose de manière dynamique ou par programme. Mais dans ce cas, nous allons interroger la sélection. Nous allons donc demander que l'élément sélectionné est égal à vrai, simplement pour dire oui, veuillez sélectionner un élément. Dessinons donc cela dans une variable appelée sélection. Maintenant, retournons simplement cette variable. Voyons donc ce que nous en retirons. Réunissons le code. OK, donc pour l'instant, rien n'est sélectionné. Si on vous imprime, je ne serai pas sélectionné, je ne poserai pas. Oh désolée, je dois appeler cette fonction. Nous n'en aurons aucun. C'est donc bon à savoir. Rien n'est sélectionné. Nous n'en arrivons à rien. Si quelque chose est sélectionné, nous obtenons une liste avec la sélection. Et comme nous n' autorisons qu'une seule sélection, n'obtiendrons qu' une liste contenant un seul élément. C'est donc bon à savoir. Permettez-moi d'ajouter cela dans docstring. Nous allons dire qu'il renvoie soit une chaîne soit qu'il me permet de la garder cohérente et d'en faire une chaîne. Renvoie toujours une chaîne, récupère l'élément sélectionné dans la liste. Et nous pourrions faire en sorte que si nous n'obtenons aucun, nous renverrons une chaîne vide. Cela pourrait vouloir dire que le fait d'y repenser pourrait être trompeur. Faisons donc en sorte que nous puissions revenir. Encore une fois. Je suis désolée, je change d'avis sur une corde ou sur aucune. Nous allons, nous le ferons, nous ajouterons une petite description en disant « non », si rien n'a été sélectionné, sinon, nom de l'adversaire, sélectionné, nom de la pose. Super. Donc sélection. Si aucune sélection n'est sélectionnée. Nous n'avons vu le retour d'aucun. Encore une fois, si nous revenons simplement, python renverra un non de toute façon. Mais je le dis clairement dans ce cas, car nous voulons le rendre. Sinon, si nous n'avons pas saisi cette instruction if et que nous n'avons pas quitté la fonction. Nous voulons retourner le seul article de notre sélection, n'est-ce pas ? Je vais donc dire que l'élément sélectionné sera une sélection, et ce sera le seul et unique élément de cette sélection. Je vais le rendre . Excellent. Maintenant allons-y, testons-le. Permettez-moi de recharger et de réexécuter le code. Super. Donc, si j'imprime la sélection maintenant, ce n'est pas le cas. Si je sélectionne quelque chose que j'ai imprimé, j'obtiens le nom de la pose sélectionnée. Super, c'est exactement ce que nous voulons. Maintenant que nous savons comment obtenir une sélection, nous pouvons commencer à appliquer les publications. Parce que nous pouvons obtenir le message à partir de l'élément sélectionné dans la liste. Je vais donc créer une nouvelle fonction appelée appliquer le tuyau sélectionné ici. En fait, je vais le créer au-dessus de cette fonction que j'utilise. Pour obtenir la sélection. Super. Donc, la première chose que nous devons obtenir est la pose sélectionnée. Et nous l'obtenons grâce à la fonction que nous venons de créer. Sélectionnez les deux. Puisque c'est la fonction qui appliquera les poses lorsque vous y ajouterez quelques vérifications. Ainsi, si rien n'a été sélectionné, vous pouvez dire que si la pose n'est pas sélectionnée ou si la pose sélectionnée n'est aucune, l'une d'entre elles sera valide si pose sélectionnée est connue ou si la pose n'est pas sélectionnée. Prévenons l'utilisateur. Supposons que ce soit le matin. Sélectionnez une impulsion et quittez simplement la fonction en revenant. La prochaine chose que nous devons faire, puisque nous appliquons des poses pour sélectionner le personnage, est de nous assurer que l'utilisateur sélectionné quelque chose, a sélectionné un personnage. Nous pouvons donc parler noms ou d'espaces de noms sélectionnés car ils peuvent être plusieurs égaux. Et c'est là que nous avons commencé à utiliser le code de notre projet précédent. Si vous vous en souvenez, notre module de post-transfert dispose d'une bonne fonction de sélection d'espaces de noms, que nous pouvons utiliser. Dans ce cas, je vais importer le transfert après le soulignement. Maintenant, après le transfert, je peux obtenir la fonction Obtenir les espaces de noms sélectionnés. Encore une fois, nous savons que si rien n'a été sélectionné, nous allons obtenir une liste vide à partir de cette fonction. Je peux donc dire, sinon, que nous sélectionnons les espaces de noms, nous en ajoutons un autre, lançons un autre avertissement à l'utilisateur, en disant : Veuillez sélectionner au moins un rake et nous quittons la fonction. L'étape suivante consiste à obtenir la pose que nous voulons, ce qui signifie que nous devons obtenir le fichier correspondant au message que nous avons choisi. Pour ce faire, nous devons récupérer les affiches qui ont déjà été enregistrées. Poses enregistrées. Nous savons que nous pouvons l'obtenir à partir d'une fonction que nous utilisons déjà et qui se trouve dans le module de base pour remplir notre interface utilisateur. Prenez des poses. Maintenant que nous utilisons ce même dictionnaire pour remplir notre liste, nous savons que la sélection dans cette liste doit correspondre à l'une des clés du dictionnaire. Mais il est possible que pendant que nous travaillions avec un outil, fichier ait été supprimé, auquel cas nous ne pourrons pas l'obtenir. Nous devrions donc ajouter une vérification rapide pour cela. Nous pouvons dire que si la pose sélectionnée ne figure pas dans les poses enregistrées, nous disons en gros que si cette pose ne figure pas dans la clé du dictionnaire, nous pouvons soit la faire directement comme ceci touches à points ou cocher directement la liste des touches. Je vais juste le laisser comme ça. Donc, si la pose sélectionnée ne figure pas, ils ont enregistré le dictionnaire des poses, ce qui signifie que ce n'est pas une clé du dictionnaire, alors nous n'avons rien à appliquer, n'est-ce pas ? Nous pouvons donc lancer un autre avertissement à l'utilisateur qui prononce cette pose. Je vais maintenant ajouter le nom de la pose. Entre guillemets. Je vais ajouter des guillemets doubles, crochets bouclés comme espace réservé. Disons qu'il n'existe pas. Ensuite, je vais parler de format point. Ensuite, montrez à l'utilisateur la pose sélectionnée. Et puis après l'avertissement, quittez la fonction en revenant. Enfin, une fois que nous avons réussi, nous avons passé toutes les vérifications et tout semble être en ordre. Nous en avons une sélection dans la liste des poses. Nous avons une sélection dans la scène pour un ou plusieurs personnages. Nous savons que les postes existent. Nous pouvons maintenant obtenir le fichier à partir de cette pose. Le fichier de poses est à nouveau égal aux poses enregistrées. Je vais le renommer pour enregistrer, publier en dict, pour le rendre plus explicite pour vous. Si les deux sont cochés, nous pouvons simplement obtenir, maintenant que nous savons que cette clé est dans le dictionnaire, nous pouvons en obtenir la valeur, qui sera à nouveau le chemin du fichier. Cette pose sélectionnée est donc la clé de ce dictionnaire. Il y aura le dossier. Ensuite, nous devons obtenir les informations de ce fichier. Ce serait la pose que nous voulons appliquer à nos personnages. Maintenant, pour ce faire, nous avons déjà les fonctionnalités de base. Nous l'avons appelé lire les articles à partir d'un fichier, lire à partir d'un fichier. Et cela prendra un chemin de fichier, qui est sa pose lorsqu'il est variable. Excellent. ne nous reste plus qu'à réutiliser la fonctionnalité post-transplantation et à l' appliquer à tous les espaces de noms que nous avons sélectionnés. Et ce seront des posts postulés. Nous utilisons un dictionnaire de publication et un espace de noms. Comme nous autorisons plusieurs espaces de noms, nous pouvons simplement parcourir cette liste en boucle. Ainsi, pour l'espace de noms dans les espaces de noms sélectionnés, publier un trait de soulignement, transférer un point, appliquer la pose, il faudra le dictionnaire opposé et l'espace de noms le dictionnaire opposé et l'espace de noms pour l'appliquer à leur ego. Et avant de le tester, laissez-moi faire mon docstring. Et disons Appliquer les politiques sélectionnées pour le sélectionner. Et nous ne retournerons rien. Cela peut donc être une docstring d'une seule ligne. Nous ne l'avons donc pas connecté à un bouton, mais nous pouvons le tester sans connexion. Passons à Maya. Rechargeons l'interface utilisateur. Et voilà. Cela s'appelle appliquer la pose sélectionnée. Nous pouvons donc le faire, nous pouvons dire que l'interface utilisateur n'applique pas la pose sélectionnée. Faisons quelques tests. Nous devons sélectionner une pause. C'est logique. Nous devons sélectionner au moins un personnage qui a du sens. Maintenant, si nous sélectionnons le personnage, nous entrons, ce message doit être appliqué. Maintenant. Maintenant, c'est probablement la même pose que nous avons enregistrée. Changeons un peu ce personnage. Et appliquons cela. Et voilà. Donc, la première pose à conserver était celle du chapeau, ce qui signifie qu'il ne s'agit que de déplacer cette manette. Mais voilà. Maintenant que nous avons cette fonction, nous pouvons commencer à la connecter au bouton Plight Post qui ne fait rien pour le moment. Revenons à PyCharm et nous pouvons appliquer le bouton avec des arcs. Nous pouvons simplement dire que la commande est égale à appliquer les publications sélectionnées. Maintenant, souvenez-vous que nous transmettons la fonction elle-même. Nous ne voulons pas l' appeler car nous donnerions alors à l'argument de commande, le résultat de cette fonction. Et ce n'est pas ce que nous voulons. Nous voulons lui donner la fonction afin qu'il puisse appeler la fonction elle-même. Alors maintenant, si nous rechargeons notre code et cliquons sur le bouton, nous avons une erreur. Accepte les arguments dont un argument est donné. Maintenant, si vous vous souvenez de notre outil précédent, du bouton que nous avons connecté, du bouton de transfert sélectionné, nous avons dû prendre en compte un argument aléatoire supplémentaire. Ensuite, mon N nous est donné. Et nous utilisons cet argument star args, une sorte de fourre-tout pour les arguments transmis par my. Nous pouvons donc simplement le refaire. Cela ne modifiera pas les fonctionnalités de l'outil. Cela nous permettra simplement de résoudre ce que Maya nous donne. Fournitures. J'aimerais prendre la pose, on ne s'en sert même pas. Nous l'utilisons simplement comme filet pour saisir cet argument supplémentaire. Maintenant, si je déplace ce contrôleur et que j'applique à nouveau ce message. Maintenant, cela fonctionne. Et bien sûr, nous pouvons appliquer cette pose plusieurs personnages à condition qu'ils aient un chapeau. Dans ce cas. Nous y voilà. La dernière partie restante de notre outil est la possibilité de sauvegarder des poses. Et la première étape consiste à demander à l'utilisateur de choisir le nom de la pose que nous allons enregistrer. Pour ce faire, nous allons utiliser le champ de texte. Et si vous pensez que nous devons lui donner un nom unique, comme nous l'avons fait pour la fenêtre. Nous l'avons fait avec les listes défilantes. Tu as tout à fait raison. Permettez-moi donc de créer une nouvelle variable globale. Appelons cela un champ de texte. Le nom est égal à la pose. Appelons cela enregistrer ces champs de texte. Maintenant, le nom réel n'a pas importance tant qu' il est suffisamment unique. Super. Ainsi, lorsque nous créons notre champ de texte, nous devons fournir ce nom, encore une fois comme premier argument dans cette fonction de champ de texte. Et pour pouvoir obtenir le texte saisi dedans, dans ce champ. Il y a un argument. Nous entrons dans la documentation. Dans le champ TextField, il existe un argument appelé texte. Il devrait être dans les parages. Et voilà, texto. Nous pouvons donc l'utiliser lorsque nous créons un champ de texte, afin qu'il soit prérempli. Nous pouvons le modifier, modifier le texte dans le champ de texte ou effectuer une requête. Nous allons donc prouver ce texte. Allons-y et créons une nouvelle fonction appelée save pose. Nous pouvons tout faire dans le cadre de cette même fonction. Et puisque nous savons que nous allons le connecter au bouton de pause sécurisé. Ajoutons que Star Args est une sorte de fourre-tout pour l'argument selon lequel nous savons que le mien va nous être donné. Donc, pour obtenir le nom de la pose auprès de l'utilisateur, appelons-le. Appelons cette variable le nom du post name. Je suis désolée pour ça. Le prénom est égal à. Passons à la fonction TextField. Une fois de plus, nous allons cibler exactement le même champ de texte que celui que nous avons créé. Nous allons y rechercher des informations. Nous dirons que la requête est égale à vrai. Vous pouvez maintenant soit taper q égal à vrai, soit la requête passe, désolé, la requête, les deux sont valides. Et maintenant, chaque fois que vous effectuez une requête, vous allez utiliser un booléen pour l'argument que vous souhaitez interroger. Si vous regardez la documentation, cela vous demande une chaîne. Mais lorsque vous interrogez quelque chose, encore une fois, ignorez cet argument, ignorez cette partie de la documentation et tapez simplement un booléen. Donc, à titre de test, retournons le nom de ce message et voyons ce que nous en retirons. Je vais donc recharger notre code. Et on peut dire point save pose. Nous le savons à l'heure actuelle. En attendant, il nous donne simplement le nom des publications ou tout ce que nous tapons. Ce champ de texte, imprimez en toute sécurité, Bose. Il n'y a rien dedans, ce qui signifie que c'est une chaîne vide. Mais si je tape le nom de mes publications, par exemple, je vais l'obtenir. C'est donc génial. Nous savons donc que si rien n'y est saisi, nous obtenons une chaîne vide. Nous pouvons ajouter un chèque pour cela. Il existe encore des moyens de le faire. Nous pouvons soit dire que si le nom est égal à une chaîne vide, nous donnerons un avertissement soit une chaîne vide peut être échangée comme une chaîne non ou comme une liste vide et vide. Vous pourriez donc dire que si ce n'est pas le nom des articles soulignés, nous envoyons un avertissement. Et nous dirons, s'il vous plaît, bonjour, opposez le nom. Une fois de plus, nous quittons la fonction en revenant. J'aime donc être un peu plus explicite. Je vais donc le remplacer par si le nom du message est égal, est égal à une chaîne vide, cela signifie que rien n'a été saisi par l'utilisateur. Puis nous avons lancé l' avertissement et sommes revenus. Et je vais supprimer ce retour ici car c' était uniquement pour des tests temporaires. L'étape suivante consiste à obtenir la pose dont nous allons dire avoir besoin, à vérifier la sélection dans cette scène. Donc, comme nous le savons, nous allons enregistrer les manettes sélectionnées. Et nous le limitons à un seul personnage. Nous pourrions en fait autoriser plusieurs personnages et simplement enregistrer toutes ces manettes. Et supposons que si vous le souhaitez, c'est votre choix. Dans ces cas, cependant, je vais me limiter à un seul caractère. Pour ce faire, nous pouvons voler une partie du code d'ici. Nous pouvons toujours sélectionner un espace de noms. En fait, laisse-moi voler tout ça. C'est un chèque. Je vais le copier ici. Au fait, je vole des applications sélectionnées. Parce que dans la pose sélectionnée appliquée, nous vérifions également la sélection des espaces de noms ou des plates-formes. Donc, sélectionner des espaces. Dans ce cas, nous voulons nous assurer de n' avoir sélectionné qu'un seul appareil. Nous pouvons donc taper si len of selected in spaces n'en est pas un. Nous pouvons lancer un avertissement disant « Sélectionnez, sélectionnez le seul équipement de la scène ». Nous leur montrons leur avertissement, puis nous sommes revenus. Après cela, nous avons besoin d' un autre chèque. N'oubliez pas que nous avons dit que nous voulions que les poses soient uniques. Donc, si l'opposition existe déjà, nous ne pouvons pas la remplacer. Peut-être que vous, peut-être que vous voulez l'annuler. C'est parfaitement bien. Mais dans ce cas, nous allons dire que nous allons envoyer un avertissement à l'utilisateur pour lui dire que le message existe déjà. Veuillez choisir un autre nom. Pour ça. Nous allons obtenir. La pose est un dictionnaire. Encore une fois. À partir de la pose sélectionnée appliquée, nous allons à nouveau voler ce dictionnaire , les poses enregistrées, etc. Et permettez-moi d'ajouter quelques commentaires ici, juste pour suivre ce qui se passe. Ici. Nous sommes en train de vérifier, de valider ou d'invalider ces noms. Ici, nous allons valider la sélection vue. Sélection. Et je laisse de l'espace entre eux, leur donne juste un peu de respirabilité pour que ce soit un peu plus agréable à voir. Ici, validez un tuyau unique. Nous obtenons donc les poses à partir d'un fichier. Nous pourrions également obtenir les poses de la liste. Mais les obtenir à partir des fichiers est plus fiable, car nous les obtenons réellement à partir de la source. Ainsi, si l'outil n'est pas mis à jour, nous pouvons toujours vérifier la véritable source des affiches, savoir le système de fichiers. Nous pouvons donc dire, si nous pouvons écrire, désolés, si le nom de l'article est déjà une clé dans le dictionnaire. Ainsi, si le nom de la pose se trouve dans des pauses enregistrées, dict égal au nom si l'impulsion est cochée. Une fois de plus, nous avertissons l'utilisateur. Nous allons dire pose. Nous allons mettre le nom des citations entre crochets, car je dois dire que les places réservées existent déjà. Veuillez choisir un autre nom. Nous y voilà. Ensuite, je vais dire format point et indiquer à l'utilisateur le nom de la pose qu'il a fournie. Nom du message. Une fois de plus, nous sortons en revenant. Enfin, une fois que nous aurons toutes les vérifications nécessaires, nous pourrons survivre à la sauvegarde de nos publications. La première chose à faire est donc d'obtenir le post-dictionnaire contenant autre pose sélectionnée dans la scène. Il s'agit donc des contrôleurs sélectionnés par l'utilisateur sous la forme d'un dictionnaire. Encore une fois, nous avons cette fonctionnalité issue de notre projet précédent dans Post Transfer, Post Transfer, Get, Pose, Dict. Cette fonction obtiendra maintenant un seul espace de noms. Puisque nous savons que nos espaces de noms sélectionnés au moins ne doivent contenir qu'un seul espace de noms. Nous pouvons dire en toute sécurité, ou nous pouvons dire, fournir en toute sécurité le premier élément de cette liste d' espaces sélectionnés à notre fonction. Il y aura donc un seul espace de noms. Maintenant que nous avons le dictionnaire, ne nous reste plus qu'à l' enregistrer dans notre fichier. Et nous avons déjà cette fonction également. Ce sera donc dans le noyau des articles écrits dans un fichier. Et cette fonction recevra le nom des publications ou le nom du fichier que nous voulons enregistrer, qui est le nom de la pose et les valeurs ou le dictionnaire que nous voulons stocker. Supposons un nom, une pose, un dicton. Et nous allons imprimer, mais nous n'avons tout simplement pas enregistré d'informations. Nous allons dire que la pose a été enregistrée avec succès. Encore une fois, permettez-moi de corriger cette faute de frappe. Encore une fois, les crochets frisés sont des espaces réservés, format de point et un nom de publication pour afficher le nom des publications. Enfin, une fois que nous avons enregistré le message, nous voulons recharger ou actualiser l'outil. Nous pouvons donc dire Reload poses pour afficher les derniers messages que nous avons enregistrés. Excellent. Alors allons-y et testons cela dans notre scène. Eh bien, avant de faire cela, nous pouvons simplement nous connecter au bouton. Nous avons vécu cela à de nombreuses reprises. La commande équivaut donc à une pose sûre. Encore une fois, fournissez simplement une fonction, ne l'appelez pas car cela donnera le résultat à cet argument de commande. Nous voulons, nous voulons que le bouton appelle la fonction pour nous. Alors, venons ici. Et supprimons cette ligne qui protestait. Rechargeons notre code. Essayons de sauver l'opposition. Permettez-moi de modifier le bras de ces personnages. Et voilà. C'est un peu cassé, mais ce sera très évident lorsque nous postulerons. Disons en fait que c'est un bras cassé. Nous n'avons pas besoin que le trait de soulignement soit également un espace. Bras cassé, garde la pose. Les deux apparaissent ici. Et nous avons ici la concentration que représente une sauvegarde réussie des posts. Et nous pouvons appliquer cela à ce personnage. Et voilà. Si vous souhaitez être plus explicite dans votre confirmation, nous pourrions, au lieu de simplement imprimer un message, montrer à l' utilisateur une petite fenêtre. Il y a une fonction en C là-dedans, dans cette bibliothèque appelée dialogue confirmé qui prend en compte un message peut taper message equals. Et nous pouvons transmettre ce message ici. Et voilà. Confirmez la boîte de dialogue. Nous avons ce message. Nous pouvons recharger notre code. Nous pouvons enregistrer un nouveau post, nouveaux articles de Bose qu'il a enregistrés. Nous recevons cette boîte de dialogue de confirmation pour l'utilisateur. C'est donc à vous de décider si vous souhaitez le dialogue ou simplement imprimer la déclaration. Et c'est fait, vous avez maintenant un outil de bibliothèque de publications fonctionnel qui peut être utilisé pour enregistrer et appliquer poses. Mes hypothèses sont inégales, peuvent être partagées avec d'autres personnes, vos amis, collègues, tous ceux qui utilisent Maya. Félicitations, c'était le plus gros projet du cours. Maintenant, avant de partir, je voulais mentionner quelque chose à propos des modules. Jusqu'à présent, nous avons travaillé dans ces documents, le dossier de scripts Maya. Et c'est parce que nous savons que Maya peut obtenir du code à partir de là. Maintenant, laissez-moi me rendre à cet endroit. C'est ici. Tout notre code est là. Il existe d'autres sites où je peux obtenir du code ? L'autre. La version la plus populaire se trouve dans la version Maya. Il existe un autre dossier de scripts. Ce n'est donc que pour ma moyenne en 2020. Et celui avec lequel nous travaillons est peu plus global malgré toutes mes aberrations. Mais maintenant, la question qui se pose est la suivante : comment savoir exactement d'où provient le code ? Ça ? Il existe un autre module ou bibliothèque appelé sits ASIS. Asis, That's signifie système. Il contient une liste appelée path. Donc, si j'imprime sys.path, j'obtiens une liste des chemins partir desquels Python et Maya peuvent obtenir du code. Donc, puisque c'est une liste, laissez-moi la parcourir en boucle. Car je suis un chemin. Bonjour, ça y est. Ce sont toutes les pièces. Il y en a beaucoup. Si vous avez installé des plugins. Laisse-moi recommencer. Si vous avez installé des plugins, certains des chemins d'accès à ces plug-ins se trouvent ici. Et il y a aussi ceux que nous utilisons ici en bas. scripts 2020 pour la migration utilisent donc des scripts Maya, qui sont ceux dans lesquels nous avons actuellement notre code. Donc, vous pouvez mettre votre code n'importe où ici. Mais si vous souhaitez ajouter un autre emplacement, puisqu'il s'agit d'une liste, vous pouvez simplement ajouter à ce chemin que vous pouvez ajouter. Imaginons donc que nous ayons un dossier personnalisé dans. Supposons que vous travailliez dans un studio ou que vous travailliez sur un projet avec vos amis et que vous souhaitiez disposer de votre code et de votre boîte de dépôt ou dans un espace commun partagé où tout le monde peut accéder au code. J'ai créé un dossier à titre d'exemple. Maintenant, allons-y. Imaginons qu'il s'agisse d'un dossier auquel de nombreuses personnes de votre réseau peuvent avoir accès. Vous pouvez, vous voulez avoir votre code ici ? Déplaçons donc notre code ou copions notre code depuis l' emplacement des scripts Maya des documents dans cet autre dossier. Vers la bibliothèque de publication était transféré. Utilisons simplement une bibliothèque de courrier et un transfert de courrier soignés. Je vais le copier ici. Dans l'état actuel des choses, Meier n'a aucune idée de cet endroit, n'est-ce pas ? Ce que nous pouvons faire, c'est simplement modifier cette liste. Permettez-moi de dessiner cela dans une variable appelée path. Et je vais mettre le R au début au cas où nous pourrions vérifier si le chemin existe déjà. Donc, s'il n' existe pas réellement, s'il n'existe pas de chemin, pas en série, un chemin par points, nous avons simplement ajouté à ce chemin, disons chemin par points, ajout de points. Et voilà. Donc, à titre d'exemple, puisque nous avons déjà chargé les modules depuis l'emplacement des scripts, je ne veux pas vous embrouiller. Permettez-moi donc de créer un tout nouveau module appelé Hello path, par exemple et nous allons l'appeler. Nous allons renommer l'extension dot TXT en point p-y. Excellent. Et tout simplement, je vais l'ouvrir avec Notepad pour une édition rapide. Et voilà. Je vais ajouter une fonction simple appelée hello. Bonjour, ou surtout en plus, et nous allons simplement imprimer le chemin personnalisé Hello. Super. Donc, pour l'instant, si j'essaie d'importer hello path, je vais accéder à une nouvelle console Python. Si j'importe bonjour. Bien sûr, mes autres sont au courant. Il indiquera qu'il n'y a pas de module nommé Hello path. Mais si j'ajoute mon chemin personnalisé qui dit chemin par points. Et encore une fois, si je le passe en boucle, imprimé pour moi dans Notepad, imprimé pour moi dans Notepad, je verrai que notre chemin se trouve au bout. Donc, code court, super. Maintenant que c'est dans le chemin Python, je peux importer le chemin Hello. Si j'imprime le chemin hello, hello, underscore, vous pouvez voir qu'il s'agit d'un module provenant de cet emplacement partagé. Et maintenant, nous pouvons utiliser cette fonction que j'ai écrite et qui s'appelle simplement bonjour. Et il imprime notre chaîne personnalisée. Vous l'avez donc. Je voulais le mentionner en tant que supplément car si vous allez travailler avec d'autres personnes et que vous souhaitez partager votre code. Ce sera le moyen le plus simple de le faire. Vous pouvez mettre tout le code de votre bibliothèque de publications. Encore une fois dans un lieu partagé. Il vous suffit de disposer d'un script d'étagère qui ajoute votre chemin personnalisé à la session Maya. Vous devez le faire pour chaque session de minute, d'ailleurs. Et puis vous avez du code qui est partagé avec plusieurs personnes.