PT
Python - s´eance 3 - corrig´e
2015-16
Exercice 7
Cet exercice devra ˆetre fait avec le langage Python. `
A chaque question, les instructions ou les fonctions ´ecrites
devront ˆetre test´ees.
Soit nun entier v´erifiant n26. On souhaite ´ecrire un programme qui code un mot en d´ecalant chaque lettre
de l’alphabet de nlettres.
Par exemple, pour n= 3, le d´ecalage sera le suivant :
avant le d´ecalage a b c ... ... x y z
apr`es le d´ecalage d e f ... ... a b c
Le mot oralensam devient ainsi rudohqvdp.
1. D´efinir une chaˆıne de caract`eres contenant toutes les lettres dans l’ordre alphab´etique (caract`eres en minus-
cule).
2. ´
Ecrire une fonction decalage, d’argument un entier n, renvoyant une chaˆıne de caract`eres contenant toutes
les lettres dans l’ordre alphab´etique, d´ecal´ees de n, comme indiqu´e ci-dessus.
3. ´
Ecrire une fonction indices, d’arguments un caract`ere xet une chaˆıne de caract`eres phrase, renvoyant une
liste contenant les indices de xdans phrase si xest une lettre de phrase et une liste vide sinon.
4. ´
Ecire une fonction codage d’arguments un entier net une chaˆıne de caract`eres phrase, renvoyant phrase
cod´e avec un d´ecalage de nlettres.
5. Comment peut-on d´ecoder un mot cod´e ?
1. et 2. La manipulation des chaˆınes de caract`eres peut ˆetre une difficult´e ici. Il est plus simple de travailler avec des
listes de carat`eres car on peut les modifier facilement mais il faut ensuite renvoyer une chaˆıne de caract`eres.
Il faut donc savoir passer de l’une `a l’autre.
""" questi on 1 """
alphabet =abcdefghijklmnopqrstuvwxyz
""" questi on 2 """
print (’ p remier e ssai )
# Premier essai : on t ra n sf orm e notre chaine en liste
# car les chaines de c aracte re s ne son t pas mo di fiabl es .
def decal ( n):
’ d ec al e le s lettres de n p la ce s dans l ’ al ph abet ’ ’
dec =list(alphabet)#transformation en liste
i= 0# indice de la lettre a d e c a ler
while i+n<=25:#on decale de n en restant avant z
dec [i] = alphabet[i+n]
i=i+1
while i< =25: # on traite les d erniers qui decales , d e passent z
dec [i] = alphabet[i+n-26]
i=i+1
return "".join(dec )# permet de transf o rmer la liste dec en une chaine de c a r actere .
#test
print (decal (3))
print (’ d euxieme e ss ai )
# d euxieme essai largem e nt plus compact : on deplace la fin de l alp h a bet au debut et on decale .
# on ne t r av ai ll e qu ’ ave c de s ch ain es de ca ra c te r es
def decalage(n):
Magali Hillairet 1Lyc´ee Franklin, Orl´eans
PT
Python - s´eance 3 - corrig´e
2015-16
’ d ec al e le s lettres de n p la ce s dans l ’ al ph abet ’ ’
dec1 =alphabet [n:26]
dec2 =alphabet [: n]
return dec1+dec2
# t es ts : t est er pour 0 , 25 , 26 , et mem e po ur des valeurs n egat iv es
print (’ p ou r 3\ n ’ ,decalage(3))
print (’ p ou r 0\ n ’ ,decalage(0))
3. Je propose deux solutions : l’une d’elle utilise .count et .index mais elle est plutˆot plus compliqu´ee !
""" questi on 3 """
# on peut coder une no u velle f o n ction : tres simple avec en u m erate
def indices(x,phrase):
L= []
for i,val in en u mer a te (phrase):
if val == x:
L.append(i)
return L
# ou u tilis er . i nd ex
def indic ( x,phrase):
L= []
n=len(phrase)
i= 0
nb =phrase.count (x)# n ombre d ’ occ ur enc es de x da ns phrase
if nb != 0: # si x appar ai t dans phrase
while i<= nand len(L) < nb :
k=phrase.index (x,i,n)# prendre le plus petit i ndice ou x se trouve apres i
i=i+k+1 # passer a l ’ i nd ic e s ui vant
L.append(k)# ajouter k a la li ste des positi ons prises par x
return L
#test
l=’ oral en sa m ’
print (’ a ve c i nd ices )
print (indices(a ’ ,l))
4. et 5. Questions 4 et 5
""" ’ que st io n 4 "" "
# on veut pouvoir tran s form e r une liste de cara c teres en chaine de c a ractere
# version s ans . join
def chaine(N):
C=N[0]
for iin range (1 , len (N)):
C=C+N[i]
return C
# Plu s elegant sans ind ex at ion
def chaine(N):
C=# on definit une c haine vid e
for val in N:
C=C+val# on c on ca tene c haqu e e le ment de N
return C
# Direct si on con nait . joi n
Magali Hillairet 2Lyc´ee Franklin, Orl´eans
PT
Python - s´eance 3 - corrig´e
2015-16
def chain ( N):
return .join(N)
#test
L=[ ’ a ’,b ’ ,’c’]
cL =chaine(L)
print (c L )
# fonction codage
def codage(n,phrase):
nouv =list(phrase)
dec =decalage(n)
for iin range (26):
x=alphabet[i]
y=dec[i]
L=indices(x,phrase)
for jin L:
nouv[j]=y
return chaine(nouv)
#test
print ( le mot abcyz d evient ’ ,codage(3 , ’ abcy z ’ ))
print ( le mot or a lensam devient ’ ,codage(3 , ’ oral en sam ’ ))
""" questi on 5 """
# en u til is ant ce qui precede a vec -n
motcode=codage(3 , ’ oralen se m ’ )
print (motcode ,’ r edevien t ’ ,codage( -3 , motcode))
bilan
âManipulation de chaˆıne de caract`ere : savoir transformer une chaˆıne en liste, savoir modifier le type (passage
de string `a entier par int). Connaˆıtre aussi les m´ethodes .split et .join .
âR´ecup´eration d’une partie d’une liste list[deb:fin:pas] en particulier.
âUtilisation de enumerate pour parcourir une liste en ayant l’indice et la valeur.
âUtilisation de .count, .index sur des listes.
âR´efl´echir `a un algorithme efficace avant de se lancer dans la programmation.
Magali Hillairet 3Lyc´ee Franklin, Orl´eans
PT
Python - s´eance 3 - corrig´e
2015-16
Exercice 5
Cet exercice devra ˆetre fait avec le langage Python (et ses biblioth`eques numpy, scipy, matplotlib). `
A chaque
question, les instructions ou les fonctions ´ecrites devront ˆetre test´ees.
On consid`ere la fonction gefinie sur [0,2] par
g(x) = xpour 0 x < 1
1 pour 1 x < 2
1. D´efinir la fonction g. Tracer sa courbe repr´esentative sur [0,2[, c’est-`a-dire la ligne bris´ee reliant les points
(x, g(x)) pour xvariant de 0 `a 1.99 avec un pas de 0.01.
2. D´efinir une fonction fdonn´ee de mani`ere r´ecursive sur [0,+[ par
f(x) = g(x) pour 0 x < 2
xf(x2) pour x2
3. Tracer la courbe repr´esentative de fsur [0,6].
4. ´
Ecrire les instructions permettant de calculer, `a 102pr`es, la plus petite valeur α > 0 telle que f(α)>4.
Corrig´e
1. Pour le trac´e on a besoin de d´efinir un vecteur Xcontenant les abscisses des points `a placer. La question
oriente vers l’utilisation de arange.
On veut ensuite la liste des ordonn´ees, pour cela on applique la fonction gau vecteur X. Dans le corrig´e, on
cr´ee une fonction appliquer pour le faire mais on peut aussi utiliser la fonction vectorize de numpy. Pensez
aussi `a tester avec des valeurs simples.
2. Pas de difficult´e pour d´efinir f.
3. Pour le trac´e, on donne une premi`ere courbe qui ne prend pas en compte les discontinuit´es puis, on essaie de
faire mieux ! On pourrait rajouter des pointill´es aux discontinuit´es.
4. Utilisez le graphe pr´ec´edent, puis pensez au principe de dichotomie pour trouver une valeur approch´ee de
f(α) = 0.
import matplo t lib .pyplot as plt
import numpy as np
# Question 1
#on definit g
def g(x):
assert 0 <= xand x<2 # r envoie un m es sage d ’ er re ur si x n ’ est p as dans l ’ i nt er va lle [0 ,2[
if x<1:
return x
else:
return 1.
# on ’ ’ vec to ri al is e une foncti on
def app l iqu e r (h,t):
Cette fonct i o n a pplique la fonction h a un vecteur t
return [h(x)for xin t]
Magali Hillairet 4Lyc´ee Franklin, Orl´eans
PT
Python - s´eance 3 - corrig´e
2015-16
#courbe
x=np .arange(0 ,2 ,0.01) #de 0 a 2 exclu avec un ecart de 0.01
gy =appliquer(g,x)
plt .plot(x,gy ,li n ewidth =3) # la cou r b e de g
plt .xlabel(’ axe d es x ’)
plt .ylabel(’ axe d es y ’)
plt .axis([0,2,0,2])# c ho ix d ’ un e fenetre g raph iq ue
plt .savefig(’ e x5 _fig1 . pdf ’)
plt .show()
# A utre s m ethodes de v e cto ri a li s at i on d ’une f onc ti on
# ave c vectorize
gvec =np .ve c tor i ze (g)
xv =np .arange(0,2,0.01) # de 0 a 2 exclu avec un ecart de 0.01
gyv =gvec(x)
plt .plot(xv ,gyv ,li n ewidth =3) # la cou r b e de g
plt .show()
# question 2
def f(x):
assert x>=0
if x<2: # e x press i on de f pour x dans [0 ,2[
return g(x)
else:# exp re ss io n de f sinon , on se ramene a x -2
return np .sqrt(x)* f(x-2)
#test
# print ([ f(0) , f (1) , f (2) , f (3) ,f (4) , f (5)])
# question 3
# courbe de f sur [0 ,6]
x=np .arange(0 ,6 ,0.01) #de 0 a 6 exclu avec un ecart de 0.01
fy =appliquer(f,x)
plt .plot(x,fy )# la courbe de f
plt .xlabel(’ axe d es x ’)
plt .ylabel(’ axe d es y ’)
plt .axis([0 ,6 ,0 ,10]) # c ho ix d ’ un e fenetre g raphi qu e
plt .savefig(’ e x5 _fig2 . pdf ’)
plt .show()
# E ssayons d o b t e nir une courbe plus jolie , res p ectan t les dis c ont i nuit es .
x1 =np .arange(0,2,0.01) # de 0 a 2 exclu avec un ecart de 0.01
fy1 =app l iqu e r (f,x1 )
plt .plot(x1 ,fy1 )# la cour b e de f sur [0 ,2]
x2 =x1 + 2 # de 2 a 4 exclu avec un ecart de 0.01
fy2 =app l iqu e r (f,x2 )
x3 =x2 + 2 # de 4 a 6 exclu avec un ecart de 0.01
fy3 =app l iqu e r (f,x3 )
plt .plot(x1 ,fy1 ,’b)# la courbe de f sur [0 ,2]
plt .plot(x2 ,fy2 ,’b)# la courbe de f sur [2 ,4]
plt .plot(x3 ,fy3 ,’b)# la courbe de f sur [4 ,6]
t=np .arange(0 ,6 ,0.01)
# plt . p lo t (t , np . sq rt ( t) ,r - - ’)
# plt . p lot (t , np . sqrt ( t )*( t -2) , ’ g -- ’)
Magali Hillairet 5Lyc´ee Franklin, Orl´eans
1 / 9 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !