• Aucun résultat trouvé

TP1-Variables et types de données – Appels de fonctions prédéfinies – Booléens et instruction conditionnelle if

N/A
N/A
Protected

Academic year: 2022

Partager "TP1-Variables et types de données – Appels de fonctions prédéfinies – Booléens et instruction conditionnelle if"

Copied!
13
0
0

Texte intégral

(1)

TP1-Variables et types de données – Appels de fonctions prédéfinies – Booléens et instruction conditionnelle

if

1 - Instructions générales pour les TP d'informatique-algorithmique

1.1 - Démarrage de l'ordinateur et de l'environnement de développement Python

Pour ouvrir une session sur les ordinateurs de la salle informatique : entrez votre login et mot de passe d'utilisateur u-psud (ceux que vous utilisez habituellement pour vous connecter à l'ENT, à Dokeos et à votre mail u-psud). Nous utiliserons soit Pyzo, soit IDLE (selon le choix de votre enseignant(e) de TP).

a) Pour ouvrir l'environnement de développement Pyzo : sous Linux, le menu Logiciels ▶ Programmation ▶ Pyzo permet d'ouvrir une fenêtre dans laquelle on trouve à la fois un interpréteur Shell Python (en haut de la fenêtre) et un éditeur (en bas de la fenêtre). Par défaut, Pyzo se lance avec l'interpréteur IPython avec un prompt In [1]:. Pour utiliser le Shell classique avec un prompt >>>, cliquez le menu : Shell ▶ Configuration des Shells. Puis, décochez la case "Utilise IPython s'il est disponible". Enfin, à partir du menu Shell, redémarrez le Shell.

b) Ou bien, pour ouvrir l'environnement de développement IDLE : sous Linux, le menu Logiciels

▶ Programmation ▶ IDLE3 permet de lancer l' « interpréteur Python » ou « Shell Python ». Depuis ce « Shell », le menu File ▶ Open ou File ▶ New permet de lancer l' « éditeur Python ».

Pour naviguer dans le gestionnaire de fichiers : Sous Linux, cliquez Accessoires ▶ Gestionnaire de Fichiers (ou File Manager).

En fin de séance : éteignez la machine, puis éteignez l'écran.

1.2 - Enregistrement de votre travail

Pour les noms des fichiers et des répertoires, n'utilisez pas d'espace et évitez d'utiliser des accents.

Organisez vos fichiers : par exemple dans le répertoire Documents, un sous-répertoire Info qui contient des sous-répertoires TP1-prenom.nom, TP2-prenom.nom… dans lesquels vous placez les fichiers pour chaque TP (les vôtres et éventuellement ceux fournis pour le TP). Il est important de repréciser votre nom et prénom pour la recopie finale en fin de TP.

Pendant la séance de TP : sauvegarde dans votre répertoire personnel

Dès que vous aurez commencé à créer des fichiers et à écrire des programmes, vous devrez impérativement enregistrer ces fichiers dans le répertoire créé pour le TP. Faites des sauvegardes fréquentes (par exemple toutes les 5 ou 10 minutes). En effet, parfois, les ordinateurs se bloquent et tout le travail en cours est perdu.

A la fin de la séance de TP : recopie sur srva018

À la fin de chaque séance de TP, faites impérativement une sauvegarde de vos fichiers dans l'environnement de développement (Pyzo/IDLE3), puis quittez cet environnement afin d'être sûr que tout a été enregistré. Ce stockage vous permet d'avoir accès à vos travaux des TP précédents à chaque séance.

Vous devez, lorsque la séance est terminée, recopier votre répertoire TPx-prenom.nom dans le dossier depot-etudiants du volume tp-a018 de façon à ce que votre enseignant puisse le récupérer

(2)

sur son poste (d'où l'importance du prenom.nom dans le nom du répertoire pour vous distinguer de vos camarades).

Si vous voulez travailler sur ces fichiers chez vous, il est aussi conseillé de recopier le répertoire TPx- prenom.nom sur une clé USB. Vous pouvez aussi vous envoyer vos programmes par mail en vous connectant sur votre boîte mail à la fin de la séance (mais pas pendant toute la séance !), éventuellement en ayant créé une archive .zip du répertoire de TP via le menu contextuel clic droit de la souris).

1.3 - Blocages éventuels

Il peut arriver, lors des exécutions de programmes, que l'on rentre dans une boucle sans fin, ou encore qu'une application reste ouverte mais ne réponde plus à la souris.

