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

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 ?
    if a != 2:
        print 'perdu'
    elif a == 3:
        print 'un instant, s.v.p.'
    else:
        print 'gagné'

- > Que font les programmes suivants ?

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

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

import random
for i in range(100):
    a = random.randint(0,10)
    if not a:
        print 'gagné'
    elif a:
       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.
 # Ouvrir un terminal et taper la commande python
>>> # -*- coding: utf-8 -*-             # Cette première ligne est nécessaire dès l'utilisation de caractères accentués.
 
>>> l=input("Entrez la largeur : ")
>>> h=input("Entrez la hauteur : ")
>>> p=input("Entrez la profondeur : ")
>>> print("Volume du parallélépipède = "+str(l*h*p))

Sortie du code :

 # 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.
> python './VolumeParallelepipedeRectangle.py'
Entrez la largeur : 7
Entrez la hauteur : 4
Entrez la profondeur : 8
Volume du parallélépipède = 224
>

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.
 
a=input("Entrez un nombre : ")
for i in range(12):
        print(i+1,a)
        a=a*3
 

Résultat du programme :

 # 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.
>python './SuiteDe12Triples.py'
Entrez un nombre : -2
(1, -2)
(2, -6)
(3, -18)
(4, -54)
(5, -162)
(6, -486)
(7, -1458)
(8, -4374)
(9, -13122)
(10, -39366)
(11, -118098)
(12, -354294)

Multiples de 7

  • Écrire un programme qui affiche les 20 premiers multiples de 7.
    # Dans un terminal python :
    >>>
    >>> for i in range(0,20):
    ...     print(7*i)
    ...
    0
    7
    14
    21
    28
    35
    42
    49
    56
    63
    70
    77
    84
    91
    98
    105
    112
    119
    126
    133
    >>>

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

>>>
>>> for i in range(1,21):
...     print(7*i)
...
7
14
21
28
35
42
49
56
63
70
77
84
91
98
105
112
119
126
133
931
>>>

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.

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

Sortie du code :

 # 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.
 
> python './MultiplesDe7.py'
  0*7 = 0
  1*7 = 7
  2*7 = 14
  3*7 = 21
  4*7 = 28
  5*7 = 35
  6*7 = 42
  7*7 = 49
  8*7 = 56
  9*7 = 63
  10*7 = 70
  11*7 = 77
  12*7 = 84
  13*7 = 91
  14*7 = 98
  15*7 = 105
  16*7 = 112
  17*7 = 119
  18*7 = 126
  19*7 = 133
>
  • É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.
    chaine=""
    for i in range(20):
            multiple=(i+1)*7
            if multiple%3 == 0:
                    chaine+="  "+str(i+1)+"*7 = "+"*"+str((i+1)*7)+"\n"
            else:
                    chaine+="  "+str(i+1)+"*7 = "+str((i+1)*7)+"\n"
    print(chaine)
    >>>

Sortie du code :

 # 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.
 
> python './MultiplesDe7AvecMarquageSiMultipleDe3.py'
  1*7 = 7
  2*7 = 14
  3*7 = *21
  4*7 = 28
  5*7 = 35
  6*7 = *42
  7*7 = 49
  8*7 = 56
  9*7 = *63
  10*7 = 70
  11*7 = 77
  12*7 = *84
  13*7 = 91
  14*7 = 98
  15*7 = *105
  16*7 = 112
  17*7 = 119
  18*7 = *126
  19*7 = 133
  20*7 = 140
>

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

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

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

 
a='*'
for i in range(7):
        print(a*(i+1))
 

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 euro(s) = 1.65 dollar(s)
2 euro(s) = 3.30 dollar(s)
4 euro(s) = 6.60 dollar(s)
8 euro(s) = 13.20 dollar(s)

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

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

Résultat du programme :

 # 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.
> python './EurosEnDollars.py'
Entrez le cours du dollar canadien : 1.39
1 euro(s) = 1.39 dollar(s)
2 euro(s) = 2.78 dollar(s)
4 euro(s) = 5.56 dollar(s)
8 euro(s) = 11.12 dollar(s)
16 euro(s) = 22.24 dollar(s)
32 euro(s) = 44.48 dollar(s)
64 euro(s) = 88.96 dollar(s)
128 euro(s) = 177.92 dollar(s)
256 euro(s) = 355.84 dollar(s)
512 euro(s) = 711.68 dollar(s)
1024 euro(s) = 1423.36 dollar(s)
2048 euro(s) = 2846.72 dollar(s)
4096 euro(s) = 5693.44 dollar(s)
8192 euro(s) = 11386.88 dollar(s)
16384 euro(s) = 22773.76 dollar(s)
>

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).

