Feuille d’exercices 2#
Objectifs
Listes
Boucles
Compléments sur les fonctions
Exercice 1 : manipulation élémentaire de liste#
Question 1 : Effectuer successivement les étapes suivantes :
Affecter à une variable nommée
Lune liste vide.Ajouter l’entier \(3\) à la fin de la liste
L.Insérer l’entier \(-2\) au début de la liste
L.Afficher la liste
L.Si le second élément de la liste
Lest strictement positif, alors afficher « Positif ».
# Votre réponse ici
Question 2 : Créer une liste jours contenant les noms des \(7\) jours de la semaine (chacun exprimé sous la forme d’une chaîne de caractères).
# Votre réponse ici
Question 3 : En utilisant la liste jours, afficher le troisième jour de la semaine.
# Votre réponse ici
Rappelons que pour connaître la longueur d’une chaîne de caractère, on utilise la fonction len. Par exemple, len("bonjour") vaut \(7\).
Question 4 : En parcourant la liste jours avec une boucle for, et en effectuant un test à chaque tour de boucle, afficher les jours de la semaine qui sont formés de \(5\) lettres exactement.
# Votre réponse ici
Exercice 2 : boucle for et itérateur range#
Question 1 : À l’aide d’une boucle for et du mot-clef range, afficher successivement les nombres entiers allant de \(-3\) à \(8\) (inclus).
# Votre réponse ici
Question 2 : À l’aide d’une boucle for et du mot-clef range, afficher, dans l’ordre décroissant, l’ensemble des nombres divisibles par \(5\) qui sont compris entre \(400\) et \(500\) (bornes incluses).
# Votre réponse ici
Question 3 : À l’aide d’une boucle for et du mot-clef range, calculer la somme des entiers naturels naturels impairs inférieurs à \(200\).
# Votre réponse ici
Question 4 (plus difficile) : À l’aide d’une boucle for, du mot-clef range et l’opérateur * qui permet de copier plusieurs fois le même caractère, reproduire la figure suivante, mais avec un triangle de taille 20x20 :
**********
*********
********
*******
******
*****
****
***
**
*
# Votre réponse ici
Exercice 3 : boucle while#
Question 1 : À l’aide d’une boucle while (donc, sans boucle for ni mot-clef range), afficher les entiers pairs compris entre \(16\) (inclus) et \(26\) (exclus).
# Votre réponse ici
Question 2 : À l’aide d’une boucle while, afficher les puissances de \(2\) inférieures à \(1.000.000\) (en partant de \(2^0 = 1\)).
# Votre réponse ici
Question 3 : Dans la cellule suivante, une fonction ma_fonction est écrite pour calculer le maximum d’une liste L. Décommentez la dernière ligne, exécutez la cellule, puis observez ce qui est affiché. Essayez ensuite de corriger l’erreur pour obtenir le bon résultat.
def ma_fonction(L):
m = 0
i = 0
n = len(L)
while i <= n:
if L[i] > m:
m = L[i]
i += 1
return m
# ma_fonction([13, 12, 42, -37])
# Votre réponse ici
Exercice 4 : fonction factorielle#
Rappelons qu’une fonction est dite récursive si elle s’appelle elle-même, et itérative sinon.
Question 1 : Écrire une fonction itérative factorielle(n) qui calcule la factorielle d’un entier n passé en paramètre. Tester ensuite la fonction avec les valeurs de \(n \in \{ 0, 1, 5, 10 \}\) pour lesquelles on a \(0! = 1\), \(1! = 1\), \(5! = 120\) et \(10! = 3628800\).
Ensuite, que vaut \(100!\) ?
# Votre réponse ici
Question 2 : Écrire une version récursive de la fonction factorielle, qui sera nommée factorielle_rec(n). Tester ensuite la fonction avec les mêmes valeurs que précédemment.
# Votre réponse ici
Exercice 5 : suite récurrente d’ordre 1#
On considère la suite récurrente d’ordre \(1\) définie par
Question 1. Écrire une fonction itérative calcule_u_iter(n) qui calcule la valeur de \(u_n\) par une fonction itérative (c’est-à-dire, sans que la fonction s’appelle elle-même).
On vérifiera notamment que \(u_2 = 1\), \(u_4 = 4\) et \(u_{10} = 96177957631162369\).
# Votre réponse ici
Question 2. Écrire une fonction récursive calcule_u_rec(n) qui calcule la valeur de \(u_n\) par une fonction récursive.
# Votre réponse ici
Exercice 6 : test de croissance de liste#
Question 1 : Écrire une fonction itérative est_croissante_iter(L), qui prend en entrée une liste L, et qui teste si cette liste est triée dans l’ordre croissant.
# Votre réponse ici
Observons maintenant qu’une liste L de longueur \(n\) est triée dans l’ordre croissant si les deux propriétés suivantes sont vérifiées :
ses deux derniers éléments sont triés dans l’ordre croissant
la sous-liste de ses \(n-1\) premiers éléments est également triée dans l’ordre croissant.
Par ailleurs, une liste de longueur \(1\) est toujours triée dans l’ordre croissant. On obtient donc une manière récursive de vérifier si une liste est triée dans l’ordre croissant.
Question 2 : En utilisant la caractérisation donnée plus haut, écrire une fonction récursive est_croissante_rec(L), qui prend en entrée une liste L, et qui teste si cette liste est triée dans l’ordre croissant. Votre fonction devra être récursive.
# Votre réponse ici