Sous Pyzo, vous pouvez essayer le raccourcis clavier Cltr+Shift+K (ou Ctrl-K), qui permet de terminer (ou de redémarrer) la session Shell Python.

Première solution, Alt-F2 pour avoir le lancement rapide puis saisir xkill pour démarrer le programme correspondant. Ensuite, aller cliquer, avec le curseur de la souris en forme de tête de mort, sur la fenêtre du programme qui ne répond pas (appuyer sur Esc si on veut annuler le xkill).

Ou bien, si on ne voit même plus le programme, essayer d'ouvrir une console (terminalet de saisir la commande :killall -9 nom_du_programme

Ou encore, si on ne sait plus le nom du programme que l'on veut terminer, on peut lister les programmes en cours d'exécution pour l'utilisateur : ps -ux

1.4 - Organisation des TP

Pour chaque TP, certains exercices sont à rendre – sous forme électronique et non pas sous forme imprimée.

Python permet de donner des instructions à un ordinateur sous une forme qu'un humain peut comprendre avec un effort modéré : le langage Python. L'interpréteur Python se charge de traduire ces instructions sous une format spécifique (“byte-code”) et d'exécuter ces instructions.

Pour utiliser Python, nous devons écrire les instructions, et pour cela il nous faut un logiciel d'écriture de texte (ce que Python n'est pas). De nos jours les instructions écrites dans un langage informatique ne sont plus en général écrites dans un éditeur de texte banal comme le bloc-notes qu'on trouve sur les PC, mais dans un logiciel conçu exprès pour l'écriture de programmes qu'on appelle un « environnement de développement intégré » (IDE : Integrated Development Environment) qui a des fonctionnalités conçues pour aider le programmeur (par exemple : les mots spécifiques du langage Python apparaissent d'une certaine couleur).

Certains environnements de développement sont conçus pour un seul langage. Il y a plusieurs environnements de travail conçus pour Python, pour notre part nous utiliserons Pyzo (et/ou IDLE).

Lorsque vous aurez écrit un programme, vous devrez l'enregistrer sous un nom ; ce nom ne devra contenir ni espace ni caractère accentué.

Au cours de ces TP, certains exercices (signalés par le texte de TP ou par votre enseignant(e)) pourront être à terminer chez vous et à rendre soit par mail, soit à la séance de TP suivante.

Certains exercices sont signalés comme n'étant pas à rendre ; ils seront corrigés directement au tableau, sauf indication contraire de l'enseignant(e).

2 - Types numériques et type chaîne de caractères

2.1 - Les premières instructions Python - les opérateurs - les types de données Mettez en route le logiciel Pyzo ou IDLE3 . La fenêtre dite de « Shell » ou « interpréteur » Python apparaît.

Vous pouvez voir dans cette fenêtre le symbole >>>. C'est une invite de commande (en anglais

“prompt”). C'est à la droite de cette invite de commande qu'apparaîtra ce que vous écrirez, et c'est donc là qu'apparaîtront les instructions que vous soumettrez à l'interpréteur (qui lui les soumettra à Python). Si vous voyez plusieurs invites de commandes >>>, la seule qui compte est celle qui est le plus bas dans la fenêtre.

(3)

Vous allez maintenant « dialoguer » avec cet interpréteur. Dans le tableau de la prochaine page chaque ligne contient une instruction. Vous allez saisir (comprendre : taper) ces instructions les unes après les autres et les faire exécuter. Pour faire exécuter une instruction, vous appuierez sur la touche « Entrée » – mais pas tout de suite ! Essayez d'abord de deviner ce que l'interpréteur affichera suite à l'exécution de l'instruction.

Tout comme deux phrases en français, deux instructions en Python peuvent se ressembler énormément et avoir des sens très différents, donc méfiance. Par exemple :

• Mange le chocolat ! (Super!)

• Range le chocolat ! (Ah, dommage…)

Si l'interpréteur donne une réponse différente de celle à laquelle vous vous attendiez , essayez de comprendre pourquoi.

Pour éviter d'avoir à retaper toute une ligne :

Avec Pyzo, les flèches haut/bas permettent de rappeler les dernières lignes saisies. Avec IDLE, les raccourcis Alt-P/Alt-N permettent rappeler les dernières lignes saisies.

Une fois la ligne désirée affichée, vous pouvez la modifier avant de taper à nouveau “Entrée”.

Exercice 1 : Découverte de l'interpréteur Python Tableau 1 : Premières instructions Python

