• Aucun résultat trouvé

Cours d informatique de BCPST

N/A
N/A
Protected

Academic year: 2022

Partager "Cours d informatique de BCPST"

Copied!
51
0
0

Texte intégral

(1)

Cours d’informatique de BCPST1

2020-2021

(2)

Sommaire

1 Pr´esentation et installation 5

2 Premiers Pas : Variables, modules et scripts 8

3 Instructions conditionnelles 15

4 Fonctions 19

5 Boucle While 24

6 Boucle FOR 28

7 Listes 32

8 Chaˆıne de caract`eres 37

9 Les graphiques 40

10 Algorithmes de tri 45

11 Tableaux 47

12 Modification d’images 51

(3)

Chapitre 1

Pr´esentation et installation

I Principaux composants d’un ordinateur

Un ordinateur est constitu´e de diff´erents ´el´ements :

— Une carte m`ere : c’est le ‘syst`eme nerveux’ de l’or- dinateur sur lequel se connecte une grande partie des autres composants de l’ordinateur. Elle permet aux diff´erentes parties d’un ordinateur de commu- niquer entre elles.

— Un microprocesseur (CPU) : c’est le composant qui ex´ecute les commandes informatiques, qui calcule.

— Une m´emoire vive, appel´ee aussi RAM (Ran- dom Access Memory) : elle permet de stocker les donn´ees pendant leur traitement. Celles-ci sont perdues d`es que l’ordinateur est ´eteint.

— Une m´emoire de masse (disque dur) : elle permet de stocker les donn´ees mˆeme lorsque l’ordinateur est ´eteint.

— Diff´erentes cartes (graphique, son,. . .)

— Des p´eriph´eriques d’entr´ee (clavier, souris,. . .)

— Des p´eriph´eriques de sorties (´ecran, imprimante, . . .)

II Algorithme et programmation

Un algorithme est une m´ethode pour r´esoudre un probl`eme. Une recette de gˆateau au chocolat peut par exemple ˆetre vue comme un algorithme, c’est `a dire une succession d’instructions qui, partant de donn´ees d’entr´ee, permettent d’obtenir un r´esultat, de r´esoudre le probl`eme (dans notre exemple : concocter un gˆateau au chocolat).

Un programme est une traduction compr´ehensible par l’ordinateur de cette m´ethode.

Ainsi, avant d’´ecrire un programme, il faut concevoir un algorithme que l’on peut ensuite traduire dans un langage de programmation sp´ecifique.

Le langage utilis´e cette ann´ee sera Python mais il en existe beaucoup d’autres (matlab, C, ...)

III Python et environnement

Python est un langage de programmation notamment utilis´e par Google, Youtube, la NASA, etc. Cr´e´e en 1990, il est t´el´echargeable librement sur internet.

Nous utiliserons cette ann´ee, pour nos programmations en Python, les environnements de d´eveloppement Pyzo et Edupython, librement t´el´echargeables sur internet. Chacun d’eux proposent une interface com- pos´ee, principalement, d’une fenˆetre ”´editeur” (pour ´ecrire des programmes) et une fenˆetre ”console”,

”Shell” en anglais (calculatrice, r´esultats des programmes, affichage des erreurs...).

(4)

Pyzo: Edupython:

Pour ex´ecuter une ligne tap´ee dans la console on appuie sur la touche ”entr´ee” du clavier. Pour ex´ecuter un programme ´ecrit dans l’´editeur, sur Pyzo, aller dans le menu d´eroulant ”Run” ou ”Ex´ecution”, sur Edupython appuyer sur la flˆeche verte (ou aller dans le menu ”ex´ecuter” et cliquer sur ”ex´ecuter”.

Remarque : si vous d´esirez utiliser Python et qu’il n’est pas install´e sur les ordinateurs `a votre disposition, vous pou- vez aller sur :https://repl.it/languages/python3ou surhttps://www.lelivrescolaire.

fr/outils/console-python. Ces sites vous permettent d’´ecrire des programmes python et de les lancer.

IV Installer Python sur son ordinateur

Si vous disposez d’un ordinateur (personnel ou familial) sur lequel vous travaillez r´eguli`erement, voil`a comment installer Python afin de pouvoir vous entraˆıner. Sur Windows le plus simple est d’installer EduPython.

1 ) EduPython (que sur Windows)

Render vous sur https://edupython.tuxfamily.org et cliquer sur T´el´echargement. Cliquer sur ”T´el´echarger la derni`ere version” et installer le lo- giciel t´el´echarg´e.

Vous ˆetes prˆet `a coder.

2 ) Pyzo - (Mac ou Windows)

Pour utiliser Pyzo, il faut d’abord installer le langage Python de fac¸on ind´ependante puis installer Pyzo.

a ) Installer Python

— Sur Mac :https://www.python.org/downloads/mac-osx/, cliquer sur ”Latest Python 3 Release - ...”.

— Sur Windows : https://www.python.org/downloads/windows/, cliquer sur ”Latest Py- thon 3 Release - ...”.

Installer python en ex´ecutant le programme que vous venez de t´el´echarger (il faut ˆetre patient, c’est un peu long).

b ) Installer Pyzo

Rendez vous sur la pagehttps://pyzo.org/start.html.

Dans Step 1 : cliquer sur le lien correspondant `a votre syst`eme d’exploitation. Ne suivez pas les autres

´etapes (Steps).

On doit configurer Pyzo : il s’agit de lui dire o `u se trouve le langage python que vous avez install´e.

(5)

— Il d´etecte automatiquement la bonne version de Python (Python 3 - sur Mac il se peut qu’il d´etecte Python 2 : ce n’est pas ce qu’il faut utiliser)

— Sinon s’il propose des liens, il faut alors cliquer sur le lien Anaconda propos´e

— Si vous n’ˆetes pas dans les deux cas pr´ec´edents, aller dans le menu d´eroulant ”Shell” et cliquer sur ”Edit shell configurations”. Remplir le champ exe avec le chemin vers le fichier python3 (dans un sous r´epertoire/ sous dossier d’anaconda3 qu’il faut trouver avec l’explorateur). Le chemin d´epend de l’endroit o `u anaconda3 est install´e.

Pour d´eterminer un chemin une fois que vous avez trouv´e le fichier cherch´e :

— Windows : clique droit sur le fichier , dans g´en´eral copier coller ce qu’il y a ´ecrit dans la rubrique

”Emplacement”. Il faudra ajouter ”\nom du fichier”, a priori donc ”\python3”

— Mac : voirhttps://matthieufleitz.fr/copier-chemin-dun-fichier-macos/

3 ) Autre possibilit´e

Sous Mac dans le cas o `u vous n’arrivez pas `a configuer Pyzo (sous Windows vous pouvez utiliser Edu- python), vous pouvez aller surhttps://www.anaconda.com/products/individualet descendez la page jusqu’`a la rubrique ”Anaconda Installers”

Cliquez sur le lien correspondant `a votre syst`eme d’exploitation (Windows ou MacOS, conseil sur Mac choisir le ”Graphical Installer” si vous ne maˆıtrisez pas bien votre ordinateur).

Une fois le programme t´el´echarg´e, installez le (c¸a prend un peu de temps).

Pour commencer `a coder, ouvrez Anaconda : une fenˆetre Anaconda Navigator s’ouvre. Trouver la case

”Spyder” et cliquer sur Launch (ou Install s’il n’a pas ´et´e install´e. Une fois install´e, vous pourrez cliquer sur Launch).

Spyder est un ´equivalent de Pyzo : vous ne serez pas trop d´epays´e leur pr´esentation et leur fonctionne- ment sont tr`es proches.

(6)

Chapitre 2

Premiers Pas : Variables, modules et scripts

I Utiliser Python comme une calculatrice

Python permet de r´ealiser des calculs comme sur une calculatrice. ´Ecrivez la s´erie d’instructions sui- vantes dans la console en essayant de bien comprendre le r ˆole de chaque commande :

>>>> 5+3

>>>> 4*3

>>>> 2**7

>>>> 14/3

>>>> 14//3

>>>> 14%3

>>>> (2+5)*3.1

>>>> abs(-3)

Attention les ”>>>>” ne sont l`a que pour vous indiquez que l’on entame une nouvelle ligne dans la console. Il ne faut pas les ´ecrire.

Une fois l’instruction ´ecrite dans la console appuyer sur Entr ´ee : le r´esultat devrait s’afficher.

Astuces : Historique d’instructions La console dans python garde en m´emoire les lignes que vous avez lanc´ees.

On d´esire parfois relancer une instruction d´ej`a lanc´ee (ou relancer une instruction lanc´ee en la corrigeant).

Vous pouvez, une fois que vous avez cliqu´e dans la console sur la ligne o `u ´ecrire l’instruction, remonter dans l’historique `a l’aide de la touche afin de retrouver les instructions d´ej`a ex´ecut´ees.

II Biblioth`eques/modules de commandes pr´e´ecrites

