Spécification

Langages et programmation

Plan

Introduction

En tant que codeur débutant, il est indispensable de prendre les bonnes habitudes dès le départ. De nombreuses conventions se sont imposées au fil du temps devant la complexité, la taille croissante du code mais aussi parce que le partage du travail devient de plus en plus indispensable. L'accroissement de la mémoire a aussi permis d'améliorer la lisibilité du code. Et oui, il fut un temps où chaque octet était important et une variable à une lettre moins couteuse qu'une de 20, où un commentaire prenait trop de place dans le fichier...Aujourd'hui, la longueur du nom d'une variable ou d'un commentaire ne doit plus vous effrayer.

Votre code doit être facile à lire par une autre personne. Et cette autre personne peut très bien être-vous 2 ans plus tard....on est parfois surpris de ne pas comprendre ce que l'on a bien pu faire!

Idées générales

Voici quelques conventions propres à Python mais qui fonctionnent pour tous les langages. Elles sont disponibles sur le site de python

Je les résume en français: beau est mieux que laid, explicite c'est mieux qu'implicite (oui, le truc qu'on ne sait plus pourquoi...), simple mieux que complexe, complexe mieux que compliqué, éviter si possible trop d'imbrications, aérer, etc...Je vais isoler la dernière idée: maintenant c'est mieux que jamais mais jamais et parfois préférable à immédiatement. Oui, bien souvent, on veut tellement finir et tester notre bébé que l'on en oublie d'être propre et judicieux, mieux vaut faire une pause.

Idées en pratique sur Python

Elles sont disponibles sur le site de python

Je les résume au maximum. Pour bien comprendre l'intérêt de tout cela, gardez à l'esprit que vous passerez plus de temps à relire votre code qu'à l'écrire!

En python ne mélangez jamais tabulations et espaces

Une ligne de code ne devrait pas dépasser 79 caractères.

Encoder en Utf-8 (voir chapitre Représentation d'un texte...lorsqu'il sera disponible)

Importer les bibliothèques en début de programme sur des lignes séparées. (Pour en savoir plus sur les bibliothèques.)

Il y a de nombreuses conventions sur les espaces. Globalement on met un (et un seul) espace avant et après les affectation, comparaisons, booléens et opérations et pas d'espace pour le reste (, {,[...

Commentaires

Les commentaires doivent être des phrases complètes de préférence en anglais. Je ne vais pas vous obliger à suivre cette règle mais soyez cohérents. Je vois très régulièrement des codes en Franglais. Des variables en français, d'autre en anglais et de même pour les noms de fonctions. Faites un choix une fois pour toute (sauf pour les commentaires pour l'instant).

En Python les commentaires commencent par un #. Nous allons donc adopter pour cette année: commentaires en français et au choix noms de fonctions ET variables dans une même langue (français ou anglais).

Pensez à mettre à jour vos commentaires si vous modifiez le code !

Commenter ce n'est pas commenter chaque ligne mais plutôt indiquer les grandes étapes lorsque le code s'allonge et expliquer les lignes qui vous paraissent techniques.

Dans les fonctions

Nous verrons en terminale la programmation orienté objet. Pour différencier les objets des fonctions, variables et méthodes (des objets) on utilise deux conventions de nommage différentes

nom_de_ma_fonction: pour les fonctions, variables et méthodes tout en minuscule avec _ pour séparer les mots.

MaClasse: pour le nom des classes(en terminale). Majuscule pour chaque nouveau mot et mots collés.

Les constantes sont entièrement en majuscule: NOM_DE_MA_CONSTANTE. Une constante est une variable à laquelle on donne une valeur qui ne changera pas dans tout le programme. Par exemple, on code un jeu et au début, on préfère s'en tenir à deux joueurs. On peut créer NB_MAX_JOUEURS=2 et on utilisera cette variable dans tout le programme sans jamais la changer. Imaginons que le code permette de jouer à trois joueurs. Il suffit de changer la valeur de la constante NB_MAX_JOUEURS=3.

Intéressons-nous maintenant à la documentation des fonctions. Lorsque vous créez une fonction, vous devez la documenter. C'est le rôle du docstring. Le docstring se place juste après la création de la fonction par def. Il commence et termine par trois guillemets ".

Votre docstring doit décrire le rôle de la fonction, puis les paramètres passés en arguments (type et rôle), ainsi que le type de ce qui est retourné

Ce docstring, peut être lu en tapant: nom_de_ma_fonction.__doc__ (deux underscores de chaque côté)

def mettre_au_carre(x):
	"""renvoie le carré de x

	paramètres nommés:
	x -- un nombre quelconque

	"""
	return(x*x)

Ici, il y a plus de commentaire que de code....et alors!

Testons notre docstring. Si on tape print(mettre_au_carre.__doc__) on lira 'renvoie le ....quelconque'

Exercices

  1. La mesure d'un angle peut être donnée en degrés ou en radian. L'unité de calcul naturelle pour les angles est le radian. La bibliothèque math ne sait donc calculer le cosinus que d'un angle donné en radian. ma_fontion1, convertit des degrés en radians car pi radians correspondent à 180°. Modifier les noms des fonctions, variables et créez le docstring selon les normes énnoncées plus haut.

    import math
    def ma_fonction1(x):
        return(x*math.pi/180)
    
    def ma_fonction2(x):
        return(math.cos(ma_fonction1(x)))
    

    Petite remarque, on importé le module math de la bibliothèque standard (la bibliothèque de Python). Ci-dessus, on l'a juste préparé et on appelle les fonctions qu'il contient au fur et à mesure des besoins (exemple math.cos). Ci-dessous, j'importe directement ce que je vais utiliser. Les fonctions sont chargées en mémoire et donc directement connues dans mon programme (je tape cos directement, plus math.cos). A noter si je remplace par from math import *, alors je charge dans la mémoire de mon programme toutes les fonctions qui existent dans math...donc je surcharge inutilement.

    from math import pi,cos
    #from math import *
    
    def ma_fonction1(x):
        return(x*pi/180)
    
    def ma_fonction2(x):
        return(cos(ma_fonction1(x)))
    

  2. Comprendre ce que fait le code suivant et corriger tous les problèmes de spécification.

    def fonction(a,b):
    	return(a*100/b)
    

  3. Comprendre ce que fait le code suivant et corriger tous les problèmes de spécification

    import math
    
    def fonction1(a,b,c,d):
       return(a+b+c+d)
    
    def fonction2(a,b,c,d):
       return(fonction1(a,b,c,d)/4)
    

  4. a) Comprendre ce que fait le code suivant et corriger tous les problèmes de spécification
    b) Que dois-je taper pour avoir l'aire d'un rectangle de côté 3 et 4, agrandit 10 fois?
    c) Que dois-je taper pour que le programme affiche le volume d'un pavé droit de mesure 5;7;6 cm, agrandit 3 fois?

    import math
    
    def fonction1(a,b):
    	coefficient=10
    	c=coefficient*coefficient*a*b
    	print("L'aire d'un rectangle de mesure",a,"et",b,"qui subit un agrandissement de coefficient",coefficient,"est",c)
    
    #volume d'un parallélépipède de coté a,b,c qui subit un agrandissement de coefficient d
    def fonction2(a,b,c,d):
    	return(a*b*c*d*d*d)
    

  5. Comprendre ce que fait le code suivant et corriger tous les problèmes de spécification.

    def fonction1(a):
    	print("1 - jouer à la bataille navale")
    	print("2 - jouer au puissance 4")
    	print("3 - quitter")
    	a=input("Taper votre choix 1 ou 2 ou 3:")
    	while a!="1" or a!="2" or a!="3":
    		a=input("Taper votre choix :")
    	return(a)
    

 

Android

De la programmation pour pc à la programmation pour téléphone.

A finir

Pas eu le temps de tout faire.....