Les variables associent un nom (le symbole) à une valeur ou un objet, elles font parties des identificateurs de l'algorithmique.
Le signe = sert à affecter une valeur à une variable. Il existe différents types de variables.
Exemples :
a=2b=3c="Bonjour"d="et "e=" au revoir."f=input("quel est ton prénom?")print(f)print(a)g=int(input("quel est ton âge?"))print(g)print("dans un an tu auras",g+1,"ans")deftest(var):return(8)
L'instruction print permet d'afficher du texte ou le contenu d'une varialble à l'écran.
L'instruction input attend que l'utilisateur tape un texte. Il faut mettre
le contenu du input dans une variable!
Par défaut un input prend ce que vous tapez comme une chaine de caractère, même si vous tapez 2.
Si vous voulez utiliser le résultat du input comme un nombre il faut convertir la chaine en nombre:
int convertit une chaine en un entier.
A tout moment on peut changer le contenu d'une variable et en Python on peut même en changer le type. Ainsi,
a qui est un entier peut contenir une chaine de caractères ; il suffit de faire :
a=" Deux".
Dans de nombreux langages, il faut déclarer le type de la variable. Par exemple en java :int a=2 .
A partir de là, a ne pourra contenir que des entiers et si l'on affecte un décimal à a, alors cela provoquera une erreur.
Python est très souple, il change tout seul le typage (type du contenu) en fonction des besoins.
On dit que java est un langage fortement typé contrairement à Python qui est faiblement typé.
Les noms de variables sont des noms que vous choisissez. Efforcez vous cependant de bien les choisir : de préférence assez courts,
mais aussi explicites que possible, de manière à exprimer clairement ce que la variable est censée contenir.
Par exemple, des noms de variables tel que altitude, altit ou alt conviennent mieux que x pour exprimer une altitude.
Pour des noms de variables longs, conçus à partir de plusieurs mots, deux règles co-existent en fonction des langages.
Par exemple jourLePlusLong ou jour_le_plus_long: la première lettre toujours en minuscule puis au choix, des majuscules
à chaque nouveau mot ou un underline. Les noms commençant par une majuscule ne sont pas interdits,
mais l'usage veut qu'on le réserve plutôt aux variables qui désignent des classes.
Un bon programmeur doit veiller à ce que ses lignes d'instructions soient faciles à lire.
Sous Python, les noms de variables doivent en outre obéir à quelques règles simples :
Un nom de variable est une séquence de lettres (a ® z , A ® Z) et de chiffres (0 ® 9), qui doit toujours
commencer par une lettre.
Seules les lettres ordinaires sont autorisées. Les lettres accentuées, les cédilles, les espaces,
les caractères spéciaux tels que $, #, @, etc. sont interdits, à l'exception du caractère _ (souligné).
La casse est significative (les caractères majuscules et minuscules sont distingués).
Attention : Joseph, joseph, JOSEPH sont donc des variables différentes. Soyez attentifs !
Prenez l'habitude d'écrire l'essentiel des noms de variables en caractères minuscules (y compris la première lettre).
Il s'agit d'une simple convention, mais elle est largement respectée.
N'utilisez les majuscules qu'à l'intérieur même du nom, pour en augmenter éventuellement
la lisibilité, comme dans tableDesMatieres, par exemple.
En plus de ces règles, il faut encore ajouter que vous ne pouvez pas utiliser comme noms de
variables les 29 « mots réservés » ci-dessous
(ils sont utilisés par le langage lui-même) :
and assert break class continue def del elif else except exec finally
for from global if import in is lambda not or pass print
raise return try while yield
Il faut bien faire attention à ne pas confondre l’égalité mathématique a =a + 1
qui est toujours fausse (ou l’équation d’inconnue a qui n’a pas de solution) avec la nouvelle
affectation de la variable a à l’aide de l’ancienne valeur. Ce que l’on peut schématiser ainsi : a_nouveau=a_ancien+1
Types de variables
int: Nombre entier optimisé
float: Nombre à virgule flottante
complex: Nombre complexe
str: Chaîne de caractère
unicode: Chaîne de caractère unicode
tuple: Liste de longueur fixe
list: Liste de longueur variable
dict: dictionnaire
file: Fichier
bool: Booléen
NoneType: Absence de type
NotImplementedType: Absence d'implementation
function: fonction
module: module
On peut afficher le type d'une variable a en tapant: type(a)
On ne peut pas additionner une chaine de caractère et un nombre. Pour réaliser cela il
faut convertir le type la variable.
str: convertit en chaine de caractère. Exemple avec a=2, str(a)
converti le nombre 2 en chaine de caractère '2', que l'on peut coller à un
texte, cela s'appelle concaténer.
int: convertit en nombre une chaine qui contient un entier. Exemple int("28") donne 28.
Attention, en python, int sert aussi à donner la partie entière d'un nombre décimal.
float: convertit en nombre à virgule flottante.
Opérations:
** : puissances. 10**2 donne 100
/ : la division
% : le reste de la division entière (le modulo). 7%3 donne 1
// : le quotient entier. 7//3 donne 2
Les opérateurs de comparaison, ne sont utilisés que pour tester une condition
donc avec un if ou elif ou while ou pour donner une variable booléenne
< , > : inférieur et supérieur
<= et >= : inférieur ou égal, supérieur ou égal
== : égal
!= : différent de
is : pour savoir si deux objets sont les mêmes (on verra bien plus tard)
Conditions
Les conditions sont un concept essentiel en programmation. Elles vont vous permettre de faire
une action précise si, par exemple, une variable est positive, une autre action si cette variable
est négative, ou une troisième action si la variable est nulle. Comme un bon exemple vaut mieux que
plusieurs lignes d'explications, voici un exemple clair d'une condition prise sous sa forme la plus simple.
# Premier exemple de condition<br>a=5ifa>0:print("a est supérieur à 0.")print("mais cet exemple est trop simple")print("fin")
La ligne 1 contient un commentaire. Les commentaires sont des messages qui sont ignorés par l'interpréteur et
qui permettent de donner des indications sur le code (car, vous vous en rendrez compte, relire ses programmes
après plusieurs semaines d'abandon, sans commentaire, cela peut être parfois plus qu'ardu). En Python,
un commentaire débute par un dièse (« # ») et se termine par un saut de ligne. Tout ce qui est compris
entre ce # et ce saut de ligne est ignoré. Un commentaire peut donc occuper la totalité d'une ligne
(on place le # en début de ligne) ou une partie seulement, après une instruction (on place le # après
la ligne de code pour la commenter plus spécifiquement).
Pensez à bien commenter votre code !
La ligne 3 : Ici se trouve le test conditionnel. Il se compose, dans l'ordre :
du mot clé if qui signifie « si » en anglais ;
de la condition proprement dite, a > 0, qu'il est facile de lire
du signe deux points, « : », qui termine la condition et est indispensable : Python affichera une erreur de syntaxe si vous l'omettez.
La ligne 4 : Ici se trouve l'instruction à exécuter dans le cas où a est supérieur à 0.
Notez que le curseur s'est décalé d'une tabulation. C'est l'indentation.
L'indentation est essentielle en Python c'est le décalage des lignes qui indique ce qui fait partie du
if et lorsque la ligne est dédentée cela signifie que l'on quitte les exécutions propres au if.
Dans notre exemple, si a>0, on va effectuer les deux lignes suivantes et si a n'est pas supérieur
à zéro, on va reprendre avec le print("fin")
La commande print permet d'afficher à l'écran. Tout ce qui est
entre guillemet est affiché tel quel. Pour afficher une variable, il
suffit de mettre la variable sans guillemet. Pour mettre à la fois du texte et le contenu de
variables, on séparer par des virgules. Exemple print("bonjour",prenom)
A retenir: le bloc d'instructions . On entend par bloc d'instructions une série
d'instructions qui s'exécutent dans un cas précis (par condition, comme on vient de le voir,
par répétition, comme on le verra plus tard…). Ici, notre bloc n'est constitué de 2
instructions (la ligne 4 et 5 qui font appel à print).
La seconde notion importante est celle d'indentation. On entend par indentation un certain décalage vers la droite,
obtenu par un (ou plusieurs) espaces ou tabulations.
Les indentations sont essentielles pour Python. Il ne s'agit pas,
comme dans d'autres langages tels que le C++ ou le Java, d'un confort de lecture mais
bien d'un moyen pour l'interpréteur de savoir où se trouvent le début et la fin d'un bloc.
Sinon: l'instruction else:
Le mot-clé else, qui signifie « sinon » en anglais, permet de définir une première forme de complément à notre instruction if.
Il faut bien comprendre que Python exécute soit le if soit le else et jamais les deux.
Notez que cette instruction else doit se trouver au même niveau d'indentation
que l'instruction if qu'elle complète. De plus, elle se termine également par deux points puisqu'il
s'agit d'une condition, même si elle est sous-entendue.
Sinon si: l'instruction elif:
Le mot clé elif est une contraction de « else if », que l'on peut traduire littéralement par « sinon si ».
Vous pouvez mettre autant de elif que vous voulez après une condition en if. Tout comme le else, cette instruction
est facultative et, quand bien même vous construiriez une instruction en if, elif, vous n'êtes pas du tout obligé
de prévoir un else après. En revanche, l'instruction else ne peut figurer qu'une fois, clôturant le bloc de la condition.
Deux instructions else dans une même condition ne sont pas envisageables et n'auraient de toute façon aucun sens.
Sachez qu'il est possible d'imbriquer des blocs et, dans ce cas, l'indentation permet de comprendre clairement
le schéma d'exécution du programme.
Boucle bornée: For
Une boucle for permet de répéter un bloc d'actions, un nombre fini de fois connu.
Une boucle 'for' définit une variable qui prend successivement toutes les valeurs de la séquence
(liste ou tuple) parcourue (ligne 1). Voici la structure d'une commande for
for < var > in < sequence >:
....< instructions >
La fonction range produit une liste de tous les entiers entre une borne inférieure et une borne
supérieure. Cette construction est utile lorsqu’une boucle for repose sur l’utilisation d’une séquence d’entiers.
La fonction range est utilisable de trois manières :
un seul paramètre spécifiant le nombre d’éléments (ligne 1),
deux paramètres spécifiant la borne inférieure (inclue) et supérieure (exclue) (ligne 3),
trois paramètres spécifiant les bornes et le saut (incrément entre deux éléments de la séquence) (ligne 5)
Voir ci-dessous, 3 exemples. Les deux premières lignes affichent 5 fois le mot blabla. Les lignes
3 et 5 affichent 2,3,4,5,6,7,8,9. Les deux dernières lignes affichent 5,7,9,11,13.
foriinrange(5):# pour i allant de 0 à 4print("blabla")forjinrange(2,10):print(j)forjinrange(5,15,2):print(j)
On rappelle que dans cet exemple une seule ligne est effectuée dans chaque boule,
et que c'est l'indentation et la suppression de cette indentation
qui indique la fin de la boucle. Il pourrait y avoir plusieurs lignes dans chaque bloc.
On peut aussi, mettre une boucle dans une boucle.
Très important. On ne casse pas une boucle for. Pas de break, pas de modification de la variable de boucle
à l'intérieur de la boucle! Si l'on est tenté de modifier la variable de boucle, cela signifie très
probablement que l'on aurait dû utiliser une boucle while
Boucles non bornées: while
Le principe de la boucle while, c’est d’exécuter un bloc d’instructions
tant que (while in english) une condition donnée est vraie.
Encore une fois commençons par un exemple :
while < condition > :
....< instructions >
i=1whilei<=5:print(i)i=i+1
Ici tant que (while) la condition i<=5 est vraie, le bloc d’instructions est exécuté.
Attention
La deuxième instruction i = i + 1 est primordiale car elle assure que l’on va sortir de la boucle.
En effet, ce qu’il faut éviter avec les boucles tant_que, c’est de construire une boucle sans fin.
C’est ce qui peut se produire si la condition du while n’est jamais vérifiée.
Pour savoir combien de fois la boucle while est exécutée, il peut être utile d’utiliser une variable qui servira de compteur,
c’est-à-dire une variable (qu’il ne faut pas oublier d’initialiser) et incrémentée de 1 dans le bloc d’instructions.
On utilisera donc une boucle for dès que l'on sait combien de fois on veut réaliser une action
(ou dans quelle liste on veut piocher des éléments, on verra cela plus tard).Et,
on utilisera un while uniquement lorsque c'est la réalisation d'une condition qui va
entrainer la réalisation ou la sortie de la boucle. On voit que l'exemple précédent est
mauvais puisque l'on sait que l'on va faire 5 fois la boucle! On aurait donc dû faire le for.
Fonctions
Les fonctions sont essentielles en programmation. Une fonction est une suite d'instructions
que l'on peut appeler avec un nom.
Pour déclarer une fonction on commence par l'instruction def, puis le nom de la fonction
et une paire de parenthèses.
defau_carre(x):carre=x*xreturn(carre)
Cet exemple est assez complet.
Le nom de la fonction est au_carre
Dans le paramètre il y a la variable locale x, c'est ce que l'on
appelle un paramètre.
A la fin de cette fonction nous avons un return.
cela signifie que lorsque je vais utiliser la fonction au_carre, la fonction
renvoie la valeur de la variable carre.
##fonctions#entree: un nombre#sortie: un nombre (le carré de l'entrée)#nous verrons dans specification#que ces commentaires doivent être placés ailleursdefau_carre(x):carre=x*xreturn(carre)##programme principalprint(au_carre(5))a=10b=au_carre(a)x="bonjour""b=au_carre(10)print(x)
On déclare les fonctions avant le programme principal
Notez que le paramètre x de la fonction peut être une variable a lors
de l'utilisation et je conseille vivement de choisir des noms de
paramètres différents des variables du programme principal. La variable x de la fonction
est une variable locale elle est indépendante
du programme principal et n'a aucun rapport avec "bonjour"!
Lorsque l'on crée une fonction il FAUT spécifier les entrées, sorties et rôle de la fonction.
Tout comme les variables, le nom de la fonction doit être le plus clair possible.
Voir le chapitre Spécifications pour plus de détails.
Fonctions lambda
On peut parfois avoir besoin de déclarer une fonction dans une ligne de commande.
Pour cela on peut créer des fonctions lambda. Les fonctions lambda sont des fonctions créées en
une seule ligne. Par exemple:
Voici le codes pour tester ces fonctions:
ranger(3,2)
ranger(2,3)
au_carre(5)
l=[[3,5],[4,2]]
tri_liste(l,1)
Pour ranger, je multiplie un booléen (True=1 false=0) par le résultat à renvoyer...astucieux.
Pour tri_liste, il sagit d'ordonner une table (liste de liste) en fonction des valeurs d'une colonne choisie.
Notez qu'il y a une fonction lambda dans une fonction lambda !
Exercices
De variables à conditions
Ecrire un programme qui demande votre prénom et affiche "Bonjour Arthur", si la réponse est Arthur
Ecrire un programme qui demande 2 nombres entiers et affiche leur somme et leur produit avec une phrase du genre
le produit de 3 et 5 est 15, leur somme est 8.
idem mais avec des nombres décimaux.
Ecrire un programme qui demande deux nombres et qui dit "la somme est bien 100" ou "la somme ne fait pas 100".
Ecrire un programme qui demande un prénom et qui dit "Bonjour Paul" ou "Bonjour, je croyais que c'était Paul".
Convertir une note scolaire N quelconque, entrée par l’utilisateur sous forme de points
(par exemple 27 sur 85), en une note standardisée suivant le code ci-dessous :
Note N
Appréciation
N >= 80 %
A
80 % > N >= 60 %
B
60 % > N >= 50 %
C
50 % > N >= 40 %
D
N < 40 %
E
Boucles bornées
Ecrire un programme qui affiche les carrés des entiers de 1 à 7 ?
a) ) Écrire les nombres pairs jusqu'à 100
b) Écrire les nombres impairs jusqu'à 100
Ecrire un programme qui affiche n fois la suite de symboles suivante :
A #Si n=1
AA #si n=2
AAA
etc...sans utiliser le * comme par exemple print(3*"A"). n est donné par l'utilisateur.
Écrire un programme qui affiche les 20 premiers produits de la table de multiplication de 7.
Écrire un programme qui affiche une suite de 12 nombres dont chaque terme soit égal au triple du terme précédent.
Écrire un programme qui affiche les 20 premiers termes de la table de multiplication
par 7, en signalant au passage (a l’aide d’une astérisque) ceux qui sont des multiples de
3.
Écrire un programme qui calcule les 50 premiers termes de la table de multiplication par 13, mais n’affiche que ceux qui sont des multiples de 7.
Ecrire un programme qui affiche la somme des premiers entiers jusqu'à 30
Boucles non bornées
Ecrire un programme qui demande un nombre, affiche par exemple "5 est un joli nombre" et qui s'arrête lorsque vous tapez 0.
Ecrire un programme qui demande un prénom. Si ce prénom est Paul, le programme affiche "enfin c'est toi", sinon le programme
redemande un nouveau prénom car ce n'est pas la personne qu'il attend (un genre de mot de passe non?).
Ecrire un programme qui additionne tous les nombres que vous entrez (tour à tour) et qui s'arrête lorsque vous tapez 0.
Ecrire un programme qui additionne tous les nombres que vous entrez (tour à tour) et qui s'arrête lorsque la somme dépasse 100.
Ecrire un programme qui multiplie tous les nombres que vous entrez (tour à tour) et qui s'arrête lorsque vous tapez 0.
Fonctions
Écrire une fonction qui calcule le volume d’un parallélépipède rectangle dont sont
fournis au départ la largeur, la hauteur et la profondeur. Testez votre fonction.
Écrire deux fonctions qui convertissent en degrés Celsius une température exprimée au départ en degrés Fahrenheit, ou l’inverse.
La formule de conversion est : Tf = 1,8 Tc+32.
Écrire un programme qui calcule les intérêts accumules chaque année pendant 20 ans,
par capitalisation d’une somme de 100 euros placée en banque au taux fixe de 4,3 %. Généraliser à une
fonction d'intérêt p, de durée n et sur un montant m.
a) Chercher le plus grand diviseur, autre que lui-même, d'un nombre entier, par une fonction.
b) Ecrire une fonction qui indique si un nombre est premier.
Donner la notation scientifique d'un nombre (faire une fonction)
Déterminer si une année (dont le millésime est introduit par l’utilisateur) est bissextile ou non.
Une année A est bissextile si A est divisible par 4. Elle ne l’est cependant pas si A est un multiple de 100,
a moins que A ne soit multiple de 400. Tout cela dans une fonction.
Demander à l’utilisateur d’entrer trois longueurs a, b, c. A l’aide de ces trois longueurs,
déterminer s’il est possible de construire un triangle. Déterminer ensuite si ce triangle est rectangle, isocèle, équilatéral ou quelconque.
Attention : un triangle rectangle peut être isocèle. Créer et utiliser des fonctions.