• Aucun résultat trouvé

Introduction à l algorithmique et à la programmation en Python 3

N/A
N/A
Protected

Academic year: 2022

Partager "Introduction à l algorithmique et à la programmation en Python 3"

Copied!
98
0
0

Texte intégral

(1)

Introduction à l’algorithmique et à la programmation

en Python 3

(2)

Vous pouvez télécharger ce document au format PDF à l’adresse suivante :

https://www.sismondi.ch/disciplines/applications-des-mathematiques/cours-eleves

(3)

Table des matières

1.1 Avant-propos 1

1.2 Algorithmes et programmes 2

1.3 Programmation en Python 3 6

1.3.1 Présentation de Python 3 6

1.3.2 Installation de Python 3 6

1.3.3 Interface Python 3 : zone de script et console 7 1.3.4 Types de données : stockage et affichage 8 1.3.5 Instructions conditionnelles 19

1.3.6 Instructions répétitives 25

1.3.7 Fonctions 32

1.3.8 Modules 40

1.3.9 Chaines de caractères 44

1.3.10 Listes 50

1.3.11 Graphismes 57

1.4 Corrections des activités et exercices 65 1.5 Schémas et résumés

(4)
(5)

1.1 Avant-propos

• Ce chapitre d'introduction à l'algorithmique et à la programmation en Python 3 s'adresse à un publique scientifique, plus particulièrement aux élèves qui suivent au Collège de Genève les cours d'options spécifiques en application des Mathématiques : 3AMOS et 4AMOS.

Aucun prérequis n'est nécessaire en algorithmique ou en programmation avec Python 3 à part peut-être une certaine ouverture d'esprit et une forme avancée de plasticité neuronale !

Des prérequis en Mathématiques niveau 1e et 2e du Collège de Genève sont les bienvenus.

• L'objectif de cette introduction est de former rapidement et rigoureusement les élèves suivants un cours de 3AM OS et 4AM OS aux rudiments de programmation en Python 3.

Lorsque nous traiterons par la suite des sujets spécifiques à l'application des Mathématiques comme la cryptographie, l'analyse numérique, les statistiques, etc. les élèves pourront comprendre plus facilement les algorithmes présentés, les programmer en langage Python 3 et aussi les

modifier afin d'obtenir les résultats escomptés dans le cadre du cours.

• Informations pour les enseignants :

Les exemples et les exercices de ce chapitre d'introduction ont été sélectionnés et choisis dans le but d'introduire des concepts qui serviront aux élèves lorsque les chapitres suivant seront abordés : cryptographie classique (clés privées et publiques) et méthodes itératives en analyse numérique.

En particulier, le sous-chapitre 1.3.9 Chaînes de caractères et 1.3.10 Listes sont conseillés si l'on veut aborder avec sérénité la programmation d'algorithmes en cryptographie.

Le sous-chapitre 1.3.10 Listes est aussi conseillé si l'on désire écrire des programmes permettant de résoudre numériquement des systèmes d'équations linéaires en analyse numérique.

(6)

1.2 Algorithmes et programmes

Exemple

Une piscine municipale propose deux tarifs : • Tarif 1 : Une entrée : 3 €.

• Tarif 2 : Abonnement annuel 9 €, puis 1 € l'entrée.

Commençons par un problème simple : demander le nombre d'entrées et afficher s'il est préférable de choisir le premier ou le second tarif.

Voici son algorithme :

Partie 1) Le stockage des données (en gras).

Il s'agit de repérer et de stocker les données nécessaires à la résolution du problème.

1 2

1 2

p n 3

p 9 n 1

SI p p ALORS

AFFICHER " Le tarif 1 est SINON

AFFICHER " Le tarif 2 est FIN SI

plus avantageux"

plus avantageux"

← ⋅

← + ⋅

<

DEMANDER un entier n

Partie 2) Le traitement (en gras).

Il s'agit de déterminer toutes les « instructions » à donner pour automatiser la résolution du problème et obtenir les résultats attendus.

DEMANDER un entier n

AFFICHER " Le tarif 1 est plus avantageux AF

"

plus avantageu FICHER " Le tarif 2 est x"

← ⋅

1 2

1 2

p n 3

p 9 + n 1 SI p < p ALORS SINON

FIN SI

Partie 3) La sortie des résultats (en gras).

Les résultats obtenus peuvent être affichés sur un écran (nombres, textes, graphiques).

1 2

1 2

DEMANDER un entier n

p n 3

p 9 n 1

SI p p ALORS SINON

FIN SI

← ⋅

← + ⋅

<

AFFICHER "Le tarif 1 est AFFICHER "Le tarif

plus avantageux"

plus avantageux"

2 est

(7)

Définition d'un algorithme

Un algorithme est :  une suite finie de règles à appliquer,

 dans un ordre déterminé,

 à un nombre fini de données,

 se terminant (i.e., arriver, en un nombre fini d’étapes, à un résultat, et ce quelque soit les données traitées).

Autre définition : Un algorithme est une suite finie d'opérations élémentaires constituant un schéma de calcul ou de résolution d'un problème donné.

L'algorithmique désigne l'ensemble des règles et des techniques qui sont impliquées dans la définition et la conception des algorithmes.

Un peu d'histoire

Les algorithmes, dont on a retrouvé des descriptions exhaustives, ont été utilisés dès l’époque des Babyloniens (env. 1500 av. J-C.) pour des calculs concernant le commerce et les impôts. L’algorithme le plus célèbre est celui qui se trouve dans le livre 7 des Éléments d’Euclide. Il permet de trouver le plus grand diviseur commun, ou PGDC, de deux nombres (env. 300 av. J-C.).

L’algorithmique a été systématisée par le mathématicien perse Al Khuwarizmi, auteur d’un ouvrage (souvent traduit par l’algèbre et le balancement) qui décrit des méthodes de calculs algébriques.

Les conventions d'écriture d'un algorithme Il y a deux types de conventions.

1) L'algorithme graphique ou organigramme.

Il s'agit d'une représentation graphique comportant des symboles de traitement et de test

(rectangles, losanges, etc.) reliés entre eux par des lignes de liaison indiquant le flux des contrôles.

Une norme ISO a été développée. Elle décrit en détails les différents symboles à utiliser pour représenter un algorithme informatique de manière normalisée.

Demander : n

Faux

Vrai

Afficher :

"Le tarif 2 est le plus avantageux"

Afficher :

"Le tarif 1 est le plus avantageux"

Lien vers la vidéo :

« Algorithmique, on suit la recette ».

(8)

2) L'algorithme textuel ou pseudo-code.

1 2

1 2

DEMANDER un entier n

p n 3

p 9 n 1

SI p p ALORS

AFFICHER " Le tarif 1 est SINON

AFFICHER " Le tarif 2 est

plus avantageux"

plus avantageux"

FIN SI

← ⋅

← + ⋅

<

Le pseudo-code est une façon de décrire un algorithme sans référence à un langage de programmation en particulier. Il ressemble cependant à un langage de programmation authentique mais dont on aurait retiré la plupart des problèmes de syntaxe.

Un algorithme puis un programme

Un algorithme n'est pas un programme. Un algorithme résout un problème donné indépendamment des particularités du langage de programmation.