En Python, comme dans les autres langages informatiques, il existe des biblioth`eques (ou modules) de fonctions et constantes d´ej`a cod´ees que l’on peut r´eutiliser. Pour pouvoir les utiliser, il faut d’abord im- porter (charger) le module avant de s’en servir. Voici deux exemples de modules que l’on utilisera dans ce TP :

— mathpermet d’utiliser les commandessqrt(x)(racine carr´ee),cos(x),sin(x)... et notamment la valeurpi(´egale `aπ).

— randompropose des commandes ayant trait `a l’al´eatoire. Deux commandes sont tr`es utiles :

— random()renvoie un nombre al´eatoire sur[0,1[. Notez que les parenth`eses vides sont obligatoires et qu’on n’´ecrit jamais rien entre celles-ci.

— randint(n,m)un entier al´eatoire de l’ensembleJn, mK. Par exemplerandint(3,58)ren- voie un nombre entier entre 3 et 58 avec ´equiprobabilit´e.

Il existe deux grandes fac¸ons d’importer une biblioth`eque. On montre un exemple pour la librairiemath et une utilisation de la fonctionsqrtafin de calculer√

π

(7)

Fac¸on1 Fac¸on1bis Fac¸on2 Fac¸on2bis avec alias (surnom)

from math import pi, sqrt sqrt(pi)

from math import*

sqrt(pi)

import math

math.sqrt(math.pi)

import math as m m.sqrt(m.pi)

Dans la ”Fac¸on 1” on n’importe seulement ce dont on a besoin, ici la fonctionsqrtet la constantepi. Dans les trois autres on importe toutes les fonctions et constantes du module.

Exercice :

Apr`es avoir import´e le module math de la premi`ere fac¸on, testez les commandes suivantes :

>>>> pi

>>>> cos(pi/4)

>>>> floor(3.26)

>>>> floor(-3.26)

>>>> exp(2)

Importer le module mathsous l’aliasmaet testez les commandes suivantes :

>>>> ma.log(1)

>>>> ma.log(ma.e)

>>>> ma.sin(ma.pi/3)

>>>> ma.sqrt(3)/2

>>>> ma.sqrt(16)

Remarque : A tout moment, la commande help permet d’obtenir des informations sur une fonction connue du syst`eme. Essayez par exemple :

>>>> help(tan)

ou, dans le cas d’une importation avec un aliasma:

>>>> help(ma.tan)

III Variables et affectations

1 ) Le principe

En informatique (et dans la vie r´eelle), on a tr`es souvent besoin de garder en m´emoire des valeurs pour ˆetre en mesure de les r´eutiliser. Par exemple lorsque, dans une suite de calculs, on a besoin de r´eutiliser une valeur calcul´ee pr´ec´edemment.

Dans la vie r´eelle, il vous suffit d’´ecrire cette valeur sur une feuille en vous rappelant `a quoi elle corres- pond. Dans un ordinateur ce qui joue le r ˆole de la feuille c’est la m´emoire. Et afin de savoir o `u la valeur est rang´ee dans la m´emoire de l’ordinateur et `a quoi elle correspond on lui donne un nom. C’est ce qu’on appelle une variable.

On pourra s’imaginer (dans un premier temps) qu’une variable est une petite case dans l’ordinateur dans laquelle on ´ecrit ce que l’on veut retenir.

>>>> a = 6

>>>> b = 3

>>>> c = a + b

>>>> b = a

On dit qu’on a affect´e la valeur 6 `aaet la valeur 3 `ab. La variableccontient la somme des valeurs de a et b donc9. Puis on affecte `abla valeur de la variablea(dans ce sens et pas dans l’autre). Donc `a la fin de ces 4 lignes la valeur debest 6, celle dea: 6 et celle dec: 9.

Le nom d’une variable peut ˆetre une lettre ou un mot (on n’utilisera pas d’accents et d’espaces).

Remarque : le signe=n’a pas le mˆeme sens qu’en math´ematique et n’est pas sym´etrique. La derni`ere ligne signifie quebprend la valeur deadonc6. Pour dire queaprend la valeur debon aurait ´ecrit a=b.

(8)

2 ) Les types

L’ordinateur associe `a chaque variable un type. Il existe plusieurs types de variables :

— Le type entier (int), r´eserv´e `a une variable dont la valeur est un entier relatif.

Exemples : 5, 18, -7, ...

— Le type flottant (float) r´eserv´e `a une variable dont la valeur est un nombre r´eel.

Exemples : 3.125, pi, 8.0, e, ...

— Les chaines de caract`eres (str), type r´eserv´e `a une variable contenant du texte. Le texte est mis entre apostrophes’ou entre guillemets".

Exemples :’bonjour’,’voici une phrase’,"encore une autre"...

— Le type bool´een (bool) r´eserv´e `a une variable qui ne peut prendre que les valeursTrueouFalse.

— Le type n-uplet (tuple) est : une collection de plusieurs ´el´ements (qui peuvent ˆetre de types diff´erents) dans un certain ordre :(2,1),(2,"bonjour",6),(5.2,45,-8.9,-16)etc.

Si l’on note par exemplea=(2,"bonjour",6) : a[0]donne 2,a[1] donne la chaine de ca- ract`eres"bonjour"eta[2]donne 6. (le premier ´el´ement du tuple est donc num´erot´e0).

Ces types sont tr`es importants : ils permettent `a l’ordinateur de savoir comment g´erer les op´erations entre variables. L’instructiona+bavecaetbdes variables ne sera pas comprises dans la mˆeme fac¸on si les variables sont de type int (entier) ou de type str (string).

La commandetype(a)permet de donner le type de la variablea. Essayez par exemple les commandes suivantes :

>>>> a = 2 + 8

>>>> type(a)

>>>> b = ’Bonjour’

>>>> c = ’Pierre’

>>>> d = b + c

>>>> d

>>>> type(d)

>>>> var = 2/7

>>>> var

>>>> type(var)

>>>> x = ’3’

>>>> type(x)

On peut affecter plusieurs variables en mˆeme temps en utilisant la syntaxe suivante :

>>>> a, b, c = 6, 3, -8

Dans ce dernier cas les quantit´es de droites sont ´evalu´ees puis dans un second temps stock´ees dans les noms de variables de gauche. Cette remarque est importante par exemple dans le cas suivant `a la troisi`eme ligne :

>>>> a = 3

>>>> b= 4

>>>> c= 6

>>>> a,b,c = a*b,a+b,a

L’ordinateur calcule au pr´ealable les valeursa*b,a+betasans changer les valeurs stock´ees dans les variables puis prend les trois valeurs calcul´ees et les stockent dans les variables correspondantes (ici respectivementa,betc).

Exercice :

Dans les trois exemples suivants, essayez de pr´evoir ’`a la main’ le r´esultat final puis testez avec Python : Exemple 1 :

>>>> a = 100

>>>> c = a - b

>>>> a = 2

>>>> c = b + a

>>>> a, b, c

Exemple 2 :

>>>> a = 3

(9)

>>>> c = a

>>>> a = b

>>>> b = c

>>>> a, b, c Exemple 3 :

>>>> a, b = 1, 3

>>>> b, a = a-3*b, a+b

>>>> a, b = e, f

>>>> f = a-2* b

>>>> f

IV Premier script - utilisation de l’´editeur

1 ) Principe

En Python, on peut regrouper plusieurs commandes dans un script, c’est-`a-dire un fichier qui portera l’extension.py. Pour cr´eer un script, il suffit de faire Fichier/Nouveau, de taper la s´erie d’instructions dans la nouvelle page ouverte puis d’enregistrer le fichier (inutile de pr´eciser l’extension.py, Pyzo s’en charge automatiquement). Noter bien que l’ordinateur ne fera qu’ex´ecuter strictement et ”bˆetement” les lignes dans l’ordre dans lesquelles vous les ´ecrivez. L’ordinateur ne prend pas d’initiatives, ne sait pas pourquoi vous lui demandez d’ex´ecuter ces instructions.

2 ) Erreurs

Lorsque l’on code il arrive que l’on fasse des erreurs. L’ordinateur vous signale ces erreurs dans la consoleune fois que vous appuyez sur ”ex´ecuter”.

Ces erreurs sont de deux types :

— de syntaxe : c’est `a dire un probl`eme dans la forme de ce que vous avez ´ecrit. Comme si en franc¸ais vous faisiez une erreur de grammaire, orthographe, conjugaison...sauf qu’ici la langue utilis´ee est le Python.

Ce type d’erreur est d´etect´ee en premier par l’ordinateur qui avant mˆeme de r´eellement ex´ecuter votre programme s’assure que votre programme est ´ecrit dans un Python correct.

— d’algorithme, de code : ces erreurs sont dues `a une mauvaise conception de votre part et elles peuvent avoir de nombreuses causes.

Dans la plupart des cas, dans la console apparaˆıtra un message d’erreur vous indiquant :

— La ligne de l’erreur

— Le type d’erreur

— Parfois, l`a o `u se trouve l’erreur sur la ligne (dans le cas d’un probl`eme de syntaxe).

