Le code compare les valeurs de la liste deux-à-deux. Le range commence à 1 car le premier couple comparé
est le couple L[0], L[1] et pas L[−1], L[0]. Le range finit à len(L) car le dernier indice effectif est comme
d’habitude len(L)−1. Le drapeau resultat bascule à False (et y reste) lorsqu’il existe deux valeurs consécu-
tives classées dans l’ordre décroissant. Ce code teste donc si la liste est classée par ordre croissant . Dans
notre exemple, resultat vaut False (à cause de la dernière comparaison).
(b) Que se passe-t-il si on met un range range(0,len(L),1) ? Dans quel cas la variable résultat contient-elle
alors True à la fin (on attend une réponse qui porte sur L) ?
Il n’y a aura pas d’erreur, puisque L[−1] est la dernière valeur de la liste. Ce code testera donc si la liste
suivante est classée (on note nsa longueur) : la liste initiale à qui on rajoute un terme devant
hL[−1], L[0], L[1],· · · , L[n−2], L[n−1]i
En particulier, le dernier terme est aussi le premier ! Le programme détecte que les termes sont tous égaux.
6. Le jeu des erreurs : ce code contient de nombreuses erreurs (plus celles involontaires, probablement. . .). Corrigez-
les.
On écrit une fonction premjum, qui prend un argument n, et qui calcule la liste des couples d’entiers [k, k + 2]
premiers jumeaux, c’est-à-dire tels que ket k+ 2 sont premiers, avec k≤n. La liste jum sera donc quelque
chose comme : h[3,5],[5,7],[11,13], . . . i
On commence à k= 2 car 1 n’est pas premier.
On veut que la fonction retourne la liste finale (stockée dans la variable jum) pour une utilisation ultérieure
en dehors de la fonction (ici, le calcul de sa longueur pour n déjà connu de Python).
1def premjum(n)
2|jum = 0
3|for k in range(2,n,1):
4| | if isprime(k) = true and isprime(k+2) = true :
5|||jum = jum + [k,k+2]
6| | print(jum)
7print(len(jum)) #ligne qui doit rester en dehors de la fonction
C’est un festival :
(a) il manque les : à la fin du def
(b) on initialise à la liste vide [], pas à l’entier 0
(c) il faut aller jusqu’à n+1 pour tester k=n
(d) le test d’égalité est un ==, et True prend une majuscule
(e) la nouvelle valeur à ajouter est elle-même un couple (on concatène deux listes, et pas on ajoute un entier à
une liste – ce qui n’a pas de sens) : il faut ajouter +[[k, k + 2]].
(f) le print est un mauvais choix : on affichera le résultat mais sans pouvoir le réutiliser. On a besoin d’un
return.
De plus, il est au mauvais endroit à cause de son indentation : dans le for, ce print va afficher successivement
toutes les listes intermédiaires, et pas la finale uniquement. Avec un return, c’est pire : la boucle for est
stoppée dès le premier tour de boucle.
(g) jum est locale : elle ne sort pas de la fonction ! De plus, nest une variable muette de la fonction : la valeur
numérique déjà connue de Python ne sera pas réutilisée de cette manière.
def premjum(n):
|jum = []
|for k in range(2,n+1,1):
| | if isprime(k) == True and isprime(k+2) == True :
|||jum = jum + [ [k,k+2] ] #ou jum.append([k,k+2])
|return jum
print( len( premjum(n) ) ) #espaces pour mieux lire
2