Saisissez (tapez) dans la fenêtre de l'interpréteur les instructions qui sont imprimées dans le tableau ci- dessous avec cette police de caractères1, puis appuyez sur la touche « Entrée » et observez attentivement le résultat (notez vos remarques éventuelles à côté du tableau).

Instructions à saisir : 20+1

20/3

L'opérateur / permet de faire une division décimale (à virgule).

Les opérateurs // et % donnent le quotient et le reste de la division entière : dividende diviseur

quotie nt reste

Quand on effectue la division entière ( « euclidienne ») d'un entier a par un entier b non nul, on obtient un quotient q et un reste r entiers tels que : a = b.q + r et 0 r < b

Par exemple, dans la division entière de 21 par 4, le quotient est 5 et le reste est 1 : 21 = 4x5 + 1

Il est tentant de penser que la division euclidienne n'est bonne qu'à la petite école, quand on ne connaît pas encore les nombres à virgules et les fractions. En fait elle est très utilisée dans le monde de la recherche comme dans le monde de l'entreprise, son importance est considérable à tel point qu'on continue activement à faire des recherches afin de trouver des méthodes pour l'effectuer plus rapidement.

Instructions à saisir : 20//3

20%3 5.45*10

1 De façon générale les mots écrits avec une police à chasse fixe comme Ce texte sont des mots qui doivent apparaître tels quels sur l'écran de l'ordinateur, soit en saisie par cous soit en affichage par un programme.

(4)

2**4

"bonjour" Avec des guillemets droits doubles.

'bonjour' Avec des guillemets droits simples (touche « apostrophe ») et non pas doubles.

"il fait " + "beau"

"il fait " + "beau" + " et chaud"

"bonjour"*5

Tableau 2 : Un grand moment : vos premiers messages d'erreur

On peut créer des suites de mots du français qu'un francophone ne comprendra pas. Par exemple « Le courir est beaucoup bon. » ne respecte pas la syntaxe du français. Ou encore « Démontre le chocolat ! », cette phrase impérative respecte la syntaxe du français, mais comme le chocolat ne fait pas partie du type d'objet qu'on peut démontrer (au sens habituel des termes « démontrer » et « chocolat ») la phrase contient une erreur de type et n'a pas de sens. Plus pratiquement, on ne va pas « séparer le jaune du blanc »… de la farine, certaines opérations ne s'appliquent qu'à certains ingrédients.

De façon similaire, il y a des instructions que Python ne peut pas exécuter parce qu'elles contiennent soit une erreur de syntaxe, soit une erreur de type, soit encore une autre erreur. Elles provoquent l'affichage d'un message d'erreur.

Il faut apprendre à lire les messages d'erreurs, ils vous apprendront comment fonctionne le langage et vous premettront de corriger vos programmes. Ils sont de la forme :

Traceback (most recent call last):

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

File "nom_fichier.py", line 15, in nom_fonction1 File "nom_fichier.py", line 28, in nom_fonction2 instruction ayant causé l'erreur

XXXError: explication de l'erreur

• La dernière ligne indique le type (classe) d'erreur XXXError, et fournit un court message (en anglais) expliquant l'origine de l'erreur, ça doit être la première chose que vous lisez. Elle est généralement précédée d'un rappel de la ligne de programme ayant causé l'erreur.

• La dernière ligne File: indique à quel endroit a été détecté l'erreur (et déclenché une condition d'exception — sera expliqué plus tard).

• Le nom_fichier est <console>, et le nom_fonction est <module> lorsqu'on est directement dans l'interpréteur Shell Python.

Tapez les instructions ci-dessous, observez les messages d'erreur obtenus et analysez-les.

Instruction à taper : Message d'erreur :

20/0 20@3

"bonjour"/3

"bonjour" + 5 (3+2))*5

