Chapitre 1 Mise en route Nous supposerons ici que Python est déjà installé et fonctionnel. En complément de ce polycopié, on pourra également consulter le tutorial officiel de Python (en anglais) : https ://docs.python.org/3/tutorial/ Dans la suite de ce document, nous indiquerons les commandes Python et le résultat donné par l’interprète. Les commandes venant après les chevrons >>> sont les commandes tapées par l’utilisateur. Le résultat donné par Python se lit alors sur la ligne suivante. Lorsque Python n’a rien à renvoyer, la ligne est omise. 1.1 1.1.1 Variables et types simples Premiers pas On peut utiliser Python comme une calculatrice : >>> 6 ∗ 7 42 Les entiers en Python ne sont pas limités. Calculons 25 à la puissance 20 : >>> 25 ∗ ∗20 9094947017729282379150390625 Les opérateurs usuels sur les entiers sont : +, −, ∗. La précédence entre ces opérateurs est standard : ∗ est prioritaire sur + ou −. >>> 2 + 3 ∗ 2 8 La division entière se note // et le reste de la division euclidienne se note % : >>> 14//3 4 >>> 14%3 2 On peut également manipuler des nombres à virgule (nombres flottants). Ici, la simple présence d’un unique flottant dans une expression indique à Python de tout effectuer avec des nombres à virgules, donc réels. >>> 3. + 12 15.0 Notez qu’on obtient uniquement une valeur approchée. Notamment, un rationnel comme 1/33 n’existe qu’en tant qu’approximation : 1 1.1. VARIABLES ET TYPES SIMPLES CHAPITRE 1. MISE EN ROUTE >>> 1.0/33.0 0.030303030303030304 (Ici le 4 à la fin illustre bien le problème de l’approximation d’un réel par un flottant). 1.1.2 Le module ”math” de la bibliothèque standart √ Les fonctions mathématiques usuelles telles que : x 7→ x ,sin, cos... sont disponibles dans la bibliothèque standart de Python : ce ne sont pas des fonctions qui existent dans le ”noyau” de Python, mais elles ont déjà été programmées ; pour pouvoir les utiliser, il faut les charger depuis le module math de la bibliothèque standart avec l’instruction import sinon Python se vexe : >>> sin(2.5) Traceback (most recent call last) : File ”<stdin>”, line 1, in <module> NameError : name ’sin’ is not defined sin n’est en effet pas défini par défaut. >>> from math import sin >>> sin(2.5) 0.59847214410395655 après importation de la fonction sin du module math, on peut l’utiliser. Pour importer toutes les fonctions du module math : >>> from math import ∗ >>> cos(2.5) −0.8011436155469337 On pourra trouver notamment dans le module math : — Les fonctions usuelles : sin, cos, exp, floor (partie entière), ceil (partie entière supérieure), abs (valeur absolue), factorial (la factorielle), log (logarithme népérien), log(.,p) (logarithme en base p), acos (arccos), asin (arcsin), atan (arctan), atan2 (détermine un argument de x+iy), cosh (cos hyperbolique), sinh (sin hyperbolique), tanh (tangente hyperbolique). — Les constantes usuelles de mathématiques : pi , 1j (le ”i” des complexes), e (base de l’exponentielle). Remarque : Pour faire des calculs exacts sur les fractions, on pourra importer le module fractions. >>> from fractions import Fraction >>>Fraction(1,33)+Fraction(1,17) Fraction(50,561) 1.1.3 Entiers et flottant Les valeurs manipulées par Python sont cataloguées selon différents types. Le type int désigne une valeur entière (en anglais : integer ) alors que le type float désigne une valeur réelle (raccourci de l’anglais floating point number : nombre à virgule flottante). Notez la différence entre les entiers et les flottants. 42 est un entier : >>> type(42) <type ’int’> Mais 42.0 est un flottant : 2 CHAPITRE 1. MISE EN ROUTE 1.2. DÉFINITION DE VARIABLES >>> type(42.0) <type ’float’> Il est possible de convertir un entier en flottant à l’aide de l’opérateur float : >>> float(42) 42.0 Et dans l’autre sens avec l’opérateur int qui tronque la partie décimale : >>> int(42.4) 42 >>> int(−42.4) −42 Pour plus de contrôle sur la conversion, on pourra utiliser les fonctions de troncature et d’arrondi : math.floor pour la partie entière inférieure, math.ceil pour la partie entière supérieure et math.round pour un arrondi (après importation du module math ). >>> floor(42.4) 42.0 >>>math.ceil(42.4) 43.0 >>> round(42.4) 42.0 >>> round(42.6) 43.0 >>> int(round(42.6)) 43 On pourra retrouver la définition de ces fonctions dans l’aide intégrée à Python. On y accède à l’aide de la fonction help : >>> help(math.ceil) Help on built-in function ceil in module math : ceil(...) ceil(x) Return the ceiling of x as a float. This is the smallest integral value >= x. Python convertit automatiquement les entiers en flottants quand cela est pertinent. Ainsi : >>> from math import sqrt >>> sqrt(2) 1.4142135623730951 donne la même chose que sqrt(2.0). 1.2 1.2.1 Définition de variables Affectation Généralités Le symbole d’affectation pour donner une valeur à une variable est le symbole = : >>> x = 4 3 1.2. DÉFINITION DE VARIABLES CHAPITRE 1. MISE EN ROUTE Python ne répond rien : nos entrées précédentes étaient des expressions, qu’il a interprétées comme des questions et il y a répondu. Ici, nous lui avons donné une instruction, il exécute l’ordre et se contente d’affirmer qu’il est prêt en nous gratifiant de nouveau d’un >>>. On peut alors lui demander la valeur de x : >>> x 4 L’instruction x = 4 crée une nouvelle variable appelée x et mémorise dans cette variable la valeur 4. On dit que la variable x est initialisée à la valeur 4. Par la suite, chaque appel de la variable x s’évaluera en remplaçant x par 4. Le nom d’une variable ne doit pas contenir d’espace. Il ne peut être composé uniquement de lettres non accentués, de chiffres et du caractère souligné . On peut aussi affecter plusieurs variables simultanément : >>> a, b = 17, 42 >>> a 17 >>> b 42 L’affectation se fait en parallèle, ce qui est bien pratique pour échanger le contenu de deux variables : >>> b, a = a, b >>> a 42 >>> b 17 1.2.2 Incrémentation Pour ajouter une valeur (par exemple 3) à une variable, on peut faire comme dans les langages de programmation classiques : >>> x = 0 >>> x = x + 3 >>> x 3 Mais on peut aussi utiliser + = (c’est la façon de faire idiomatique en Python) : >>> x+ = 3 >>> x 6 On dispose de même de ∗ = , − = , / = et // = : >>> x∗ = 5 >>> x 30 >>> x− = 7 >>> x 23 4 CHAPITRE 1. MISE EN ROUTE 1.2.3 1.2. DÉFINITION DE VARIABLES Notion d’expression A droite d’une affectation, il doit y avoir une expression c’est-à-dire : — Une constante (de type int,float,ou autres...) — Une variable déjà affectée — Un appel de fonction dont les paramètres sont eux-mêmes une expression. Une expression peut se représenter par un arbre de calcul dont chaque noeud est un appel de fonctions et dont les ramifications sont des variables ou des arbres (dits sous-arbres) : Exemple : Soit l’affection : a =exp(x)+cos(3 ∗ y) On peut construire l’arbre : + exp cos x * 3 y On constate que les opérations + et ∗ sont considérées comme des fonctions. ”exp(x)+cos(3 ∗ y)” n’est une expression que si x et y sont eux-mêmes des expressions, c’est-à-dire des variables initialisées. Il ne faut donc pas confondre une expression (qui est donc un arbre de calcul) et son évaluation (qui est le résultat de ce calcul). >>> from math import exp , cos >>> a =exp(x)+cos(3 ∗ y) Traceback (most recent call last) : NameError : name ’y’ is not defined >>> y = 2 >>> x = 0 >>> a =exp(x)+cos(3 ∗ y) >>> a 1.9601702866503659 Si par la suite, on modifie la valeur de x ou y, la valeur de a ne sera pas modifiée. >>> from math import exp , cos >>> y = 2 >>> x = 0 >>> a =exp(x)+cos(3 ∗ y) >>> a 1.9601702866503659 >>> y = 0 >>> a 1.9601702866503659 1.2.4 Autres types simples Les booléens Les booléens, ou valeurs de vérité, peuvent prendre deux valeurs : True ou False. Les opérateurs de comparaison (< , > , <= , >=) permettent de comparer deux nombres : 5 1.2. DÉFINITION DE VARIABLES CHAPITRE 1. MISE EN ROUTE >>> 17 < 42 True >>> 17 > 42 False On dispose également de l’opérateur == pour tester l’égalité (attention : ce n’est pas =, qui est le symbole d’affectation) et ! = pour tester si deux nombres sont différents (imaginer le point d’exclamation comme une barre verticale barrant le symbole d’égalité) : >>> 42 == 42 True >>> 42! = 42 False >>> 17 == 42 False >>> 17! = 42 True On peut calculer la conjonction ou la disjonction de deux booléens avec les opérateurs ” and ” et ” or ” : >>> 17 > 42 or 3 == 3 True >>> 17 < 42 and 3 != 3 False >>> 17 < 42 and 3 == 3 True La négation logique d’un booléen b se note not(b) : >>> not(17 == 42) True On peut convertir un booléen en entier : >>> int(True) 1 >>> int(False) 0 On peut également convertir un entier en un booléen. Tout entier non nul est converti en True et 0 est converti en False. >>> bool(42) True >>> bool(0) False Plus généralement, n’importe quelle valeur nulle (0 pour les entiers, 0.0 pour les flottants, et, pour les types chaı̂nes de caractères et liste qu’on verra plus loin, une chaı̂ne vide, une liste vide) sera considérée comme le booléen False et les autres valeurs comme True. Il faut faire très attention aux tests d’égalité avec des valeurs approchées. >>> from math import sqrt >>> a=sqrt(3) >>> (sqrt(a))**2==a False Ainsi Python ne donne pas le bon résultat. En effet, Python fait des erreurs d’arrondi, à cause de la représentation décimale d’un réel qui est nécessairement une approximation : 6 CHAPITRE 1. MISE EN ROUTE 1.3. ENTRÉE AU CLAVIER ET AFFICHAGE À L’ÉCRAN >>> (sqrt(a)) ∗ ∗2 1.7320508075668777 >>> a 1.7320508075668772 Ici, Python commet une erreur sur la 16-ième décimale . Les chaı̂nes de caractères Python peut manipuler des chaı̂nes de caractères. Une chaı̂ne de caractères peut se noter entre apostrophes simples ou apostrophes doubles, indifféremment : >>> qui = ’Python’ L’opération principale sur les chaı̂nes de caractères est la concaténation, notée avec le symbole + : >>> ’bonjour ’ + qui ’bonjour Python’ On peut convertir un nombre en chaı̂ne de caractères : >>> str(42) ’42’ >>> str(2.5) ’2.5’ Et réciproquement : >>> int(’42’) 42 >>> float(’2.5’) 2.5 En revanche la concaténation ne donne pas lieu à conversion implicite : >>> n = 10 >>> ’numero’ + n Traceback (most recent call last) : File ”<stdin>”, line 1, in <module> TypeError : cannot concatenate ’str’ and ’int’ objects >>> ’numero ’ + str(n) ’numero 10’ 1.3 1.3.1 Entrée au clavier et affichage à l’écran Instruction ”input(’message’)” L’instruction input(’message’) affiche à l’écran ”message” et attend que l’utilisateur valide par ”Entrée” une réponse au clavier. Attention la réponse est, par défaut, comprise comme chaı̂ne de caractère : >>> n = input(’entrez un entier :’) entrez un entier : 21 >>> n ’21’ >>>type(n) str 7 1.3. ENTRÉE AU CLAVIER ET AFFICHAGE À L’ÉCRAN CHAPITRE 1. MISE EN ROUTE Il faudra donc convertir (surtout en version Python3) la réponse reçue par input dans le type désiré (souvent int ou float). Remarque : Avec Anaconda, la conversion sera automatique (cf. importation des modules scientifiques). Pour obtenir directement une chaı̂ne de caractères, on pourra utiliser la commande : raw input(). 1.3.2 Instruction ”print message” La fonction print permet d’afficher des informations à l’écran. Il s’agit souvent de messages d’informations . >>>print(’a’,11,’b’,202,’c’,333) ; print( ’d’ , 1/3,’e’, 1/7 ) ; a 11 b 202 c 333 d 0.3333333333333333 e 0.14285714285714285 Cependant , pour améliorer l’affichage, on pourra écrire : >>> print(’a’ , 1 , ’b’, 2 , sep=’*’) a*1*b*2 >>> print(’a’ , 2 , ’b’,3 ,sep =’− + −’) ; print(’c’ , 5 , ’d’) ; a− + −2− + − b− + − 3 c5d >>> print(’a’,2,’b’,3,end=”) ;print(’c’,’d’,5) ; a 2 b 3c d 5 On peut utiliser la méthode format (qui s’applique sur un objet string). Cela permet de créer des chaı̂nes de caractères en remplaçant certains champs (entre accolades) par des valeurs passées en argument de la fonction format ainsi que l’illustre l’exemple suivant : >>> n = input(’entrez un entier : ’) ; print ’{ }ˆ2={ }’.format(n,n**2) On peut aussi formater l’affichage d’un flottant x, en précisant le nombre de décimale, la notation scientifique, la longueur de la chaı̂ne à afficher... 1. ’{ :g}’.format(x) choisit le format le plus approprié . 2. ’{ :.nf}’.format(x) affiche x avec n décimales . 3. ’{ :.3e}’.format(x) affiche x en notation scientifique . 4. ’{0 :20.3f}’.format(x) précise la longueur de chaı̂ne affichée . 5. ’{0 :+.3f} ;{1 :-.3f}’.format(x,−x) affiche toujours le signe de x. >>> x = 327.7689432 >>> ’{ :.4f}’.format(x) ’327.7689’ >>> ’{ :.5e}’.format(x) ’3.27769e+02’ >>> ’{0 :4.3f}’.format(x) ’327.769’ >>> ’{0 :+.6f} ;{1 :+.6f}’.format(x,−x) ’+327.768943 ; -327.768943’ 8 CHAPITRE 1. MISE EN ROUTE 1.4 1.4. EXERCICES Exercices Ex 1 : Donner les valeurs des variables x, y et z à la fin de l’exécution du pseudo-code suivant : x←4 y ←2+x z ←x−y y ←y+z puis traduire ce pseudo-code en langage Python. Ex 2 : Quelles sont les valeurs des variables a, b, q et r après la séquence d’affectations suivante ? a = 19 b=6 q=0 r=a r =r−b q =q+1 r =r−b q =q+1 r =r−b q =q+1 Ex 3 : (a) Ecrire un programme qui affiche ’bonjour’ . (b) Ecrire un programme qui demande un nom et affiche : ’bonjour’ + le nom tapé . Ex 4 : (a) Affectez les variables temps et distance par les valeurs : 6.892 et 19.6. Calculer et afficher la valeur de la vitesse. (b) Améliorer l’affichage en imposant un chiffre après le point décimal . Ex 5 : Saisir un nom et un âge en utilisant l’instruction input(). Les afficher. Ex 6 : Ecrire un programme qui, à partir de la saisie d’un rayon et d’une hauteur, calcule le volume d’un cône droit. Ex 7 : Ecrire un programme qui, à partir de la saisie d’un taux de TVA et d’un prix TTC calcule le prix HT. 9 1.4. EXERCICES CHAPITRE 1. MISE EN ROUTE 10