Un programme est la réalisation (l'implémentation) d'un algorithme au moyen d'un langage donné (Visual Basic, C++, Scilab, Python, Fortran, etc.). Il s'agit de la mise en œuvre de l'ensemble des instructions. Par exemple, lors de la programmation il faut définir le format des variables utilisées, ce qui est un problème d'implémentation ignoré au niveau de l'algorithme.

Le « code source », désigne le texte, en langage de programmation, constituant le programme.

Exemple

Notre précédent algorithme peut se traduire dans le langage de programmation Python 3 et nous obtenons le programme suivant :

n = eval (input( "Nombre d'entrées : ")) p1 = 3 * n

p2 = 9 + n if p1 < p2 :

print( "Le tarif 1 est plus avantageux") else :

print( "Le tarif 2 est plus avantageux") Remarque

La majorité des algorithmes présentés dans ce cours seront écrits soit en pseudo-code soit directement traduit dans le langage de programmation Python 3. Ce choix découle du fait que lorsque l'algorithme possède de nombreuses instructions il est plus aisé et plus compact de l'écrire en pseudo-code qu'à l'aide d'un organigramme.

(9)

En résumé

Un algorithme est indépendant du langage de programmation dans lequel on va l’exprimer et de l’ordinateur utilisé pour le faire tourner. C’est une description abstraite des étapes conduisant à la solution d’un problème.

Algorithme = partie conceptuelle d’un programme (indépendante du langage)

Programme = implémentation (i.e., réalisation) de l’algorithme, dans un langage de programmation et sur un système particulier.

Des programmes puis un logiciel

Un ordinateur est composé de matériel (hardware) et de logiciels (software). Sans logiciel l'ordinateur ne fait rien parce qu'il n'a pas reçu les instructions lui indiquant ce qu'il doit faire.

Les logiciels sont composés de programmes informatiques, qui indiquent à l'ordinateur comment effectuer les tâches. Les logiciels déterminent les tâches qu'un appareil informatique peut effectuer.

Alors qu'à la vente d'un appareil informatique, l'accent est souvent mis sur le matériel informatique, c'est avant tout les logiciels qui donnent à l'ordinateur sa valeur ajoutée.

Logiciel n'est donc pas synonyme de programme informatique. Un logiciel est un ensemble typiquement composé de plusieurs programmes, ainsi que tout le nécessaire pour les rendre opérationnels : fichiers de configuration, images bitmaps, procédures automatiques.

Les deux principales catégories de logiciels sont les logiciels applicatifs et les logiciels de système.

Le logiciel applicatif est destiné à aider les usagers à effectuer une certaine tâche, et le logiciel de système est destiné à effectuer des opérations en rapport avec l'appareil informatique.

Le logiciel le plus important est le système d'exploitation : il sert à manipuler le matériel

informatique, diriger les autres logiciels, organiser les fichiers, et faire l'interface avec l'utilisateur.

Les logiciels disponibles dans le commerce sont toujours destinés à être utilisés avec un ou plusieurs systèmes d'exploitation donnés.

Exemple de logiciels

Photoshop (Adobe)

Logiciel de retouche d’image.

Writer (Suite LibreOffice) Traitement de texte gratuit.

Chrome (Google) Navigateur Web.

Excel (Microsoft) Tableur.

(10)

1.3 Programmation en Python 3

1.3.1 Présentation de Python 3

Python 3 est un langage informatique de haut niveau : c'est une suite d'instructions données par l'homme à l'ordinateur pour qu'il exécute certaines tâches.

Parmi les nombreux avantages de ce langage, on peut citer :

• Un langage libre et gratuit.

• Un langage multiplateforme, c'est-à-dire que les programmes que vous allez réaliser pourront tout aussi bien s' exécuter sous Windows, Mac ou Linux.

• Un langage simple et cependant puissant et rapide.

Il est simple à apprendre, car intuitif. Par exemple, pour que l'ordinateur sache que l'on veut créer une variable nombre contenant la valeur 2, il suffit d'écrire :

nombre = 2

alors qu'en C et C++ , par exemple, il faut préciser que la variable nombre est un entier (int) avant de pouvoir lui donner la valeur 2 :

int nombre ; nombre = 2 ;

Python est un langage de haut niveau. Cela signifie qu'il est plus proche du langage humain (ici, de l'anglais, malgré les apparences) que d'autres langages, et notamment le langage binaire, que lit directement l'ordinateur. La traduction de nombre = 2 (Python) en binaire devrait en effet donner quelque chose comme : 100101101...0011101001

• Un langage qui possède de nombreuses bibliothèques mathématiques très évoluées dans de multiples domaines (traitement de l'image, analyse de Fourier, calcul numérique ... ) et qui permettent ainsi de réaliser facilement de nombreux programmes assez pointus.

• Python est un langage de programmation en constante évolution. Il est à l'heure actuelle, en 2019 dans sa version 3.6.

1.3.2 Installation de Python 3

Adresses internet pour le téléchargement https://www.python.org/

https://edupython.tuxfamily.org/ avec l'éditeur : PyScripter https://www.anaconda.com/download/ avec l'éditeur : Spyder

Remarque : Un éditeur de texte est un logiciel destiné à la création et l'édition de fichiers textes.

Important : Télécharger la version Python 3.x et non la version Python 2.x .

(11)

1.3.3 Interface Python : zone de script et console

Interface de la distribution Anaconda/Python

Le logiciel Spyder fait office d'éditeur de texte pour Anaconda/Python.

Cette interface est découpée en plusieurs zones, en particulier :

• La zone de script qui permet d'écrire/saisir des programmes et de les exécuter ensuite.

• La console ou s'afficheront les résultats des programmes.

Après avoir exécuter Spyder on obtient la fenêtre suivante : (copie d'écran)

Remarque : Cet affichage permet de s'assurer que la console est correctement configurée.

Conclusion

• En Python 3, on écrit un programme dans la zone de script.

• Pour afficher le(s) résultat(s) du programme on l’exécute et on regarde dans la console.

• Dans certaines situations, on peut aussi écrire directement dans la console certaines instructions. Nous verrons dans ce cours, que la console Python peut être utilisée comme une calculatrice scientifique.

Commandes utiles dans Spyder pour l’affichage dans la zone de script et la console : Agrandissement du texte : Ctrl + + Réduction du texte : Ctrl + −

Zone de script

Console

(12)

1.3.4 Types de données : stockage et affichage

En Python 3, on écrit un programme dans la zone de script.

Pour afficher le(s) résultat(s) du programme on l’exécute et on regarde dans la console.

Dans Spyder, pour exécuter un programme on appuie sur la touche F5 ou .

Dans certaines situations, on peut aussi écrire directement dans la console certaines instructions.

Exemple 01 Nom du fichier : Exemple_donnees_01.py

# Calcul de l’aire d’un carré Programme Python (zone de script)

# Version 01 cote=10

aire=cote*cote aire

Entrée et/ou Sortie Python (console) Out :

Remarque : Il manque la commande print pour afficher le résultat désiré.

Programme Python (zone de script)

# Version 02 cote=10

aire=cote*cote print(aire)

Entrée et/ou Sortie Python (console) Out : 100

Programme Python (zone de script)

# Version 03 cote=10

aire=cote*cote

print(cote,aire,sep="\t")

Entrée et/ou Sortie Python (console) Out : 10 100

(13)

Programme Python (zone de script)

# Version 04 cote=10

aire=cote*cote

print("L'aire du carré de coté",cote,"est égal à",aire,".")

Entrée et/ou Sortie Python (console)

Out : L'aire du carré de coté 10 est égal à 100 . Remarque

Dans la commande print( ) on peut afficher des variables ; par exemple des nombres cote et aire et des chaînes de caractères comme "L'aire du carré de coté" , "est égal à" et "." .

Il faut séparer ses différents objets par une virgule.

Programme Python (zone de script)

# Version 05

cote=eval(input("Entrer la valeur du coté d'un carré: ")) aire=cote*cote

print("L'aire du carré de coté",cote,"est égal à",aire,".")

Entrée et/ou Sortie Python (console)

In : Entrer la valeur du coté d'un carré : 10 Out : L'aire du carré de coté 10 est égal à 100 .

Remarque

v = input (txt) , affiche dans la console le texte txt dans lequel on entrera ce qui est demandé.

La réponse est alors affectée à la variable v sous forme d'une chaîne de caractères.

Remarques générales

a) Le symbole # (hashtag ou mot-dièse) permet d’écrire un commentaire dans un programme sans qu’il soit exécuté.

b) Le petit carré rouge situé dans la zone console, permet d’interrompre la commande en cours. Autrement dit, cela stoppe l’exécution du programme.

