• Aucun résultat trouvé

Interface de saisie d’un entier

Dans le document TP Python (Page 26-35)

2.2.2 Programme TP2_2.py

Affichez la somme des 10 premiers entiers de trois façons différentes : – en utilisant la formule classique :s=n(n+1)2 ;

– en utilisant une bouclewhile; – en utilisant une bouclefor.

2.2.3 Programme TP2_3.py

Un ordinateur n’est qu’un automate programméfini. Il est sûr que l’on ne peut espérer ef-fectuer des calculs avec une précision infinie. Combien peut-on espérer ?

BC v1.3 - 17 - 2007 - 2008

STRUCTURES de CONTRÔLE TP no2

On va définir l’epsilon-machinecomme la plus grande valeurεtelle que1: 1+ε=1

Pour cela, initialisez une variabledxà la valeur1.0, puis dans une bouclewhile, divisezdx par2.0tant que la condition(1.0 + dx > 1.0)est vraie.

Combien trouvez-vous ?

2.2.4 Programme TP2_4.py

Écrire un programme qui saisit un entiern positif non nul et qui affiche la somme des in-verses des carrés des entiers de 1 àn.

C’est une quantitéréelle: utilisez desflottants.

En déduire une valeur approchée deπ, sachant que : X

n=1

1 n22

6

Pour cela vous avez besoin de la fonction « racine carrée » dont le nom en Python estsqrt() et qui est accessible depuis le modulemath. Calculez également l’erreur relative (en pour-centage) entre votre valeur et celle deπfournie par le modulemath.

C

Q

F

R

+ spécificité et utilité de la structure de données « diction-naire » ;

+ les types complexe et booléen ;

+ l’affectation stocke des références à des objets ; + les structures de contrôle :

if : la sélection, while : la répétition,

for : le parcours de séquence.

F

1Cette définition estconventionnellecar si on définit l’epsilon machine autour d’une valeur différente de 1 on trouve des valeurs légèrement différentes

TP no2 STRUCTURES de CONTRÔLE

C

Q

F

P

H les fonctions et méthodes prédéfinies sur : – les listes ;

– les chaînes de caractères ; – les dictionnaires ;

H la définition des fonctions.

BC v1.3 - 19 - 2007 - 2008

Chapitre 3 Les fonctions

Le style est une façon simple de dire des choses compliquées.

Jean COCTEAU

Objectifs :

– les fonctions et méthodes prédéfinies ; – définition des fonctions.

Fichier(s) à produire :TP3_1.py TP3_2.py TP3_3.py

3.1 Manip

Comme nous l’avons vu en cours, la notion de fonction est très importante. Dans un premier temps nous allons explorer quelques fonctions prédéfinies avant d’apprendre à écrire nos propres fonctions.

3.1.1 Les méthodes et fonctions prédéfinies

Sur les listes

Méthodes non modificatrices. Ces deux méthodes renvoie un résultat sans modifier la liste : Méthode Description

L.count(x) Renvoie le nombre d’occurrences dexdansL

L.index(x) Renvoie l’indice de la première occurrence dexdansL Exercices.Testez et commentez :

>>> # imprimez L et sa longueur

>>> L = list("anticonstitutionnellement")

>>> L.count('e')

>>> L.index('t')

LES FONCTIONS TP no3

Méthodes modificatrices. Toutes ces méthodes, saufpop()renvoient la valeurNone:

Méthode Description

L.append(x) Ajoute l’élémentxà la fin deL

L.extend(l) Ajoute tous les éléments de la listelà la fin deL L.insert(i, x) Insère l’élémentxà l’indiceidansL

L.remove(x) Supprime la première occurrence dexdansL

L.pop([i]) Renvoie la valeur de l’élément à l’indiceiet l’ôte deL; siiest omis, supprime et renvoie le dernier élément.

L.reverse() Renverse sur place les éléments deL

L.sort() Triesur placeles éléments deL(par défaut, tri croissant).

Exercices.À partir d’une liste que vous définirez, testez quelques méthodes modificatrices de liste données dans le tableau ci-dessus.

Sur les chaînes de caractères