(3+2*5

Remarque : ici, python attend que l'on entre une parenthèse fermante.

(5)

Tableau 3 : Les types de données

Nous humains ne traitons pas toutes les données de la même façon, même deux données qui ont des aspects similaires, par exemple les francophones savent que le mot « parier » est du type « verbe » mais que le mot « papier » est un nom commun, ce qui fait que nous ne disons jamais « je papie, tu papies, etc. »2. Python aussi associe un « type » à chaque donnée, il tient compte de ce type quand la donnée apparaît dans une instruction. Quand on dialogue avec l'interpréteur, il se peut par moments qu'on ne soit pas sûr du type que Python attribue à une donnée, un peu comme nous pouvons ne pas savoir si « sourire » est le nom commun sourire (un sourire) ou le verbe sourire. Pour demander à Python le type qu'il associe à une donnée, on utilise l'instruction type(x). Tapez ce qui suit :

Instruction à taper : Résultat obtenu :

type(3) type(1.5) type(3.0)

type("bonjour") type("3")

type(3+1.5)

2.2 - Le transtypage

On peut parfois convertir une donnée d'un certain type, en une donnée d'un autre type. Cela s'appelle le transtypage (ou cast en anglais). C'est extrêmement pratique.

Exercice 2 : Transtypage Donnée de

départ :

Type de la donnée de départ ?

Instruction à taper : Type du résultat obtenu et/ou commentaire :

3.0 int(3.0)

3.7 int(3.7)

3 float(3)

4 str(4)

"3" int("3")

"3.5" float("3.5")

"3.5" int("3.5")

"bonjour" int("bonjour"

)

3 - Les variables et l'affectation

Exercice 3 : L'opérateur d'affectation =

Dans l'interpréteur Shell Python, tapez les instructions du tableau ci-dessous dans l'ordre indiqué. Posez- vous à chaque fois les questions :

2 On pourrait en donner de nombreux autres exemples, donc certains beaucoup plus fins, mais cela nous mènerait trop loin.

(6)

• Quelle est la variable ?

• Quelle est la donnée (ou quel est le résultat de l'évaluation de la partie droite) ?

• De quel type est cette donnée (ou ce résultat d'évaluation) ? Instruction à taper :

age = 20 age = 30

prenom = "Perceval"

taille_m = 1.75

taille_cm = 100*taille_m age = age + 3

phrase1 ="bonjour "+ prenom phrase1 = phrase1 + " !"

phrase2 = prenom +" a " +str(age)+" ans."

Les mots age, prenom, taille_m, etc. qui apparaissent dans le tableau ne sont pas utilisés par le langage Python (comme type ou float). Nous pouvons les utiliser comme noms de variables, c'est à dire des étiquettes accrochées à des données comme un nombre ou une suite de caractères. On dit alors que la variable « contient » la donnée. Lorsqu'il rencontre une variable, et si nous avons bien fait les choses, Python retrouve la donnée à laquelle elle est associée, la donnée qui est « dans la variable ». Il peut, par exemple, utiliser cette donnée dans un calcul, ou bien la modifier.

Pour afficher le « contenu » d'une variable dans l'interpréteur Shell Python, il suffit de taper le nom de cette variable, puis d'appuyer sur la touche « Entrée ». Saisissez les instructions suivantes dans l'ordre indiqué. À chaque fois, posez-vous la question : quelle valeur la variable contient-elle ?

Instructions à taper : age

prenom

prenom = "Lancelot"

prenom age = 40 age

age = 22 age

age = age + 1 age

phrase1 phrase2 profession

profession="étudiant(e)"

profession

(7)

4 - Le mode éditeur

Jusqu'à présent, nous avons utilisé Python en écrivant des instructions directement après l'invite de commande de la fenêtre « Shell ». C'est très commode ne serait-ce que pour tester une instruction, mais pour écrire un programme qui puisse être réutilisé ultérieurement, il faut utiliser une fenêtre dite « éditeur » et créer un fichier sur disque. Pour ouvrir une nouvelle fenêtre éditeur vierge, il faut cliquer le menu IDLE File ▶ New File ou bien le menu Pyzo Fichier ▶ Nouveau (raccourci Ctrl-N dans les deux cas)

Exercice 4 : Ouvrir un programme Python et l'exécuter

Allez sur Dokeos dans le répertoire EtudiantsMP/s1/info-algo/TP/TP1/ (ou bien sur le volume partage réseau tp-a018), recopiez et enregistrez dans votre répertoire personnel TP1- prenom.nom tous les fichiers qui s'y trouvent.

Dans les fichiers fournis pour le TP que vous avez recopiés dans votre répertoire TP1-prenom.nom, ouvrez le fichier TP1exo4.py. Dans IDLE, cliquez le menu File ▶ Open , dans Pyzo, cliquez le menu Fichier ▶ Ouvrir, puis sélectionnez le fichier TP1exo4.py.

Rappel : Enregistrez régulièrement votre travail au fur et à mesure que vous le modifiez, (raccourci clavier Ctrl-S).

1) Dans la partie « en-tête du module », modifiez la date et remplacez le nom de l'auteur par votre nom.

2) Exécutez ce programme en cliquant le menu IDLE Run ▶ Run module ou le menu Pyzo Exécuter ▶ Démarrer le script (raccourci F5 pour les deux environnements).

3) Copiez-collez vos résultats d'exécution en fin de programme. Afin qu'ils ne perturbent pas les exécutions ultérieures du programme, faites les précéder et suivre par trois guillemets alignés à gauche :

