• Aucun résultat trouvé

Programmation impérative en Python

N/A
N/A
Protected

Academic year: 2022

Partager "Programmation impérative en Python"

Copied!
46
0
0

Texte intégral

(1)

Programmation impérative en Python

Cours 1. Les entiers et les blocs

Olivier Baldellon à partir des notes, de Pierre Lezowski, Etienne Lozes et Jean-Paul Roy

Courriel :pré[email protected]

Page professionnelle :http://deptinfo.unice.fr/~obaldellon/

Université de Nice Sophia Antipolis (Université Côte d’Azur), Département d’Informatique

(2)

Sommaire

f Partie i. À propos f Partie ii. Introduction f Partie iii. Entiers f Partie iv. Variables f Partie v. Affichages

f Partie vi. Conditions f Partie vii. Fonctions

f Partie viii. Table des matières

(3)

Que faire pendant deux heures ?

Partie i. À propos

Écrireà la mainparticipe à la mémorisation Ï Prendre le plan du cours.

Ï Prendre des notes pourchaquetransparent.

Ï Se poser la question « Que faut-il retenir ? » Le cerveau n’est pas multitâche !

Ï Je ne veux ni ordinateur ni smartphone.

Ï Prendre des notes sur ordinateur n’est pas efficace (comparé à la main).

Ï Un smartphone sur la table (écran éteint !) perturbe la concentration.

Ï Un écran allumé perturbe ceux qui sont derrière vous.

Ï Sauf problème d’addiction, rangez votre téléphone dans votre sac.

(4)

Communication

Partie i. À propos

Si vous souhaitez me contacter Ï La réponse est-elle sur moodle ?

Ï surhttp://deptinfo.unice.fr/~obaldellon? Ï Puis-je attendre la fin d’un cours en amphi ?

Écrire à l’enseignant

Ï Sur mon [email protected](pas sur moodle) Ï avec votre adresse é[email protected] Ï Objet : clair et précis

Ï Rappel du nom du cours, de votre groupe Ï Rappel de votre nom (signature suffisante)

(5)

Exemple

Partie i. À propos

Objet : TP Python annulé à cause des grèves ? Bonjour Monsieur,

Je suis étudiant du groupe A2 du cours de Python. Le TP du mercredi 29 juillet à 10h est-il annulé à cause des grèves ?

Cordialement, Nicolas Bourbaki

(6)

Organisation

Partie i. À propos

CM, TD & TP

Ï 9 séances de cours magistral (Amphithéâtre M ).

Ï 9 séances de 2h de TD Ï 9 séances de 2h de TP Évaluation

Ï un partiel (dans la semaine du 16 mars, date à confirmer) Ï un examen terminal à la fin du semestre

Ï des quizz en TP sur Moodle En plus de vos notes manuscrites

Ï vous trouverez sur Moodle et sur mon site web : Ï Transparents des cours magistraux.

Ï Sujet et corrigé de TP/TD.

(7)

Quelques références pour ce cours

Partie i. À propos

ÏLa documentation officielle Python :http://docs.python.org/py3k

ÏLivre gratuit en ligne ÏPolycopié IUT Orsay

ÏDe très nombreuses autres références en ligne ou à la BU

(8)

Sommaire

f Partie i. À propos f Partie ii. Introduction f Partie iii. Entiers f Partie iv. Variables f Partie v. Affichages

f Partie vi. Conditions f Partie vii. Fonctions

f Partie viii. Table des matières

(9)

Qu’est-ce que la programmation ?

Partie ii. Introduction

Algorithmique

Ï Comment résoudre un problème ?

Ï Branche des mathématiques (feuilles blanches et crayon) Ï Ce problème peut ensuite être résolu par :

Ï Un humain :chercher un mot dans le dictionnaire, poser une addition Ï Une machine :modifier une image, décider de votre orientation (parcoursup)

Programmation

Ï Donner des consignes (par exemple un algorithme) à une machine Ï On utilise une language artificiel (C,Python, OCaml, Java, etc) Ï Tout ce que fait un ordinateur est décrit sous forme de texte.

Ï Les fichiers contenant ces textes s’appellele code source

Ï Exemples de tâche : lire une vidéo, faire un calcul, modifier une image

(10)

Python 3

Partie ii. Introduction

