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 (n−1)! si n≥1 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[n−1]. 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