c) Après avoir exécuté un programme et obtenu des résultats dans la console et avant d’exécuter un nouveau programme, on peut utiliser les commandes :

• Redémarrer le noyau (Restart Kernel) qui a pour effet, entre autres, de réinitialiser la valeur prise par toutes les variables lors de l’exécution du dernier programme.

• Effacer la console (Clear Console) qui a pour effet, d’effacer tout le texte affiché dans la console.

(14)

Exemple 02 Nom du fichier : Exemple_donnees_02.py

Programme Python (zone de script) a=2 # Type de donnée : entier b=3.5 # Type de donnée : flottant a=a+1

b=a*b b=a a=a**3 print("a=",a) print("b=",b)

Activité

a) Sans utiliser d’éditeur Python, compléter le tableau ci-dessous en indiquant la valeur des

variables à chaque ligne du programme en précisant le type de donnée obtenu (entier ou flottant).

Instructions a Type b Type

a=2 b=3.5 a=a+1 b=a*b b=a a=a**3

b) Utiliser un éditeur Python pour écrire le programme du point a) dans la zone de script et obtenir la sortie dans la console.

Le programme Python affiche en sortie dans la console : a = b = Que faire si un programme ne marche pas ?

Il y a plusieurs types d'erreurs.

• La cause peut-être une erreur de syntaxe (une faute de frappe) ou même un oubli : une parenthèse, une majuscule, une virgule au lieu d'un point, etc. L'éditeur nous renseigne en général sur l'erreur que nous commettons : à quelle ligne, le type d'erreur, etc.

Comparer vos lignes de code qui ne fonctionnent pas avec celle d'un programme qui fonctionne.

• Si le programme ne vous donne pas les résultats escomptés, vous pouvez placer la commande print() à des endroits stratégiques pour observer la valeur des variables déclarées dans le programme.

• On peut aussi consulter Internet (avec forums ou tutos pour la plupart en anglais ... ) car l'erreur que vous avez faite a probablement été commise par quelqu'un d'autre, avant vous, et qui a la bonne idée d'en témoigner.

Les erreurs en programmation restent souvent une occasion de progresser. C'est à force de recopier et de lire des lignes de programme, qu'on se forge une culture de la programmation et qu'on devient soi-même un bon programmeur. Courage !

(15)

Remarques sur les types de données

a) L'avantage d'utiliser un langage de programmation pour effectuer des calculs réside dans le fait de pouvoir stocker des données (informations) en mémoire. On peut, lorsque l'on réalise un programme, utiliser des variables pour stocker des valeurs. Le fait de donner un nom à un calcul, un texte ou un autre objet s'appelle l'affectation.

En Python Résultat après exécution

nom_var = donnée Stocke une donnée dans une variable qui porte le nom : nom_var

b) Affichage de données

En Python Résultat après exécution

print (données) Affiche dans la console les données c) Opérations usuelles sur les données de type nombres en Python 3 :

Opération en Python Résultat après exécution

a + b addition

a – b soustraction

a * b multiplication

a / b division

a ** b a puissance b :

a

b

a // b Quotient de la division euclidienne de a par b

si a et b sont des entiers.

a % b Reste de la division euclidienne de a par b

si a et b sont des entiers.

Théorème (division euclidienne) Soit a∈ et b∈* .

Il existe des entiers q et r∈ tels que a b q r avec 0 r b= ⋅ + ≤ <

De plus q et r sont uniques.

Terminologie q est le quotient et r le reste.

Exemples

i) Division euclidienne de 6789 par 34 :

    

a b q r r b

6789 34 199 23 avec 0 23 34= ⋅ + ≤ <

ii) La division euclidienne de 17 par 3 est :

( )

r

a b q r b

17 3 6 1 avec 0 1 3

− = ⋅ − + ≤ <

(16)

d) Les types de données en Python 3

Il existe de nombreux types de données en Python ; en voici quelques-uns que nous allons régulièrement utiliser.

• Les nombres ; deux catégories :

Les entiers, qui correspondent en Mathématiques aux entiers relatifs comme : 74 et -2 . Les flottants qui correspondent en Mathématiques aux nombres décimaux comme : 12.97 et -14.0.

Programme Python (zone de script) Entrée et/ou Sortie Python (console) a=34

print(a,type(a)) # type() : renseigne sur le type de données b=7.8

print(b,type(b)) c=a+b

print(c,type(c))

d=int(a+b) # int() : extraction d'un entier print(d,type(d))

e=float(a) # float() : extraction d'un flottant print(e,type(e))

Out : 34 <class 'int'>

Out : 7.8 <class 'float'>

Out : 41.8 <class 'float'>

Out : 41 <class 'int'>

Out : 34.0 <class 'float'>

• Les chaînes de caractères qui sont des successions de caractères encadrés par des guillemets, comme par exemple ´Ok !´ , ´456´ et ´Bonjour Gaëtan´ .

Programme Python (zone de script) Entrée et/ou Sortie Python (console)

nom1='bonjour'

print(nom1,type(nom1)) nom2='ciel'

print(nom2,type(nom2)) nom3=nom1+3*nom2 print(nom3,type(nom3)) nom4='3+4'

print(nom4,type(nom4))

nom5=eval('3+4') # eval() : transforme une chaine en nombre print(nom5,type(nom5))

a,b=6,10

nom6=str(a)+'+'+str(b) # str() : transforme un nombre en chaine print(nom6,type(nom6))

Out : bonjour <class 'str'>

Out : ciel <class 'str'>

Out :

bonjourcielcielciel <class 'str'>

Out : 3+4 <class 'str'>

Out : 7 <class 'int'>

Out : 6+10 <class 'str'>

Remarque : Les opérations + et * n’ont pas les mêmes effets selon qu’ils agissent sur des nombres ou des chaînes. Le chapitre 1.3.9 donne plus de détails sur ce type de donnée et les opérations définies sur ce type de donnée.

(17)

• Les listes qui sont des regroupements de données délimitées par des crochets.

Par exemple,

[

1.9,46," Anne", 24

]

est une liste de quatre éléments :

le flottant 1.9, puis l'entier 46, puis la chaîne de caractères "Anne", et enfin l'entier -24.

Programme Python (zone de script) Entrée et/ou Sortie Python (console) L1=[ ] # L=[ ] : liste vide

print(L1,type(L1))

L1.append("Marie") # L.append(e) : ajoute e a la fin de L print(L1,type(L1))