C’est un cours de programmation avec Pythonversion 3.

Ï Créé par le Néerlandais Guido van Rossum en1989.

Ï Langage de haut niveau:

Ï bas niveau : proche du fonctionnement de la machine Ï haut niveau : proche du raisonnement humain

Ï Langage multi-paradigmes:impératif, fonctionnel, orienté objets.

Ï Nombreuses bibliothèques.

Ï Libre: code source disponible et modifiable, gratuit.

Ï AttentionPython 2 est unautre langage. Très proche, certes.

(11)

Sommaire

f Partie i. À propos f Partie ii. Introduction f Partie iii. Entiers f Partie iv. Variables f Partie v. Affichages

f Partie vi. Conditions f Partie vii. Fonctions

f Partie viii. Table des matières

(12)

Session interactive

Partie iii. Entiers

Python a uneconsole(ou shell, ou toplevel) avec laquelle on peut interagir. On peut lui soumettre un calcul comme à une calculatrice.

>>> 1+1 2>>> 123//10 12>>> 2**10 1024

shell

ÏUne opération mal utilisée peut provoquer uneerreur.

>>> 5//0 # Bouh, la vilaine division par zéro Traceback (most recent call last):

File "<stdin>", line 1, in <module>

ZeroDivisionError: integer division or modulo by zero shell

ÏLe code après # est uncommentaire, non pris en compte par Python.

(13)

Opérations sur les entiers

Partie iii. Entiers

Opérations de base sur les entiers : Ï Les opérations classiques :+ - *

Ï Le quotient et le reste de la division euclidienne//et% Ï La division décimale/

Ï a**bcalcule la puissanceab

En mathématique, il y a deux opérations de divisions : Ï La division décimale, 11÷2=5,5