Exemple : ici l’erreur est `a la ligne 1, c’est une erreur de syntaxe et la flˆeche nous indique que l’erreur se trouve `a la fin de la ligne.

File "<tmp 2>", line 1 for i in range (5)

ˆ SyntaxError: invalid syntax

Attention : L’ordinateur n’identifiera que les erreurs qui l’empˆechent de faire les cal- culs : il ne v´erifie pas que le r´esultat trouv´e est bien celui que vous cherchez puisqu’il ne sait pas ce que vous cherchez `a faire. Il faut donc toujours tester ses programmes sur plusieurs cas afin de v´erifier leur validit´e.

3 ) Deux fonctions utiles : print et input

a ) D´ecouverte :

Exercice a :

Cr´eez par exemple le scripttestsuivant : nom=input("Comment t’appelles tu? ") print("bonjour ",nom)

(10)

Remarque : on peut aussi utiliser ’ pour d´elimiter un texte mais dans ce cas on ne pourra plus utiliser d’apostrophe dans le texte. Par exemple, la premi`ere ligne deviendrait :nom=input(’Comment t appelles tu? ’) Ex´ecuter le fichier dans le menuEx´ecuter.

A quoi servent les instructionsinputetprint?

Exercice b :

Essayez le scripttest2suivant. Qu’est-il sens´e faire ?

naissance = input(’Donner votre ann´ee de naissance: ’) age = 2019 - naissance

print(’Votre ˆage est:’, age) Dans la console s’affiche le message suivant : Traceback (most recent call last):

File "<tmp 1>", line 2, in <module> age=2019-naissance TypeError: unsupported operand type(s) for -: ’int’ and ’str’

Expliquer l’erreur.

Corrigez alors votre script en remplac¸ant la premi`ere ligne par :

naissance = int(input(’Donner votre ann´ee de naissance: ’)) Que fait la commandeint?

Remplacez la commandeintparfloat. Que se passe t’il ? b ) R´ecapitulatif :

print:

— Permet d’afficher `a l’´ecran.

— Pour afficher la valeur d’une variablevar:print(var)

— Pour afficher plusieurs ´el´ements `a la suite, les s´eparer par des virgules :print(’Votre ˆage est:’, age) input:

— On ´ecritinput(phrase).phraseest une chaˆıne de caract`eres en argument deinputqui sera affich´ee `a l’utilisateur mais elle n’est pas obligatoire. Cette phrase n’est comprise que par l’utilisa- teur (normalement) et n’est l`a que pour lui indiquer ce que vous attendez.

Attention : l’expression que l’utilisateur tape en r´eponse `a input est consid´er´ee comme une chaˆıne de caract`eres.

— Si on d´esire que l’utilisateur entre un nombre il faudra convertir le r´esultat donn´e parinputdu type chaˆıne de caract`ere (str) au type entier (int) (ou flottant (float))

V Les commentaires et explications des codes

Dans un programme ou un script il est d’usage d’inscrire des commentaires. Ces commentaires servent `a d´ecrire le programme afin non seulement d’en expliquer (bri`evement) le contenu et les diff´erentes ´etapes

`a un lecteur ext´erieur mais aussi de vous permettre de vous rappeler ce que vous avez cod´e (lors d’une relecture ult´erieure).

Les commentaires sont ´exig´es au concours, attention cependant `a ne pas en mettre `a tort et `a travers. Un commentaire doit ˆetre utile.

On ajoute des commentaires en les faisant pr´ec´eder de # . Tout ce qui suit le caract`ere #, sur la ligne, est ignor´e `a la compilation. Voici un exemple :

# Script qui calcule 2(x+2)

x = int(input("Rentrer la valeur de x : ")) # On demande `a l’utilisateur un nombre resultat = x+2

resultat = resultat*2

print("Quand x vaut ",x, "le r´esultat vaut ",resultat," !") # On affiche le r´esultat Pr´esentation d’un code en DS/concours :Votre code sera toujours pr´ec´ed´e d’un paragraphe en expli-

(11)

VI Exercices

Exercice 1 (sans ordinateur)

Un ´el`eve a cod´e deux scripts. Il les ex´ecute et dans la console s’inscrit les messages suivants :

Script 1 Script 2

Traceback (most recent call last):

File "<tmp 1>", line 3, in <module>

d=c+a

NameError: name ’c’ is not defined

Traceback (most recent call last):

File "<tmp 1>", line 6, in <module>

m=d+h

TypeError: unsupported operand type(s) for +: ’int’ and ’str’

Parmis ces deux scripts : lesquels fonctionnent ? lesquels g´en`erent une erreur ?

Dans le cas des erreurs : `a quelle ligne dans le code survient l’erreur ? A quoi est due l’erreur ? Expliquer.

Que faire `a la place de l’´el`eve pour la corriger ?

Exercice 2

Statistiquement la taille d’un enfant peut-ˆetre estim´ee `a partir de celles de ses parents.

Pour un garc¸on la formule permettant d’estimer sa taille `a l’ˆage adulte est : taille de la m`ere en cm+taille du p`ere en cm+ 13

2 Pour une fille :

taille de la m`ere en cm+taille du p`ere en cm−13 2

Cr´eer un script TailleEnfant.py qui demande `a l’utilisateur la taille de sa m`ere en cm, la taille de son p`ere en cm et affiche la taille probable de l’enfant. On donnera la r´eponse sous la forme :

”Pour un garc¸on, la taille probable est ..., pour une fille la taille probable est ...”

Exercice 3

1. Cr´eer un script aleatoire.py qui demande `a l’utilisateur un nombre entier positif non nulNpuis affiche au hasard un nombre entier de l’intervalle[1, N].

2. Cr´eer un script aleatoirepair.py qui demande `a l’utilisateur un nombre entier positif non nulNpuis affiche au hasard un nombre entier pair de l’intervalle[1,2N].

Exercice 4

Cr´eer un script lancer.py qui simule le lancer de deux d´es et affiche la somme des r´esultats obtenus.

(12)

A retenir :

1) Ne pas oublier d’introduire les modulesmathourandomquand cela est n´ecessaire.

2) L’affectation d’une variable, par exemplea=3.

Python prend la valeur qui est `a droite et l’enregistre dans la variable ´ecrite `a gauche.

3) L’´echange des valeurs de deux variables , par exemplea,b = b,a.

4) Les fonctionsinputetprintqui permettent respectivement `a l’utilisateur de saisir une valeur ou d’affi- cher un r´esultat :

var=input("question `a poser `a l’utilisateur ") print(var)

5) inputrenvoie une chaine de caract`eres. Si on veut transformer le r´esultat en un entier :int(input()) ou en un r´eelfloat(input())

6) L’instructionrandint(a,b)qui permet de cr´eer un nombre entier al´eatoire entreaetbinclus.

7) Penser `a la syntaxe des puissances.24s’´ecrit en python2**4.

8) L’instructionfloor(x)qui permet de r´ecup´erer la partie enti`ere d’un r´eelx. 9) L’instructionsqrt(x)qui calcule la racine carr´ee d’un r´eel positifx.

10) Pour savoir si un nombre entieraest divisible parn, penser `a utiliser le reste de la division euclidienne.

En effet dans ce casa%nvaut 0.

11) Dans tout programme, il faut inclure des commentairesutilespour expliquer votre d´emarche au lecteur.

On met un # devant le commentaire et tout ce qui se trouve ensuite, sur la ligne, est ignor´e par Python

(13)

Chapitre 3

Instructions conditionnelles

I Bool´eens et tests

1 ) Les bool´eens

On a vu dans le premier chapitre qu’il existait plusieurs types (entier (int), r´eel (float)) et parmis eux le type ”Bool´een” (bool).

Il n’existe que deux valeurs pour une donn´ee bool´eenne :TrueetFalse. Ceux sont des valeurs connues par l’ordinateur (notez les majuscules). Vous pouvez ainsi ´ecrire en Pythona = Truequi signifie quea est une variable contenant le bool´eenTrue.

2 ) Les tests

En pratique, on obtient des bool´eens quand on effectue des tests. Par exemple l’ordinateur peut tester si les valeurs associ´ees `a deux variables sont ´egales ou non :

a = 3 b = 5

print(a == b)

(on teste si la variableaet la varialbebont la mˆeme valeur : dans la console sera donc affich´eFalse dans notre cas puisque36= 5.)

Voici les tests que l’on peut effectuer :

Syntaxe Python x < y x > y x==y x! =y x <=y x >=y Signification x < y x > y x=y x6=y x≤y x≥y Attention : il faut bien distinguer le symbole d’affectation=du symbole de comparaison==.

3 ) Associer des conditions : and, or et not

On peut associer plusieurs conditions `a l’aide deor(ou logique),and(et logique) ,not(non logique).

Dans les exemples suivants, pr´evoir si Python va r´epondreTrueouFalsepuis tester pour v´erifier.

>>>> 4 > 0

>>>> 3 <= 8 and 3 > 0

>>>> 10 < 0 or 10 == 5

>>>> not(8**2==64 and 8>=2)

II La structure conditionnelle

1 ) Structure conditionnelle simple

En algorithmique, il est assez fr´equent d’avoir des instructions qui ne sont ´evalu´ees que sous certaines conditions (par exemple une racine carr´ee sera calcul´ee que si on a un nombre positif). On utilisera en Python la structure suivante (tout est important, ne pas oublier les ” :” apr`es les conditions) :

