Universit´e Pierre et Marie Curie 2012-2013 Informatique G´ en´ erale 1 Travaux Pratiques TD/TP no 1 Objectif(s) ✭ Premiers programmes ✭ Notions d’expressions, d’instructions. ✭ Probl`emes du typage. ✭ Premi`eres fonctions pr´ed´efinies PARTIE CORRIG ´E E Exercice 1 – Evaluation interactives d’expressions Ouvrer un terminal et tapez la commande python. Evaluer chaque expression suivante en la recopiant et en tapant Entr´ ee pour valider une ligne et compl´eter sur votre feuille les lignes vides avec les r´eponses donn´ees par python. Que r´epond python ? Pourquoi ? Remarque : tapez quit() pour fermer la session interactive de python. >>>2 >>>10.0/3 >>>"t"<"T" >>>2.5 >>>10/3.0 >>>"toto" < "Truc" >>>2,5 >>>float(10)/3 >>>false >>>2+3 >>>2.3 >>>False >>>20%3 >>>True and False >>>2<3 >>>toto >>>not True >>>(2<3) >>>"toto" >>>(2<3) and (3<4) >>>2==3 >>>"toto"2 >>>(2<3) and False >>>2=3 >>>"toto"+2 >>> "toto" and (2<3) >>>2==(10/5) >>>"toto"+"2" >>> ("t"<"T") and (2<3) >>>10/3 >>>"toto"+str(2) >>>2 + 3 >>>10%3 Solution: En mode interactif, python est un ´evaluateur d’expressions. Attention au typage des expressions. d’expressions num´erique, de chaˆınes de caract`eres ou logiques. Op´erateurs sp´ecifiques. Notion ` la notion d’instructions et de variables Exercice 2 – Introduction a Ex´ecuter les instructions suivantes dans une session python interactive et compl´eter sur votre feuille les lignes vides avec les r´eponses donn´ees par python. InfoGen1 - 2012/2013 - TD/TP no 1 >>>x=3 >>>x=3 >>>print x >>>y=8 >>>y=8 >>>z=x+y >>>print x+y >>>z >>>z=x+y >>>print z >>>print z >>>print "resultat=z" >>>z=2 >>>print "resultat="+z >>>print z >>>print "resultat="+str(z) >>> res = x + y * z >>> print res >>>print "resultat=",z >>>print "resultat=%d" % z >>> res = x * y - z >>> print res >>> print "%d+%d=%d" % (x,y,z) >>> res = x - y ** z >>> print res >>> print "%d+%d=%d" % (y,x,z) >>>resultat=2.5 >>> res = x + y % z >>> print res >>>print "resultat=%d" % resultat >>> res = x / y * z >>> print res >>>print "resultat=%f" % resultat >>> res = float(x) / y * z >>> print res >>> res = float(x) * z / y >>> print res >>> res = float(x) / (y * z) >>> print res Solution: Bien mettre en ´evidence la notion de variable, comme une boite dans laquelle on range une valeur. Attention ` la division enti`ere lorsque le num´erateur est un entier. Introduction de l’affichage de variable avec print. Bien a ` afficher. expliquer la chaine de car. param´etr´ee, qui n´ecessite de connaˆıtre le type des variables a ` l’utilisation de fonctions pr´ Exercice 3 – Introduction a ed´ efinies Ex´ecuter les instructions suivantes dans une session python interactive compl´eter sur votre feuille les lignes vides avec les r´eponses donn´ees par python. >>>x=3.6 >>>type(x) >>>bool("abcd") >>>type(x) >>>int(3.3) >>>bool("GM3 rules!") >>>int(x) >>>float(4) >>>bool("") >>>type(x) >>>bool(-2.3) >>>x = int(x) >>>bool(0) c 2011/2012 Polytech’Paris page 2 sur 8 InfoGen1 - 2012/2013 - TD/TP no 1 >>>y=-10.2 >>>x=123.4567890123 >>>abs(y) >>>math.trunc(x) >>>print y >>>math.floor(x) >>>y=abs(y) >>>import math >>>print y >>>math.trunc(x) >>>y=123.3456 >>>math.floor(x) >>>round(y) >>>math.ceil(x) >>>round(y,2) >>>help("math.trunc") >>>help("math.floor") >>>help("math.ceil") >>>help("round") >>>print x Solution: Utilisations de fonctions pr´ed´efinies, certaines sans pr´efixe, d’autres avec le pr´efixe math. On verra plus tard (GM4) la notion de module. Introductions aux fonctions de conversion de type. Pour fermer le module d’aide, appuyer sur la lettre ’q’ ` la saisie interactive Exercice 4 – Introduction a Ex´ecuter les instructions suivantes dans une session python interactive compl´eter sur votre feuille les lignes vides avec les r´eponses donn´ees par python. >>>print "bonjour" >>>print("bonjour") >>>raw_input "bonjour" >>>raw_input("bonjour") >>>raw_input() >>>help("raw_input") >>>raw_input("entrez votre age.\n") >>>x=raw_input("entrez votre age.\n") >>>print x >>>type(x) >>>print "votre age est %s" % x >>>print "votre age est %d" % x >>>x=int(x) >>>print "votre age est %d" % x Solution: raw input affiche un message tout comme print (` a ceci pr`es que les parenth`eses sont obligatoires) mais le prompteur reste en attente : l’utilisateur doit tapez quelque chose dans le terminal. La valeur lue est r´ecup´er´ee sous la forme d’une chaˆıne de caract`eres. La valeur lue n’est pas conserv´ee. Il faut donc la stocker dans une variable pour cela. ` la ligne. Il faut encore convertir l’information r´ecup´er´ee Utilit´e des caract`eres d’´echappement pour forcer le retour a si on veut un type de donn´ees diff´erents. c 2011/2012 Polytech’Paris page 3 sur 8 InfoGen1 - 2012/2013 - TD/TP no 1 Exercice 5 – Premier programme avec Python La saisie interactive d’expressions ou d’instructions dans un terminal a l’inconv´enient de ne pas garder de trace de votre travail. Nous allons d´esormais ´ecrire des programmes complets sous forme de fichiers texte (extension .py), et les ex´ecuter ensuite. 1. Cr´eer dans vos dossiers personnels un r´epertoire infogen1. Dans ce r´epertoire, cr´eer un sous-r´epertoire TP1. Ouvrir l’´editeur gedit, recopiez-y le code ci-dessous et enregistrez futur programme sous le nom premierpg.py dans le sous-r´epertoire TP1. Ex´ecutez le programme dans un terminal en vous plac¸ant dans le sous-r´epertoire en question et ex´ecutez la commande python premierpg.py print("bienvenue dans votre premier programme python") nom=raw_input("Comment vous appelez-vous ?\n") print "bonjour %s !" % nom age=raw_input("quel age avez-vous ?\n") age=int(age) age=age+1 print "l’annee prochaine, vous aurez %d ans" % age 2. Modifier votre programme pour ajouter l’en-tˆete de fichier et les commentaires suivants : ########################################### # TP1 - Exercice 1 # # # # Monprenom MONNOM # # Leprenomdemonbinome LENOMDEMONBINOME # # # ########################################### # -*- coding=latin-1 -*# Premier programme de bienvenue print("bienvenue dans votre premier programme python") nom=raw_input("Comment vous appelez-vous ?\n") print "bonjour %s !" % nom age=raw_input("quel age avez-vous ?\n") age=int(age) #conversion en entier age=age+1 #calcul de l’age print "l’annee prochaine, vous aurez %d ans" % age • Quelle est l’utilit´e des commentaires pour vous? pour votre binˆ ome? pour le prof ? Solution: Le caract`ere % identifie les portions de texte qui ne seront pas ´evalu´ees par python Les commentaires ser` am´eliorer la compr´ehension du programme. Il faut obligatoirement commencer tout programme vent a ` rendre plus claires les par l’en-tˆete et par un commentaire g´en´eral. Ensuite les commentaires servent a parties difficiles du code. • A quoi sert la ligne comment´ee #-*- coding=latin-1 -*? Essayer de mettre des caract`eres accentu´es dans le code et de l’enlever pour constater la diff´erence. Solution: Pr´ecise l’encodage du fichier texte, en particulier permet d’utiliser des accents. Mais il est pr´ef´erable d’´eviter les accents. Exercice 6 – Guillemets ´ crire un programme guillemets.py qui saisit le nom puis le pr´enom de l’utilisteur et qui affiche le texte 1. E suivant ton nom est machin, en remplac¸ant machin par le nom saisi. c 2011/2012 Polytech’Paris page 4 sur 8 InfoGen1 - 2012/2013 - TD/TP no 1 2. Modifier le programme pour qu’il affiche ensuite le texte ton nom complet est "machin bidule", en respectant la place des guillemets et en remplac¸ant machin et bidule par les nom et pr´enom respectivement. Solution: Pour afficher des guillemets " dans une chaˆıne de caract`eres, il faut faire print " \” ". Exercice 7 – Les cookies Recette de cuisine : ”Pour 12 cookies environ, battre 115g de beurre mou avec 120g de sucre en poudre jusqu’` a ce que le m´elange devienne clair. Ajouter 1 œuf et 1 cuill`ere a ` caf´e d’extrait de vanille. Ajouter 175g de farine, et m´elanger le tout avec 200g de p´epites de chocol!at noir. Sur les plaques garnies de papier sulfuris´e, d´eposer des petites boules de la pr´eparation bien espac´ees, et faire cuire 10min a ` 180˚C. Laisser refroidir avant de d´eguster.” ´ crire un programme cookies.py qui demande a ` l’utilisateur le nombre de cookies et qui affiche le texte de la E recette actualis´e en fonction du nombre de cookies. La fonction int() permet d’arrondir vers 0 pour les nombres d’œufs et de cuill`ere de vanille. Solution: # Saisie du nombre de cookies nbCookies = int(raw_input("Veuillez entrer le nombre de cookies :")) # calcul des quantit´ es beurre = 115 * nbCookies / 12 farine = 175 * nbCookies / 12 sucre = 120 * nbCookies / 12 oeuf = int(0.5 + 1 * nbCookies / 12.0 ) vanille = int(0.5 + 1 * nbCookies / 12.0 ) chocolat = 200 * nbCookies / 12 # affichage de la recette print ("Pour " + str(nbCookies)+ " cookies environ, battre "+str(beurre)+ "g de beurre mou avec " + str(sucre)+ "g de sucre en poudre jusqu’` a ce que le m´ elange devienne clair. Ajouter "+ str(oeuf )+ " oeuf(s) et "+str(vanille)+" cuill` ere ` a caf´ e d’extrait de vanille. Ajouter "+ str( farine) + "g de farine, et m´ elanger le tout avec "+str(chocolat)+ "g de p´ epites de chocolat noir."+ " Sur les plaques garnies de papier sulfuris´ e, d´ eposer des petites boules de la "+ "pr´ eparation bien espac´ ees, et faire cuire 10min ` a 180 ◦ C. Laisser refroidir avant de d´ eguster.") ` RENDRE PARTIE A Exercice 1 – Jour de la semaine ` partir du num´ero de la Ecrire un programme TP1 ex1.py qui calcule et affiche le num´ero d’un jour de l’ann´ee a semaine et du num´ero du jour dans la semaine et qu pr´ecise si ce num´ero est pair. Le programme aura les affichages suivants: Numero de semaine? 2 Numero du jour de la semaine entre 1 et 7 ? 3 --> Jour numero 10 --> Ce nombre est-t-il pair ? True c 2011/2012 Polytech’Paris page 5 sur 8 InfoGen1 - 2012/2013 - TD/TP no 1 Solution: semaine=int(raw_input("numero de semaine?")) jour=int(raw_input("numero du jour de la semaine entre 1 et 7.")) nbjours=(semaine-1)*7+jour estpair = (nbjours % 2 == 0) print("--> Jour numero %d" % nbjours) prin("--> Ce nombre est-il pair ? %r" % estpair) Exercice 2 – Op´ erateurs logiques Ecrire un programme TP1 ex2.py qui demande successivement deux valeurs bool´eennes A et B et qui retourne la valeur de l’expression logique suivante not(A or B) puis celle de l’expression not(A) and not(B). Indice: bool(int("0")) retourne la valeur bool´eenne False, et bool(int("1")) retourne la valeur bool´eenne True L’affichage produit est le suivant: Entrez la valeur de 0 Entrez la valeur de 1 "not (A or B)" vaut "not(A) and not(B)" A : B : False vaut False Qu’en d´eduisez-vous ? La r´eponse sera donn´ee en commentaire dans le fichier. Solution: Les deux expressions ont les mˆemes valeurs pour tous les couples (A,B) possibles : elles sont ´equivalentes (lois de De Morgan). Exercice 3 – Date de Paques Voici un algorithme permettant de calculer le jour du mois d’avril repr´esentant le jour de Pˆ aques1 . Algorithme 1 : Calcul du jour de Pˆ aques. Donn´ ees : M l’ann´ee consid´er´ee ` compter du 31 mars pour avoir le jour de Pˆ Sorties : P le nombre de jour a aques 1 n = M − 1900; 2 a = (n mod 19) × 7 + 1 ; 3 b = a/19 Remarque : division enti` ere ; 4 c = (11 × a − b + 4) mod 29 ; 5 d = n/4 Remarque : division enti` ere ; 6 e = (n − c + d + 31) mod 7 ; 7 P = 25 − c − e ; 8 Afficher P ´ crire un programme TP1 ex3.py demandant l’ann´ee consid´er´ee et calculant (puis affichant) le nombre de 1. E ` compter du 31 mars repr´esentant le jour de Pˆ jour a aques. Par exemple, pour l’ann´ee 2013, vous afficherez : En 2013, le jour de Paques est le 21eme jour apres le 31 Mars. 2. Cet algorithme est-il correct ? 1 http://fr.wikipedia.org/wiki/Calcul c 2011/2012 Polytech’Paris de la date de Pˆ aques page 6 sur 8 InfoGen1 - 2012/2013 - TD/TP no 1 Solution: # Saisie de l’annee annee = int(raw_input("Entrez l’annee : ")) # Calcul de la date n=annee -1900 a = (n%19)*7 +1 b = a/19 c = (11*a-b+4) % 29 d = n/4 e = (n-c+d+31) % 7 Paques = 25 - c - e # Affichage du resultat print ("En "+str(annee)+", le jour de Paques est le "+str(Paques)+ "eme jour apres le 31 Mars.") Exercice 4 – What’s the date today ? 1. D´ecrire l’algorithme permettant de d´eterminer le nombre de jours J, d’heures H, de minutes M et de secondes S inclus dans un nombre total de secondes ST. On rappelle que : • une minute = 60 secondes • une heure = 60 minutes • une journ´ee = 24 heures Ainsi, dans un total de 123 secondes, il y a 0 jour, 0 heure, 2 minutes et 3 secondes. Pour un total de 3610 secondes, il y a 0 jour, une heure, 0 minute et dix secondes. ´ crire un programme TP1 ex4.py qui reprend l’algorithme pr´ec´edent. Il demandera le nombre de secondes a ` 2. E ` l’´ecran. l’utilisateur et affichera le r´esultat a 3. Tester votre programme. 4. Que se passe-t-il si on entre un nombre n´egatif ? Solution: # Saisie du nombre de secondes nbsecondes = int(raw_input("Entrez le nombre de secondes : ")) # Calcul secondes = nbsecondes%60 minutes = nbsecondes/60 heures = minutes/60 minutes = minutes%60 jours = heures/24 heures = heures%24 # Affichage du r´ esultat print(str(nbsecondes)+" secondes correspond ` a " + str(jours) + " jour(s), "+ str(heures) + " heure(s), "+str(minutes)+ " minute(s) et "+str(secondes) + " seconde(s)") Exercice 5 – Soumission c 2011/2012 Polytech’Paris page 7 sur 8 InfoGen1 - 2012/2013 - TD/TP no 1 • Cr´eer une archive en compressant votre r´epertoire TP1 au format ZIP. L’archive devra ˆetre nomm´ee TP1 nom1 nom2.zip, o` u nom1 et nom2 sont les noms des binˆ omes. ` votre charg´e de TD/TP. Le sujet du mail sera de la forme: • Soumettez votre archive avant la fin de la s´eance a [GM3-infogen1] TP1 nom1 nom2 c 2011/2012 Polytech’Paris page 8 sur 8
© Copyright 2025 ExpyDoc