At My Fingertips

Documentation

Yin Yang

Dans cette activité, vous vous entraînez à faire pivoter et à composer des graphiques.

Composer un graphique

Voici le Taijitu, un symbole célèbre représentant le concept du yin et du yang!

yin yang

À première vue, ce graphique n'est pas trivial.

Les deux petits cercles se détachent. Mais comment le reste est-il construit? Vous l'avez peut-être déjà vu, c'est plus simple qu'il n'y paraît: il suffit d'avoir des cercles et des demi-cercles (secteurs circulaires de 180 degrés)!

Fonction cercle

Si vous ne l'avez pas encore fait, ajoutez une fonction cercle à votre boîte à outils. Votre fonction devrait avoir la signature suivante:

def cercle(diametre: float, color: Couleur) -> Graphique

Si vous n'avez pas encore cette fonction, vous pouvez faire l'activité PyTamaro iconsimple bonhomme de neige pour apprendre à mettre une fonction dans la boîte à outils (toolbox).

Une fois que vous avez une fonction cercle dans votre boîte à outils, importez-la ici:

Loading...

Avec cette déclaration d'importation, vous avez indiqué à Python que le nom cercle fait référence à la fonction cercle que vous avez ajoutée à votre toolbox. À partir de maintenant, dans cette activité, vous pouvez utiliser ce nom pour appeler cette fonction.

Essayez-le! Montrons un cercle noir d'un diamètre de 100:

Loading...

Fonction demi_cercle

Le second type de graphique dont nous avons besoin est un demi-cercle. Ecrivez une fonction qui en crée un, en appelant secteur_circulaire avec un angle de 180 degrés:

Loading...

Créons maintenant un demi-cercle noir d'un diamètre de 100 et montrons-le:

Loading...

Composer le Yin Yang

Nous sommes maintenant prêts à construire le symbole du Yin Yang! Regardez attentivement le symbole et réfléchissez à la manière dont vous pourriez le composer à partir de cercles et de demi-cercles.

yin yang

Implémentez la fonction yin_yang ci-dessous. Vous pouvez trouver les fonctions importées cote_a_cote, pivote, au_dessus, et superpose, et les couleurs noir et blanc.

Loading...

Beau code

Vous avez terminé! Vous avez une fonction yin_yang qui fonctionne!

Ou bien est-ce le cas?

Le code que nous écrivons est lu par deux entités différentes. L'ordinateur (ou, plus précisément, l'interpréteur Python, le programme qui lit et exécute le code Python) est relativement facile à satisfaire. Vous pouvez lui donner du code qui a l'air horrible. Et il l'exécute joyeusement, tant qu'il respecte la syntaxe et la sémantique du langage Python.

Mais en plus de l'ordinateur, il y a aussi quelqu'un d'autre qui lit votre code: les humains! Cela inclut vous, mais aussi vos coéquipiers! À l'avenir, ces personnes devront peut-être comprendre votre code pour corriger des bogues, améliorer ses performances ou lui ajouter de nouvelles fonctionnalités. Et si vous avez écrit un code correct mais horrible, ces personnes (et cela vous inclut!) ne seront pas amusées!

Donc, dès que nous avons une fonction qui fonctionne, nous la nettoyons! Nous la réfactorisons pour la rendre plus facile à comprendre pour les humains. Les programmeurs qui écrivent du code compréhensible sont appréciés. Mais personne ne veut travailler avec des programmeurs qui écrivent du code difficile à lire.

Nettoyage

Nettoyons votre fonction yin_yang pour la rendre plus facile à comprendre.

Voici donc deux façons différentes d'écrire la fonction. Il en existe de nombreuses autres. Mais ces deux façons diffèrent par leur utilisation de noms pour nommer les résultats intermédiaires.

Pas de noms -- une grande expression

def yin_yang(diametre: float) -> Graphique:
    return superpose(
        au_dessus(
            superpose(
                cercle(diametre / 6, noir),
                cercle(diametre / 2, blanc)
            ),
            superpose(
                cercle(diametre / 6, blanc),
                cercle(diametre / 2, noir)
            )
        ),
        cote_a_cote(
            pivote(90, demi_cercle(diametre, blanc)),
            pivote(-90, demi_cercle(diametre, noir))
        )
    )

Si vous voulez comprendre le code ci-dessus, vous devez le lire en entier. Il est bien indenté, et toute la structure du graphique yin yang est visible en un seul endroit. Mais la structure est assez grande. Il est probablement judicieux de nommer certaines de ses parties, afin qu'un lecteur (vous, à l'avenir, ou un futur coéquipier) n'ait pas à déduire à quoi correspondent les éléments de l'expression.

Noms des parties intermédiaires

def yin_yang(diametre: float) -> Graphique:
    oeil_blanc = superpose(
        cercle(diametre / 6, noir),
        cercle(diametre / 2, blanc)
    )
    oeil_noir = superpose(
        cercle(diametre / 6, blanc), 
        cercle(diametre / 2, noir)
    )
    yeux = au_dessus(oeil_blanc, oeil_noir)
    base = cote_a_cote(
        pivote(90, demi_cercle(diametre, blanc)),
        pivote(-90, demi_cercle(diametre, noir))
    )
    return superpose(yeux, base)

Le code ci-dessus extrait des morceaux significatifs de la grande expression en sous-expressions plus petites, afin de pouvoir leur donner un nom. Si nous lisons une expression comme superpose(yeux, base), nous pouvons imaginer ce qu'elle signifie, et nous n'avons pas besoin de lire superpose(10 lignes de code,4 lignes de code).

C'est un avantage de nommer les choses: nous n'avons pas besoin de lire beaucoup de choses pour avoir une bonne idée de ce qui se passe. Bien sûr, les noms que nous choisissons doivent être précis. Nous ne voudrions pas utiliser superpose(abeille, fleur) pour décrire un yin yang!

Refactoriser votre code

Si votre code a un potentiel d'amélioration, remaniez-le maintenant, pour le rendre plus lisible.

Ensuite, si vous pensez vouloir réutiliser votre fonction yin_yang dans d'autres activités (ou dans la cour de récréation, où vous pouvez être créatif et composer les graphiques que vous voulez), n'hésitez pas à la sauvegarder dans votre boîte à outils.

Vous pouvez également sauvegarder votre fonction demi_circle; elle a l'air d'être une fonction généralement utile qui pourrait s'avérer utile dans le futur.

Ce que vous avez appris

Le symbole du yin et du yang n'est-il pas magnifique? Non seulement sur le plan visuel, mais aussi sur le plan de sa composition?

Il y a plusieurs façons de composer le symbole. La façon dont vous l'avez fait vous plaît-elle? Avez-vous utilisé des noms pour les différents éléments? Avez-vous tout intégré dans une expression "géante"? Ou avez-vous même créé des fonctions supplémentaires pour créer les différents éléments? Vous pouvez toujours procéder à un remaniement entre les différentes méthodes.

Si votre implémentation est facile à comprendre, pour vous et pour ceux à qui vous la montrez, vous avez de bonnes raisons d'être fier!


This activity has been created by LuCE Research Lab and is licensed under CC BY-SA 4.0.

Yin Yang

Logo of PyTamaro

PyTamaro is a project created by the Lugano Computing Education Research Lab at the Software Institute of USI

Privacy PolicyPlatform Version c08406b (Wed, 20 Nov 2024 12:30:00 GMT)