Premiers pas avec Python un corrigé 1 Présentation de Pyzo 2

Premiers pas avec Python
un corrig´e
1 Pr´esentation de Pyzo
Q.1. On pourrait prendre la partie enti`ere dans la division de 2014 par 73 mais le plus simple est
d’utiliser la “division enti`ere” qui donne le quotient.
2014//73
De mˆeme % est l’op´erateur donnant le reste.
2014%73
Q.2. La fonction donne le maximum des arguments propos´es selon l’ordre “naturel”
max(2,-1,3)
max([1.1,2.4,5.7],[1.1,2.4,4.3,7.1])
Dans le cas des listes, l’ordre utilis´e est l’ordre “lexicographique”. Comme pour l’ordre al-
phab´etique, on compare les premiers ´el´ements et, en cas d’´egalit´e, les seconds etc.
Q.3. L’op´erateur d’exponentiation est ∗∗
(6/5)**1.1
2 Variables
Q.4. Dans un tableau, on donne la valeur des variables `a chaque ´etape (le tableau se lit de gauche
`a droite). Une case blanche signifie que la variable n’est pas d´efinie (aucune valeur donc).
- S´erie 1.
a4 4 4 4
b224
c2 2
- S´erie 2.
a22222
b4 4 2 2
c2 2 0
- S´erie 3.
x5 5 100
y13 13
- S´erie 4.
a44442
b2 2 4 4
c2 2 2
- S´erie 5.
a1 1 1 1 1 1
i1 1 3 3
ai 336
Il faut ici comprendre que ai et a1 sont les noms de variables. Introduire une variable ine
change rien `a l’affaire (dans ai, on ne remplace pas ipar la valeur d’une ´eventuelle variable
i).
- S´erie 6.
a33344
b4 4 4 4
x3 3 3
c3
1
Q.5. Dans la s´erie 1, la commande 2=a n’a pas de sens car 2n’est pas un nom de variable.
Dans la s´erie 2, la commande b=a n’a pas de sens car an’est pas une variable d´efinie (et n’a
donc pas de valeur).
Dans la s´erie 3, la commande b=2*a3=a n’a pas de sens car a3 n’est pas une variable d´efinie
(on a ai,iseulement).
3 Premi`eres fonctions
Q.6. def f(x):
return(3*x/(1+8*x**3))
print(f(1), f(10**6), f(10**20), f(10**25), f(10**(-2)), f(10**(-8)), f(10**(-13)))
L’instruction f(-1/2) am`ene une division par 0 qui est not´ee par l’interpr´eteur Python.
Q.7. On calcule le discriminant et on distingue les cas.
def racine(a,b,c):
delta=b**2-4*a*c
if delta<0:
return([])
elif delta==0:
return([-b/(2*a)])
else:
d=delta**(1/2)
return([(-b+d)/(2*a),(-b-d)/(2*a)])
print(racine(1,4,4))
print(racine(1,1,1))
print(racine(1,-5,6))
Q.8. La version la plus efficace utilise les op´erateurs bool´eens
def bissextile(a):
return((a%4==0 and a%100!=0) or (a%400==0))
On pourrait imaginer d´ecouper avec des if mais c’est une mauvaise id´ee. Cela pourrait donner
(c’est l’une des versions possibles o`u l’on teste la divisibilit´e de plus en plus finement)
def bissextile(a)
if a%4<>0:
return(False)
elif a%100<>0:
return(True)
elif a%400<>0:
return(False)
else:
return(True)
4 Premi`eres boucles
Q.9. Dans l’appel mystere(4) les variables ´evoluent ainsi :
f k
Init. 1 1
Iter. 1 1 2
Iter. 2 2 3
Iter. 3 6 4
2
L’it´eration 4 ne s’effectue pas (car k= 4 n) et on renvoie 6.
De fa¸con g´en´erale, mystere(n) renvoie (n1)! si n1 et 1 si n= 0.
Q.10. On proc`ede comme dans le cours en rempla¸cant somme par produit. Si on note nle nombre
des ´el´ements de la liste, on veut donc obtenir l[0].l[1] . . . l[n1]. L’id´ee est de g´erer une
variable pque l’on fait ´evoluer en partant de 1 et en multipliant successivement par l[0] puis
l[1] etc. A chaque ´etape, on “fait la mˆeme chose” qui est “multiplier par un ´el´ement de l”. Il
faut cependant savoir `a chaque moment quel est le prochain ´el´ement multiplicateur. Comme les
´el´ements de lsont num´erot´es, on g`ere une autre variable iqui donne le num´ero du prochain
´el´ement ; iest initialement nul et augmente d’une unit´e `a chaque ´etape. On obtient la fonction
suivante.
def produit(l):
#Calcul du produit des ´el´ements d’une liste de nombres
p=1 #variable pour stocker les produits successifs
i=0 #num´ero du prochain ´el´ement `a ajouter
while i<len(l):
p=p*l[i]
i+=1
return(p)
#Test de la fonction
print(produit([1,2,-3,4]))
Q.11. On g`ere deux variables. La premi`ere ucontiendra successivement les termes de la suite. La
seconde kcorrespond `a l’indice du dernier terme calcul´e. A tout instant, on aura donc u=uk.
def premierNeg(a):
u=a
k=0
while u>0:
u=u/2-3*k
k+=1
return(k)
Pour que la boucle se termine, il faut ˆetre sˆur que l’un des termes de la suite finit par ˆetre
n´egatif. Il y a donc une ´etude th´eorique de la suite `a faire. On pourrait montrer que la suite
tend vers −∞ (quelle que soit la valeur initiale de a).
3
1 / 3 100%

Premiers pas avec Python un corrigé 1 Présentation de Pyzo 2

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 !