# -*- coding:utf8 -*-
# Le nombre de secondes est fourni au départ :
# (un grand nombre s'impose !)
nsd = 12345678912
# Nombre de secondes dans une journée :
nspj = 3600 * 24
# Nombre de secondes dans un an (soit 365 jours -
# on ne tiendra pas compte des années bissextiles) :
nspa = nspj * 365
# Nombre de secondes dans un mois (en admettant
# pour chaque mois une durée identique de 30 jours) :
nspm = nspj * 30
# Nombre d'années contenues dans la durée fournie :
na = nsd // nspa
# division <entière>
nsr = nsd % nspa
# n. de sec. restantes
# Nombre de mois restants :
nmo = nsr // nspm
# division <entière>
nsr = nsr % nspm
# n. de sec. restantes
# Nombre de jours restants :
nj = nsr // nspj
# division <entière>
nsr = nsr % nspj
# n. de sec. restantes
# Nombre d'heures restantes :
nh = nsr // 3600
# division <entière>
nsr = nsr % 3600
# n. de sec. restantes
# Nombre de minutes restantes :
nmi = nsr // 60
# division <entière>
nsr = nsr % 60
# n. de sec. restantes
print("Nombre de secondes à convertir : "+str(nsd))
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 :

>python './SecondesEnAmjhms-Python2.py'
Nombre de secondes à convertir : 12345678912
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.
>

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.

Commentaires

Annonces

Prochains rendez-vous de l’IREM

Séminaire EDIM-IREM

- Mercredi 3 mai 2017, 14h-18h, PTU, Saint-Denis, salle S23.6
- Mardi 13 juin 2017, 14h-18h, campus du Tampon
- Mercredi 14 juin 2017, 14h-18h, PTU, Saint-Denis, salle S23.6


Brèves

Décès de Raymond Smullyan

mercredi 15 mars

Le logicien Raymon Smullyan est décédé en février 2017, à l’âge respectable de 97 ans : Il avait eu Alonzo Church comme professeur ! Pour en savoir plus, voir cet article

Travailler à plusieurs

lundi 19 décembre 2016

Les enseignements d’exploration au lycée imposent aux enseignants de travailler ensemble. Chantal Tuffery-Rochdi a analysé dans sa thèse les pratiques des enseignants de MPS (méthodes et pratiques scientifiques). Elle répond aux questions des Cahiers pédagogiques.

Un document sur Eduscol

mardi 19 mai 2015

Un document clarifiant bien la façon dont les mêmes concepts vivent en mathématiques et dans les sciences « exactes » les utilisant, publié par Eduscol en octobre 2014. Citons-les :
« Le document proposé ci-dessous s’adresse aux professeurs de mathématiques, physique-chimie et sciences de l’ingénieur intervenant dans le segment [Bac-3 ; Bac+3]. Il vise à les informer des différences de présentation et d’interprétation qui sont faites de certains concepts mathématiques dans les autres disciplines. Ces éclaircissements peuvent contribuer à harmoniser et à clarifier l’utilisation de ces notions auprès des élèves. »

Histoire de la comptabilité

vendredi 28 décembre 2012

Sur ce site (en anglais) dédié à la comptabilité, on trouve des informations intéressantes sur l’histoire et les pratiques de ce domaine, qui peuvent être utiles aux professeurs enseignant des mathématiques financières (et aussi aux autres...).

La CGE et la réforme des lycées

lundi 16 janvier 2012

La Conférence des Grandes Écoles publie 19 préconisations pour la réforme du lycée.

Sur le Web : Les 19 préconisations

Pratique des mathématiques en série STD2A

lundi 16 janvier 2012

Le site de l’IGEN offre des recommandations et des ressources pour enseigner les mathématiques en série STD2A. Les thèmes abordés (couleurs et nuances de gris, arcs et architecture, jeux vidéos, photo et tableur, perspectives parallèles...) sont de nature à donner aussi des idées d’activités aux enseignants des autres séries !

En cheminant avec Kakeya

lundi 16 janvier 2012

Un livre (à télécharger) de Vincent Borelli et Jean-Luc Rullière qui présente le calcul intégral et la dérivation en s’appuyant sur la question de Kakeya. Pour les lycéens, les étudiants et tous les esprits curieux qui souhaitent voir les mathématiques sous un jour différent.

Sur le Web : Livre à télécharger

Bicentenaire Galois

lundi 12 septembre 2011

À l’occasion du bicentenaire de la naissance d’Évariste Galois (1811-2011), l’Institut Henri Poincaré et la Société mathématique de France organisent un ensemble de manifestations et proposent un site contenant diverses ressources documentaires susceptibles d’intéresser les enseignants.

Statistiques

Dernière mise à jour

samedi 27 mai 2017

Publication

745 Articles
Aucun album photo
131 Brèves
11 Sites Web
127 Auteurs

Visites

163 aujourd'hui
593 hier
2024873 depuis le début
27 visiteurs actuellement connectés