Exercices de base avec Python

jeudi 5 septembre 2013
par  Nathalie CARRIÉ

Correction d’exercices Python proposés par Gérard Swinnen dans son livre « Apprendre à programmer avec Python ». Ce livre est téléchargeable au format PDF ici.
La correction est proposée pour Python 2.7 et est évidemment non-exhaustive.

Il existe une foule de sites Internet sur le langage Python et lorsque l’on débute en Python, il est bien difficile de trouver des sites qui permettent au néophyte une utilisation concrète et immédiate de scripts Python. J’ai au fil de mes surfs découvert ce livre qui est d’une utilisation totalement immédiate et extrêmement pratique.
La plupart des scripts de cette page sont inspirés de ce livre.
Pour vous exercer et apprendre à programmer en Python, il vous suffit d’ouvrir un terminal (sous Mac ou Linux) ou un environnement qui permet d’écrire des scripts Python sous Windows, et d’effectuer des copier-coller des scripts proposés après avoir tapé

> python

dans votre terminal.


Python, les bases : lecture de code

  • Utilisation de l’opérateur modulo :
    1. >>> a = 7
    2. >>> if (a % 2 == 0):
    3. ...     print "a est pair"
    4. ...     print "parce que le reste de sa division par 2 est nul"
    5. ... else:
    6. ...     print "a est impair"
    7. ...
  • Donner le résultat obtenu à l’exécution de ce code Python :
    1. >>> a = 0
    2. >>> while (a < 7):        # (n'oubliez pas le double point !)
    3. ...    a = a + 1          # (n'oubliez pas l'indentation !)
    4. ...    print a
  • Lire le code suivant :
    1. >>> a = 0
    2. >>> if a > 0 :
    3. ...     print "a est positif"
    4. ... elif a < 0 :
    5. ...     print "a est négatif"
    6. ... else:
    7. ...     print "a est nul"
    8. ...

    Le modifier pour tester un nombre réel quelconque.

  • Lecture et compréhension de code :
    - >Que fait le programme ci-dessous, dans les quatre cas où l’on aurait défini au préalable que la variable a vaut 1, 2, 3 ou 15 ?
    1. if a != 2:
    2.     print 'perdu'
    3. elif a == 3:
    4.     print 'un instant, s.v.p.'
    5. else:
    6.     print 'gagné'

- > Que font les programmes suivants ?

  1. a = 5
  2. b = -1
  3. if (a == 5) & (b < 2):
  4.     print '"&" signifie "et" ; on peut aussi utiliser\
  5. le mot "and"'
  1. a, b = 2, 4
  2. if (a == 4) or (b != 4):
  3.     print 'gagné'
  4. elif (a == 4) or (b == 4):
  5.     print 'presque gagné'
  1. a = 1
  2. if not a:
  3.     print 'gagné'
  4. elif a:
  5.     print 'perdu'

Et, celui-ci, avec un peu d’aléatoire :

  1. import random
  2. for i in range(100):
  3.     a = random.randint(0,10)
  4.     if not a:
  5.         print 'gagné'
  6.     elif a:
  7.        print 'perdu'

Python, les bases : écriture de code

Calcul simple avec des variables numériques

  • Écrire un programme qui calcule le volume d’un parallélépipède rectangle dont sont fournis au départ la largeur, la hauteur et la profondeur.
  1.  # Ouvrir un terminal et taper la commande python
  2. >>> # -*- coding: utf-8 -*-             # Cette première ligne est nécessaire dès l'utilisation de caractères accentués.
  3.  
  4. >>> l=input("Entrez la largeur : ")
  5. >>> h=input("Entrez la hauteur : ")
  6. >>> p=input("Entrez la profondeur : ")
  7. >>> print("Volume du parallélépipède = "+str(l*h*p))

Sortie du code :

  1.  # Ouvrir un terminal et se déplacer dans le répertoire où se trouve le programme Python que l'on a appelé pour l'exemple VolumeParallelepipedeRectangle.py.
  2.  
  3. > python './VolumeParallelepipedeRectangle.py'
  4.  
  5. Entrez la largeur : 7
  6. Entrez la hauteur : 4
  7. Entrez la profondeur : 8
  8. Volume du parallélépipède = 224
  9.  
  10. >

Utilisations de la boucle for