L1.append(18) print(L1,type(L1)) L1.append(37.2) print(L1,type(L1))

Out : [ ] <class 'list'>

Out : ['Marie'] <class 'list'>

Out : ['Marie',18] <class 'list'>

Out : ['Marie',18,37.2] <class 'list'>

Remarque : le chapitre 1.3.10 donne plus de détails sur ce type de donnée et les opérations définies sur ce type de donnée.

La commande type(donnée) nous renseigne sur le type de donnée / variable avec lequel on travaille dans un programme Python.

Exercice 01

a) Sans utiliser d’éditeur Python, déterminer le résultat de chacun des « calculs » suivants en précisant son type (entier ou flottant).

Calculs Résultat Type de donnée

1) 7 // 2 2) 4 % 2 3) 3.0 ** 3 4) – 5 // 2 5) 5 ** 0 + 7 6) 2 ** -2 7) -2 ** 10 8) 1 – 5 * 2 9) 5 – 3 / – 2 10) – 13 % 3 11) 1345 % 10 12) 1345 // 10 % 10 13) 1345 // 100 % 10 14) 1345 // 1000 % 10

b) Obtenir le résultat des « calculs » précédant en utilisant la console d’un éditeur Python.

(18)

Exercice 02

Soit n un nombre entier positif. Sans utiliser d’éditeur Python, relier par une flèche les expressions Python aux expressions françaises correspondantes :

n 1 + • • Le chiffre des unités de n

n %10 • • Le chiffre des dizaines de n n / /10 %10 • • L’entier précédant n

n / /100%10 • • Le double de n

n * * 2 • • L’entier consécutif à n

n 1− • • Le chiffre des centaines de n

n * 2 • • Le carré de n

Remarque : Après avoir cherché les réponses, vous pouvez utiliser la console d’un éditeur Python pour évaluer les expressions Python.

Exercice 03

a) Sans utiliser d’éditeur Python et pour chaque programme :

Créer un tableau ou apparaissent la valeur des variables à chaque ligne du programme en précisant le type de donnée obtenu (entier ou flottant).

Quel est la sortie affichée dans la console après exécution du programme dans la zone de script ? 1) Programme (zone de script) 2) Programme (zone de script)

a,b=6,5 a=a-b

b,a=a+1,2*b b=b%3 a=a-b//2+0.5 print("a=",a) print("b=",b)

x,y,z=1,2,3 x,y=y,z y,z=z,x y=1/4*z z=x+y+z print("x=",x) print("y=",y) print("z=",z)

3) Programme (zone de script) 4) Programme (zone de script) e=2 e=2**e

e=2**e e=float(e) print("e=",e)

res=5.0

res=(res-1)/res res=10/res res=int(res) print("res=",res)

b) Utiliser un éditeur Python pour écrire les programmes du point a) dans la zone de script et obtenir la sortie dans la console. Insérer la commande print(var,type(var)) aux endroits appropriés de vos programmes, pour obtenir la valeur et le type des variables var.

Nom du fichier : Exercice_donnees_03.py

(19)

Exercice 04

a) Sans utiliser d’éditeur Python, déterminer le résultat de chacun des « calculs » suivants en précisant son type (entier, flottant, chaîne de caractère ou liste).

Calculs Résultat Type de donnée

1) 11 + 2 * 3 2) "11" + 2 * "3"

3) str(11) + "2 * 3"

4) "11 + 2 * 3"

5) eval("11 + 2 * 3") + 3/2 6) str(11) + str(2*3) 7) ["11","2",2 * 3]

8) "11" + 2 * 3

9) 3 * str(str(11) + "2") 10) eval("a + 3")

11) str(11 + 2 * 3) 12) 11 + "2" * [3]

13) eval("11" + "2") ** 3 14) eval("11**3") / 2 15) eval("11**3") // 2 16) "11**3" / 2

17) [eval("11**3") % 2]

18) str(11)+str(3)+ "/"+"2"

19) str(a)+str(a)+ "/"+"2"

20) "a+b" + "/" + "2"

b) Obtenir le résultat des « calculs » précédant en utilisant la console d’un éditeur Python.

(20)

Exercice 05

a) Sans utiliser d’éditeur Python et pour chaque programme :

Créer un tableau ou apparaissent la valeur des variables à chaque ligne du programme en précisant le type de donnée obtenu (entier, flottant, chaîne de caractère ou liste).

Quel est la sortie affichée dans la console après exécution du programme dans la zone de script ? 1) Programme (zone de script) 2) Programme (zone de script)

x="10"

x=2*x x=eval(x) x=2*x print(x)

x="10"

x=eval(x) x=2.0*x x=str(x) x=3*x print(x)

3) Programme (zone de script)

x = "3"

y= eval(x) L=[ ]

z="2**"+x+"="+str(2**y) L.append(z)

y=y+1

z="2**"+str(y)+"="+str(2**y) L.append(z)

print(L)

4) Programme (zone de script)

a=5 D ="("+str(a)+"+X)"+chr(0x00B2)+"="+str(a**2)+"+"+str(2*a)+"X+X"+chr(0x00B2) print(D)

b) Ecrire un programme en Python 3 qui affiche en sortie le développement de (a X)(a X)+ − où a est un nombre entier saisi par l'utilisateur.

c) Utiliser un éditeur Python pour écrire les programmes du point a) dans la zone de script et obtenir la sortie dans la console. Insérer la commande print(var,type(var)) aux endroits appropriés de vos programmes, pour obtenir la valeur et le type des variables var.

Nom du fichier : Exercice_donnees_05.py

(21)

Exercice 06

Une année-lumière est une unité de distance couramment utilisée en astronomie, définie comme la distance parcourue par la lumière en une année (365,25 jours). La vitesse de la lumière étant environ égale à 299’792 km par seconde.

Écrire un programme en Python 3 convertissant un nombre d'années-lumière en kilomètres.

Indication : Programme Python (zone de script)

a = eval(input(……….)) k = ……….

print(……….….) Nom du fichier : Exercice_donnees_06.py

Exercice 07

a) Si n est une variable contenant un nombre à 2 chiffres non nuls, écrire un programme en Python 3 permettant d’afficher une variable p contenant le nombre n écrit « à l'envers » . Exemple : si n = 12 alors p = 21

b) Même question avec un nombre à (exactement) 3 chiffres.

Exemple : si n = 342 alors p = 243

Indications : i) Utiliser le quotient // et le reste % de la division euclidienne (entière).

ii) n x 10 y 10= ⋅ 1+ ⋅ 0 ou n x 10= ⋅ 2+ ⋅y 10 z 101+ ⋅ 0 iii) Programme Python (zone de script)

# Partie a)

n= eval(input(………..…….)) x=………..

y=………..

p=………..

print(………..……..)

# Partie b)

n= eval(input(…………..……….)) x=………..

y=………..

y=………..

p=………..

print(………..………..) Nom du fichier : Exercice_donnees_07.py

(22)

Exercice 08

Un magasin de bricolage propose une application pour calculer le nombre n de pots de peinture nécessaires à repeindre les 4 murs d'une pièce dont on connaît les dimensions l, p et h exprimées en mètres.

a) Exprimer la surface S des 4 murs latéraux de la pièce.

b) Ecrire un programme en Python 3 qui, connaissant les dimensions de la pièce, calcule le nombre n de pots de peinture nécessaires, sachant que sur le pot de peinture, on peut lire :