(14)

if conditions : instructions

Notion d’indentation : Notez que dans le code ci-dessus les ”instructions” sont d´ecal´ees vers la droite.

C’est ce que l’on appellel’indentation.

Exercice :

Tester par exemple le script suivant. A l’ex´ecution, on essaiera le cas o `u on donne un nombre positif et le cas o `u on donne un nombre n´egatif.

n=float(input(’Donnez un nombre ’)) if n>0 :

print(’Ce nombre est positif’)

print(’Je peux calculer une racine carr´ee’) print(’Cette phrase apparaˆıt toujours’)

comparer avec cette version :

n=float(input(’Donnez un nombre ’)) if n>0 :

print(’Ce nombre est positif’)

print(’Je peux calculer une racine carr´ee’) print(’Cette phrase apparaˆıt toujours’)

Quel est le r ˆole essentiel de l’indentation dans les instructions qui suivent leif?

— Quand Python testen>0, il r´ecup`ere soitTruesi la condition est v´erifi´ee, soitFalsesi elle ne l’est pas. Le r´esultat du testn>0est donc une variable bool´eenne.

— L’indentation permet de structurer le code. Tout ce qui est indent´e est ”dans” leif, donc ne sera ex´ecut´e que si la condition est v´erifi´ee. Si l’on veut ´ecrire apr`es l’instruction conditionnelle des lignes dont l’ex´ecution ne d´epend pas de la condition duif, il faut se r´ealigner `a gauche avec le if.

2 ) Structure conditionnelle `a deux cas (if ... else)

En algorithmique, il est assez fr´equent que l’on ait `a enchaˆıner des disjonctions de cas. Par exemple, l’existence de solutions r´eelles de l’´equationx2=ad´epend du signe de a.

Ainsi, on utilisera en Python la structure suivante : if conditions :

instructions1 else :

instructions2

qui se traduit en franc¸ais par : siconditionsest vraie alors faire lesinstructions1sinon faire les instructions2.

Exercice :

Expliquer ce que fait le script suivant (vous pourrez ensuite v´erifier votre r´eponse si besoin avec votre ordinateur).

from math import *

a=float(input(’Donner la valeur de a dans l equation x**2=a ’)) if a>=0 :

print("L’´equation a des solutions r´eelles") else :

print("L’´equation n a pas de solution r´eelle")

(15)

3 ) Structure conditionnelle : disjonctions de cas

Dans les cas o `u il y a plus de deux choix possibles, on peut utiliser une version plus ´elabor´ee : if conditions1 :

instructions1 elif conditions2 :

instructions2 ...

elif conditionsa : instructionsa else :

instructionsf

ce qui se traduit en franc¸ais par si conditions1 est vraie alors faire lesinstructions1 sinon si conditions2est vraie alors faire lesinstructions2.... sinon siconditionsaest vraie alors faire lesinstructionsasinon faire lesinstructionf

Exercice :

Expliquer ce que fait le script suivant (vous pourrez ensuite v´erifier votre r´eponse si besoin avec votre ordinateur).

from math import *

a=float(input(’Donner la valeur de a dans l equation x**2=a ’)) if a>0 :

print("L’´equation a deux solutions r´eelles") elif a==0 :

print("L’´equation a une solution r´eelle") else :

print("L’´equation n’a pas de solution r´eelle")

Attention :

— Apr`es un elseil n’y a jamais de conditions. Il correspond `a tous les cas ne v´erifiant pas les conditions pr´ec´edentes

— Notez bien qu’il n’est pas obligatoire d’avoir l’instructionelsedans une structure conditionnelle.

III Exercices

Exercice 1

Corriger et compl´eter les deux scripts suivants sans ordinateur. V´erifiez ensuite vos r´eponses sur votre ordinateur.

D´etecte si le nombre entr´e par l’utilisateur est pair Demande deux nombres r´eels `a l’utilisateur et v´erifie s’ils sont de mˆemes signes

n=input("Donnez un nombre entier") if n%2==0

print(n," est pair")

x=...

y=...

if x*y>=0 :

print(x," et ",y," sont de mˆeme signe") else :

...

Exercice 2

On consid`ere l’´equationax2+bx+c= 0. Ecrire un scriptequationdemandant `a l’utilisateur d’entrer les coefficientsa,betcet permettant de donner le nombre de solutions r´eelles et la valeur de ces solutions.

(16)

Exercice 3

Cr´eer un scriptentierqui demande `a l’utilisateur de donner un nombre r´eel et affiche la phraseCe nombre est un entier si le nombre est entier et la phraseCe nombre n’est pas un entier sinon.

conseil : penser `a utiliser l’instructionfloor

Exercice 4

Cr´eer un scriptdevinettequi g´en`ere un nombreaau hasard entre 0 et 10 puis demande `a l’utilisateur de donner un nombre entierbentre 0 et 10. Sibetasont ´egaux, on afficheVous avez gagn´e, sinon on afficheVous avez perdu.

Exercice 5

Cr´eer un script qui demande `a l’utilisateur de saisir un nombre entier naturel non nul et indique si ce nombre est divisible par 2, divisible par 3, divisible par 5, divisible par 10.

Bien s ˆur un nombre peut ˆetre divisible par plusieurs entiers...

Exercice 6

On lance une pi`ece truqu´ee qui tombe sur Pile avec une probabilit´e de 14et sur Face avec une probabilit´e de 34. Ecrire un script qui simule le lancer de la pi`ece et affiche Pile ou Face en respectant la probabilit´e demand´ee.

Exercice 7

1. Une urne contient6boules num´erot´es0,8boules num´erot´ees1et4boules num´erot´es2. Ecrire un script qui simule le tirage d’une boule dans l’urne.

2. Soienta,betctrois nombres positifs tels quea+b+c= 1.

Ecrire un script qui affiche les chiffres0,1,2avec une fr´equence d’apparition deapour0, debpour 1et decpour2.

A retenir :

1) Les deux bool´eensTrueetFalse.

2) Les 3 structures possibles d’instructions conditionnelles : if (conditions) :

instructions

if (conditions) : instructions else :

instructions

if (conditions 1) : instructions elif (conditions 2) :

instructions ...

elif (conditions n-1) : instructions

else :

instructions

3) Ne pas confondre les affectations (par exemplea=3) avec les tests de comparaisons (par exemple if (a==3))

4) L’indentation(d´ecalage lat´eral) structure le code et permet de savoir ce qui est dans une structure et ce qui ne l’est pas.

(17)

Chapitre 4

Fonctions

I Notion de fonctions

1 ) Principe et premier exemple

Supposons que nous voulions calculer les images de plusieurs nombres par la fonctionfd´efinie par : f(x) =x5−6x4+ 3x

On pourrait proc´eder de la mani`ere suivante :

>>>> x = 4

>>>> x**5 - 6 * x**4 + 3 * x #calcul de f(4)

>>>> x = -7

>>>> x**5 - 6 * x**4 + 3 * x #Calcul de f(-7)

On constate qu’il devient vite fastidieux de recopier `a chaque fois la formule de calcul. Mˆeme en utilisant l’historique, cela s’av`ere compliqu´e si on doit manipuler plusieurs formules diff´erentes. Pour y rem´edier, nous allons pouvoir d´efinir une fonction informatique, c’est `a dire un programme prenant des param`etres en entr´ee et fournissant des r´esultats en sortie `a l’aide d’instructions utilisant ces param`etres. En Python, la syntaxe permettant de d´efinir la fonction pr´ec´edente est la suivante :

def f(x) :

return x**5 - 6 * x**4 + 3 * x Explications :

— fest ici le nom de la fonction ;

— xest le param`etre d’entr´ee, c’est-`a-dire la variable dont il faudra pr´eciser la valeur pour pouvoir utiliser la formule ;

— Attention `a ne pas oublier les deux points:;

— Attention `a l’indentation devant lereturn. Tout ce qu’on veut mettre dans la fonction doit ˆetre indent´ee (voir l’exercice ci-dessous pour d’autres exemples).

— x**5 - 6 * x**4 + 3 * xest le r´esultat attendu.

L’instructionreturn:

— permet de renvoyer un r´esultat.

Attention :d`es qu’on ex´ecute unreturnla fonction s’arrˆete et renvoie le r´esultat apr`es lereturn;

tout ce qui aurait pu ˆetre ex´ecut´e ensuite ne le sera pas.

Pour utiliser une fonction enregistr´ee dans un fichier, il faut ex´ecuter le fichier dans lequel elle est ´ecrite (phase decompilation) puis demander le calcul des valeurs souhait´ees dans la console (phase d’appel), comme ici par exemple :

>>>> f(5) >>>> x=f(5) La valeur renvoy´ee par la fonction s’inscrit dans la

console mais est perdue

La valeur renvoy´ee par la fonction est sauvegard´ee dans la variablex

(18)

Exercice (sans ordinateur) :

Observez les fonctions suivantes. Citez leur nom, leurs param`etres.