"""

Résultats d'exécution de mon programme…

"""

C'est un usage détourné des chaînes de caractères multilignes de Python. On pourrait utiliser au début de chaque ligne le caractère # (prononcer « dièse »), qui indique à Python d'ignorer tout ce qu'il y a derrière jusqu'à la fin de la ligne, mais pour la copie des résultats ce n'est pas pratique.

Les commentaires permettent de laisser dans le texte du programme un message destiné à un humain. C'est extrêmement utile pour donner des précisions sur le code ; que ce soit pour vous ou pour d'autres (camarades, collègues, enseignants), les commentaires permettent d'être éclairés sur ce que vous aviez à l'esprit au moment de l'écriture, ce que vous vouliez faire.

Les commentaires ressemblent à ceci (seul sur une ligne, ou bien après une instruction) :

# Utilisation de l'algorithme de Dijkstra

code = valeur * 2**3 # décalage rep binaire nb entier de 3 bits 4) Répondez dans un commentaire en fin de script : pourquoi a-t-on écrit str(age) et pas simplement age dans la ligne ci-dessous ?

print("bonjour "+ prenom + " "+ nom + ", tu as "+ str(age) +

" ans.")

5) Dans la partie « programme principal », modifiez la valeur des variables : affectez votre nom, votre prénom et votre âge aux variables nom, prenom, age. Enregistrez le programme et exécutez-le à nouveau.

Que s'affiche-t-il ? (Copiez collez vos résultats d'exécution en fin de programme).

6) Lorsque votre programme sera terminé (avec les commentaires, résultats d'exécution etc), appelez l'enseignant(e) pour faire vérifier votre travail.

(8)

5 - Les fonctions d'entrée / sortie

Exercice 5 : Utilisation de la fonction input

Nous allons nous entraîner à utiliser la fonction input(). Cette fonction permet à l'utilisateur de donner des informations à l'ordinateur pendant l'exécution du programme. Comme ces informations « entrent » dans l'ordinateur, on dit que input() est une « fonction d'entrée ».

Dans le Shell (interpréteur), tapez les instructions suivantes dans l'ordre : Instructions à saisir :

numero=input(" Entrez un entier entre 1 et 5 : ")

3 Bien sûr vous pouvez choisir un autre nombre que3.

type(numero)

numero = numero + 1 Pourquoi obtient-on un message d'erreur ici ? De quelle erreur s'agit-il ? numero = int(numero) À quoi sert cette instruction ?

type(numero)

numero = numero + 1 Pourquoi le message d'erreur précédent n'apparaît-il plus ici ? Que contient maintenant la variable numero ?

Exercice 6 : Correction d'un programme, tableau de Suivi

Dans les fichiers fournis pour le TP que vous avez recopiés dans votre répertoire TP1-prenom.nom, ouvrez le fichier TP1exo6.py.

Ce programme contient (les numéros de ligne ont été ajoutés sur cette page pour que nous puissions nous y référer dans le tableau de suivi, mais ne font pas partie du programme et il ne faut pas les taper) : 1. var1 = input("Quelle est la première valeur ? ") 2. var2 = input("Quelle est la deuxième valeur ? ") 3. var_somme = var1 + var2

4. print("La somme des deux valeurs est", var_somme)

Exécutez-le. Quel est le résultat obtenu ? On souhaite que la variable var_somme contienne la somme des deux nombres entrés par l'utilisateur. Corrigez ce programme pour qu'il fasse ce qui est souhaité.

Testez votre programme avec les jeux d'essai suivants : Essai n°1 : l'utilisateur saisit 5 puis l'utilisateur saisit 1 Essai n°2 : l'utilisateur saisit 0 puis l'utilisateur saisit 8

Remplissez les tableaux de suivi ci-dessous pour suivre l'exécution du programme ligne par ligne : ESSAI n° 1 :

n° de ligne var1 var2 var_somme Affichage :

1 2 3 4

ESSAI n° 2 :

n° de ligne var1 var2 var_somme Affichage :

1 2

(9)

3 4

Exercice 7 : Faire saisir des données par l'utilisateur

Nous allons modifier le programme TP1exo4.py. Ouvrez à nouveau ce programme dans l'éditeur, puis :

1) Remplacez la ligne : nom = "Cleese (ou votre nom)"

par : nom = input("Quel est ton nom ? ")