Indications : i) Utiliser le quotient // de la division euclidienne (entière).

ii) Programme Python (zone de script) h = eval(input(…………..……….)) l = eval(input(…………..……….)) p = eval(input(…………..……….)) S = ………..

n = ………..

print(………..) Nom du fichier : Exercice_donnees_08.py

(23)

1.3.5 Instructions conditionnelles

Dans un algorithme ou un programme on peut effectuer des instructions selon certaines conditions en utilisant ce que l’on appelle des instructions conditionnelles.

Exemple 01 Nom du fichier : Exemple_Test_01.py

# Est-ce que a est plus petit que b ? Programme Python (zone de script)

a=eval(input("Entrez un nombre a : ")) b=eval(input("Entrez un nombre b : ")) print("a=",a)

print("b=",b) if a < b :

print(a,"est plus petit que",b) else:

print(b,"est plus petit ou égal à",a)

# Est-ce que a est plus petit ou égal à b ? Programme Python (zone de script)

# Version 01

a=eval(input("Entrez un nombre a : ")) b=eval(input("Entrez un nombre b : ")) print("a=",a)

print("b=",b) if a < b :

print(a,"est plus petit que",b) else:

if a == b :

print(a,"est égal à",b) else:

print(b,"est plus petit que",a)

# Version 02

a=eval(input("Entrez un nombre a : ")) b=eval(input("Entrez un nombre b : ")) print("a=",a)

print("b=",b) if a < b :

print(a,"est plus petit que",b) elif a == b:

print(a,"est égal à",b) else:

print(b,"est plus petit que",a)

Entrée et/ou Sortie Python (console)

In : Entrez un nombre a : 45 In : Entrez un nombre b : 56 Out : 45 est plus petit que 56

In : Entrez un nombre a : 76 In : Entrez un nombre a : 54 Out : 54 est plus petit que 76

In : Entrez un nombre a : 345 In : Entrez un nombre a : 345 Out : 345 est égal à 345

(24)

Exemple 02 Nom du fichier : Exemple_Test_02.py

# Est-ce que c appartient à l’intervalle [a ;b] ? Programme Python (zone de script)

# Version 01

a=eval(input("Entrez un nombre a : ")) b=eval(input("Entrez un nombre b : ")) c=eval(input("Entrez un nombre c : ")) if a <= c <= b :

print(c,"appartient à l'intervalle [",a,";",b,"]") else:

print(c,"n'appartient pas à l'intervalle [",a,";",b,"]")

# Version 02

a=eval(input("Entrez un nombre a : ")) b=eval(input("Entrez un nombre b : ")) c=eval(input("Entrez un nombre c : ")) if a <= c and c <= b :

print(c,"appartient à l'intervalle [",a,";",b,"]") else:

print(c,"n'appartient pas à l'intervalle [",a,";",b,"]")

Entrée et/ou Sortie Python (console)

In : Entrez un nombre a : 9 In : Entrez un nombre a : 90 In : Entrez un nombre a : 40

Out : 40 appartient à l'intervalle [ 9 ; 90 ] In : Entrez un nombre a : 9

In : Entrez un nombre a : 90 In : Entrez un nombre a : 100

Out : 100 n'appartient pas à l'intervalle [ 9 ; 90 ]

(25)

Définition

Un booléen est un type de donnée qui ne peut prendre que deux valeurs : vrai (V) ou faux (F).

En Python, ces deux valeurs sont notées True et False.

Opérateurs de comparaisons

• a = = b renvoie True si les valeurs de a et b sont égales.

• a = = b renvoie False si les valeurs de a et b ne sont pas égales.

• a != b renvoie True si les valeurs de a et b ne sont pas égales.

• a != b renvoie False si les valeurs de a et b sont égales.

• a > b renvoie True si a est strictement plus grand que b.

• a > b renvoie False si a n’est pas strictement plus grand que b.

• a >= b renvoie True si a est plus grand ou égal à b.

• a >= b renvoie False si a n’est pas plus grand ou égal à b.

• a < b renvoie True si a est strictement plus petit que b.

• a < b renvoie False si a n’est pas strictement plus petit que b.

• a <= b renvoie True si a est plus petit ou égal à b.

• a <= b renvoie False si a n’est pas plus petit ou égal à b.

Programme Python (zone de script) Entrée et/ou Sortie Python (console) a=5 b=7

print( a == b ) print( a != b ) print( a > b ) print( a >= b ) print( a < b ) print( a <= b )

Out : False Out : True Out : False Out : False Out : True Out : True

Remarque

Il ne faut pas confondre l’opérateur de comparaison = = avec l’opérateur d’affectation = . x = 5 signifie que l’on affecte à x la valeur 5 alors que x = = 5 renvoie True (Vrai) si x est égal à 5 et False (Faux) sinon.

(26)

Remarques sur les instructions conditionnelles

En Python Résultat après exécution

if <condition> :

<instructions> Si <condition> est vraie (True) alors

<instructions>.

if <condition> :

<instructions 1>

else :

<instructions 2>

Si <condition> est vraie (True) alors <instructions 1>

sinon

<instructions 2>

if <condition 1> :

<instructions 1>

elif <condition 2> :

<instructions 2>

else :

<instructions 3>

Si <condition 1> est vraie (True) alors <instructions 1>

sinon si <condition 2> est vraie (True) alors

<instructions 2>

sinon

<instructions 3>

Le test "Si" va en Python se traduire par l'instruction "if ".

Lorsque Python rencontre une instruction "if ", il effectue l'ensemble des <instructions>

indentées (c'est à dire décalées) qui suivent lorsque la <condition> est vraie (True).

L'indentation (décalage du texte) peut être obtenue à l'aide de la touche (TAB) ou en utilisant des espaces.

Le "alors" n'apparaît pas en Python, mais est remplacé par deux points ":".

Le "sinon" va en Python se traduire par l'instruction " else : "

Lorsque Python rencontre une instruction "else : ", il effectue l'ensemble des <instructions>

indentées (c'est à dire décalées) qui suivent lorsque la <condition> est fausse (False).

Opérateurs booléens

Il existe des opérations entres les variables booléennes.

condition 1 C1 C2

condition 2 C1 and C2

C1 et C2 C1 or C2

C1 ou C2 not C1

non C1

True True True True False

True False False True False

False True False True True

False False False False True

Programme Python (zone de script) Entrée et/ou Sortie Python (console) a,b,c = 5,7,10

print( a <= b and b <= c) print( b <= a and b <= c) print( b <= a or b <= c) print( not b <= c)

Out : True Out : False Out : True Out : False

(27)

Exercice 01

Écrire un programme en Python 3 qui indique si le nombre entier positif n entré par l’utilisateur est un nombre entier pair ou impair.

Indications : i) Utiliser le reste et le quotient de la division euclidienne par 2.

ii) Programme Python (zone de script)

n= eval(input(……….)) if ……… :

print(………..) else:

print(………..)

Nom du fichier : Exercice_Test_01.py

Exercice 02

Considérons la fonction valeur absolue définie par : f x

( )

x x si x 0 x si x 0

 ≥

= = − <

Écrire un programme en Python 3 qui calcule l’image de cette fonction si l’utilisateur donne comme entrée la préimage x.

Remarque : N’utiliser pas la fonction prédéfinie dans Python : abs(x) Indications : Programme Python (zone de script)

x= eval(input(……….)) if ……… :

print(………..) else:

print(………..)

