begin process at 2010 09 04 19:22:40
  Trouver un code source :
 
dans
 
Accueil > 

Tutoriels

 > 

Tutoriaux

 > Bien présenter un code en python

Bien présenter un code en python


 Information sur le tutoriel

Note :
Aucune note

 Description

Nous allons voire comment rendre un code plus lisible, ce qui est important dans l'optique de le faire lire par d'autres personnes ou pour le réutiliser plus rapidement.

Tutorial

Nous allons dans ce tutorial apprendre à présenter un code de la façon la plus propre, je ne prétends pas tout savoir de la présentation des codes, toute suggestion sera la bienvenue. Ce tutorial est relativement court, mais, il sera peut être enrichi par la suite

Nous allons partir d’une fonction booléenne Python qui permet de savoir si un nombre est premier ou non.

Au départ cette fonction n’est pas bien présentée, la voici

def premier(a):

    r=int(a**(0.5))+1

    s=True

    i=1

    if a==1:

        s=False

    elif a%2==0 and a<>2:

        s=False

    while 2*i+1 <r+1 and s==True :

        if a%(2*i+1)==0:

            s=False

    return(s)


  • Des notation explicites

La première chose à faire est de rendre le code plus lisible en donnant un nom explicite à chaque variable, par exemple, j’appelle compteur la variable I, j’appelle estPremier la variable s.

Pour nommer les variables, les constantes sont écrites en majuscule, les mots sont séparés par des _ par exemple RACINE_DE_DEUX, les variables sont écrites en minuscules, les mots sont séparés par des majuscules estPremier Ce qui donnera

def premier(nombreEntre):

    critereArret=int(nombreEntre**(0.5))+1

    estPremier=True

    compteur=1

    if nombreEntre==1:

        estPremier=False

    elif nombreEntre%2==0 and nombreEntre<>2:

        estPremier=False

    while 2*compteur+1 <=critereArret and estPremier==True :

        if nombreEntre%(2*compteur+1)==0:

            estPremier=False

    return(estPremier)

Cette étape est très importante, elle rend le code plus lisible

  • Les commentaires

Les commentaires servent eux aussi à rendre le code plus lisible, pour vous, votre code semble simple et vous pouvez vous dire qu’il se passe de commentaire, ce qui est toujours faux. Si vous reprenez votre code plus tard, vous ne comprendrez pas forcément ce que vous avez fait et les autres auront du mal à le comprendre, même si le code est facile.

Tout d’abord, avant chaque fonction, il faut écrire ce qu’elle fait, en une phrase, pour chaque paramètre entré et sortie, il faut le nommer, dire si c’est une entrée ou une sortie et quel est son rôle.

Puis dans le code, il faut expliquer chaque grande étape, il est important de commenter la ligne de code i a la ligne i-1, comme ca, quand quelqu’un lira le code il lira ce que le programme va faire puis, li verra le code qui lui semblera plus clair.

# Cette fonction booléenne retourne vrai si le nombre entré est premier

# Le paramètre nombreEntre est l’entier choisi par l’utilisateur, on va tester sa primalité

# La sortie estPremier est un booléen qui prend la valeur vrai si nombreEntre est premier
def premier(nombreEntre):

    # Si un nombre est premier il possédera un diviseur plus petit que sa racine

    critereArret=int(nombreEntre**(0.5))+1

    # On initialise estPremier à Vrai

    estPremier=True

    compteur=1

    if nombreEntre==1:

        # 1 n’est pas un nombre premier

        estPremier=False

    elif nombreEntre%2==0 and nombreEntre<>2:
        # Si nombreEntre n’est pas pair alors il n’est pas multiple d’un nombre pair

        estPremier=False

    # On ne va tester la primalité qu’avec les nombres impairs : 2*compteur+1

    while 2*compteur+1 <=critereArret and estPremier==True :

        # Si on trouve un diviseur de nombreEntre, nombreEntre n’est pas premier

        if nombreEntre%(2*compteur+1)==0:

            estPremier=False

    return(estPremier)