Faites de même pour la variable prenom. Enregistrez et exécutez. Vérifiez que l'utilisateur peut entrer n'importe quels noms et prénoms et que ceux-ci s'affichent bien ensuite dans la phrase “ bonjour (prénom nom), tu as (âge) ans ”.

2) De même, grâce à la fonction input(), faire saisir la valeur de la variable age par l'utilisateur.

Exécutez ; vérifiez que l'utilisateur peut saisir n'importe quel âge et que la suite du programme fonctionne correctement, en fonction de l'âge saisi par l'utilisateur.

Commentez et indiquez les résultats obtenus dans un « commentaire » à la suite de votre programme.

Exercice 8 : Utilisation de la fonction print()

La fonction print() permet à l'utilisateur de faire afficher à l'écran des messages écrits de son choix.

On dit que ces messages sont des « sorties » et que print() est une « fonction de sortie » a) On peut faire un appel à cette fonctionprint de deux façons différentes :

1) On indique entre les parenthèses des données de types quelconques, en les séparant par des virgules.

var_heure = 14

print("il est", var_heure,"heures.")

Nous avons demandé l'affichage de la chaîne de caractères "il est", de l'entier var_heure, et de la chaîne de caractères "heures."

2) Nous pouvons aussi demander à la fonction print d'afficher une seule chaîne de caractères que nous pouvons construire par concaténation de plusieurs chaînes de caractères (en utilisant l'opérateur + et en faisant les transtypages nécessaires).

montexte = "il est " + str(var_heure) + " heures."

print(montexte)

b) Option de fin d'affichage : par défaut (c'est à dire si on n'indique rien de spécial), à la fin de son exécution la fonction print passe à la ligne suivante. Par conséquent, si on utilise à nouveau print pour afficher un message, ce message commencera sur cette nouvelle ligne. Cependant nous pouvons demander à Python de terminer l'exécution de print différemment grâce à l'option end.

Dans les fichiers fournis pour le TP que vous avez recopiés dans votre répertoire TP1- prenom.nom, ouvrez le fichier TP1_exemple_print.py. Lisez-le, exécutez-le, et observez les résultats à l'affichage des différentes façons d'utiliser print().

Pour les TPs, il est conseillé de préférer l'utilisation de print() en séparant les données à afficher par des virgules, les conversions en chaîne sont alors automatiques et on peut utiliser end='' s'il y a besoin de supprimer les espaces de séparation entre les valeurs.

6 - Le type booléen et l'instruction conditionnelle if

Exercice 9 : Booléens

Tapez les instructions suivantes dans l'interpréteur et complétez le tableau :

Instructions à saisir : Notez éventuellement le résultat obtenu + commentaire ou explication 3 == 3

(10)

8 == 3 8 != 3 3 == 3.0

(3+7) == (5*2) (3 == 3) and (2<2) (3 == 3) and (2<=2) (2 == 15) or (3>2) 1 < 4 < 15

resultat = (3==3) resultat

type(resultat) not(resultat) True and False True or False not(False)

7 - Travail personnel : à rendre