Nom du fichier : Exercice_ Test_02.py

Exercice 03

Écrire un programme en Python 3 qui indique si le nombre n entré par l’utilisateur est plus grand, plus petit ou égal à 10.

Indications : Programme Python (zone de script)

n= eval(input(……….)) if ………. :

print(……….) else:

if ………. : print(……….) else:

print(……….) Nom du fichier : Exercice_ Test_03.py

(28)

Exercice 04

Écrire un programme en Python 3 qui permet de résoudre une équation polynomiale du 1e degré de la forme ax b 0+ = si l’utilisateur donne comme entrée des coefficients

a,b∈ .

Indication : Programme Python (zone de script)

a= eval(input(……….)) b= eval(input(……….)) if …….… and …….… :

print(………….)

elif …….… and …….… : print(………….)

else:

print(………….)

Nom du fichier : Exercice_ Test_04.py

Exercice 05

Écrire un programme en Python 3 qui permet de résoudre une équation polynomiale du 2e degré de la forme : ax2 +bx c 0+ = si l’utilisateur donne comme entrée,

des coefficients a,b,c∈ avec a 0≠ .

Indications : i) Utiliser la formule de Viète :

ax bx c 02 x1 b et x2 b avec b 4ac2

2a 2a

∆ ∆ ∆

− − − +

+ + = ⇒ = = = −

ii) Pour calculer la racine carrée d’un nombre x il faut importer d’abord le module math en tapant dans le programme la ligne suivante : import math as mt

Ecrire ensuite dans le programme : mt.sqrt(x) iii) Programme Python (zone de script)

import math as mt a=………

b=………

c=………

Delta=………

if ……… : print(………….)

elif……… : print(………….)

else:

print(………….) Nom du fichier : Exercice_ Test_05.py

(29)

1.3.6 Instructions répétitives

Une grande force de la programmation, et l'une des raisons pour lesquelles elle a été inventée, c'est de pouvoir répéter plusieurs fois la même tâche. Nous allons ajouter des « boucles » à nos

algorithmes et programmes. Nous allons étudier deux types d’instructions répétitives : i) les boucles bornées de type « for »

ii) les boucles non bornées de type « while ».

Exemple 01 Nom du fichier : Exemple_Boucle_01.py

# Écrire tous les nombres entiers de 3 à 15 Programme Python (zone de script)

# version 01 / boucle : for for i in range(3,16,1):

print(i)

Entrée et/ou Sortie Python (console)

Out : 3 4 5 6 7 8 9 10 11 12 13 14 15

Programme Python (zone de script)

# version 02 / boucle : for / variable de type : liste L=[ ]

for i in range(3,16,1):

L.append(i) print(L)

Entrée et/ou Sortie Python (console)

Out : [3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]

(30)

Programme Python (zone de script)

# version 03 / boucle : for / variable de type : liste / etapes L=[ ]

for i in range(3,16,1):

L.append(i) print(L)

Entrée et/ou Sortie Python (console) Out :

[3] [3, 4]

[3, 4, 5]

[3, 4, 5, 6]

[3, 4, 5, 6, 7]

[3, 4, 5, 6, 7, 8]

[3, 4, 5, 6, 7, 8, 9]

[3, 4, 5, 6, 7, 8, 9, 10]

[3, 4, 5, 6, 7, 8, 9, 10, 11]

[3, 4, 5, 6, 7, 8, 9, 10, 11, 12]

[3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]

[3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]

[3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]

Programme Python (zone de script)

# version 04 / boucle : while / variable de type : liste L=[ ]

i=3 while i<=15:

L.append(i) i=i+1

print(L)

Entrée et/ou Sortie Python (console)

Out : [3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]

Remarques

Dans la version 03 du programme ci-dessus on a indenté la commande print ce qui a eu pour effet d’afficher les valeurs prise par la variable liste L à chaque étape de la boucle. On peut ainsi mieux comprendre et suivre les différentes étapes de l’algorithme et ne pas avoir seulement le résultat final. Cette « astuce » est souvent utile lors de la conception d’un programme complexe.

(31)

Exemple 02 Nom du fichier : Exemple_Boucle_02.py

# Écrire tous les nombres entiers de 30 à 4 Programme Python (zone de script)

# version 01 / boucle : for / variable de type : liste L=[ ]

for i in range(30,3,-1):

L.append(i) print(L)

# version 02 / boucle : while / variable de type : liste L=[ ]

i=30

while i>=4:

L.append(i) i=i-1

print(L)

Entrée et/ou Sortie Python (console)

Out : [30, 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4]

Exemple 03 Nom du fichier : Exemple_Boucle_03.py

# Écrire la table de multiplication de 8 pour les entiers de 0 à 10 Programme Python (zone de script)

for k in range(0,11):

print(k,"* 8 =",k*8)

Entrée et/ou Sortie Python (console) Out :

0 * 8 = 0 1 * 8 = 8 2 * 8 = 16 3 * 8 = 24 4 * 8 = 32 5 * 8 = 40 6 * 8 = 48 7 * 8 = 56 8 * 8 = 64 9 * 8 = 72 10 * 8 = 80

(32)

Exemple 04 Nom du fichier : Exemple_Boucle_04.py

# Écrire la somme de tous les nombres entiers compris entre a et b avec 0<a<b et calculer la somme.

Programme Python (zone de script)

a=eval(input("Entrez le nombre entier a=")) b=eval(input("Entrez le nombre entier b=")) chaine=" "

somme=0 terme=0

for k in range(a,b,1):

chaine=chaine+str(k)+"+"

terme=k

somme=somme+terme chaine=chaine+str(b) somme=somme+b print(chaine,"=",somme)

Entrée et/ou Sortie Python (console)

In : Entrez le nombre entier a=1 In : Entrez le nombre entier b=10 Out : 1+2+3+4+5+6+7+8+9+10 = 55 In : Entrez le nombre entier a=4 In : Entrez le nombre entier b=13 Out : 4+5+6+7+8+9+10+11+12+13 = 85

(33)

Remarques sur les instructions répétitives a) Une boucle bornée est ainsi structurée :

En Python Résultat après exécution

for var in range (debut,fin,pas) :

<instructions>

La variable var prend successivement toutes les valeurs entières de l’entier debut à l’entier fin avec un pas entier de pas, et pour chacune d’elle, exécution des <instructions>.

La variable var est appelée compteur de la boucle.

Les paramètres debut et pas sont optionnels. Cela permet de réaliser une boucle en faisant parcourir à la variable var tous les entiers :

• de l'intervalle