Suite géométrique de raison 3

  • Écrire un programme qui affiche une suite de 12 nombres dont chaque terme soit égal au triple du terme précédent.
  1.  
  2. a=input("Entrez un nombre : ")
  3. for i in range(12):
  4.         print(i+1,a)
  5.         a=a*3
  6.  

Résultat du programme :

  1.  # Ouvrir un terminal et se déplacer dans le répertoire où se trouve le programme Python que l'on a appelé pour l'exemple SuiteDe12Triples.py.
  2.  
  3. >python './SuiteDe12Triples.py'
  4. Entrez un nombre : -2
  5. (1, -2)
  6. (2, -6)
  7. (3, -18)
  8. (4, -54)
  9. (5, -162)
  10. (6, -486)
  11. (7, -1458)
  12. (8, -4374)
  13. (9, -13122)
  14. (10, -39366)
  15. (11, -118098)
  16. (12, -354294)

Multiples de 7

  • Écrire un programme qui affiche les 20 premiers multiples de 7.
    1. # Dans un terminal python :
    2. >>>
    3. >>> for i in range(0,20):
    4. ...     print(7*i)
    5. ...
    6. 0
    7. 7
    8. 14
    9. 21
    10. 28
    11. 35
    12. 42
    13. 49
    14. 56
    15. 63
    16. 70
    17. 77
    18. 84
    19. 91
    20. 98
    21. 105
    22. 112
    23. 119
    24. 126
    25. 133
    26. >>>

Pour avoir les 20 premiers multiples de 7 non nuls, on fera :

  1. >>>
  2. >>> for i in range(1,21):
  3. ...     print(7*i)
  4. ...
  5. 7
  6. 14
  7. 21
  8. 28
  9. 35
  10. 42
  11. 49
  12. 56
  13. 63
  14. 70
  15. 77
  16. 84
  17. 91
  18. 98
  19. 105
  20. 112
  21. 119
  22. 126
  23. 133
  24. 931
  25. >>>

On peut améliorer l’affichage du résultat en utilisant des chaînes de caractères et donc la fonction str() qui transforme un entier en string.

  1. >>> for i in range(20):
  2. ...     print("  "+str(i)+"*7 = "+str(i*7))
  3. ...
  4. >>>

Sortie du code :

  1.  # Ouvrir un terminal et se déplacer dans le répertoire où se trouve le programme Python que l'on a appelé pour l'exemple MultiplesDe7.py.
  2.  
  3. > python './MultiplesDe7.py'
  4.   0*7 = 0
  5.   1*7 = 7
  6.   2*7 = 14
  7.   3*7 = 21
  8.   4*7 = 28
  9.   5*7 = 35
  10.   6*7 = 42
  11.   7*7 = 49
  12.   8*7 = 56
  13.   9*7 = 63
  14.   10*7 = 70
  15.   11*7 = 77
  16.   12*7 = 84
  17.   13*7 = 91
  18.   14*7 = 98
  19.   15*7 = 105
  20.   16*7 = 112
  21.   17*7 = 119
  22.   18*7 = 126
  23.   19*7 = 133
  24. >
  • Écrire un programme qui affiche les 20 premiers termes de la table de multiplication par 7, en signalant au passage (à l’aide d’une astérisque) ceux qui sont des multiples de 3.
    1. chaine=""
    2. for i in range(20):
    3.         multiple=(i+1)*7
    4.         if multiple%3 == 0:
    5.                 chaine+="  "+str(i+1)+"*7 = "+"*"+str((i+1)*7)+"\n"
    6.         else:
    7.                 chaine+="  "+str(i+1)+"*7 = "+str((i+1)*7)+"\n"
    8. print(chaine)
    9. >>>

Sortie du code :

  1.  # Ouvrir un terminal et se déplacer dans le répertoire où se trouve le programme Python que l'on a appelé pour l'exemple MultiplesDe7AvecMarquageSiMultipleDe3.py.
  2.  
  3. > python './MultiplesDe7AvecMarquageSiMultipleDe3.py'
  4.  
  5.   1*7 = 7
  6.   2*7 = 14
  7.   3*7 = *21
  8.   4*7 = 28
  9.   5*7 = 35
  10.   6*7 = *42
  11.   7*7 = 49
  12.   8*7 = 56
  13.   9*7 = *63
  14.   10*7 = 70
  15.   11*7 = 77
  16.   12*7 = *84
  17.   13*7 = 91
  18.   14*7 = 98
  19.   15*7 = *105
  20.   16*7 = 112
  21.   17*7 = 119
  22.   18*7 = *126
  23.   19*7 = 133
  24.   20*7 = 140
  25.  
  26. >

