Informatique Générale 1 TD/TP no 1 Objectif(s)

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