Tous vos programmes devront contenir : un en-tête correctement rempli (reprendre la forme du fichier modele_script.py) ; des commentaires pertinents ; un jeu d'essai ; les résultats de l'exécution entre triple guillemets droits doubles """ (en fin de programme).

Exercice 10 : (À rendre en TP.) Instruction conditionnelle if : Calcul IMC, seuils de l'OMS

Créez un nouveau fichier programme script Python dans votre répertoire TP1-prenom.nom (dans ces TP lorsque nous parlons de programmes il s'agit toujours de programmes en Python) que vous nommerez TP1exo10.py et rendrez en fin de TP. Remplissez l'en-tête du programme.

L'IMC ou Indice de Masse Corporelle est défini par l'OMS (Organisation Mondiale de la Santé), pour les adultes de 16 à 70 ans, comme étant le rapport du poids sur le carré de la taille, le poids étant exprimé en kilo- grammes, et la taille en mètres.

On définit ensuite des plages correspondant à une indication de classification :

IMC Interprétation

+ de 40 obésité morbide ou massive 35 à 40 obésité sévère

30 à 35 obésité modérée 25 à 30 surpoids

18.5 à 25 corpulence normale 16.5 à 18.5 maigreur

- de 16.5 famine

• Demander à l'utilisateur de saisir le poids en kilo-grammes et la taille en centimètres. Stockez ces deux nombres dans les variables poids et taille.

• Calculez la variable imc à partir de la formule donnée (attention aux unités) et affichez-le avec son unité.

(11)

• Suivant la valeur de cette variable, affichez la chaîne correspondant à l'interprétation qui est faite (choisissez dans quelle tranche vous mettez les valeurs seuils).

Par exemple pour une personne de 85 Kg mesurant 1,75 m, l'exécution produira (en gras la saisie de l'utilisateur) :

Votre poids en Kg:85 Votre taille en cm:175 imc: 27.755102040816325 surpoids

Plusieurs jeux d'essai permettront de vérifier que le programme fonctionne en testant divers cas de figure.

Indiquez en fin de programme, sous forme de commentaires, les jeux d'essai utilisés et les raisons de vos choix.

Votre programme devra être correctement « commenté », de manière pertinente c'est à dire ni trop, ni trop peu. N'oubliez pas l'en-tête en début de programme. À la fin du programme, copiez-collez les résultats obtenus dans une chaîne de caractères délimitée par des triple guillemets droits doubles.

Exercice 11 : (À rendre en TP.) D ivision euclidienne

Écrire un programme (à nommer TP1exo11.py) qui effectue les opérations suivantes :

• Demander à l'utilisateur de saisir deux entiers positifs (le programme devra les stocker dans des variables qui seront nommées dividende et diviseur).

• Calculer (et stocker dans des variables nommées quotient et reste), le quotient et le reste de la division euclidienne de dividende par diviseur.

Attention : si le nombre diviseur est nul, il n'est pas possible d'effectuer la division. Le programme devra prévoir ce cas de figure et afficher un message d'erreur lorsque le diviseur est nul. (remarque : il n'est pas demandé de tester que le dividende et le diviseur sont positifs).

- afficher à l'écran la division euclidienne de manière lisible pour l'utilisateur. On doit obtenir l'affichage suivant (en divisant 45 par 11 puis en divisant 13 par 5) :

Voici la division euclidienne de 45 par 11 : 45 = 11*4 + 1

Voici la division euclidienne de 13 par 5 : 13 = 5*2 + 3

Exercice 12 : (À rendre en TP.) R acines réelles d'une équation du second degré à coefficients réels

On veut réaliser un programme qui calculera et affichera les racines réelles d'un trinôme du second degré à coefficients réels, c'est à dire une expression de la forme ax2 + bx + c, où a, b et c sont trois réels avec a non nul.

Si le trinôme n'a pas de racine réelle, on souhaite que le programme affiche une phrase indiquant qu'il n'y a pas de racine réelle.

Écrivez un programme (que vous nommerez TP1exo12.py) pour :

• Demander à l'utilisateur de saisir les coefficients d'un trinôme du second degré sous forme de 3 nombres. L'utilisateur saisira des nombres entiers ou à virgule et ils seront stockés dans des variables nommées a, b, et c du type « nombre à virgule flottante » (également appelés nombres « flottants », que le langage Python appelle « float»). On considère que a n'est jamais nul.

• Calculer la valeur du discriminant de ce trinôme, qui sera nommé delta. Rappel delta = b²-4ac.

• Tester la valeur de ce discriminant, au moyen de l'instruction if. En fonction du signe du discriminant, afficher à l'écran une phrase donnant le nombre de racines réelles du trinôme, puis la valeur de ces racines réelles (ou de cette racine réelle s'il s'agit d'une racine double) ? Rappel pour deux racines :

−b±

delta

2a

Indication très utile : pour pouvoir utiliser la fonction racine carrée sqrt du module math, écrivez juste après l’en-tête du fichier, la ligne : from math import sqrt.

(12)

8 - Le module random : fonctions prédéfinies

Le module random contient des fonctions qui permettent de générer aléatoirement des nombres selon différentes lois de probabilité (uniforme discrète, uniforme continue, normale, etc). Nous en aurons besoin lors de prochains TP.

Le module random définit une fonction du même nom, random, cela peut être source de confusions. Il vaut mieux importer explicitement les fonctions du module :

from random import random, seed, randrange

Exercice 13 : (Cet exercice n'est pas à rendre.) Appeler les fonctions du module random Dans les fichiers fournis pour le TP que vous avez recopiés dans votre répertoire TP1-prenom.nom, ouvrez le fichier TP1_exemple_random.py. Lisez-le, exécutez-le, et observez les résultats fournis par les différentes fonctions du module random.

Quelle est la différence entre les fonctions randint() et randrange() ? Quel est l'effet de la fonction shuffle() ?

Quel est l'effet de seed() (appelé sans paramètre) ?

9 - Les chaînes de caractères

Exercice 14 : (Cet exercice est important !) Manipuler les chaînes de caractères

Saisissez les instructions du tableau de la ci-dessous (notez les résultats obtenus et/ou vos commentaires s'il y a lieu).

Instructions à taper : s1="bonjour"

len(s1) s1[:3]

S1[2] Vous pouvez essayer d'autres nombres que 2 et d'autres notations vues en cours.

s1[2]="z"

'o' in s1

print("vive\n l'informa\ntique")

"ara"=="zygomatique"

"ara"<"zut"

"ara">"zut"

ord("a") ord('Z') ord('é')

chaine = "bonjour {} {} tu as {} ans, il fait {:.1f}°C"

chaine.format("John","Cleese", 72, 22.348)

"le nombre pi vaut

{:.4f}".format(math.pi) Pourquoi obtient-on un message d'erreur ici ? Que faut-il importer pour le faire disparaître?

varchaine = "le TP vient de commencer."

varchaine.find("le") varchaine.find("TP") varchaine.find("e")

(13)

varchaine.find("e", 4) varchaine.find("finir") varchaine.split()

varchaine.split("e") varchaine.partition('TP')

Exercice 15 : (À rendre en TP.) Constuire une chaîne

Les ports série RS232 (ancêtres des ports USB3, vous pouvez en retrouver par exemple sur les plateformes Arduino) sont configurés avec différents paramètres permettant de régler leur fonctionnement.

• Vitesse de transmission (octets/seconde) [110, 300, 600, 1200,2400… 9600, 19200…]4

• Nombre de bits de donnée (7 ou 8 généralement).

• Parité (paire / impaire / aucune) — cela sert à vérifier qu'un octet a été transmis sans erreur.

• Nombre de bits de stop (1 ou 2 généralement) — cela sert à borner un octet transmis.

Écrivez un programme (que vous nommerez TP1exo15.py) qui à partir des variables suivantes (pour les premiers tests, vous affecterez directement des valeurs « en dur » à ces variables, puis vous utiliserez des input() avec les transtypages nécessaires pour obtenir différents jeux d'essais) :

vitesse : nombre entier exprimant une vitesse en octets/seconde.

nbbits : nombre entier 7 ou 8.

parite : chaîne valant "pair" ou "impair" ou "aucune".

nbstop : nombre entier valant 1 ou 2.

À partir de ces variables, créer une chaine de paramétrage nommée param qui contienne la vitesse, suivi d'un caractère oblique /, suivi du nombre de bits de données, suivi du caractère E (parité paire, even) ou O (parité impaire, odd) ou N (aucune parité, none), suivi du nombre de bits de stop.

Exemple : 1200/8E1.

Exercice 16 : (À rendre en TP.) Déconstruire une chaîne (Suite de l'exercice précédent)

Écrivez un programme (que vous nommerez TP1exo16.py), qui à partir d'une chaîne de paramétrage permet d'extraire les différents paramètres dans des variables de même nom qu'à l'exercice précédent et du bon type.

10 - Les séquences d'entiers

Exercice 17 : (À rendre en TP.) Générer des séquences d'entiers

Écrivez un programme (que vous nommerez TP1exo17.py) qui appelle print(list(range())) afin de générer les séquence suivantes :

[-10, -3, 4]

[-10, -13, -16, -19]

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

[2, 4, 6, 8, 10]

[5, 10, 15, 20, 25, 30, 35, 40, 45]

Indiquez en commentaire quel traitement il serait possible de faire pour obtenir une séquence flottante (codez- le si vous savez le faire) :

[0.0, 0.03, 0.06, 0.09, 0.12, 0.15, 0.18]

3 Universal Serial Bus

4 L'USB2 peut théoriquement transmettre 60 méga-octets par seconde… l'USB3 640 Mo/s.

Références

Documents relatifs

La projection horizontale est un cercle de rayon égal ayant son centre en j ; les deux tangentes menées à ce cercle par le point S forment le contour apparent horizontal du

[r]

[r]

Booléen : type de données ne comprenant que deux valeurs, «vrai» et. «faux», représentant les valeurs

Créer un programme demandant à l'utilisateur son salaire annuel, et renvoyant son impôt sur le revenu.. Vérier le programme sur

L’introduction présente par une entrée en matière la thématique du dossier puis les documents, avec un intérêt porté sur leur source et leur lieu d’origine qui peut être

La deuxième critique que l’on peut faire, après lecture d’un grand nombre de copies, concerne le manque de maîtrise du programme et, trop souvent, des points les plus élémentaires

[r]