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.