Concaténation multiple d’une chaîne de caractères

  • Écrire un programme qui affiche la suite de symboles suivante :

*
**
***
****
*****
******
*******

  1.  
  2. a='*'
  3. for i in range(7):
  4.         print(a*(i+1))
  5.  

Conversion de monnaies

Écrire un programme qui affiche une table de conversion de sommes d’argent exprimées en euros, en dollars canadiens. La progression des sommes de la table sera « géométrique », comme dans l’exemple ci-dessous :

  1. 1 euro(s) = 1.65 dollar(s)
  2. 2 euro(s) = 3.30 dollar(s)
  3. 4 euro(s) = 6.60 dollar(s)
  4. 8 euro(s) = 13.20 dollar(s)

etc. (S’arrêter à 16384 euros)

  1.  
  2. s = 1
  3. coeff=input("Entrez le cours du dollar canadien : ")
  4. while s <= 16384:
  5.         print(str(s)+" euro(s) = "+str(s*coeff)+" dollar(s) ")
  6.         s = s *2

Résultat du programme :

  1.  # Ouvrir un terminal et se déplacer dans le répertoire où se trouve le programme Python que l'on a appelé pour l'exemple EurosEnDollars.py.
  2.  
  3. > python './EurosEnDollars.py'
  4. Entrez le cours du dollar canadien : 1.39
  5. 1 euro(s) = 1.39 dollar(s)
  6. 2 euro(s) = 2.78 dollar(s)
  7. 4 euro(s) = 5.56 dollar(s)
  8. 8 euro(s) = 11.12 dollar(s)
  9. 16 euro(s) = 22.24 dollar(s)
  10. 32 euro(s) = 44.48 dollar(s)
  11. 64 euro(s) = 88.96 dollar(s)
  12. 128 euro(s) = 177.92 dollar(s)
  13. 256 euro(s) = 355.84 dollar(s)
  14. 512 euro(s) = 711.68 dollar(s)
  15. 1024 euro(s) = 1423.36 dollar(s)
  16. 2048 euro(s) = 2846.72 dollar(s)
  17. 4096 euro(s) = 5693.44 dollar(s)
  18. 8192 euro(s) = 11386.88 dollar(s)
  19. 16384 euro(s) = 22773.76 dollar(s)
  20. >

Conversion de secondes en années, mois, jours, heures, minutes, secondes

  • Écrire un programme qui convertisse un nombre entier de secondes fourni au départ en un nombre d’années, de mois, de jours, d’heures, de minutes et de secondes.

On utilisera les opérateurs // (division entière) et % (modulo).

  1. # -*- coding:utf8 -*-
  2.  
  3. # Le nombre de secondes est fourni au départ :
  4. # (un grand nombre s'impose !)
  5. nsd = 12345678912
  6. # Nombre de secondes dans une journée :
  7. nspj = 3600 * 24
  8. # Nombre de secondes dans un an (soit 365 jours -
  9. # on ne tiendra pas compte des années bissextiles) :
  10. nspa = nspj * 365
  11. # Nombre de secondes dans un mois (en admettant
  12. # pour chaque mois une durée identique de 30 jours) :
  13. nspm = nspj * 30
  14. # Nombre d'années contenues dans la durée fournie :
  15. na = nsd // nspa
  16. # division <entière>
  17. nsr = nsd % nspa
  18. # n. de sec. restantes
  19. # Nombre de mois restants :
  20. nmo = nsr // nspm
  21. # division <entière>
  22. nsr = nsr % nspm
  23. # n. de sec. restantes
  24. # Nombre de jours restants :
  25. nj = nsr // nspj
  26. # division <entière>
  27. nsr = nsr % nspj
  28. # n. de sec. restantes
  29. # Nombre d'heures restantes :
  30. nh = nsr // 3600
  31. # division <entière>
  32. nsr = nsr % 3600
  33. # n. de sec. restantes
  34. # Nombre de minutes restantes :
  35. nmi = nsr // 60
  36. # division <entière>
  37. nsr = nsr % 60
  38. # n. de sec. restantes
  39. print("Nombre de secondes à convertir : "+str(nsd))
  40. print("Cette durée correspond à "+str(na)+" années de 365 jours, plus "+str(nmo)+" mois de 30 jours, "+str(nj)+" jours, "+str(nh)+" heures, "+str(nmi)+" minutes et "+str(nsr)+ " secondes. ")