[

0; fin

[

si un seul paramètre est renseigné.

• de l'intervalle si 2 paramètres

[

debut; fin

[

sont renseignés.

• dans l'intervalle

[

debut; fin

[

mais en réalisant une suite arithmétique de raison pas si les 3 paramètres sont renseignés.

Le "pour" va en Python se traduire par l'instruction " for ".

Les <instructions> sont indentées par rapport au for .

L'indentation (décalage du texte) peut être obtenue à l'aide de la touche (TAB) ou en utilisant des espaces.

On utilise en général la boucle " for "quand on connaît à l’avance le nombre de fois que l’on souhaite répéter une instruction.

b) Une boucle non bornée est ainsi structurée :

En Python Résultat après exécution

while <condition> :

<instructions> Tant que la <condition> est vraie (True) alors effectuer les <instructions>.

Le "tant que" va en Python se traduire par l'instruction " while ".

Lorsque Python rencontre une instruction " while ", il effectue l'ensemble des <instructions>

indentées (c'est à dire décalées) qui suivent lorsque la <condition> est vraie (True).

On utilise en général la boucle "while " quand on ne connaît pas à l’avance le nombre de fois que l’on souhaite répéter une instruction.

La boucle "while " peut s’avérer utile si on veut qu’une variable prenne successivement toutes les valeurs de debut à fin avec un pas de pas, sans que ses 3 derniers paramètres soient entiers.

(34)

Exercice 01

a) Écrire un programme en Python 3 qui affiche tous les nombres pairs entre 2254 et 2288 dans une liste.

b) Écrire un programme en Python 3 qui affiche tous les nombres impairs entre 131 et 255 dans une liste.

Remarque : Proposer deux versions, une avec la boucle while et l’autre avec for . Indication : Programme Python (zone de script)

# Version / boucle : for L=[ ]

for ……….. : L.append(……….) print(………..)

# Version / boucle : while L=[ ]

i=………..

while ……….. : L.append(……….) i=………..

print(………..) Nom du fichier : Exercice_Boucle_01.py

Exercice 02

a) Ecrire un programme en Python 3 qui affiche la somme : 20+2 21+ 2+... 2+ n et calcule cette somme. Le nombre n est un entier positif entré par l’utilisateur.

Indications : Programme Python (zone de script) n=eval(input(………))

Chaine=……….

Somme=………

Terme=………..

for ………..:

Chaine=………

Terme=……….

Somme=………..

Chaine=……….

Somme=………

print(………..)

Entrée et/ou Sortie Python (console) In : Entrez le nombre entier n=5 Out : 2^0+2^1+2^2+2^3+2^4+2^5 = 63 Nom du fichier : Exercice_Boucle_02.py

(35)

Exercice 03

Écrire un programme en Python 3 qui affiche tous les livrets de 1 à 10.

Exemple

Livret de 1 1*1=1 1*2=2 1*3=3 1*4=4 1*5=5 1*6=6 1*7=7 1*8=8 1*9=9 1*10=10

Livret de 2 2*1=2 2*2=4 2*3=6 2*4=8 2*5=10 2*6=12 2*7=14 2*8=16 2*9=18 2*10=20

Livret de 3 3*1=3 3*2=6 3*3=9 3*4=12 3*5=15 3*6=18 3*7=21 3*8=24 3*9=27 3*10=30

…..

…..

Indications : i) Placer une boucle à l'intérieur d'une autre boucle.

ii) Programme Python (zone de script) for ………. :

print(……….) print(……….) for ………. : print(……….) Nom du fichier : Exercice_Boucle_03.py

Exercice 04

Décrire en français et à l’aide de dessins, sans exécuter le programme dans un éditeur, l’entrée et la sortie du programme Python 3 écrit ci-dessous.

Programme Python (zone de script)

n=eval(input("Entrez un entier positif n=")) print(n*" "+"*")

for i in range(1,n,1):

print((n-i)*" "+"*"+(2*i-1)*" "+"*") Nom du fichier : Exercice_Boucle_04.py

(36)

r

h

1.3.7 Fonctions

Nous allons définir des fonctions dans nos programmes.

Travailler avec des fonctions permet souvent de découper les problèmes et de simplifier la lisibilité et la compréhension de nos programmes.

Exemple 01 Nom du fichier : Exemple_Fonctions_01.py

# Calcul du volume d’un cylindre droit Programme Python (zone de script)

import math as mt

def volume_cylindre(h,r):

return mt.pi*r**2*h

# Programme principal

h=eval(input("Entrez la hauteur du cylindre h : ")) r=eval(input("Entrez le rayon du cylindre r : ")) print("Le volume du cylindre droit de hauteur h=",h,\

"et de rayon r=",r,"vaut :",volume_cylindre(h,r))

Entrée et/ou Sortie Python (console) In : Entrez la hauteur du cylindre h : 3 In : Entrez le rayon du cylindre r : 4

Out : Le volume du cylindre droit de hauteur h= 3 et de rayon r= 4 vaut : 150.79644737231007

Remarques

a) On a défini une fonction qui porte le nom : volume_cylindre. Cette fonction à comme « entrées » les nombres positifs h et r et comme « sortie » le nombre mt.pi*r**2*h.

b) Si on exécute au préalable une fonction dans la zone de script, on peut ensuite l’utiliser dans la console.

Entrée et/ou Sortie Python (console) In : volume_cylindre(3,4)

Out : 150.79644737231007

(37)

Exemple 02 Nom du fichier : Exemple_Fonctions_02.py

# Fonction factorielle Définition

Soit n un entier positif ou nul. On appelle n factorielle, noté n! , le produit des nombres entiers de 1 à n.

1 si n 0

n! 1 2 3 .... n si n 0

=

=  ⋅ ⋅ ⋅ ⋅ >

Exemples

5! 1 2 3 4 5 120 = ⋅ ⋅ ⋅ ⋅ = 7! 1 2 3 4 5 6 7 5040= ⋅ ⋅ ⋅ ⋅ ⋅ ⋅ = 69! 1 2 3 ... 68 69 1,71 10= ⋅ ⋅ ⋅ ⋅ ⋅ ≅ ⋅ 98 0! 1 =

70 ! ... = dépasse les capacités des calculatrices courantes ! Programme Python (zone de script)

# Version 01 (itératif) def factorielle(n):

if n==0:

return 1 produit = 1

for i in range(1,n+1):

produit=produit*i return produit

# Programme principal import math as mt

n=eval(input("Entrez un nombre entier naturel n : ")) while n!=mt.floor(n) or n<0 :

n=eval(input("Entrez un nombre entier naturel n : ")) print(n,"factorielle vaut ",factorielle(n))

Entrée et/ou Sortie Python (console) In : factorielle(5)

Out : 120

In : Entrez un nombre entier naturel n : 5 Out : 5 factorielle vaut : 120

(38)

Programme Python (zone de script)

# Version 02 (récursive) def factorielleR(n):

if n==0:

return 1 if n==1:

return 1 else:

return n*factorielleR(n-1)

Entrée et/ou Sortie Python (console) In : factorielleR(5)

Out : 120

Remarque (version récursive)

# Relation entre la fonction factorielle et les permutations d’un ensemble E Définition Considérons une fonction f de A vers B. f est une bijection de A vers B si et seulement si pour tout y B∈ il existe un unique x A tel que f ( x ) y= . Exemples A B E= = =

{

a,b,c

}

f est une bijection de A vers B. g n’est pas une bijection de A vers B.

Définition Une permutation d’un ensemble E est une bijection de E vers E.

Exemple La fonction f de l’exemple précédent est une permutation de E=

{

a,b,c

}

Remarque Toute permutation f de E admet une permutation « réciproque » de E notée f 1 tel que f1f i= et f f1 =i (i=identité)

n factorielleR(n) 5 5*factorielleR(4) 4 4*factorielleR(3) 3 3*factorielleR(2) 2 2*factorielleR(1) 1 factorielleR(1) = 1

A B

a f a

b b

c c

A B

a g a

b b

c c

E

E

a f a

b b

c c

E a

b

c

f -1

(39)

Proposition Le nombre de permutations d’un ensemble E possédant n éléments est n! . Exemple E=

{

a,b,c

}

n # E 3= =

Le nombre de permutations de E est n! 3! 1 2 3 6= = ⋅ ⋅ =

