BCPST 1 B 13 septembre 2015 Informatique. Programmation en Python. Ce document est un support de cours, il vous permet d avoir sa structure et ses éléments les plus importants. Au cours des séances en classe vous devez compléter ce cours par toutes les remarques, exemples, démonstrations qui seront faites oralement et au tableau. Vous devez pour cela prendre des notes sur une autre feuille. Vous devez aussi reprendre sur cette feuille annexe toute la structure du cours. Par défaut, ce qui est présenté concerne Python 3.x. Nous verrons par moment les différences avec l autre version : Python 2.x. Il est important de savoir qu il y a deux versions. 1) Interfaces. L exécution d un programme Python peut se faire à l aide de plusieurs interfaces, nous utiliserons Pyzo qui est celle utilisée au concours. Nous utiliserons aussi une interface web très pratique : http ://www.pythontutor.com/ Cette interface permet d exécuter pas à pas de petits programmes Python. Elle permet aussi de voir l évolution des variables au cours de l exécution. L utilisation de cette interface est limitée aux petits programmes n utilisant pas trop de bibliothèques. Exemple de programme. n=1 while n<10: n=n+2 print(n) Vérifier, à travers cet exemple, que vous savez : Lancer les deux interfaces. Copier le programme dans chaque interface. Obtenir le résultat du programme dans chaque interface. 2) Les variables. Les variables en python sont des noms associés à des espaces mémoires. On peut y stocker une valeur, accéder à son contenu et parfois changer son contenu. A chaque affectation d une valeur à une variable on change l adresse mémoire sur laquelle pointe la variable. Nous verrons plus tard que pour certains types de variables (mutables comme les listes), on peut modifier la valeur d une variable sans changer l adresse mémoire. Les valeurs prises par ces variables peuvent être de différents types. Pour connaître le type d une valeur ou d une variable il suffit d utiliser la fonction type(). 1
a) Les types simples. Les entiers. Opérations sur les entiers. +,, *, //, % et ** Les règles de calculs sont les mêmes qu en mathématiques, on utilise des parenthèses pour indiquer l ordre des opérations. Il n y a pas de limitation de taille pour les entiers. Les flottants. Ce sont des nombres à virgule. On utilise le symbole. à la place de la virgule. Opérations sur les flottants : +,, *, /, ** Python affichera les flottants avec au maximum 17 chiffres significatifs et si nécessaire en notation scientifique. Dans un calcul mélangeant des entiers et des flottants il risque d y avoir des problèmes. Python transforme un entier en flottant si nécessaire. Remarque : Python 3.x transforme tout en flottant dès qu il y a un /. Attention : La représentation des nombres décimaux par des flottants n est pas exacte. Pour stocker le nombre 0.4 : on approche au mieux ce nombre en binaire : 0, 011001100110011001100110011001100110011001100110011010 qui est égale à : ce nombre vaut environ : 7205759403792794 18014398509481984 0, 400000000000000022204460492503 Les booléens. Il est souvent nécessaire de faire des tests, des branchements (Si... Faire) Les booléens peuvent prendre deux valeurs : True et False Nous les utiliserons dans les branchements et les boucles conditionnelles (if et while). Construction de booléen. ==, <, <=, >, >=,!= et in Les opérations sur les booléens sont : not : la négation (le Non logique) and : la conjonction (le et logique) or : le disjonction (le ou logique) On peut résumer dans ce tableau l action de ces opérations sur les différentes valeurs : A B not A A and B A or B True True True False False True False False Attention à la comparaison des flottants (Par exemple : 3 0.1 == 0.3 ) Faire des opérations avec des entiers, des flottants. Que font % et // sur les entiers? Utiliser les opérations and et or. Déterminer le type d une variable. (Par exemple : en définissant A=4/2, vérifier que A est bien un flottant. ) 2
b) Les chaînes de caractères : strings. Ce type permet de représenter des textes. Une chaîne caractère est une suite finie de caractères qu on note entre apostrophes... ou entre guillemets.... Accès à un caractère : Pour accéder aux caractères d une chaîne A on utilise l expression A[i] où i est la position (l indice) du caractère. Attention : En python, l indice du premier caractère est 0 et non 1. Sous-chaine : Pour extraire une partie d une chaîne on utilise l expression A[i:j] où i est l indice du premier caractère et j l indice du dernier caractère plus un. (On va de i compris à j exclu) Concaténation : Avec les opérateurs + et. Longueur : On utilise la fonction len Nous verrons plus tard des méthodes plus évoluées qui s appliquent à ce type d objet : Un exemple avec split et join : Base= Le-petit-chat-est-mort Mots=Base.split( - ) Texte=.join(Mots) print(texte) join, count, split... Conversion entre chaînes de caractères et types simples. (Transtypage) Exemple : A= 21 B=int(A) C=2*A D=2*B Que contient les différentes variables? Quel est leur type? Nous pouvons pas modifier une chaîne de caractère. Pour pouvoir modifier les caractères d une chaine on passe par une liste, type que nous verrons dans la suite du cours. créer une variable du type chaîne de caractère. extraire une partie d un texte. concatener deux textes. c) Affectation, initialisation, état et typage dynamique. Au début d un programme, il n y a rien en mémoire. On initialise des variables, on fait évoluer ce qu elles contiennent à l aide d instructions. La premières de ces instructions est l affectation. La première affectation est appelée initialisation. A chaque affectation, Python redéfinit le type de la variable (typage dynamique). Ci-dessous nous donnons une suite d instructions en Python, Déterminer à chaque ligne du tableau l état de la mémoire après l affectation indiquée, (on pourra aussi indiquer les initialisations). A=2 A=A+2 B=A*2+2 C=4 C=B-C C=C+A-B; A=B-C*A A=(B-A)*C B=(A+C)*C A B C 3
d) Les listes. C est le type de variable le plus utilisé en Python. C est la traduction informatique du produit cartésien d ensembles. Pour construire une liste, on écrit des valeurs (de tout type) entre crochets séparées par des virgules. Attention : En python, l indice de la première composante est 0 et non 1. Accès aux composantes : Pour accéder aux composantes de ce n-uplet on utilise l expression A[i] où i est le numéro (l indice) de la composante. On retrouve ainsi les mêmes fonctions et opérateurs que pour les chaines de caractères : +, len(), in. On peut aussi numéroter à partir de la fin : la dernière composante A[-1], l avant dernière A[-2], l antépénultième A[-3]... Nous verrons aussi de nombreuses méthodes qui agissent sur l objet list. sort, append, insert... créer une variable de type liste ou tuple. accéder à une des valeurs d une liste. accéder à une plage de valeurs d une liste (une sous-liste). ajouter une valeur à la fin ou au début d une liste. ajouter une valeur à une place quelconque d une liste (par exemple à la deuxième place). e) D autres types. Les tuples, les ensembles, les dictionnaires, les fichiers, les fonctions... Nous les reverrons plus tard. 3) Entrées/sorties. Pour afficher le contenu d une variable à l écran. print Pour entrer une valeur au clavier. input Exemple : a=input( Entrer une valeur ) Ce qui est entré par l utilisateur est de type string (chaine de caractères). Pour entrer d autres types de variables, il faut utiliser les fonctions de transtypage. Exemple: a=float(input( Entrer une valeur )) ou Exemple: a=int(input( Entrer une valeur )) afficher la valeur d une variable. entrer une valeur avec input. entrer avec input deux valeurs entières et afficher avec print la somme des deux nombres. Exercices : ➀ Ecrire un programme qui demande les coefficients d un trinôme et qui affiche son discriminant. ➁ Ecrire un programme qui demande un mot de 5 lettres et qui affiche le mot à l envers. ➂ Ecrire un programme qui demande un entier à trois chiffres et qui affiche la somme de ses chiffres. ➃ Ecrire un programme qui demande un entier à quatre chiffres et qui affiche le plus grand de ses chiffres. ➄ Ecrire un programme qui demande un entier et qui affiche le nombre de chiffre de cet entier. ➅ Donner la liste des nombres de trois chiffres égaux à la somme des cubes de leurs chiffres. 4
4) Instructions conditionnelles. Test simple. if En Python la syntaxe est : if condition : Le bloc d instructions est exécuté uniquement si la condition est vérifiée. Attention aux deux points et à l indentation. En Python, c est la fin de l indentation qui indique la fin du bloc il n y pas de FinSi. Test avec alternative. if else En Python la syntaxe est : if condition : si la condition est vérifiée else : si la condition n est pas vérifiée Avec plusieurs alternatives : if elif else if condition 1 : si la condition1 est vérifiée elif condition 2 : si la condition1 n est pas vérifiée et la condition2 est vérifiée else : si aucune condition n est vérifiée Un exemple : a=float(input( Entrer une valeur pour a : )) b=float(input( Entrer une valeur pour b : )) c=float(input( Entrer une valeur pour c : )) if b*b-4*a*c>0 : print( Le discriminant strictement positif ) print( le polynome a deux racines réelles distinctes ) elif b*b-4*a*c==0 : print( Le discriminant est nul ) print( le polynome a une racine double ) else : print( Le discriminant strictement négatif ) print( le polynome n a pas de racines réelles ) faire un petit programme avec un if faire un petit programme avec un if else faire un petit programme avec un if elif else 5) Boucle Pour Une boucle est une construction permettant de répéter un bloc d instructions. En Python la syntaxe pour une boucle for classique est : for k in range(n): Attention aux deux points et à l indentation. En Python, c est la fin de l indentation qui indique la fin du bloc il n y pas de FinPour. La variable k est appelée compteur de boucle. C est un entier qui prend successivement les valeurs 0, 1, 2... et (n 1). Le bloc d instructions est exécuté pour chaque valeur de k. Le bloc d instructions peut dépendre, ou non, de la valeur de k. 5
Deux exemples simples : for k in range(10): for k in range(10): print("bravo") Il est possible de changer les bornes 0 et n-1 respectivement en n0 et n1 for k in range(n0,n1+1): Exemples : for k in range(1,10): for k in range(8,12): On peut aussi changer le pas du compteur. Exemples : for k in range(2,10,2): for k in range(3,0,-1): C est une structure simple pour calculer une somme ou un produit. S=0 P=1 for k in range(1,11): for k in range(3,0,-1): S=S+k P=2*P print(s) print(p) Remarque : Il est possible d interrompre une boucle for avec la commande break. Il est préférable d éviter cette instruction. On utilisera plutôt une boucle conditionnelle (while). faire un petit programme avec un for calculer la somme de tous les entiers de 1 à 100 (inclus). (avec un programme utilisant for) calculer factorielle 8. (avec un programme utilisant un for ) La structure for permet aussi une construction efficace de listes. (Listes en compréhension) Exemples : L1=[k**2 for k in range(11)] L2=[k for k in range(100) if (k**3-k+1)%7==0] 6) Boucle Tant que En Python, on écrit une boucle conditionnelle ainsi : while condition : Attention aux deux points et à l indentation. En Python, c est la fin de l indentation qui indique la fin du bloc il n y pas de FinTantQue. Le bloc d instruction est exécuté tant que la condition est vérifiée. Un exemple simple : n=1 while n<10: print(n) 6
Suivant les situations, il se peut que le bloc ne soit jamais exécuté, ou que l on boucle indéfiniment. Exemples : n=110 n=110 while n<10: while n>10: print(n) print(n) Le seul moyen de sortir d une boucle infinie est d interrompre l exécution du programme (Voir Pyzo). On peut remplacer une boucle for par une boucle while : Les deux programmes suivants font la même chose : for k in range(n): k=0 while k<n: k=k+1 On utilise souvent un while pour vérifier l entrée d une valeur. En Python on peut en plus gérer les erreurs de saisie comme sur l exemple suivant. while True: try: x = int(input("veuillez entrer un nombre entier : ")) break except ValueError: print("ce n est pas un nombre valide. Essayez encore...") faire un petit programme avec un while calculer la somme de tous les entiers de 1 à 100 (inclus). (avec un programme utilisant while) calculer factorielle 8. (avec un programme utilisant un while ) déterminer la première valeur de l entier n pour laquelle 2 n > 10 20. (en utilisant while) 7) Simulations de boucles. Il est souvent nécessaire de bien étudier l évolution des différentes variables dans une boucle. Il peut être bon pour cela de décrire avec soin la valeur contenue dans chacune des variables. Exemple 1 : a=1 b=2 n=0 while n<4: c=a+2*b a=b b=c print(b) La simulation de cette boucle se présente : tour de boucle variable c variable a variable b variable n entrée 1 2 0 1er tour 5 2 5 1 2e tour 12 5 12 2 3e tour 29 12 29 3 4e tour(sortie) 70 29 70 4 On indique la valeur des variables avant la première boucle (entrée), puis à la fin de chaque tour de boucle. On classe les variables dans l ordre des affectations dans la boucle. 7
Exemple 2 : L=[1,1] for i in range(5): u=l[i]+l[i+1]+i L=L+[u] print(l) La simulation de cette boucle se présente : tour de boucle variable i variable u variable L entrée [1,1] 1er tour 0 2 [1,1,2] 2e tour 1 4 [1,1,2,4] 3e tour 2 8 [1,1,2,4,8] 4e tour 3 15 [1,1,2,4,8,15] 5e tour(sortie) 4 27 [1,1,2,4,8,15,27] On indique la valeur des variables avant la première boucle (entrée), puis à la fin de chaque tour de boucle. On indique la variable d itération en premier dans la simulation, car c est la première variable modifiée à chaque tour. Exemple 3 : Soit (u n ) la suite définie par : u 0 = u 1 = u 2 = 1 et pour tout n N,u n+3 = 2u n+2 u n+1 u n +n Le programme suivant permet de calculer u 100. a,b,c=1,1,1 n=0 while n<98: temp=2*c-b-a+n a=b b=c c=temp print(c) La simulation suivante permet de le démontrer. tour de boucle variable temp variable a variable b variable c variable n entrée u 0 u 1 u 2 0 1er tour u 3 u 1 u 2 u 3 1 2e tour u 4 u 2 u 3 u 4 2..... 98e tour(sortie) u 100 u 98 u 99 u 100 98 A la fin de cette boucle la valeur contenue dans la variable c est égale à u 100 8