correction. - Enseignements informatiques et mathématiques en

publicité
Version enseignant
Module LV348
TD 0 – page 1/6
TD 0 Prise en main de python
Revu dernièrement par Mathilde Carpentier
Version du 15 janvier 2014
Taper les commandes suivantes dans l’interpréteur
1. - manipulation des chaînes de caractères - opérateurs +, * et fonction print ;
>>> chaine = "Salut"
>>> chaine
’Salut’
>>> chaine + " Python"
’Salut Python’
>>> chaine * 3
’SalutSalutSalut’
>>> ’toto’ + 2 Traceback (most recent call last):
File "<stdin>", line 1, in ?
TypeError: cannot concatenate ’str’ and ’int’ objects
>>> print chaine,’Salut’,1,50
Salut Salut 1 50
2. - les listes - indices, concaténation (+), ajout d’éléments (append), fonction range et len ;
>>> ani1 = [’girafe’,’tigre’]
>>> ani2 = [’singe’,’souris’]
>>> ani1[-2]
’girafe’
>>> ani1[0]
’girafe’
>>> ani1 * 3
[’girafe’, ’tigre’, ’girafe’, ’tigre’, ’girafe’, ’tigre’]
>>> ani3 = ani1 + ani2
>>> ani3
[’girafe’, ’tigre’, ’singe’, ’souris’]
>>> ani3[1:4]
[’tigre’, ’singe’, ’souris’]
>>> ani3=ani3+[5]
>>> ani3
[’girafe’, ’tigre’, ’singe’, ’souris’, 5]
>>> ani3.append(True)
>>> ani3
[’girafe’, ’tigre’, ’singe’, ’souris’, 5, True]
>>> range(10)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> range(5,10)
[5, 6, 7, 8, 9]
>>> range(5,10,2)
[5, 7, 9]
>>> len(ani3)
6
3. - les dictionnaires - création et manipulation, fonctions keys et values
>>>
>>>
>>>
>>>
dico1={}
dico1[’ATG’]=’M’
dico1[’TTT’]=’G’
dico1[’TAT’]=’G’
c
2013-2014
(by UPMC/Licence de biologie/LV348)
15 janvier 2014
Module LV348
Version enseignant
TD 0 – page 2/6
>>> dico1
{’TAT’: ’G’, ’ATG’: ’M’, ’TTT’: ’G’}
>>> dico1[’TAT’]
’C’
>>> dico1.keys()
[’TAT’, ’ATG’, ’TTT’]
>>> dico1.values()
[’C’, ’M’, ’G’]
>>> dico2 = {’nom’:’singe’, ’poids’:70, ’taille’:1.75}
>>> dico2
{’nom’: ’singe’, ’poids’: 70, ’taille’: 1.75}
>>> ’TAT’ in dico1
True
>>> ’TAG’ in dico1
False
4. - les tuples >>> tuple=(1,2,3)
>>> tuple
(1, 2, 3)
>>> tuple[1]
2
>>> tuple[0:2]
(1, 2)
>>> tuple[1]=8
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: ’tuple’ object does not support item assignment
5. Calculez le pourcentage de GC avec le code percGC = ((4500 + 2575)/14800)*100 puis affichez le résultat. Que se passe-t-il ? Comment expliquez-vous ce résultat ? Corrigez l’instruction
précédente pour calculer correctement le pourcentage de GC.
Solution :
percGC vaut 0 car comme ce sont des entiers, python fait des divisions entières. Il faut
ajouter un ".0" quelque part avant les divisions (si on met 100.0 ça ne marche pas).
Ex : percGC = ((4500.0 + 2575)/14800) ∗ 100
6. Générez une chaîne de caractères représentant un oligonucléotide polyA(AAAA...) de 20 bases
de longueurs, sans taper littéralement toutes les bases.
Solution :
>>> ’A’*20
’AAAAAAAAAAAAAAAAAAAA’
7. Suivant le modèle du dessus, générez en une ligne de code un polyA de 20 bases suivi d’un
polyGC régulier (GCGCGC...) de 40 bases.
Solution :
c
2013-2014
(by UPMC/Licence de biologie/LV348)
15 janvier 2014
Module LV348
Version enseignant
TD 0 – page 3/6
>>> >>> ’A’*20+"GC"*40
’AAAAAAAAAAAAAAAAAAAAGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGC
8. - premier script - Taper print "Hello world" dans l’interpréteur
Taper print "Hello world" dans un fichier nomé TD0.py puis "python TD0.py" dans un terminal.
9. Tapez 1+1 dans l’interpreteur. Que se passe-t-il ? écrivez la même chose dans TD0.py. Exécutez
ce script. Que se passe-t-il ? Pourquoi ?
Solution :
Il n’affiche rien car il faut un print dans un script pour que la valeur soit affichée.
Ecrire les fonctions suivantes dans le fichier python TD0.py
1. - première fonction - Ecrire une fonction nomée cube qui retourne le cube de l’entier donné en
argument.
Solution :
def cube(x):
return x*x*x
2. - if - Ecrire une fonction max2 qui retourne le maximum de 2 nombres donnés en argument.
Solution :
def max2(x):
if x>y:
return x
else:
return y
3. - fonction appelant une fonction - Ecrire une fonction max3 qui retourne le maximum de 3
nombre donnés en argument en utilisant la fonction précédente. Pourquoi la fonction ne marchet-elle pas ? Comment la corriger ?
Solution :
Comme la fonction max2_affiche ne retourne rien, il n’est pas possible de l’utiliser pour
écrire cette fonction. Il faut utiliser la fonction max2.
def max3(x,y,z):
return max2( max2(x,y), max2(y,z) )
4. - for et liste - Ecrire un fonction maxList retournant le maximum de la liste de nombres donnée
en argument.
c
2013-2014
(by UPMC/Licence de biologie/LV348)
15 janvier 2014
Module LV348
Version enseignant
TD 0 – page 4/6
Solution :
def max2Liste(L):
max=L[0]
for i in L[1:]: #i prend comme valeur chaque élément de la liste sauf le 1er
if i>max:
max=i
return max
l2=[1,7,5,9]
max2Liste(l2)
l=[]
max2Liste(l)
Attention, il faut que la liste ne soit pas vide !
Remarque : la fonction max existe bien sûr par défaut en python...
5. - for et range - Ecrire un fonction fact retournant la factoriel d’un entier donné en argument
Solution :
def fact(n):
f=1
for i in range(1,n+1):
f=f*i
return f
fact(4)
fact(0)
fact(1)
6. - efficacité d’une fonction - Ecrire un fonction moyenne retournant la moyenne de la liste de
nombre donnée.
Solution :
Il est plus efficace de faire la somme et de compter le nombre en une seule boucle plutôt
que d’utiliser par exemple la fonction len() et la fonction sum().
def moyenne(l):
i=0
s=0.0
for n in l:
s=s+n
i=i+1
return s/i
7. - lecture de fichier - Ecrire une fonction moyNotes1 lisant les notes contenues dans le fichier
donné en argument et retournant la moyenne des notes lues. Vous testerez votre programme
avec le fichier Notes1.txt.
c
2013-2014
(by UPMC/Licence de biologie/LV348)
15 janvier 2014
Module LV348
Version enseignant
TD 0 – page 5/6
Solution :
Le 1er fichier de notes :
12.5
4
16
0
4.5
15
def moyNotes1(monfi):
f=open(monfi,’r’) #Ouvrir le fichier
ll=f.readlines() #Lire toutes les lignes du fichiers et
#les stocker dans la variable ll
f.close() #fermer le fichier
i=0 #Le nombre de notes
s=0.0 #La somme des notes
for x in ll: #x contiendra successivement chaque ligne lue
print i,type(x) #Permet d’ecrire i et le type de x
x=float(x) #x est par défaut une chaîne de caractères,
#on la convertit en float car c’est une note
s=s+x
i=i+1
return s/i
moyNotes1("Notes1.txt")
8. - valeurs de retour - Ecrire une fonction moyenneNotes lisant les notes contenues dans le fichier
donné en argument et retournant la liste des notes et la moyenne, la note minimale et la note
maximale. Quel type de valeur de retour vous semble le plus approprié ?
Solution :
Type le plus approprié à voir toujours avec ce que l’on va faire du résultat. Le plus pratique
ici a priori serait un dictionnaire mais un liste ou un tuple peuvent aussi être pratiques.
def moyNotes1(monfi):
f=open(monfi,’r’)
ll=f.readlines()
f.close()
i=0
s=0.0
lesNotes=[]
min=0 #Notes min
max=0 #Notes max
for x in ll:
x=float(x)
lesNotes.append(x)
if x>max:
max=x
if x<min:
min=x
s=s+x
i=i+1
return {’notes’:lesNotes, ’moy’:s/i,’max’:max,’min’:min}
c
2013-2014
(by UPMC/Licence de biologie/LV348)
15 janvier 2014
Module LV348
Version enseignant
TD 0 – page 6/6
moyNotes1("Notes1.txt")
9. Voici un second fichier de notes (Notes2.txt). Ecrivez maintenant une fonction lisant ce fichier
dont le nom est donné en argument, affichant la liste des étudiants admis (ie. ayant une moyenne
>= à 10) et retournant un dictionnaire avec pour clé le tuple contenant le nom et le prénom des
étduiants et pour valeurs la liste des notes de chaque étudiants.
Solution :
Le second fichier de notes :
Terrieur Alain 12 4 16
Potanpoche Jessica 0 12 4
Chemonfis Thierry 8.5 14 17
Bonnot Jean 18 12
Kiroul Pierre 10 4.5 15
def notes2(monfi):
f=open(monfi,’r’)
ll=f.readlines()
f.close()
d={}
for x in ll:
xall=x.split()
d[(xall[0],xall[1])]=[]
for n in xall[2:]:
d[(xall[0],xall[1])].append(float(n))
if moyenne(d[(xall[0],xall[1])])>=10:
print xall[0],xall[1],"Admis"
return d
notes2("Notes2.txt")
c
2013-2014
(by UPMC/Licence de biologie/LV348)
15 janvier 2014
Téléchargement