Explication Chaque « chemin » de cet arbre représente une permutation de E.

Il y a 6 3 2 1 3!= ⋅ ⋅ = « chemin » (permutations) dans cet arbre.

Programme Python (zone de script)

import itertools as iter

L = list(iter.permutations(["a","b"])) print (L)

print("Nombre de permutations:",len(L)) L = list(iter.permutations(["a","b","c"])) print (L)

print("Nombre de permutations:",len(L)) L = list(iter.permutations(["a","b","c","d"])) print (L)

print("Nombre de permutations:",len(L))

Entrée et/ou Sortie Python (console) Out :

[('a', 'b'), ('b', 'a')]

Nombre de permutations: 2 Out :

[('a', 'b', 'c'), ('a', 'c', 'b'), ('b', 'a', 'c'), ('b', 'c', 'a'), ('c', 'a', 'b'), ('c', 'b', 'a')]

Nombre de permutations: 6 Out :

[('a', 'b', 'c', 'd'), ('a', 'b', 'd', 'c'), ('a', 'c', 'b', 'd'), ('a', 'c', 'd', 'b'), ('a', 'd', 'b', 'c'), ('a', 'd', 'c', 'b'), ('b', 'a', 'c', 'd'), ('b', 'a', 'd', 'c'), ('b', 'c', 'a', 'd'), ('b', 'c', 'd', 'a'), ('b', 'd', 'a', 'c'), ('b', 'd', 'c', 'a'), ('c', 'a', 'b', 'd'), ('c', 'a', 'd', 'b'), ('c', 'b', 'a', 'd'), ('c', 'b', 'd', 'a'), ('c', 'd', 'a', 'b'), ('c', 'd', 'b', 'a'), ('d', 'a', 'b', 'c'), ('d', 'a', 'c', 'b'), ('d', 'b', 'a', 'c'), ('d', 'b', 'c', 'a'), ('d', 'c', 'a', 'b'), ('d', 'c', 'b', 'a')]

Nombre de permutations: 24

3 possibilités

2 possibilités 1 possibilité

a b c

b c

c

b a c

c a

a b

b a

(40)

Exemple Alphabet=

{

a,b,c,d ,e,...,x,y,z

}

n # Alphabet 26= =

Le nombre de permutations de Alphabetest n! 26! 4 10= ≅ ⋅ 26 (nombre très grand)

Exemple 03 Nom du fichier : Exemple_Fonctions_03.py

# Arrondir un nombre positif à la demi près Programme Python (zone de script)

def ARRONDI_1_2(n):

y=int(100*n) z=y%100 if 0 <= z <= 24 : t=y//100

elif 25 <= z <= 74 : t=(y//100)+0.5 else:

t=(y//100)+1 return t

Entrée et/ou Sortie Python (console)

In : ARRONDI_1_2(3.249) Out : 3

In : ARRONDI_1_2(3.250) Out : 3.5

In : ARRONDI_1_2(3.749) Out : 3.5

In : ARRONDI_1_2(3.750) Out : 4

In : ARRONDI_1_2(4.135) Out : 4

Rappel : a % b : reste entier de la division euclidienne de a par b.

a // b : quotient entier de la division euclidienne de a par b.

(41)

Remarques sur les fonctions Nom du fichier : Remarques_fonctions.py a) La déclaration d'une fonction est ainsi structurée :

En Python Résultat après exécution

def nom_fct (paramètres) :

<instructions>

return données

On a défini une fonction nom_fct qui à des paramètres (entrées) et qui renvoie des données (sorties).

Le nom de la fonction peut comporter plusieurs lettres suivies éventuellement de chiffres.

Les <instructions> et le return sont indentées par rapport au def.

Une fonction peut dépendre de plusieurs paramètres. Il suffit de les lister en les séparant par une virgule.

b) Une fonction peut à son tour en appeler une autre. L’exemple suivant propose une fonction qui calcule le pgcd de deux entiers à l’aide de l’algorithme d’Euclide. Cette fonction est à son tour utilisée pour simplifier une fraction.

Programme Python (zone de script) Entrée et/ou Sortie Python (console)

def PGCD(a,b):

while b!=0:

a,b = b,a%b return a

def SimplFrac(num,den):

d=PGCD(num,den) return num//d , den//d

# Programme principal

num=eval(input("Entrez le numérateur :")) den=eval(input("Entrez le dénominateur :")) print(num,'/',den,"=",\

SimplFrac(num,den)[0],'/',SimplFrac(num,den)[1])

In : PGCD(12,15) Out : 3

In : SimplFrac(12,15) Out : (4, 5)

In : Entrez le numérateur:12 In : Entrez le dénominateur:15 Out : 12 / 15 = 4 / 5

Une fonction peut aussi renvoyer plusieurs données, il suffit de les séparer par une virgule au moment du return. L’exemple précédant montre comment récupérer ces valeurs.

(42)

c) Variables locales et globales Programme Python (zone de script)

a, b, c= 6, 8, 10 # a, b et c sont des variables globales def TEST(c):

a=3 # a : variable locale à la fonction TEST b=4*c # b : variable locale à la fonction TEST c=a+b # c : variable locale à la fonction TEST return a,b,c

print(TEST(c)) print(a,b,c)

Entrée et/ou Sortie Python (console) Out : (3, 40, 43)

Out : 6 8 10

Les variables utilisées à l’intérieur d’une fonction (variables locales) n’interfèrent pas avec d’autres variables du programme (variables globales) qui pourraient porter le même nom.

Exercice 01

a) Ecrire un programme en Python 3 qui calcule tous les diviseurs d’un nombre entier positif n et les affiche dans une liste.

Déclarer une fonction et notez-la en Python : diviseurs(n)

Exemple : diviseur( 60 ) devra retourner [1, 2, 3, 4, 5, 6, 10, 12, 15, 20, 30, 60].

Indications : i) Utiliser le reste % de la division euclidienne.

ii) Programme Python (zone de script) def diviseurs(n):

L=………

for ……… : if ………

L.append(………) return ………

b) Parmi les nombres entiers suivants (appelés nombre de Mersenne), lesquels sont premiers ? 1) 2171 2) 2181 3) 2191 4) 2311 5) 2801 Nom du fichier : Exercice_Fonctions_01.py

Références

Documents relatifs

On se propose de fusionner ces deux chiers en un chier unique appelé Promo_MI, qui contiendra tous les noms qui se trouvent dans les des deux chiers SectionA et SectionB et qui

Une liste de nombre premiers – Écrire un algorithme capable d’afficher la liste des nombres premiers inférieurs à un entier naturel donné. Une liste de nombre premiers jumeaux

Les introduction à Python sont nombreuses sur le Web, et certaines sont de très bonne qualité :. — Le cours de Bob

Si on veut utiliser deux fonctions du même module, ou davantage, on peut importer tout le module en écrivant from math import * mais cela peut être gênant car certaines fonctions

Pour exécuter le programme par exemple pour e = 0,2, taper terme(0.2) dans l’écran de calculatrice puis valider. Ceci évite d’entrer dans le programme une ligne du type Input

[r]

● On peut résoudre ces problèmes en utilisant une liste pour stocker les données.. Les listes → un nouveau type. ● Quand on crée une liste l = [5,6,7], on obtient un nouveau type

● En fait dans le cas 1), on peut même faire une fonction qui ne renvoie rien → une procédure qui ne fait que modifier liste.. Un autre problème classique. ● Il faut faire