Résultat du programme avec vérification :

  1. >python './SecondesEnAmjhms-Python2.py'
  2. Nombre de secondes à convertir : 12345678912
  3. Cette durée correspond à 391 années de 365 jours, plus 5 mois de 30 jours, 24 jours, 19 heures, 15 minutes et 12 secondes.
  4. >

Exercices à faire

Exercices sur les chaînes de caractères

  • Écrire un script qui détermine si une chaîne contient ou non le caractère « e ».
  • Écrire un script qui compte le nombre d’occurrences du caractère « e » dans une chaîne.
  • Écrire un script qui recopie une chaîne (dans une nouvelle variable), en insérant des astérisques entre les caractères.
    Ainsi par exemple, « gaston » devra devenir « g*a*s*t*o*n »
  • Écrire un script qui recopie une chaîne (dans une nouvelle variable) en l’inversant. Ainsi par exemple, « zorglub » deviendra « bulgroz ».
  • En partant de l’exercice précédent, écrire un script qui détermine si une chaîne de caractères donnée est un palindrome (c’est-à-dire une chaîne qui peut se lire indifféremment dans les deux sens), comme par exemple « radar » ou « s.o.s ».

Exercices sur les listes

  • Soient les listes suivantes :
    t1 = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
    t2 = [’Janvier’, ’Février’, ’Mars’, ’Avril’, ’Mai’, ’Juin’, ’Juillet’, ’Août’, ’Septembre’, ’Octobre’, ’Novembre’, ’Décembre’]
    Écrire un petit programme qui crée une nouvelle liste t3. Celle-ci devra contenir tous les éléments des deux listes en les alternant, de telle manière que chaque nom de mois soit suivi du nombre de jours correspondant :
    [’Janvier’,31,’Février’,28,’Mars’,31, etc...].
  • Écrire un programme qui affiche « proprement » tous les éléments d’une liste. Si on l’appliquait par exemple à la liste t2 de l’exercice ci-dessus, on devrait obtenir :
    Janvier Février Mars Avril Mai Juin Juillet Août Septembre Octobre Novembre Décembre
  • Écrire un programme qui recherche le plus grand élément présent dans une liste donnée. Par exemple, si on l’appliquait à la liste [32, 5, 12, 8, 3, 75, 2, 15], ce programme devrait afficher la phrase :
    le plus grand élément de cette liste a la valeur 75.
  • Écrire un programme qui analyse un par un tous les éléments d’une liste de nombres (par exemple celle de l’exercice précédent) pour générer deux nouvelles listes. L’une contiendra seulement les nombres pairs de la liste initiale, et l’autre les nombres impairs. Par exemple, si la liste initiale est celle de l’exercice précédent, le programme devra construire une liste pairs qui contiendra [32, 12, 8, 2], et une liste impairs qui contiendra [5, 3, 75, 15].
    Astuce : pensez à utiliser l’opérateur modulo (%) déjà cité précédemment.
  • Écrire un programme qui analyse un par un tous les éléments d’une liste de mots (par exemple : [’Jean’, ’Maximilien’, ’Brigitte’, ’Sonia’, ’Jean-Pierre’, ’Sandra’] ) pour générer deux nouvelles listes. L’une contiendra les mots comportant moins de 6 caractères, l’autre les mots comportant 6 caractères ou davantage.

Lien pour aller plus loin

Cet article date de 2013, et depuis, je vous ai déjà parlé de Snap!, logiciel de programmation visuelle extrêmement efficace pour traiter toute sorte de données dont des listes. Je vous redirige donc vers cet article :

L’algorithmique revisitée avec Snap! et Python

qui vous donnera à la fois les scripts Python, mais aussi les images des scripts visuels obtenus avec le langage Snap!.


Documents joints

PDF - 167.4 ko

Commentaires