Que renvoient-elles comme r´esultat(s) ? def rectangle(a, b) :

return a*b

def absolue(x) : if (x>=0) :

return x else :

return -x

from math import * def cercle(r) :

return 2*pi*r, pi*r**2

Comment appeler ces fonctions (`a vous de choisir vos exemples de valeurs d’entr´ee) ? On sauvegardera les valeurs dans des variables.

2 ) Lien avec les biblioth`eques/modules

Les biblioth`eques (math,random) que vous avez vu pr´ec´edemment contiennent des collections de fonc- tions.

Dansmathla fonctionsqrtest une fonction qui prend une entr´ee la valeur d’un r´eel et renvoie sa racine carr´ee. Pour calculer√

6et mettre le r´esultat dans une variablea=sqrt(6).

Cas particulier - une fonction sans variable d’entr´ee : Dansrandomla fonction du mˆeme nomrandom ne prend pas de variables en entr´ee et renvoie un r´eel entre 0 et 1 de fac¸on ´equi-probable. Pour l’appeler a=random().

Comme il n’y a pas de variable d’entr´ee on met des parenth`eses vides.

Vous pouvez vous aussi cr´eer des fonctions sans variable d’entr´ee : pour les appeler vous mettrez leur nom suivi de().

3 ) Appel d’une fonction dans une autre fonction

Important : une fonction peut ˆetre utilis´ee dans une autre fonction ou dans un script. Par exemple : from math import pi

def cercle(r) :

return 2*pi*r, pi*r**2 def volume_cylindre(r,h) :

a, b = cercle(r) # a = p´erim`etre de la base, b=aire de la base return b*h

V = volume_cylindre(5,8)

La derni`ere ligne dans le script appelle la fonctionvolume_cylindrepourr=5eth=5puis sauvegarde sa valeur dans la variableV. Elle ne fait pas partie des fonctions (voir l’indentation).

Cette ligne sera ex´ecut´ee quand on ex´ecutera le fichier dans lequel sont ´ecrites ces fonctions. On aurait aussi pu ´ecrire cette ligne dans la console apr`es avoir ex´ecut´e le fichier contenant ces fonctions (en retirant la derni`ere ligne).

II Variables locales et globales

1 ) Variables locales

Les variables d´efinies `a l’int´erieur d’une fonction sont appel´ees variables locales. Elles n’existent que le temps que la fonction s’ex´ecute. Une fois l’ex´ecution termin´ee, les variables locales sont effac´ees de la m´emoire.

2 ) Variables globales

Au contraire, les variables globales d´efinies `a l’ext´erieur des fonctions restent en m´emoire.

(19)

Exercice :

Consid´erons une fonction qui calcule le volume d’un gaz en fonction de sa pression, sa temp´erature et son nombre de moles en utilisant l’´equation des gaz parfaitsP V =nRT avecP la pres- sion,V le volume,nle nombre de moles,T la temperature en Kelvin etR la constante universelle des gaz parfaits.

R = 8.3144621 # On d´efinit la constante universelle des gaz parfaits def volume(P, n , T) :

vol = (n*R*T)/P # On calcule le volume dans les conditions donn´ees return vol

print(volume(1.013*10**5, 10, 273)) # Calcul du volume pour P =1,013*10ˆ5 Pa, n=10 mol et T=273K print(R)

print(vol)

L’ex´ecutez sur Python. Que remarque-t-on pour les variablesRetvol? Indiquez s’il s’agit de variables globales ou locales.

III Fonctions r´ecursives

Une fonction peut dans certains cas s’appeler elle-mˆeme, on dit alors que c’est une fonction r´ecursive.

Elle respecte alors les conditions suivantes :

— elle contient un cas de base ;

— elle doit pouvoir se ramener au cas de base en modifiant ses param`etres `a chaque appel ;

— elle doit s’appeler elle-mˆeme.

Examinons un exemple de fonction r´ecursive, celui de la fonction puissance qui calculexn. en utilisant le fait quexn=x×xn−1.

L’id´ee est en fait de voir le calcul comme celui du terme g´en´eral d’une suite d´efinie par r´ecurrence par : (∀n∈N, un+1=x×un

u0= 1

On utilise la formule de r´ecurrence qui peut se r´e´ecrire∀n∈N, un=x×un−1. Si on connaˆıt la valeur deun−1pour calculerunil suffit de la multiplier parx. Le programme qui en d´ecoule :

def puissance(x,n) : # On veut calculer xˆn, x r´eel, n entier naturel if (n==0) :

return 1 else :

return x*puissance(x,n-1) #xˆn = x * xˆ{n-1}

On a bien le cas de base, c’est `a dire quand l’exposant vaut 0, on sait que u0 = x0 = 1. Par ailleurs, cette fonction va forc´ement se ramener au cas de base si on choisitn∈Npuisqu’on diminue l’exposant

`a chaque appel (on finira donc par atteindre un exposant ´egal `a 0). Enfin, il est ´evident qu’elle s’appelle elle mˆeme.

Que fait en pratique l’ordinateur quand par exemple on ex´ecutepuissance(2,3)? Icix=3etn=2.

1. Le programme teste sin´egale 0 ce n’est pas le cas donc on passe dans leelseet l’ordinateur doit calculerx*puissance(x,n-1)pour le renvoyer. Donc on rappelle la fonction puissance mais cette fois-ci les arguments d’entr´ees sontx=3etn=1(n−1avecn= 2) :

2. Le programme teste sin´egale 0 ce n’est pas le cas donc on passe dans leelseet l’ordinateur doit calculerx*puissance(x,n-1)pour le renvoyer. Donc on rappelle la fonction puissance mais cette fois-ci les arguments d’entr´ees sontx=3etn=0(n−1avecn= 1) :

3. Le programme teste sin´egale 0 : c’est le cas. Donc le programme renvoie 1.

4. L’ordinateur remonte alors la chaˆıne de calculs : puissance(3,0)→1

puissance(3,1)→3×puissance(3,0)

puissance(3,2)→3×puissance(3,1)→3×3×puissance(3,0)→9 Le programme renvoie donc la valeur9. C’est-`a-dire32.

(20)

Exercice :

Que se passe-t-il si on utilise ici un exposant n´egatif ?

Remarques : Les fonctions r´ecursives sont souvent faciles `a programmer : en effet il suffit d’´ecrire ce que vous d´esirez calculer sous la forme d’une formule de r´ecurrence (calcul au rangnen fonction du rang n−1), en pr´ecisant le cas de base (le cas d’initialisation).

Elles ont l’inconv´enient en python d’ˆetre assez lourde `a executer pour l’ordinateur.

IV Exercices

Exercice 1 (sans ordinateur).

On consid`ere la fonction puissance donn´ee dans le III que l’on suppose compil´ee. Parmi les appels sui- vants dans la console, lesquels vont effectivement fonctionner, afficher le r´esultat ou sauvegarder le r´esultat dans une variable ?

>>>>a = 3

>>>>b = 7

>>>>puissance(a,b)

>>>>puissance(x,n) >>>>puissance >>>>x=puissance(4,8)

Exercice 2

Cr´eer une fonctionmaximumqui prend en entr´ee deux nombres r´eelsaetbet renvoie comme r´esultat le maximum de ces deux nombres.

Testermaximum(5,8.6)etmaximum(7,-3).

Remarque : Cette fonction existe d´ej`a sous python et s’appelle max: il ne faut donc pas l’utiliser dans votre programme.

Exercice 3

Cr´eer une fonctionminmaxqui prend en entr´ee trois nombres r´eelsaetbetcet renvoie comme r´esultats le minimum et le maximum de ces trois nombres.

(on pourra utiliser, si besoin, les fonctionmaxetminde python donnant le maximum et le minimum entre deux nombres).

Testerminmax(8,-2,4). Proposer d’autres tests.

Exercice 4

Cr´eer une fonctionparitequi prend en entr´ee un entier naturelnet renvoieTruesi ce nombre est pair ouFalsesi ce nombre est impair.

Proposer et effectuer des tests.

Exercice 5

Cr´eer une fonction r´ecursivefactoriellequi prend en entr´ee un entier naturelnet renvoie la valeur den!.

Proposer et effectuer des tests.

Exercice 6

Cr´eer une fonction r´ecursivesuitequi prend en entr´ee un entier naturelnet renvoie la valeur deuno `u (un)est la suite d´efinie par :

u0=12

∀n∈N, un+1= 3un+ 2 Proposer et effectuer des tests.

(21)

Exercice 7