Voilà, on a obtenu un code clair et compréhensible par tous. Nous pourrons noter que chaque commentaire ne dépasse pas une ligne, ce qui est important, le but n’est pas de surcharger le code. Si une explication est trop longue pour tenir sur une ligne, on peut l’écrire tout en bas de la page de code si elle n’est pas directement liée au codage. Par exemple, je pourrais expliquer pourquoi un nombre composé admet au moins un diviseur plus petit que sa racine en bas de la page de code, et préciser dans mes commentaires : voire bas de la page.


Voila, en espérant que ces conseils vous seront utiles, n’hésitez pas a me faire des remarques.

Commentaires

Commentaire de jcornuet le 27/03/2009 16:16:13

Je suis quasi ignare en Python, mais j'ai l'impression que compteur n'est pas incrémenté et donc que le while doit tourner indéfiniment. Me trompè-je ?

Commentaire de Julien39 le 28/03/2009 09:55:41

oui tu as raison, je n'ai pas vérifié le code, ce n'est pas l'important ici.
Merci

Commentaire de veracruz le 14/04/2009 09:18:27

Salut,

Vu que c'est un tuto, je pense qu'il serai souhaitable d'y ajouter un commentaire en docstring.

Ex.:

def premier(nombreEntre):
    '''
    Cette fonction booléenne retourne vrai si le nombre entré est premier

    Le paramètre nombreEntre est l'entier choisi par l'tilisateur,on va tester sa primalité

La sortie estPremier est un booléen qui prend la valeur vrai si nombreEntre est premier

Si un nombre est premier il possédera un diviseur plus petit que sa racine

    '''

Ce qui permettra de créer facilement une documentation, ou une aide en ligne

du style:  tonnomdefichier.nomdetadefinition.__doc__

Sinon je trouve ton idée excellente

Commentaire de Armaklan le 29/06/2009 07:53:39

Les commentaires c'est bien...
Trop de commentaire, c'est mal.

Il faut souvent préférer un code propre a beaucoup de commentaire. Là ton code est trop commenté... A contrario, cette ligne là est illisible :
2*compteur+1 <=critereArret and estPremier==True :

Le commentaire permet d'expliciter. Isoler en fonction aurait toutefois permet d'expliciter, et de rendre propre.

Commentaire de Julien39 le 07/07/2009 13:30:40

Tu as raison, il ne faut pas mettre trop de commentaires mais là, je ne pense pas qu'il y en ait trop. Ils servent à expliciter la démarche, à expliquer le raisonnement mathématique sous jacent.
Par exemple  # 1 n'est pas un nombre premier est un commentaire utile, quelsqu'un qui lirait le code pourrait ne pas comprendre pourquoi la fonction ne considerera pas 1 comme unnomber premier (avec d'autres définitions, on peut considérer que 1 est premier), on idique à l'utilisatuer que pour nous 1 n'est pas premier.

Pour la décomposition en fonction, c'est vrai, tu as raison, c'est possible. Mais pour cette fonction (de base) c'est inutile je pense.

Par contre si on voulait lister les nombres premier, faire une fonction intérmédiaire serait une chose utile.

Beaucoup de gens pense que le code se suffit à lui même, c'est vrai mais que de temps gagné à la prochaine utilisation si on fait ce qui est expliqué dans ce tuto.

Pour les docString, oui, c'est une bonne idée.

Merci pour vos suggestions

Commentaire de fngoagouni le 31/03/2010 22:04:46

Un code qui ne plante pas c'est toujours mieux dans la mesure ou ce tuto est à l'intention de "nuls" en prog. Ceux-là même dont le premier réflexe est de copier-coller-tester tous ce qui bouge...
:)

Commentaire de Julien39 le 01/04/2010 07:13:16

Je ne suis vraiment pas d'accord avec toi, et je pense que tu n'as pas une grande expérience de la programmation, sinon tu saurais qu'il est très important de documenter ses codes !

Et ce n'est pas uniquement pour les autres, c'est sur que quand on fait un programme qui compte jusqu'à 5, il n'est pas tellement utile de le commenter, par contre si tu fais un programme que tu es amené a réutiliser, ou à diffuser, c'est indispensable.

 Ajouter un commentaire




Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Septembre 2010
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
27282930   

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,078 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales