Algorithmique : instructions de base

Eric Obermeyer - Actualisation : septembre 2014

Plan

 

I) Présentation de ce document. 3

II) Indentation du code. 3

III)  Commenter (ou encore documenter) son code. 3

1)  Signification. 3

2) Nécessité. 3

3) A qui sont destinés les commentaires ?. 3

4) Quels commentaires écrire ?. 3

5) Un algorithme bien écrit ne nécessite que très peu de commentaires. 3

6) Syntaxe. 4

IV) Valeurs et variables. 4

1) Utilisation. 4

2) Valeur, type d'une valeur. 4

3) Nom d'une variable. 4

4) Déclarer ou ne pas déclarer les variables ?. 4

5) Type d'une variable en Python. 4

V) Affectation d’une valeur à une variable. 5

1) Définition. 5

2) Remarque. 5

3) Affectation dans le code avec le symbole  =. 5

4) Affectation au clavier. 5

VI) Affichage. 5

1) Affichage du contenu d’une variable, d’une valeur ou d'un texte. 5

2) Compléments. 5

VII) Instructions conditionnelles. 5

1) Si ... alors ….. 5

2) Si ... alors … sinon ….. 6

3) Si … alors … sinon si … sinon si … sinon ….. 6

VIII) Boucles. 6

1) Boucle  "pour … ". 6

a) Utilisation. 6

b) Syntaxe. 6

c) Boucle  "pour" descendante. 7

d) Boucle  "pour" avec un pas p (p > 0 ou p < 0) 7

2) Boucle  "tant que … ". 7

a) Utilisation. 7

b) Syntaxe. 7

3) Forcer la sortie d'une boucle. 7

a) Signification. 7

b) Intérêt. 7

c) Syntaxe. 7

IX) Fonctions. 7

1) Pourquoi utiliser des  fonctions ?. 7

2) Définition d'une fonction. 8

3) Syntaxe. 8

4) Variables locales, variables globales. 8

5) La règle LGI (Local – Global – Interne) de portée des variables. 8

X) Quelques  opérateurs usuels sur les types de base. 8

1) Booléens. 8

2) Evaluation paresseuse de (A and B) et (A or B) 8

3) Entiers. 9

4) Flottants et entiers. 9

 


 

I) Présentation de ce document

Dans ce document sont décrites les instructions de base d’algorithmique dans le langage Python, que l'on utilisera également comme pseudo-langage de programmation, à quelques détails près.

 

# Python ou Pseudo-code

 

instruction

 

Les instructions successives sont séparées par un retour à la ligne.

II) Indentation du code

L’indentation du code est le décalage (avec des tabulations ou des espaces) que l’on doit faire dans l’écriture des lignes successives de code.

# Python ou Pseudo-code

 

instruction I:

   sous instruction I-1

   sous instruction I-2:

     sous sous instruction I-2-a

   sous instruction I-3

instruction II

etc…

Dans le langage Python, ces décalages réalisés automatiquement par l’éditeur utilisé.

Les instructions qui se « suivent » doivent être alignées verticalement.

C'est l'indentation qui permet d'identifier les blocs de sous instructions relatifs à une instruction.

Les deux points : à la fin d'une instruction annoncent un bloc de sous instructions.

III)  Commenter (ou encore documenter) son code

 1)  Signification

Commenter son code c’est y ajouter des lignes d’explications qui ne seront pas exécutées par l’ordinateur comme les autres instructions,  mais qui sont importantes pour en comprendre le fonctionnement.

2) Nécessité

Pour pouvoir être facilement compréhensible par un autre que l'auteur, et même par l'auteur si un peu de temps s'est écoulé, les instructions d'un programme doivent être commentées (ou encore documentées)

L’habitude de commenter son code doit absolument être prise depuis les tous premiers programmes écrits.

3) A qui sont destinés les commentaires ?

A celui qui est en train d’écrire le code du programme, ou ceux qui devront ultérieurement le comprendre (par exemple un professeur) et (ou) le modifier.

4) Quels commentaires écrire ?

·       Au début de chaque fonction, décrire brièvement ce qu'elle fait

·       Donner des détails lors de passages « clés » pas évidents du code.

5) Un algorithme bien écrit ne nécessite que très peu de commentaires

Un algorithme bien écrit dans lequel les noms des variables et des fonctions ont été bien choisis doit "parler" de lui-même pour ce qu'il doit faire. Les commentaires doivent se limiter aux rares parties "obscures".

6) Syntaxe

# Python ou Pseudo-code

 

# Ceci est un commentaire sur une ligne

## Ceci est une ligne de code ignorée

""" Ceci est un commentaire ou une description (on dit une docstring)

sur plusieurs lignes """

IV) Valeurs et variables

1) Utilisation

Les valeurs et les variables constituent le matériel de base de la programmation. Les variables sont destinées à contenir des valeurs. Mettre une valeur val dans une variable v se dit "affecter la valeur val à la variable v".

2) Valeur, type d'une valeur

Les valeurs sont les objets de base : elles peuvent être de divers types. Les principaux types sont:

·       entier

·       flottant (ce qui correspond aux nombres réels en informatique)

·       texte ou encore chaîne de caractères

·       booléen (Vrai ou Faux)

·       liste à une ou plusieurs dimensions de l’un de ces quatre types

 3) Nom d'une variable

Une variable doit avoir un nom. Ce nom doit:

·       être écrit en caractères alphanumériques et commencer par une lettre

·       ne pas contenir d'espaces

 

Ce nom devrait:

·       être toujours explicite et en rapport avec ce que doit contenir la variable

·       être écrit en caractères minuscules

4) Déclarer ou ne pas déclarer les variables ?

Certains langages (les langages compilés) imposent la "déclaration" du type d'une variable (c’est-à-dire du type de la valeur qu'elle doit contenir) avant de pouvoir l'utiliser dans le programme.  Au cours du programme, la variable devra uniquement contenir des valeurs du type déclaré.

D'autres langages (les langages interprétés)  n'imposent pas cette "pré-déclaration". C'est à la première affectation d'une valeur de type T à une variable v que la variable v sera considérée de type T. Elle pourra même changer de type au gré des affectations successives. On parle alors de typage dynamique.

Python n'impose pas la pré-déclaration d'une variable, alors que C++, un des langages les plus utilisés, l'impose.

Le fait d'avoir, dans un secteur (le début) du code la liste des variables utilisées ainsi que leur type permet à l'apprenti programmeur de mieux réfléchir à l'organisation de son projet, mais alourdit le code.

Dans ce cours comme dans Python nous choisissons de ne pas imposer cette pré-déclaration des variables.

5) Type d'une variable en Python

# Python

 

""" Il y a de nombreux types de variables (plus de 20 types au total )

Les types principaux sont : int , float , complex, str , bool , list

La fonction type() permet de connaitre le type d’une variable ou d’une valeur

"""

V) Affectation d’une valeur à une variable

1) Définition

Affecter une valeur val  à une variable var c'est "décider" que la variable var contient la valeur val.

2) Remarque

La valeur val peut être explicite, comme 3, "bonjour" ou 3.14 , mais aussi (dans le code) être  le résultat d'opérations sur d'autres valeurs ou (et) de contenus d'autres variables (dont éventuellement elle-même)  

 3) Affectation dans le code avec le symbole  =

# Python ou Pseudo-code

 

var = val

v1, v2 = val1, val2   # On peut faire plusieurs affectations simultanées

v3 = v3 + 1           # Si v3 contient un nombre entier ou réel

4) Affectation au clavier

L'affectation d'une valeur au clavier ne sera utilisée qu'exceptionnellement.

# Python ou Pseudo-code

 

# le "message" est un texte expliquant quel type de valeur est attendu

v = input("message")

Les valeurs saisies au clavier dans Python sont considérées comme des chaînes de caractères.

VI) Affichage

1) Affichage du contenu d’une variable, d’une valeur ou d'un texte

L’affichage du contenu d’une variable ou d’une valeur («brute» ou résultat d'opérations sur d'autres valeurs ou (et) de contenus d'autres variables) ou d'un texte s’écrit :

# Python ou Pseudo-code    # En Pseudo-code print = afficher

 

print(valeur)

print(variable)

print("texte")

# on peut afficher simultanément plusieurs choses

print(variable, valeur, "bla bla bla")

2) Compléments

Voir le document de cours "Afficher avec Python" pour des compléments.

VII) Instructions conditionnelles

Toutes les conditions doivent être des valeurs booléennes (Vrai ou Faux).

1) Si ... alors …

L'instruction "si condition : instruction(s)"  effectue  instruction(s)  si la condition est vraie et ne fait rien si la condition est fausse.

# Python ou Pseudo-code    # En Pseudo-code if = si

 

if condition:

   instruction(s)

2) Si ... alors … sinon …

 L'instruction "si condition : instruction(s)A sinon instruction(s)B"  effectue instructions(A) si la condition est vraie et instruction(s)B si la condition est fausse.

# Python ou Pseudo-code    # En Pseudo-code else = sinon

 

if condition:

   instructions A

else:

   instructions B

3) Si … alors … sinon si … sinon si … sinon …

 L'instruction "si condition1 : instructions_1 sinon si condition_2 alors  instructions_2 sinon si … :  … sinon : instructions_Z"  effectue les premières instructions_i pour lesquelles  condition_i est vraie  et instruction_Z si toutes les condition_i sont fausses.

Le sinon final est facultatif.

# Python ou Pseudo-code    # En Pseudo-code elif = sinon … si

 

if condition1 :

   instructions_1

elif si condition_ 2:

   instructions _2

else:                      # facultatif

   instructions_Z

VIII) Boucles

 1) Boucle  "pour … "

a) Utilisation

La boucle "pour i variant de a à b: instruction(s)"  effectue  une ou plusieurs sous- instructions, appelée(s) itération de la boucle, avec i = a puis  i = a+1 puis… puis i = b.

Si a >  b, rien n'est exécuté.

b) Syntaxe

 ATTENTION, en Python range(a, b) désigne l'intervalle semi-ouvert [a, b - 1[, c’est-à-dire l'ensemble {a, a+1,…,b-1}.  L'ensemble {a, a + 1,…, b} des entiers de a à b est donc range(a, b+1)

 

 

 

# Python                            # Pseudo-code

 

for i in range(a, b + 1):           pour i variant de a à b:          

   instruction(s)                     instructions

 

En Python, l'instruction "pour…faire" est très souple et puissante. On peut, et cela ouvre beaucoup de possibilités:

# Python

 

for i in liste ou chaine ou objet itérable:

   instruction(s)

Voir le document de cours sur les listes pour des détails.

 

c) Boucle  "pour" descendante

# Python

 

for i in range(a, b -1 , -1):

   instruction(s)

effectue les instructions pour i = a, i = a – 1, i = a – 2,…,  i = b. Si a < b, rien n'est exécuté.

d) Boucle  "pour" avec un pas p (p > 0 ou p < 0)

# Python

 

for i in range(a, b + 1, p):    #(si p > 0 et a b)

for i in range(a, b - 1, p):    #(si p < 0 et a b)

   instruction(s)

effectue les instructions pour i = a, i = a+p, i = a+2p,… jusqu'à l'entier maximum N =  i + k*p ≤  b (ou à l'entier  minimum N =  i + k*p ≥ a si p < 0 et a > b).

2) Boucle  "tant que … "

Les conditions doivent être des valeurs booléennes (Vrai ou Faux)

a) Utilisation

La boucle "tant que condition faire instruction(s)" effectue tant que la condition est vraie une ou plusieurs sous-instructions, appelée(s) itération de la boucle.

Si la condition reste toujours vraie, le programme ne s'arrête jamais… Attention !

b) Syntaxe

# Python ou Pseudo-code         # En Pseudo-code while = tant que

 

while condition:

   instruction(s)

3) Forcer la sortie d'une boucle

a) Signification

Sortir de force d'une boucle "pour … "  ou  "tant que … " c'est quitter la boucle, même si le compteur n'a pas achevé de prendre toutes les valeurs (boucle pour) ou si la condition est encore vraie (boucle tant que)

b) Intérêt

Dans certains cas, une sortie forcée de boucle peut rendre le code plus clair et plus léger. Mais elle ne doit pas être utilisée  pour transformer des boucles while en boucle for .

c) Syntaxe

# Python ou Pseudo-code

 

break  # force la sortie de la boucle pour… ou bien tant que…

IX) Fonctions

1) Pourquoi utiliser des  fonctions ?

Pour être plus facilement compréhensible, pour pouvoir le modifier et l'adapter plus facilement, pour n'écrire qu'une fois une série d'instructions qu'on utilise à plusieurs reprises, un programme doit être découpé en blocs "indépendants" de code, des fonctions.

Lorsque le programme devient important, il faut prendre l'habitude de regrouper ces  fonctions dans des unités ou encore modules.

2) Définition d'une fonction

Une fonction:

·       doit avoir un nom,

·       peut avoir aucun, un ou plusieurs paramètres d’appels

·       peut avoir une valeur de retour (le résultat de la fonction avec les paramètres d'appel)

 

Une fonction sans valeur de retour s'appelle parfois une procédure.  Cette distinction ne sera pas faite ici, nous ne parlerons que de fonctions (éventuellement sans valeur de retour).

3) Syntaxe

 

# Python ou Pseudo-code

 

def f(x):       # ou def f(x, y), ou …

   instruction(s)

   return …           # la valeur de retour facultative

4) Variables locales, variables globales

Dans un module, une variable globale est une variable qui peut être utilisée dans toutes les fonctions définies dans le module.

Les variables utilisées dans l'écriture d'une fonction sont par défaut des variables locales: elles n'existent qu'à l'intérieur du bloc d'instructions permettant de définir la fonction. (Même si elles ont le même nom qu'une variable globale du programme). 

Un principe: utiliser le moins possible des variables globales.

5) La règle LGI (Local – Global – Interne) de portée des variables

A n’importe quel moment de l’exécution, exactement trois espaces de noms sont accessibles directement, pour savoir à quoi une variable se réfère :

·       la portée locale, qui est explorée en premier, contient les noms des variables locales à la fonction

·       la portée globale, explorée ensuite, contient les noms globaux du module courant

·       la portée interne (explorée en dernier) correspond à l’espace des noms du système

 

L'instruction global  de passer la portée d'une variable du Local au Global.

L'instruction nonlocal permet d'utiliser une variable (locale) d'une fonction dans des sous fonctions.

X) Quelques  opérateurs usuels sur les types de base

1) Booléens

 

# Python ou Pseudo-code

 

a) Le test d’égalité s’écrit ==   et le test de différence s’écrit !=

b) Supérieur ou égal s'écrit >=, inférieur ou égal s'écrit <=

c) Les opérateurs booléens sont and , or , not

2) Evaluation paresseuse de (A and B) et (A or B)

 Soient A, B des booléens.  En mathématiques l’évaluation de  (A et B) est équivalente à l’évaluation de (B et A), de même avec des “ou” . Il n’y a pas de temps en mathématiques.

 En informatique, les évaluations se font les unes après les autres.

 

 

 

 

 

 Lorsqu’on évalue C = (A et B):

   • on commence par évaluer A

          •• si A est vraie, on évalue B:

                        ••• si B est vraie, alors C est vraie

                        ••• si B est fausse, alors C est fausse

          •• si A est fausse, C est fausse et B n’est pas évaluée

 

 Lorsqu’on évalue C = (A ou B):

   • on commence par évaluer A

          •• si A est vraie,  C est vraie et B n’est pas évaluée

          •• si A est fausse, on évalue B

                        ••• si B est vraie, alors C est vraie

                        ••• si B est fausse, alors C est fausse

 

 Lorsque la deuxième condition B n’est pas évaluée (c’est inutile, le résultat C est trouvé), on parle d’évaluation paresseuse du “et” et du “ou” logique.

 

Il faut retenir :

 

Pour évaluer (A and B) il faut mettre en second la condition qui peut ne pas avoir de sens. Lorsque B n’a pas de sens, A doit être fausse.

Pour évaluer (A or B) il vaut mieux mettre en en premier la condition qui a le le plus de chance d’être vraie: l’évaluation du “ou” est alors plus rapide.

3) Entiers

# Python ou Pseudo-code

 

Le reste de la division euclidienne de a par b est  a % b 

Le quotient de la division euclidienne de a par b est a // b

4) Flottants et entiers

# Python

 

a) +, -, * , / sont les opérations usuelles

b) a^b s'écrit a**b en Python

c) la fonction valeur absolue est abs()

d) Les fonctions mathématiques usuelles se trouvent dans le module math