Cr´eer une fonction r´ecursivefibonaccirecqui prend en entr´ee un entier n et calcule le n-i`eme terme de la suite de Fibonacci d´efinie par :

u0=u1= 1

∀n∈N, un+2=un+1+un

Proposer et effectuer des tests.

Essayez notammentfibonaccirec(30)etfibonaccirec(50). Cela vous paraˆıt-il long ? Pourquoi ?

A retenir :

1) La syntaxe pour d´efinir une fonction (attention `a l’indentation) : def Nom_de_la_fonction(liste des param`etres):

instructions

return liste des r´esultats

2) La structure pour d´efinir des fonctions de mani`ere r´ecursive, comme pour la fonction puissance : def puissance(x,n):

if (n==0):

return 1 else:

return x*puissance(x,n-1)

3) Une fonction r´ecursive est la traduction informatique d’une formule de r´ecurrence.

4) return: permet de renvoyer un r´esultat et arrˆete la fonction. Cette instruction ne s’utilise que dans une fonction.

(22)

Chapitre 5

Boucle While

I Premier exemple

Exercice :

Cr´eez le scriptexemple1suivant : N = 15

i = 0

while 2**i < N : print(i) i = i + 1 print(’fin’)

Ex´ecutez ce script. Que fait-il ? Essayez d’en d´eduire le fonctionnement de la bouclewhile.

II Principe de la boucle while

Une bouclewhilesert `a r´ep´eter une suite d’instructions tant qu’une condition est satisfaite. Une r´ep´etition de la suite d’instructions s’appelle une it´eration.

Une boucle est un outil puissant puisque la valeur des variables peut ´evoluer au fur et `a mesure des r´ep´etitions dans la boucle.

Pour l’exemple ci-dessus, le d´eroulement de la boucle est le suivant : 1. On teste la condition2**i < N.

2. Si la condition est v´erifi´ee (c’est-`a-dire que l’´evaluation de l’expression bool´eenne renvoieTrue), Python effectue les instructionsprint(i)eti=i+1puis recommence le test.

3. Si la condition n’est pas v´erifi´ee (c’est-`a-dire que l’´evaluation de l’expression bool´eenne renvoie False), on sort de la boucle et Python effectue l’instructionprint(’fin’).

Voici les actions qu’effectuent l’ordinateur :

1. Dans un premier temps il cr´ee les variablesietN, et les initialise `a0et15. 2. Il arrive `a la boucle ”tant que2i< Nfait...”.

— Au d´ebuti= 0.20 = 1est bien plus petit que 15 donc on affiche0(print(i)) `a l’´ecran eti devient ´egal `a1(i=i+1), puisqueivalait0.

— On revient au test aveci= 1. On a bien21<15donc on affiche1etiprend la valeur2

— On revient au test aveci= 2. On a bien22= 4<15donc on affiche2etiprend la valeur3

— On revient au test aveci= 3. On a bien23= 8<15donc on affiche3etiprend la valeur4

— On revient au test aveci= 4. On a bien24 = 16>15donc la condition est fausse. On saute les instructions : on sort de la bouclewhile

3. On affiche fin `a l’´ecran (print(’fin’)).

Remarques :

(23)

— La variableiest un compteur, sa valeur finale permet de savoir combien de fois on a r´ep´et´e la boucle : dans l’exemple on a fait4it´erations.

— En Python, pour incr´ementer un compteur on peut utiliser l’instruction i += 1 `a la place de i = i + 1.

— Quand on ´ecrit une boucle, il faut imp´erativement s’assurer qu’elle va r´eellement s’arrˆeter sinon l’ex´ecution peut ne pas se terminer.Il faut donc s’assurer que dans tous les cas, la condition du whiledevienne fausseau bout d’un certain nombre d’it´erations.

III Attention aux erreurs

Dans une fonction l’ex´ecutionreturnplac´e dans une bouclewhileprovoque la sortie instantan´ee de la fonction et donc la sortie instantan´ee de la bouclewhile.

Exemple : def fonc(N):

i=0

while 2**i < N : return i i = i + 1 print(’fin’)

Si on appelle fonc(3), la fonction renverra0. En fait, la fonction renverra0quelque soitN > 0. En effet lereturndans la boucle implique que d`es la premi`ere it´eration la fonction renvoie la valeur de i (qui est alors ´egale `a0) et s’arrˆete (puisqu’elle a ex´ecut´e unreturn).

Il ne faut pas confondre l’instruction conditionnelleifet la bouclewhilequi sont absolument diff´erentes.

La seconde r´ep`ete des instructions ce que ne fait pas la premi`ere.

D’autre part il n’y a pas d’instruction else associ´ee `a une boucle while.

IV Exercices

Exercice 1 (sans ordinateur)

On consid`ere le script suivant : A = 20

B = 0 i = 0

while (A > B) : i += 1 A = A - i B = B + i**2 print(i)

Ex´ecuter `a la main ce script. On pourra repr´esenter dans un tableau les valeurs dei, de(A>B), deAet deB`a chaque ´etape.

Exercice 2 (sans ordinateur)

Pour chacune des fonctions suivantes, l’´el`eve qui a lanc´e la fonction n’a au bout d’une journ´ee pas obtenu de r´esultat.

(24)

Donne le plus grand entierntel que n1 > xavecx un r´eel positif. Renvoie0si un telnn’existe pas.

Donne le nombre de tirages uniformes n´ecessaire d’un nombre al´eatoire sur [0,1] pour obtenir un nombre plus petit que0.9.

def fonc1(x) n=1

while (1/n < x) : n += 1

if x>=1:

return 0 else :

return n

from random import*

def fonc2() x=random() i=1

while (x > 0.9) : i= i+ 1 return i

1. Donner un exemple d’appel possible defonc1qui donnerait ce r´esultat.

2. Que taper dans la console pour appelerfonc2?

3. Expliquer pourquoi l’´el`eve n’obtient pas de r´esultats et corriger ces deux codes.

Exercice 3

On veut cr´eer le programme suivant : l’ordinateur choisit un nombre entier au hasard entre 1 et 100 puis demande `a l’utilisateur de rentrer des nombres entiers jusqu’`a deviner le nombre choisi par l’ordinateur.

1. Cr´eez un script effectuant cette d´emarche

2. Modifiez le script pour que le programme affiche, `a chaque proposition de l’utilisateur, si le nombre donn´e est trop grand ou trop petit par rapport `a celui cherch´e.

3. Modifier le script pour que le programme n’accepte que 8 propositions au maximum.

Exercice 4 : suite de Collatz

La suite de Collatz, ou suite de Syracuse, aurait ´et´e ´etudi´ee en premier lieu par Lothar Collatz, un math´ematicien allemand au d´ebut des ann´ees 30. Il s’agit de construire une suite de nombres `a partir d’un nombre donn´en:

— sinest pair, le nombre suivant estn 2;

— sinon, le nombre suivant est3n+ 1.

La particularit´e de cette suite est que, quel que soit le nombre de d´epart, il semble que l’on finisse tou- jours par tomber sur 1, sans toutefois que l’on comprenne math´ematiquement pourquoi. Actuellement, la conjecture a ´et´e v´erifi´ee pour tous les nombres inf´erieurs `a5,7×1017.

1. Calculer `a la main la suite de Collatz d´emarrant avec le nombre 5. Idem avec le nombre 13.

2. Dans un fichier que l’on nommera syracuse, cr´eer une fonction Python collatzqui prend en param`etre un nombrenet calcule le nombre suivant de la suite de Collatz.

3. En reprenant les exemples calcul´es `a la main `a la question 1, combien faut-il d’´etapes pour arriver

`a 1 si on d´emarre avec 5 ? Avec 13 ?

4. Cr´eer maintenant une fonctionetapes qui prend en entr´ee un nombren et calcule le nombre d’´etapes n´ecessaires pour que la suite de Collatz arrive `a 1 en d´emarrant avecn.

5. Tester la fonction avec 5 puis 13 puis 56572.

Exercice 5

Une urne contient 3 boules num´erot´ees 1 et 7 boules num´erot´ees 0. On tire successivement et avec remise une boule de cette urne jusqu’`a obtenir une boule num´erot´ee 1.

1. Cr´eer un script permettant de donner le nombre de tirages n´ecessaires pour obtenir la premi`ere boule num´erot´ees 1.

2. Tester ce script une dizaine de fois et noter les valeurs obtenues.

(25)

A retenir :

1) La syntaxe pour d´efinir une boucle while : while (conditions) :

instructions 2) La notion de compteur :

i= valeur_initiale #initialisation du compteur while (conditions):

instructions

i=i+1 #incr´ementation du compteur

3) Savoir ´ecrire ´etape par ´etape ce que fait l’ordinateur quand il ex´ecute une bouclewhile.

(26)

Chapitre 6

Boucle FOR

I Premiers exemples

1 ) Fonctionnement de la boucle for

Quand on sait `a l’avance le nombre de r´ep´etitions dont on aura besoin dans une boucle, on peut utiliser une boucleforqui dispose d’un compteur int´egr´e.

Exercice :

Cr´eez le scriptscr1suivant :

N = int(input(’Entrez un nombre entre 1 et 10 : ’)) U = 1

V = 1

for i in range(N):

U = U + 2 V = V * 2

print(’valeur de U : ’,U) print(’valeur de V : ’,V)

Ex´ecutez plusieurs fois ce script (en testant diff´erentes valeurs pourN).

Comment fonctionne la boucle for ?

Remarque : avec une boucle for, on n’a pas besoin d’un compteur, c’est la variableiqui joue le r ˆole de compteur.

2 ) L’instruction range