Ï Ladivision euclidienne(//et%), 11 divisé par 2 donne 5 reste 1

(14)

Division euclidienne et modulos

Partie iii. Entiers

On définit la division euclidienne deaparbavecaetbentier etb6=0: Ï a//best lequotienteta%best lereste(a = quotient×b + reste) Ï a == (a//b) * b + (a%b)

Ï 123=(123//10)*10 + (123%10) = 12*10 + 3

Application du modulo : à connaître par cœur ! Ï a%bse litamodulob

Ï aest un multiple debsi et seulement sia%b=0.

Ï en particulier,nestpairsi et seulement sin%2=0

(15)

Heures et minutes

Partie iii. Entiers

Problème 1

Il est 15h43, combien de minutes se sont-elles écoulées depuis minuit ?

>>> 15 * 60 + 43 943

shell

15 heures et 43 minutes : 943 minutes Problème 2

Sachant que 1024 minutes se sont écoulées depuis minuit, le cours de programmation impérative est-il terminé ?

>>> 1024//60 17>>> 1024%60 4

shell

1024 minutes = 17 heures et 4 minutes

(16)

Opérations et priorités

Partie iii. Entiers

ÏOrdre de priorité des opérateurs.

moins prioritaire plus prioritaire très prioritaire

+ - * // % / **

ÏEn cas de doute, on peut utiliser des parenthèses inutiles.

>>> 5 - 8 + 4 * 2 ** 3 # Attention à la priorité ! 29>>> (5 - 8) + (4 * (2 ** 3))

29

shell

ÏRemarque : associativité à gauche pour les opérations de même priorité.

>>> 1-2+5 4>>> (1-2)+5 4>>> 1-(2+5) -6

shell

(17)

Taille des entiers

Partie iii. Entiers

ÏLa taille des entiers n’est limitée que par la mémoire de la machine.

>>> 874121921611478384371591419 ** 10

260447454985660585245180084757921014509252146181223003 455270044550605023694309556482234857745408080127776885 578607664767325495386096105286268494775055260671252317 663749619931275002342815836733596266389781703659821356 427940431697254607426485624871372306773584664397463801 shell

ÏOn dit (abusivement) que le calcul entier a uneprécision infinieou que le calcul entier estexact.

ÏCette propriété est intéressante pour les problèmes decryptologieoù on manipule de grands nombres entiers.

ÏNe marche pas avec les nombres avec virgule (flottant)

>>> 87412192161147838437159141.9 ** 10 2.6044745498566053e+259

shell ÏCe qui signifie2, 6×10259

(18)

Sommaire

f Partie i. À propos f Partie ii. Introduction f Partie iii. Entiers f Partie iv. Variables f Partie v. Affichages

f Partie vi. Conditions f Partie vii. Fonctions

f Partie viii. Table des matières

(19)

Affectation

Partie iv. Variables

Ï Unevariableest une boîte qui contient une valeur.

>>> a = 2 # lire : a prend la valeur 2

>>> p = 10 # p prend la valeur 10

>>> c = a ** p # c prend pour valeur celle de ap

>>> c 1024

shell

Ï Ce symbole=n’estpas l’égalité mathématique. C’est l’instruction d’affectation. Il faut écrire lenom de la variable affectée à gauche.

>>> 1+2 = a

File "<stdin>", line 1 SyntaxError: can't assign to operator

shell >>> a=1+2

>>> a 3

shell

(20)

Instructions et expressions

Partie iv. Variables Ï Il ne faut pas confondre lesinstructionset lesexpressions. Une

instruction estexécutée. Une expression estcalculée.

Exemple :avaut2etbvaut3.

>>> a*b # expression (retourne un résultat) 6>>> c=a+b # Instruction (modifie c sans résultat)

>>> c # expression (avec résultat) 5

shell

Ï Une variable peutchanger de valeur.

>>> a=2

>>> b=a # Le résultat de a est donnée à b

>>> a=a+1 # Le résultat de a+1 est donnée à a

>>> b 2>>> a 3

shell

(21)

Échange de deux variables

Partie iv. Variables

On souhaite échanger les valeurs de deux variables :ab. Par exemple si

«avaut5» et «bvaut4», on souhaite avoir : «avaut4» et «bvaut5».

Méthode intuitive etFAUSSE !

>>> a=2 ; b=3 # a:2 et b:3

>>> a=b # a:3 et b:3

>>> b=a # a:3 et b:3 Cela ne marche pas !

shell

Il faut une variable temporaire pour ne pas perdre la valeur initiale dea.

>>> a=2 ; b=3 # a:2 et b:3

>>> temp=a # a:2 et b:3 et temp:2

>>> a=b # a:3 et b:3 et temp:2

>>> b=temp # a:3 et b:2 et temp:3

shell

(22)

Booléans (Vrai et Faux) et comparaisons

Partie iv. Variables

Ï Le signe=correspond à l’affectation.

Ï Le signe==correspond à l’égalité mathématique.

>>> a=2 # instruction

>>> a==4 # expression False

>>> a==2 # expression True>>> True == False False

shell

Les valeursTrueetFalse s’appelle desbooléens (George Boole, Royaume Unie, 1815-1864) Il existe d’autres opérateurs de comparaison :<,>,<=,<=et!=.

>>> a<2 False

>>> a>=2 # a 2 True>>> a!=2 # a 6= 2 False

shell >>> a>0

True>>> a+1<=4*a # a+1 4a True>>> (a+1>3)==False # F = F True

shell

(23)

Sommaire

f Partie i. À propos f Partie ii. Introduction f Partie iii. Entiers f Partie iv. Variables f Partie v. Affichages

f Partie vi. Conditions f Partie vii. Fonctions

f Partie viii. Table des matières

(24)

Écrire et exécuter un script

Partie v. Affichages ÏTaper des fonctions ou plusieurs blocs de code dans la console est peu pratique. EN TP, vous allez utiliser l’éditeur intégré à IDLE, puis vous éxécuterer votre code dans la console.

ÏDans l’éditeur IDLE, il fautenregistrervotre programme dans un nouveau fichier.

ÏUne fois le code prêt à tester, utiliser la commandeRun Module.

(25)

La commande d’affichage : print

Partie v. Affichages

ÏLa fonctionprint(...)permet d’afficher une suite d’expressions.

>>> a = 2

>>> print('Le carré de', a, 'vaut', a*a, "et 5.") Le carré de 2 vaut 4 et 5.

shell

ÏL’instructionprint(...)ne produit aucun résultat.

>>> print(5) == None 5True

shell

La commande précédente affiche 5, puis fait le test d’égalité.

ÏNoneest une valeur spéciale, qui signifie « rien ».

(26)

Les chaînes de caractères

Partie v. Affichages

Ï'bonjour !'est une chaîne de caractères.

ÏOn peut sauvegarder une chaîne de caractères dans une variable.

>>> a = 'bonjour !'

>>> a 'bonjour !'

>>> print('a contient :', a) a contient : bonjour !

shell

La fonctioninput(message)affiche message puis demande à l’utilisateur d’entrer une chaîne de caractères.

prénom = input('Quel est votre prénom ? ')

print('J’ai rencontré',prénom,'et il est gentil') script

Quel est votre prénom ? Je m’appelle Olivier

J’ai rencontré Je m’appelle Olivier et il est gentil shell

(27)

Sommaire

f Partie i. À propos f Partie ii. Introduction f Partie iii. Entiers f Partie iv. Variables f Partie v. Affichages

f Partie vi. Conditions f Partie vii. Fonctions

f Partie viii. Table des matières

(28)

Conditions : commande if

Partie vi. Conditions

ÏL’instruction conditionnelleifpermet de prendre une décision.

>>> a = -2

>>> if a > 0:

... print(a, 'est positif.') ... else:

... print(a, 'est négatif.') -2 est négatif.

shell

ÏDans le shell, l’instruction est terminée par une ligne vide.

ÏL’indentation doit être respectée !(touche tabulation)

>>> a = -2

>>> if a > 0:

... print(a, 'est positif.') File "<stdin>", line 2

print(a, 'est positif.')

IndentationError:^ expected an indented block

shell

(29)

Conditions : Mot-clef elif

Partie vi. Conditions

ÏOn peut faire unifdans un autreif.

>>> a = 0

>>> if a > 0:

... print('positif') ... else:

... if a < 0:

... print('négatif') # deux tabulations ! ... else:

... print('zéro') zéro

shell

Ïelse+ifpeut se simplifier enelif

>>> if a > 0:

... print('positif') ... elif a < 0:

... print('négatif') ... else:

... print('zéro') zéro

shell

(30)

Conditions : synthèse

Partie vi. Conditions

Ïon peut utiliser leif, seul. Ïon peut utiliser leifet leelse.

Ïon peut utiliser leif, un ou plusieurselifet leelse.

bloblo # exécuté dans tous les cas bloblo

if test 1:

blabla # exécuté si le test 1 est vrai blabla

elif test 2:

bleble # exécuté si le test 1 est faux bleble # et le test 2 est vrai

elif test 3:

blublu # exécuté si les tests 1 et 2 sont faux blublu # et le test 3 est vrai

else:

blibli # exécuté si les trois tests sont faux blibli

blybly # exécuté dans tous les cas blybly

script

ÏIl n’y a jamais de test avec leelse!

(31)

Tests et calculs booléans

Partie vi. Conditions

Il y a trois opérateurs booléans : négation, « et logique », « ou logique » ÏLa négation s’écritnot

Ïp and qest vraipetq sont tous les deux vrais.

Ïp or qest fauxpetq sont tous les deux faux.

p q p and q p or q

True True True True

True False False True

False True False True

False False False False

>>> not True False

>>> (3>1) or (6>2) # True or True

True>>> True and not (1+1==2) # True and False False

shell

Attention : le « ou logique » n’a pas le même sens qu’en français : Mange ta soupe ou tu t’en prendras une !

(32)

Évaluation paresseuse

Partie vi. Conditions

ÏLors d’un calcul booléean, les deux termes ne sont pas forcèment calculé.

On parle d’évaluation paresseuse.

>>> x==3

Traceback (most recent call last):

File "<stdin>", line 1, in <module>

NameError: name 'x' is not defined

>>> (1>0) or (x==3) True

shell

Ï(x==3)n’est pas évalué car «True or …» est toujours vrai.

ÏEn pratique, on peut faire la même chose en mathématique.

0×

7π+3 log(2)

3e4xπ p13·cos(18)

n=0

1 n2dx=?

(33)

Sommaire

f Partie i. À propos f Partie ii. Introduction f Partie iii. Entiers f Partie iv. Variables f Partie v. Affichages

f Partie vi. Conditions f Partie vii. Fonctions

f Partie viii. Table des matières

(34)

Les fonctions prédéfinies en Python

Partie vii. Fonctions

ÏPython définit aussi les fonctionsmax,min,abs, etc.

>>> min(abs(-3),10) 3

shell

ÏLes modules (fractions,math, etc) sont des « collections de fonctions ».

ÏImporter un module permet d’utiliser les fonctions du module

>>> import math # Documentation : help('math')

>>> math.gcd(10,12) 2>>> math.sqrt(2) 1.4142135623730951

shell

ÏDocumenté :https://docs.python.org/fr/3/library/math.html ÏPour utiliser une fonction sans nom de module on l’importe directement.

>>> from math import sqrt

>>> sqrt(25) 5.0

shell

(35)

Définir sa propre fonction

Partie vii. Fonctions

ÏPour définir la fonctionf:n7→2n+1.

>>> def f(n):

... return 2*n+1 # Attention : indentation

>>> f(3) 7

shell

ÏLe contenu de la fonction doit être indenté (tabulation) Ïle mot-clefreturndéfinie le résultat de la fonction.

>>> f(2.5) # n n'est pas forcément entier

6.0>>> f(2+2j) # j correspond au i des mathématiques (5+4j)

>>> f('Deux') # le type doit être cohérent Traceback (most recent call last):

File "<stdin>", line 1, in <module>

File "<stdin>", line 1, in f

TypeError: can only concatenate str (not "int") to str shell

(36)

Type des variables

Partie vii. Fonctions

Chaque variable a un type. Parmi les différents types possibles on trouve : Ï int(entier) : 2 ; 5 ; -3

Ï float(décimaux) : 2.0 ; -5.3 ; .3 Ï .3et0.3sont identiques

Ï Le séparateur décimal est un point et non une virgule ! Ï str(chaîne de caractère) :'Coucou';'++12à23' Ï bool(booléean) :1>3ouTrue

Ï Nonetype(instructions) :None;print('x=',3) Pour connaître le type, on peut utiliser la fonctiontype

>>> type(2)

<class 'int'>

>>> type(print('Vive le prof !')) Vive le prof !

<class 'NoneType'>

shell

(37)

Un exemple : la fonction « valeur absolue »

Partie vii. Fonctions

def absolue(n):

−→ if n>=0:

−→ −→ return n # 2 indentations

−→ else:

−→ −→ return -n

script

ÏLes indentations (touche tab) sontindispensables ! ÏLes indentations duifet dudefs’ajoutent.

ÏLe programme s’arrête lorsqu’il rencontre un return.

# Doublons les notes def dn(x):

if 2*x>20:

return 20 a=2*x

return a

script

>>> dn(4) 8>>> dn(14) 20

shell

ÏLa dernière ligne ne sera pas exécutée si on est passé dans leif.

(38)

Différence entre print et return

Partie vii. Fonctions

def f(n):

return 2*n+1

script def g(n):

print(2*n+1)

script

>>> g(3) 7

>>> 1 + f(3) # f(3) est un nombre qui vaut 7 8

>>> 1 + g(3) # g(3) n'est pas un nombre 7

Traceback (most recent call last):

File "<stdin>", line 1, in <module>

TypeError: unsupported operand type(s) for +: 'int' and 'NoneType'

shell

Ï On peut faire plusieursprintdans une fonction.

Ï On peut faire seulement unreturn: c’est le résultat de la fonction.

Ï On peut en faire plusieurs mais un seul sera exécuté.

Ï Sansreturn, , la valeur de retour vautNone.

(39)

Autre exemple de fonctions

Partie vii. Fonctions

x y

ÏUne fonction définie par morceaux.

def f(x):

if x < -1:

return 1 elif x <= 1:

return -x else:

return -1

script

def f(x):

if x < -1:

return 1 else :

if x <= 1:

return -x else:

return -1

script

ÏAttention à bien indenter les blocs et sous-blocs

(40)

Encore un exemple de fonctions

Partie vii. Fonctions

On cherche à savoir si deux entiers n’ont que 1 comme diviseurs communs def premiers_entre_eux(p,q):

if gcd(p,q)==1:

return True else:

return False

script

def premiers_entre_eux(p,q):

if gcd(p,q)==1:

return True # Le programme se termine là return False # ou là

script

def premiers_entre_eux(p,q):

return gcd(p,q)==1

script

Mêmes résultats mais codés de façon plus ou moins élégante Ïélégance ; c’est-à-direefficacitéetlisibilité

(41)

Aléatoire : générer des entiers au hasard

Partie vii. Fonctions

ÏOn peut importer la fonctionrandintdu modulerandom:

from random import randint script

Ïpourab,randint(a,b)renvoie un entier aléatoire (pseudo-aléatoire) de l’intervalle[a,b]

Ïexemple :2*randint(0,10)renvoie un nombrepairaléatoire de[0, 20]

ÏUn fonctionjet35()qui tire 3 ou 5 au hasard :

def jet35():

if randint(0,1)==0:

return 3 else:

return 5

script

>>> jet35() 5

>>> jet35() 3

>>> jet35() 5

>>> # Parenthèses obligatoires !

>>> jet35

<function jet35 at 0x7fda0b896e18>

shell

(42)

Pile ou face

Partie vii. Fonctions

Ïon prend comme convention pile0 et face1 from random import randint

pronostic = input('Pile ou face, humain ?') lancer = randint(0,1)

if pronostic == 'pile' and lancer==0:

print('Gagné !')

elif pronostic == 'face' and lancer==1:

print('Gagné !') else:

print('Perdu…')

script

ÏCe code fonctionne mais est peu élégant ÏDeux foisprint('Gagné !') ÏTests laborieux

ÏOn peut faire mieux !

(43)

Pile ou face, le retour !

Partie vii. Fonctions

Mettons les valeurs ’pile’ ou ’face’ directement dans la variablelancer from random import randint

pronostic = input('Pile ou face, humain ?') if randint(0,1) == 0:

lancer = 'pile' else:

lancer = 'face' if pronostic == lancer:

print('Gagné !') else:

print('Perdu…')

script

(44)

Pile ou face, solution ultime

Partie vii. Fonctions

Mettons les valeurs ’pile’ ou ’face’ directement dans la variablelancer from random import randint

# Fonction auxiliaire pour rendre le code plus lisible def pile_ou_face():

if randint(0,1) == 0:

return 'pile' else:

return 'face'

pronostic = input('Pile ou face, humain ?') lancer = pile_ou_face()

if pronostic == lancer:

print('Gagné !') else:

print('Perdu…')

script

(45)

Merci pour votre attention Questions

?

(46)

Cours 1 — Les entiers et les blocs

f Partie i. À propos Que faire pendant deux heures ? Communication Exemple Organisation

Quelques références pour ce cours f Partie ii. Introduction

Qu’est-ce que la programmation ? Python 3

f Partie iii. Entiers Session interactive Opérations sur les entiers Division euclidienne et modulos Heures et minutes Opérations et priorités

Taille des entiers f Partie iv. Variables

Affectation Instructions et expressions Échange de deux variables Booléans (Vrai et Faux) et comparaisons f Partie v. Affichages

Écrire et exécuter un script La commande d’affichage :print Les chaînes de caractères f Partie vi. Conditions

Conditions : commandeif Conditions : Mot-clefelif Conditions : synthèse Tests et calculs booléans

Évaluation paresseuse

f Partie vii. Fonctions Les fonctions prédéfinies en Python Définir sa propre fonction Type des variables

Un exemple : la fonction « valeur absolue » Différence entreprintetreturn Autre exemple de fonctions Encore un exemple de fonctions Aléatoire : générer des entiers au hasard Pile ou face

Pile ou face, le retour ! Pile ou face, solution ultime

f Partie viii. Table des matières

Références

Documents relatifs

Pour qu’un médicament soit efficace, il faut que sa concentration dans le sang atteigne une certaine valeur appelée le niveau thérapeutique minimum.. Une formule permet d’évaluer

Un tableau en Java est un objet qui peut contenir  un certain nombre de valeurs, dits éléments, d'un même type.. Ce type peut

[r]

Ecrire deux fonctions C, l’une utilisant un algorithme it´eratif, l’autre un algorithme r´ecursif, ´ permettant de calculer, l’entier naturel n ´etant donn´e en entr´ee, la

Excel Solver permet deux types de contraintes particulières pour modéliser les variables entières :. bin : pour représenter les

[r]

Déterminer l'ensemble des réels x pour lesquels on peut calculer g x.. Déterminer l'ensemble des réels x pour lesquels on peut calculer

f désigne une fonction définie au moins sur un intervalle contenant b ou dont b est