begin process at 2012 02 08 12:14:39
  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 administrateur CS

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 administrateur CS

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 administrateur CS

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.

Commentaire de gtechblues le 06/09/2010 23:54:28

Hummm... sans vouloir être négatif, mon opinion est que 1:trop de commentaires n'aide pas à la compréhension, et 2:un programme qui fonctionne est préférable dans les exemples, surtout pour débutants.

Commentaire de Lebasseux le 07/09/2010 17:17:15

Salut a tous, et bien oui il faut faire des commentaires, mais de bons commentaires. Comme je suis un nouveau, que je ne fais pas de copier-coller (ou serait alors l'utilité d'apprendre !!) et que mon age 45ans ne me facilite pas la mémorisation, je dirais simplement il faut la bonne mesure !!!
Je crois que des noms de variables clairs et une indication de sa fonction dans le script serait suffisant.
Pour la description de ce que fait le programme en tout ou partie, je suis d'accord avec ce qui a été dit précédement.
Je suis musicien avant tout, pardonnez moi.

Commentaire de Julien39 le 08/09/2010 07:32:48 administrateur CS

Oui, tu as tout à fait raison, si j'avais fais ce tutoriel aujourd'hui, je l'aurais fait autrement. Malheureusement, le site ne permet pas de mettre les tutoriels à jour, il va donc rester comme ca.

Pour bien présenter un code il faut deux choses :

- Des noms de variables explicites
- Un cartouche de docstring au début qui explique ce que le programme fait et les entrees et sorties

Commentaire de Renfield le 03/11/2011 09:11:28 administrateur CS

Ca a été dit, déjà...
commentaires en trop :

# On initialise estPremier à Vrai
estPremier=True

paraphrase pure et simple du code

Commentaire de Julien39 le 03/11/2011 10:21:04 administrateur CS

J'ai posté ce tutoriel alors que je manquais un peu de recul sur le sujet.

Oui, c'est vrai qu'une ligne de commentaire par ligne de code écrite, c'est beaucoup trop, on tombe forcément dans la paraphrase de code.

 Ajouter un commentaire




Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
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,140 sec (4)

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