L’instructionfor i in range(N)signifie pouriallant de0 `aN−1(de1en1).

Ex´ecuter les scripts suivants les uns apr`es les autres pour comprendre le fonctionnement derange. for k in range(5):

print(k)

”Pour k allant de 0 `a 4”

for k in range(1,11):

print(k)

”Pour k allant de 1 `a 10”

for k in range(3,15):

print(k)

”Pour k allant de 3 `a 14”

R´ecapitulatif :

— Si on ne met qu’un nombre dansrange, cela signifie que le compteur commence `a0.

— Pour unrange(n)ou unrange(l,n), le compteur ne va pas jusqu’`anmais jusqu’`an−1.

3 ) Fonctionnement d’une boule for

Dans l’exemple du1), l’ordinateur effectue les op´erations suivantes : 1. Demande `a l’utilisateur un nombreN. Supposons queN= 3. 2. Cr´ee et initialise les variablesUetV`a1.

3. Effectue la bouclefor: ”Pour i allant de0 `aN−1de 1 en 1” (N−1 = 2)

(27)

— i= 0,Uprend la valeurU+ 2 = 1 + 2 = 3etV la valeur2×V = 2×1 = 2. On affiche la valeur deU(3) et deV(2).

— i= 1,Uprend la valeurU+ 2 = 3 + 2 = 5etV la valeur2×V = 2×2 = 4. On affiche la valeur deU(5) et deV(4).

— i= 2,Uprend la valeurU+ 2 = 5 + 2 = 7etV la valeur2×V = 2×4 = 8. On affiche la valeur deU(7) et deV(8).

4. On est arriv´e `ai= 2: la boucle est termin´ee. Il n’y a pas de lignes apr`es la bouclefordonc le script se termine.

4 ) Sommes et suites

Les bouclesforsont particuli`erement adapt´ees pour calculer des sommes ou d´eterminer le n-i`eme terme d’une suite d´efinie par r´ecurrence.

Conseil : pour l’exercice suivant, prenez une valeur dende votre choix et effectuez les op´erations comme l’ordinateur le ferait sur le mod`ele de ce qui est fait au3).

Exercice (sans ordinateur) :

La fonction suivante calcule une somme. Laquelle ? def somme(n):

S = 0

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

S = S+i return S

La fonction suivante calcule le n-i`eme terme d’une suite. Laquelle ? def suite(n):

u = 1

for k in range(n):

u = u*(1/4)+k return u

II Exercices

Exercice 1 (sans ordinateur)

On veut calculer

n

P

k=3

k2k. On propose3fonctions.

Parmi ces 3 fonctions y en a-t-il une qui calcule correctement la somme ? Si oui laquelle ? Sinon les corri- ger.

Fonction 1 Fonction 2 Fonction 3

def Somme1(n):

S = 0

for k in range(n):

S = S+ k*2**k return S

def Somme2(n):

S = 0

for i in range(3,n):

S = S+ n*2**i return S

def Somme3(n):

S = 24

for k in range(3,n+1):

S = S+ k*2**k return S

Exercice 2

Cr´eer des fonctions de param`etresnpermettant de calculer les sommes suivantes :

2n

X

k=1

k3,

n

X

k=4

(2k+ 1)

(28)

Exercice 3 (sans ordinateur)

On d´esire calculer len−i`eme terme de la suite d´efinie par r´ecurrence par :

F0= 0, F1= 1

∀n∈N, Fn+2=Fn+1+nFn

1. Compl´etez la fonction suivante afin que celle-ci renvoieFn. def SuiteF(n):

F0=...

F1....

for i in range(...,...):

temp=...

F1 = ...

F0 = ...

if n==0:

return ....

else :

return ....

2. Des ´el`eves proposent les fonctions suivantes. Lesquelles sont correctes ? lesquelles ne le sont pas et pourquoi ?

Fonction 1 Fonction 2 Fonction 3

def SuiteF1(n):

F0=0 F1=1

for k in range(n):

F1,F0 = F1+n*F0,F1 return F0

def SuiteF2(n):

F0=0 F1=1

for k in range(n):

temp = F1 F1 = F1+k*F0 F0=temp return F0

def SuiteF3(n):

F0=0 F1=1

for k in range(n):

temp = F1

F1 = F1+(k-1)*F0 F0=temp

return F0

Exercice 4

Soit(un)la suite d´efinie par

u0=12

∀n∈N, un+1= 3un+ 2

1. Rappeler comment on peut r´ealiser une fonction r´ecursive de param`etrenpermettant de calculer le n-ieme terme de la suite (cf chapitre sur les fonctions).

2. Cr´eer une fonction de param`etrenfaisant la mˆeme chose en utilisant cette fois-ci une boucle for.

Exercice 5

On consid`ere la suite(un)n∈Nd´efinie par

u0= 1

∀n∈N, un+1= 1 2

un+ 2

un

Cette suite est la suite de H´eron. Elle constitue une m´ethode puissante pour obtenir une valeur approch´ee de√

2car elle converge rapidement vers√ 2.

1. Cr´eer une fonctionHeronde param`etrenpermettant de calculer le n-i`eme terme de la suite de H´eron (`a l’aide d’une boucle for).

2. Cr´eer ensuite une fonctionconvergenceprenant en param`etre la pr´ecisionepset renvoyant le plus petit entierntel queun soit une valeur aproch´ee de√

2avec la pr´ecisionepssouhait´ee. (On prendra comme valeur de r´ef´erence de√

2la valeur de la biblioth`eque math.)

3. D´eterminer le plus petit terme de la suite de H´eron donnant une valeur approch´ee de√

2avec une

−7

(29)

Exercice 6

On veut estimer exp´erimentalement le nombre moyen obtenu lors d’une s´erie de lancers de d´e (suppos´e

´equilibr´e).

1. Quelle est la valeur th´eorique de la moyenne obtenue lorqu’on lance un d´e ´equilibr´e ?

2. Cr´eer une fonctionexperimentalqui prend en entr´ee le nombrende lancers `a effectuer et calcule le total de cesnlancers.

3. Modifier la fonction pour qu’elle renvoie la valeur moyenne des lancers.

4. Testerexperimental(10),experimental(100),experimental(1000),experimental(10000).

Que constate-t-on ?

Exercice 7

On lance un d´enfois de suite et on veut compter combien de fois on tombe sur 6.

1. Cr´eer une fonctionexperience6qui prend en entr´ee le nombrende lancers `a effectuer et d´etermine le nombre de 6 obtenus.

2. Modifier la fonction pr´ec´edente pour qu’elle renvoie la fr´equence d’apparition du 6.

A retenir :

1) La syntaxe pour d´efinir une boucle for :

for k in range(a,b) : # k prend ses valeurs de a `a b-1 instructions

2) Le calcul de somme : Pour calculer

j

P

k=i

f(k)on utilise le programme : S=0

for k in range(i, j+1):

S=S+f(k)

3) Le calcul du n-ieme terme d’une suite d´efinie par r´ecurrence : Par exemple pour calculer le n-ieme terme de la suite d´efinie par

u0= 1

∀n∈N, un+1= 3u2n−10 , on pro- gramme :

def suite(n):

u=1

for k in range(n):

u=3*u**2-10 return u

4) Savoir ´ecrire ´etape par ´etape ce que fait l’ordinateur quand il ex´ecute une bouclefor. Compl´ements sur range :D’autres fac¸ons possibles d’utiliserrange:

for k in range(3,11,2):

print(k)

”Pour k allant de 3 `a 10 de 2 en 2”

for k in range(10,0,-1):

print(k)

”Pour k allant de 10 `a 1 de -1 en -1”

for k in range(10,1,-1):

print(k)

”Pour k allant de 10 `a 2 de -1 en -1”

(30)

Chapitre 7

Listes

Quand on veut manipuler un grand nombre de donn´ees (par exemple pour g´erer les notes dans une classe), les variables num´eriques ne sont plus tr`es pratiques car il faut alors saisir une grande quantit´e de valeurs en leur donnant `a chaque fois un nom diff´erent. Cela devient vite fastidieux. Pour contourner ce probl`eme, nous allons utiliser des listes. Le type de ces donn´ees seralist.

I Manipulation d’une liste

1 ) Cr´eation en extension

Il existe plusieurs mani`eres de cr´eer une liste en Python. La plus simple consiste `a donner tous les

´el´ements de la liste (liste en extension) comme ci-dessous :

>>>> maliste=[12,10,4,18,9,11]