• S.capitalize(): transforme le premier caractère deSen majuscule et les suivants en minuscules ;

• S.center(largeur [, remplissage]): centre la chaîne dans unelargeur donnée, en rajoutant si besoin est des espaces (ou le caractèreremplissage) à gauche ;

• S.count(sous_chaîne [, début [, fin]]) : compte le nombre d’occurrences de sous_chaîne dansSentredébut etfin (0 etlen(S)par défaut) ;

• S.find(sous_chaîne [, début [, fin]]): retourne la position de la première oc-currence desous_chaîne dansSentredébut etfin(0 etlen(S)par défaut) ;

• S.join(séquence): concatène une séquence de chaînes en une chaîne unique en in-sérantSentre chacune ;

• S.lower(): convertit toutes les lettres deSen minuscules ;

• S.strip([caractères]): supprime les blancs (ou tout caractère danscaractères) au début et à la fin deS;

• S.replace(ancienne, nouvelle [, nombre]): retourne une copie deSoù chaque occurrence de la sous-chaîneancienneest remplacée parnouvelle. Sinombreest donné, seules lesnombre premières occurrences sont remplacées ;

• S.upper(): convertit toutes les lettres deSen majuscules ;

• S.zfill(largeur): ajoute si nécessaire des zéros à gauche deSpour obtenir lalargeur demandée.

Rappel

i

Les chaînes de caractères ne sont pas modifiables et donc les méthodes qui transforment les chaînes en créent de nouvelles.

Exercices.Définissez une chaîne de caractère et testez quelques méthodes données dans la liste ci-dessus.

TP no3 LES FONCTIONS

De plus, on dispose des méthodes booléennes suivantes, dites « de test de contenu » : Méthode Catégorie

isalnum() Alphanumérique uniquement (chiffres ou lettres) isalpha() Lettres uniquement

Méthodes non modificatrices. Les méthodesitems(),keys() etvalues()renvoient leur liste dans un ordre quelconque.

Méthode Description

copy.copy(D) Renvoie une copie de D (utilise le module copy, voir le cours)

D.has_key(k) RenvoieTruesikest une clé deD,Falsesinon

D.items() Renvoie une copie de la liste de tous les éléments (paires clé/valeur) deD

D.keys() Renvoie une copie de la liste de toutes les clés deD D.values() Renvoie une copie de la liste de toutes les valeurs deD D.iterkeys() Renvoie un itérateur sur toutes les clés deD

D.itervalues() Renvoie un itérateur sur toutes les valeurs deD

D.iteritems() Renvoie un itérateur sur tous les éléments (paires clé/va-leur) deD.

D.get(k[,x]) RenvoieD[k]sikest une clé deD; sinonx(ouNonesix n’est pas précisé)

Méthodes modificatrices :

Méthode Description

D.clear() Supprime tous les éléments deD

D.update(D1) Pour chaque clékdeD1, affecteD1[k]àD[k]

D.setdefault(k[,x]) RenvoieD[k]sikest une clé deD; sinon affectexàD[k]

et renvoiex

D.popitem() Supprime et renvoie un élément (paire clé/valeur) quel-conque deD

3.1.2 Définition des fonctions

Une fonction est définie par :

une ligne d’en-tête formée : – du mot-clédef

BC v1.3 - 23 - 2007 - 2008

LES FONCTIONS TP no3

– du nom de la fonction

– de la liste des arguments entre parenthèse – du caractère deux-points

Le corps de la fonction est ensuite indentée. Une fonction se termine grâce à une instruc-tionreturn, ou à défaut en fin de bloc, auquel cas elle renvoie la valeur particulièreNone. Exemple élémentaire :

>>> def doubler(x): # définition de la fonction return x*2

>>> doubler(7) # Pourquoi cet appel fonctionne-t-il avec un entier...

>>> doubler(7.2) # ... un flottant...

>>> doubler("bla") # ... ET un string ?

3.2 Programmation

On appelle suite de Syracuse toute suite d’entiers naturels vérifiant :

un+1= Par exemple, la suite de Syracuse partant deu0=11 est :

11, 34, 17, 52, 26, 13, 40, 20, 10, 5, 16, 8, 4, 2, 1, 4, 2, 1, 4, 2, 1

En se bornant1à 1, on appelle cette suite finie d’entiers le volde 11. On appelle étapeun nombre quelconque de cette suite finie. Par exemple 17 est une étape du vol de 11. On remarque que la suite atteint une étape maximale, appeléealtitude maximaledu vol. Par exemple 52 est l’altitude maximale du vol de 11.

3.2.1 Programme TP3_1.py

Écrire une fonctionetapeSuivante()qui reçoit un entier et qui produit l’entier suivant dans la suite de Syracuse. Par exempleetapeSuivante(5)doit produire 16 etetapeSuivante(16) doit faire 8, etc.

Écrire un programme principal qui demande un entier initial à l’utilisateur (utilisez une integerbox entre 2 et 100) puis qui, en utilisant la fonctionetapeSuivante(), calcule et affiche les termes de la suite de Syracuse jusqu’à ce qu’on obtienne 1.

1On a constaté depuis longtemps que pour tous les entiers de départ testés, la suite atteint après un nombre de termes plus ou moins grand, la période 4, 2, 1, 4, 2, 1. . . Hélas ! pour l’instant tous ceux qui ont essayé de le prouver ont échoué : c’est un « problème ouvert » (uneconjecture).

TP no3 LES FONCTIONS

3.2.2 Programme TP3_2.py

Écrire un programme principal qui demande un entier initial à l’utilisateur puis qui calcule et affiche l’altitude maximale de ce vol.

Pour cela, écrire une fonctionaltMaxi()qui reçoit un entieri ni tet qui produise l’altitude maximale de la suite de Syracuse commençant paru0=i ni t. Par exemple, en partant de u0=7, la suite de Syracuse est : 7, 22, 11, 34, 17, 52, 26, 13, 40, 20, 10, 5, 16, 8, 4, 2, 1 et par conséquentaltMaxi(7)vaut 52.

3.2.3 Programme TP3_3.py

Notions de récursivité

La notion de récursivité en programmation peut être définie en une phrase : une fonction récursive peut s’appeler elle-même.

Une définition est récursive lorsqu’une partie du tout fait appel au tout. Par exemple, trier un tableau deN éléments par ordre croissant c’est extraire le plus petit élément puis trier le tableau restant àN−1 éléments.

Bien que cette méthode soit souvent plus difficile à comprendre et à coder que la méthode classique diteitérative, elle est dans certains cas l’application la plus directe de sa définition mathématique.

Voici l’exemple classique de définition par récurrence de la fonction factorielle : n!=

½ 1 si n=0 n(n1)! si n>1 Remarque

+

Son code est très exactement calqué sur sa définition mathématique :

def factorielle(n):

if n == 0:

return 1

elsereturn n*factorielle(n-1)

Dans cette définition, la valeur den! n’est pas connue tant que l’on n’a pas atteint la condi-tion terminale (ici n ==0). Le programme empile les appels récursifs jusqu’à atteindre la condition terminale puisdépileles valeurs. Ce mécanisme est illustré par la figure 3.1.

Pour dérouler un programme récursif, il suffit de dérouler tous les appels dans un tableau comme ci-dessous, jusqu’à atteindre la condition terminale sans appel (par exemple ici quand nvaut 0). Ensuite on fait remonter, à partir de la ligne du bas (sans appel), les valeurs de re-tour trouvées (3ecolonne) jusqu’en haut du tableau.

BC v1.3 - 25 - 2007 - 2008

LES FONCTIONS TP no3

Fonction Appels Valeur de retour

factorielle(n) n*factorielle(n-1) n*factorielle(n-1) = 24 factorielle(4) 4*factorielle(3)

factorielle(0) sans appel 1

FIBONACCI: une suite doublement récursive

On définit la suite de FIBONACCIde la façon suivante :



– dérouler le programme, comme expliqué dans le paragraphe précédent, avec 5 comme entrée, remplir et rendre le tableau ci-dessous ;

Dans le document TP Python (Page 26-35)

Documents relatifs