En Python, une liste n’est pas forc´ement homog`ene, c’est `a dire qu’elle peut contenir des objets de types diff´erents. Voici un exemple de liste permettant de donner la note de maths et le rang d’un ´el`eve de BIO1.

Cette liste contient des objets de typestret d’autres de typeint.

>>>> notes=[’BIO1’,’maths’, ’eleve1’, 18, 2 ] D’autre part, pour cr´eer une liste vide :>>> [].

2 ) Longueur d’une liste

On peut `a tout moment connaˆıtre la longueur d’une liste en utilisantlen.

>>>> len(maliste) 6

>>>> len(notes) 5

3 ) Extraction

a ) Extraction d’un ´el´ement

Quand on manipule des listes, on a souvent besoin d’en extraire un ´el´ement :

>>>> liste=[12,11,18,7,15,3]

>>>> liste[2]

18

Pour expliquer le r´esultat obtenu, il faut savoir qu’en Python, les listes sont index´ees `a partir de 0 et non

`a partir de 1.

Ainsi, 12 correspond `aliste[0], 11 `aliste[1], etc.

Attention`a ne pas mettre un indice sup´erieur ou ´egal `a la taille de la liste. On obtient alors une erreur

(31)

>>>> liste[8]

Traceback (most recent call last):

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

IndexError: list index out of range b ) Extraction d’une sous-liste

Pour extraire une partie de la liste :liste[n,m]extrait la liste des ´el´ements correspondant aux indicesnjusqu’`am−1

>>>> liste=[12,11,18,7,15,3]

>>>> liste[2:5] # La liste de l’indice 2 `a 4 [18,7,15]

>>>> liste[2:] # La liste de l’indice 2 `a la fin [18, 7, 15, 3]

>>>> liste[:2] # La liste du d´ebut `a l’indice 1 [12, 11]

>>>> liste[2:8] # La liste de l’indice 2 `a la fin (car 8 est plus grand que le dernier indice de la liste)

[18, 7, 15, 3]

L`a encore, le r´esultat peut surprendre. Pour bien le comprendre, il faut imaginer que les indices corres- pondent non pas aux emplacements mais aux endroits o `u on coupe la liste.

4 ) Modification d’une liste

Les listes sont des objets modifiables. En python on dit qu’elles sont mutables. On peut changer un ou plusieurs ´el´ements d’une liste, en rajouter ou en enlever.

a ) Modification d’un ou plusieurs ´el´ements

Pour modifier l’´el´ement `a l’indiceide la listelisteen le remplac¸ant par une valeurx, on ´ecritliste[i]=x

>>>> liste[1] = 100

>>>> liste

[12, 100, 18, 7, 15, 3]

On peut modifier d’un coup plusieurs ´el´ements de la liste.

— Changer par exemple les valeurs des indices 2 `a 4 :

>>>> liste[2:5]= [’a’,’b’,’c’]

>>>> liste

[12, 100, ’a’, ’b’, ’c’, 3]

— remplacer les valeurs des indices 2 `a 4 par une seule valeur (la liste diminue en taille)

>>>> liste[2:5]=[1]

>>>> liste [12, 100, 1, 3]

— Ajouter entre l’indice0et1un ´el´ement (la liste augmente en taille) :

>>>> liste[1:1]=[’bonjour’]

>>>> liste

[12, ’bonjour’, 100, 1, 3]

(32)

b ) Concat´enation + et r´ep´etition *

La concat´enation consiste `a souder deux listes. On utilise le symbole+. Par exemple :

>>>> liste1=[1,2,3]

>>>> liste2=[4,5]

>>>> liste=liste1 + liste2 #concat´enation de la liste1 et de la liste2 [1,2,3,4,5]

Pour souder la mˆeme liste plusieurs fois de suite, on utilise le symbole∗:

>>>> liste1=[1,2,3]

>>>> liste2=liste1*3 [1,2,3,1,2,3,1,2,3]

c ) Ajout d’un ´el´ement .append(x)

— On peut ajouter un ´el´ement `a une liste par concat´enation (avant ou apr`es)

>>>> liste=[2,8,4]

>>>> liste = liste + [10]

>>>> liste [2,8,4,10]

>>>> liste= [1] + liste

>>>> liste [1,2,8,4,10]

— On peut aussi utiliser la m´ethode.append(x)qui permet d’ajouter l’´el´ementxen fin de liste.

Cette technique est plus efficace d’un point de vue de la m´emoire de l’ordinateur donc `a pri- vil´egier.

>>>> liste=[1,2,5,8]

>>>> liste.append(9)

>>>> liste [1,2,5,8,9]

d ) Suppression du dernier ´el´ement .pop()

On peut supprimer le dernier ´el´ement de la liste avec l’instruction.pop(). Cette fonction supprimer le dernier ´el´ement de la liste et renvoie sa valeur :

>>> liste=[12,11,18,7,15,3]

>>> liste.pop() 3

>>> liste

[12, 11, 18, 7, 15]

5 ) Cr´eation d’une liste par compr´ehension

Il peut arriver que l’on d´esire cr´eer une liste `a partir d’autres listes ou d’un range.

Par exemple on pourrait avoir envie de cr´eer la liste des 10 premiers entiers au carr´e. Il est tr`es fastidieux de cr´eer la liste `a la main mais on cr´eer un script consistant en une boucle foret ajouter au fur et `a mesure les valeurs des carr´es (voir premi`ere colonne du tableau ci-dessous).

Une cr´eation par compr´ehension est une fac¸on d’´ecrire cet algorithme de fac¸on compacte (voir deuxi`eme colonne du tableau ci-dessous).

Script Cr´eation en compr´ehension

squares = [] #cr´eation d’une liste vide for x in range(10):

squares.append(x**2) #ajout d’un carr´e

squares = [x**2 for x in range(10)]

(33)

Les possibilit´es sont assez vastes. Par exemple, on s´electionne les couples(x, y)tel quex6=yetxdans [1,2,3]etydans[3,1,4]:

>>> [(x, y) for x in [1,2,3] for y in [3,1,4] if x != y]

[(1, 3), (1, 4), (2, 3), (2, 1), (2, 4), (3, 1), (3, 4)]

6 ) Copie d’une liste

Il faut ˆetre vigilant lorsque l’on veut copier une liste.

>>>> liste=[1,10,100,1000]

>>>> copie=liste

>>>> liste[1]=’a’

>>>> liste,copie

[1, ’a’, 100, 1000], [1, ’a’, 100, 1000]

Si on proc`ede comme ceci, on constate que toute modification de la liste d’origine se r´epercute sur sa copie.

Ce n’est pas ce que l’on souhaite faire en g´en´eral. Pour effectuer une copie vraiment ind´ependante d’une liste, on peut utiliser la commandedeepcopydu modulecopy.

>>>> from copy import *

>>>> liste=[1,10,100,1000]

>>>> copie=deepcopy(liste)

>>>> liste[1]=’a’

>>>> liste,copie

[1, ’a’, 100, 1000], [1, 10, 100, 1000]

II Exercices

Exercice 1

Que fait le programme suivant ? (on prendra un exemple pour L et element et on ex´ecutera le programme en se mettant `a la place de l’ordinateur)

def existence(L,element):

n=len(L)

for i in range(n):

if L[i]==element:

return True return False

Modifier le programme pr´ec´edent pour que la fonction renvoie le nombre d’occurrences deelement dans la listeL.

Exercice 2 (sans ordinateur)

On consid`ere dans cet exercice queLest n´ecessairement une liste compos´ee d’entiers.

Trouvez les erreurs dans les deux fonctions suivantes et corrigez les :

Parcourt la liste et v´erifie que tous sont pairs Renvoie une liste L1 compos´ee des termes de L sup´erieurs `a une valeurM

def VerifPair(L) : n=len(L)

for i in range(1,n):

if L[i]/2 ==k : return True else :

return False

def TermeSup(L,M) : n=len(L)

for i in range(n+1):

if L[n]> M:

L1.append(L[n]) return L1

Références

Documents relatifs

surveillant général propose à tous les élèves de voter pour choisir le condidat qui va les représenter.. Le tableau suivant résume

Epreuve Classe Examinateur Sujet n° Coef.. 1pt 9) En utilisant la fonction ci-dessus, écrire un algorithme qui demande 10 nombres à l’utilisateur en les stockant dans un

Indique en dessous De chaque coccinelle le nombre total des points sur les deux ailes.. DECOUVRIR LE MONDE Objectifs  Compléter un tableau à

Cr´ eer une fonction moyenne de deux arguments u et v qui renvoie une valeur approch´ ee ` a 10 −10 pr` es par d´ efaut de cette limite5. Tracer la courbe

Ces diagrammes (ou graphiques) permettent de visualiser plus facilement les résultats d’une étude statistique, mais n’apportent aucun renseignement de plus que le

[r]

Les deux op´ erations de base utilis´ ee utilis´ ees pour inverser une matrice sont l’´ echange de deux lignes et l’ajout une ligne ` a une autre.. Ecrivons

BCPST R´ esolution de syst` emes et inversions de matrice 2016-2017 Le but de ce TP est de finir le dernier TP en ´ ecrivant l’ensemble des algorithmes sur les matrices vus dans