Vous êtes sur la page 1sur 27

Culture numérique et programmation

L1 MIASHS

Programmation
Algorithmique et Python

Année 2023/2024
L1 MIASHS
Programmation 2023/2024

TD 1 : Algorithmique

Variable, type, entrée, sortie

1.1 Opérations arithmétiques


Soit le programme ci-dessous :

1 a = 3
2 a = 55
3 a = 12 = 11
4 a = a + 1
5 b = 11
6 b = b = 1
7 b = a *b
8 c = b % 6
9 d = b // 6

1. Tracer le tableau d’exécution de cette fonction


2. Que voit l’utilisateur ?

1.2 Lois de De Morgan


Compléter le tableau suivant :
a b non a non b a ou b a et b non(a ou b) (non a) et (non b) non(a et b) (non a) ou (non b)
faux faux
faux vrai
vrai faux
vrai vrai
Déduire les relations d’égalité existante entre les expressions des quatre dernières colonnes.

1.3 Opérations booléennes


Soit le programme ci-dessous :

1 a = 5
2 b = 6
3 b = b = 1
4 c = a < b
5 d = True
6 e = c and d
7 c = e or d
8 print ( c )

2
Algorithmique TD 1

1. Indiquez la valeur des différentes variables après l’exécution de chaque instruction.


2. Qu’affiche ce programme ?

1.4 Triangle
Soit le programme suivant :

1 cote1 = 4
2 cote2 = 3
3 cote3 = 5
4 p r i n t ( ” S o i t une t r i a n g l e r e c t a n g l e de c o t e s c o t e 1 , c o t e 2 , c o t e 3 ”)
5 x = cote1 + cote2 + cote3
6 y = cote2 * cote1 / 2

1. Remplir le tableau d’exécution de cet algorithme.


2. Que fait ce code ? Aurait-on pu choisir des noms de variables plus judicieux pour x et y ?
3. Que verra l’utilisateur lors de l’exécution de ce code ?

1.5 Permutation de valeurs


1. Ecrire un algorithme qui initialise deux valeurs x1 et x2 respectivement avec les valeurs 10 et 2. Puis,
cet algorithme permute les valeurs de ces variables : ainsi, x1 et x2 doivent contenir respectivement les
valeurs initialement contenues dans x2 et x1. Enfin, cet algorithme affiche les valeurs à l’utilisateur.
2. Remplir le tableau d’exécution de cet algorithme pour vérifier son bon fonctionnement.

1.6 Compréhension de code


Soit l’algorithme ci-dessous :

1 print ( ”Soient 2 nombres a e t b ”)


2 a = 10
3 b = 12
4 p r i n t ( ”Va le ur de a ” , a )
5 p r i n t ( ”Va le ur de b ” , b )
6 b = a + b
7 a = b = a
8 b = b = a
9 p r i n t ( ”Va le ur de a ” , a )
10 p r i n t ( ”Va le ur de b ” , b )

1. Remplir le tableau d’exécution de cet algorithme.


2. Que fait cet algorithme ?

1.7 Siècle
1. Ecrire un algorithme qui définit une année et affiche le siècle dont fait partie cette année. Par exemple,
si l’année est 1456, l’algorithme doit afficher 15. Note : on simplifie ici le problème en considérant que
l’année 1900 appartient au XXème siècle.
2. Remplir un tableau d’execution de cet algorithme pour vérifier son bon fonctionnement.

3
Python TD 1

1.8 Type de variables


On souhaite écrire un algorithme qui peut avoir les interactions externes suivantes :
Affichage Saisie Affichage Saisie
Quel est votre nom ? Quel est votre nom ?
Zoé Tom
Quel est votre age ? ou Quel est votre age ?
19 17
Bonjour Zoé Bonjour Tom
Majeur ? True Majeur ? False
1. Combien de variables internes faut-il prévoir ? Quel sera leur type ?
2. Ecrire l’algorithme permettant de faire ces interactions.

1.9 Année bissextile


Une année est bissextile si :
— cette année est multiple de 4,
— elle n’est pas multiple de 100, sauf si elle est multiple de 400.
1. Compléter le programme suivant pour que la variable booleenne bissextile contienne vrai si la variable
année contient une année bissextile, faux sinon.

1 annee = 2012
2 bissextile = . . .
3 p r i n t ( ” l ’ anné e ” , annee , ” e s t = e l l e bissextile ?”, bissextile )

4
L1 MIASHS
Programmation 2023/2024

TD 2 : Python

Prise en main de l’interpréteur


Variable, type, entrée / sortie

2.1 Interpréteur Visual Studio Code


1. Lancer Anaconda, puis démarrer l’interpréteur Visual Studio Code.
2. Dans Visual Studio Code, ouvrir le dossier ”CultureNumProg/Python”.
3. Utiliser l’explorateur de VSCode pour créer un dossier TD2, et dans ce dossier un fichier exercice1.py.
L’interpréteur détecte qu’il va s’agir d’un fichier en langage python.
4. Saisir le code print("Bonjour") dans le fichier exercice1.py
5. Sauvegarder puis exécuter le code. Vérifier que le mot ”Bonjour” s’affiche bien dans la sortie.

2.2 Opérateurs arithmétiques


Completer le fichier exercice1.py pour les questions suivantes.
1. Exécuter les instructions suivantes l’une après l’autre. En dessous de chaque instruction, copier la
trace d’exécution en utilisant le symbole de commentaire #.

1 p r i n t (6 = 4)
2 p r i n t (4 = 6)
3 p r i n t (6 + 4 . 2 )
4 p r i n t (6+4 ,2)
5 p r i n t (4 + 3 * 6)
6 p r i n t ((4+3) * 6 )
7 print (20/3)
8 p r i n t ( 2 0 // 3 )
9 p r i n t (20%3)

2. En analysant les réponses fournies par l’interpréteur, que pouvez-vous dire :


— de l’importance (ou pas) des espaces ?
— du caractère utilisé comme séparateur décimal ?
— du respect (ou pas) des règles de priorité usuelles entre opérateurs ?
— de la différence entre les opérateurs / et // ?
— du résultat calculé par l’opérateur % ?
Les réponses à ces questions peuvent être indiquées en bas du fichier exercice1.py, en commentaire.

2.3 Type de variables


Créer un nouveau fichier exercice2.py dans lequel vous réaliserez les questions suivantes.

5
Python TD 2

1. Exécuter les instructions suivantes l’une après l’autre. Essayer de prédire à chaque fois quel va être
le résultat affiché.

1 n = 7
2 p r i n t ( n , type ( n ) )
3 n = ”Coucou ! ! ”
4 p r i n t ( n , type ( n ) )
5 n= ( 3 / 2 ) / ( 2 / 3 )
6 p r i n t ( n , type ( n ) )
7 n = 6 > 3
8 p r i n t ( n , type ( n ) )

2. En vous basant sur vos observations, répondez aux questions suivantes : une variable peut-elle changer
de valeur ? Peut-elle changer de type ?
3. Définir une variable u avec la chaine "1.23", une variable v avec la chaine "445" et une variable w
avec la chaine "True". Afficher ces variables et leurs types, qui doit être String.
4. En utilisant les fonctions float(), int() et bool(), transformer les types de u, v, w respectivement
en booléen, entier et flottant. Afficher ces variables et leur nouveau type pour vérifier.

2.4 Débogueur
Créer un nouveau fichier exercice3.py dans lequel vous réaliserez les questions suivantes. Cet exercice
fait référence à l’exercice 1.3.
1. Saisir le code de l’exercice 1.3.
2. Utiliser le débogueur pour exécuter pas à pas ce code, et comparer avec vos prédictions réalisées lors
du TD précédent.
3. Etudier le comportement des variables dans le débogueur en modifiant de différentes manières l’ini-
tialisation de a, b ou d. Que peut-on dire de la valeur affichée en fonction de d ?

2.5 Durées 1
Créer un nouveau fichier durees1.py dans lequel vous réaliserez les questions suivantes.
1. Ecrire un programme qui définit une durée en heures, minutes, secondes (3 variables) puis calcule et
affiche la durée totale correspondante en secondes.
2. Vérifier à l’aide du débogueur l’état des différentes variables pour 6 heures 20 minutes et 12 secondes.

2.6 Durées 2
Créer un nouveau fichier durees2.py dans lequel vous réaliserez les questions suivantes.
1. Ecrire un programme qui définit une durée en secondes, puis calcule et affiche la durée correspondante
en heures, minutes, secondes.
2. Vérifier à l’aide du débogueur l’état des différentes variables pour 7982 secondes.

2.7 Saisie utilisateur


Créer un nouveau fichier saisie.py dans lequel vous réaliserez les questions suivantes.
1. Saisir et exécuter l’instruction b = input()

6
Algorithmique TD 2

2. La console attend la saisie au clavier d’une valeur. Saisir la valeur 1.


3. Ajouter une instruction permettant d’afficher le contenu de b, ainsi que son type.
4. Exécuter plusieurs fois ce programme, en saisissant des valeurs de nature différente : 1 ; 3.45 ; Toto
5. Que pouvez-vous en déduire sur le type par défaut de toute variable dont la valeur est saisie au
clavier ?
6. Modifier votre programme pour qu’il demande explicitement un nombre réel à l’utilisateur, et forcer
b à adopter ce typage.
7. Afficher le résultat de b/5. Ceci ne fonctionnera que si b a bien un type numérique.

2.8 Saisie utilisateur 2


Créer un nouveau fichier majorite.py dans lequel vous réaliserez la question suivante.
1. Saisir le programme répondant à l’exercice 1.8.
2. L’exécuter pour obtenir les deux traces d’exécution de l’énoncé.

2.9 Périmètre de cercle


Créer un nouveau fichier perimetre.py dans lequel vous réaliserez les questions suivantes.
1. Ecrire un algorithme permettant de calculer et d’afficher à l’utilisateur le périmètre d’un cercle dont
le rayon est saisi par l’utilisateur.
On pourra utiliser la constante math.pi, en incluant la bibliothèque en début de fichier avec import math.

2.10 RIB
Créer un nouveau fichier rib.py dans lequel vous réaliserez les questions suivantes.
Un relevé d’indentité bancaire (RIB) est composé de plusieurs séries de chiffres : le code banque, le code
guichet, le numéro de compte. La clé est une valeur calculée par application d’une formule sur les autres
chiffres. Elle permet entre autres de s’assurer qu’il n’y a pas eu d’erreur de saisie.
La formule de calcul de la clé est la suivante : Clé RIB = 97 - ( (89 x Code banque + 15 x Code guichet
+ 3 x Numéro de compte ) modulo 97 ).

1. Ecrire un programme qui définit les trois éléments d’un RIB et affiche la clé.
2. Suivre pas à pas l’exécution sur le cas de l’image d’exemple, en vérifiant la valeur des variables dans
le débogueur. Que peut-on dire du chiffre flouté ?

7
L1 MIASHS
Programmation 2023/2024

TD 3 : Algorithmique

Expressions conditionnelles

3.1 Compréhension de code


Soit l’algorithme

1 a = 5
2 b = 10
3 c = 15
4 i f a>b :
5 b = a
6 i f a<=b :
7 b = c
8 i f c != a and c > b :
9 c = 0
10 else :
11 if c < b :
12 c = 20
13 else :
14 c = 30
15 print (a , b , c )

Remplir le tableau d’exécution de cet algorithme. Quelles sont les valeurs affichées à la fin ?

3.2 Maximum
1. Ecrire un algorithme qui demande deux entiers à l’utilisateur et affiche le maximum des deux entiers.
2. Remplir un tableau d’exécution de cet algorithme.

3.3 Mention
Soit l’algorithme :

1 p r i n t ( ” S a i s i r une n o t e ”)
2 note = i n t ( input ( ) )
3 i f n o t e >= 1 0 :
4 p r i n t ( ”admis ”)
5 else :
6 p r i n t ( ” r e c a l é ”)
7 i f n o t e >= 1 2 :
8 p r i n t ( ” a s s e z b i e n ”)
9 i f n o t e >= 1 4 :
10 p r i n t ( ” b i e n ”)

8
Python TD 3

1. Quel sera l’affichage à l’utilisateur s’il saisit 8 ?


2. Quel sera l’affichage à l’utilisateur s’il saisit 15 ? (On pourra remplir un tableau d’exécution si besoin.)
3. Que peut-on dire sur l’organisation des conditionnelles pour ce problème ?

3.4 Conditions imbriquées


On considère la suite d’instruction suivantes :

1 a = 8
2 b = 7
3 if a > b:
4 i f a > 10:
5 print (1)
6 else :
7 i f b < 10:
8 print (2)
9 else :
10 i f a == b :
11 print (3)
12 else :
13 print (4)

1. Tracer le tableau d’exécution


2. Pour quelles valeurs de a et b ce programme affiche t’il respectivement 1, 2, 3 ou 4 ?
3. Existe t’il des valeurs de a et b pour lesquelles ce programme n’affiche rien ?

3.5 Météo
L’ouverture d’un viaduc aux véhicules est soumise à des conditions météo. Ainsi, il sera fermé s’il y a
un vent violent. Le pont sera également fermé s’il gèle par temps de pluie. On considère que trois variables
booléennes de la météo sont définies dans le programme : vent, pluie, gel.
1. Quelle est l’expression booléenne correspondant au pont ouvert ?
2. En appliquant les lois de De Morgan, déduire quelle est l’expression booléenne correspondant au pont
fermé.
3. Ecrire un programme permettant d’afficher le message ”Attention viaduc fermé” si le pont est fermé,
mais qui n’affiche rien sinon.
4. Le pont peut rester ouvert en cas d’extrème urgence. Considérant que l’on définit en plus une variable
urgence dans le programme, mettre à jour l’expression booléenne pour la fermeture du pont.

3.6 Livres
Ecrire un algorithme permettant d’afficher le tarif d’une commande de livres sachant que le prix unitaire
du livre est de 32 euros si l’on commande moins de 5 livres, 30 euros si on commande de 5 à 29 livres,
de 25 euros si on commande de 30 à 49 livres, de 22 euros si on commande 50 livres ou plus. On fixera
arbitraitrement dans une variable nb le nombre de livres commandés.

9
L1 MIASHS
Programmation 2023/2024

TD 4 : Python

Expressions conditionnelles

— Démarrer Visual Studio Code depuis Anaconda


— Ouvrir le dossier Python
— Créer un sous-dossier TD4 dans lequel vous mettrez les fichiers sources python pour ce TD.

4.1 Debug pas à pas


Créer un fichier exercice1.py pour cet exercice.
1. Ecrire le code de l’exercice 3.4.
2. Modifier l’initialisation de a et b puis utiliser le débogueur pour visualiser l’exécution de ce programme
dans les 4 configurations : le programme affiche 1, 2, 3, 4.

4.2 Bissextile
Créer un fichier bissextile.py pour cet exercice.
1. Ecrire un programme qui demande une année à l’utilisateur, et affiche si cette année est bissextile ou
non. On rappelle qu’une année est bissextile si :
— cette année est multiple de 4,
— elle n’est pas multiple de 100, sauf si elle est multiple de 400.
Par exemple, une sortie attendue serait :
L’année 2000 est bissextile.
2. Tester avec des exemples pertinents. Combien de tests faut-il faire au minimum pour cette fonction ?

4.3 Maximum
Créer un fichier maximum.py pour cet exercice.
On cherche à évaluer le maximum de trois nombres.
1. Ecrire un programme qui :
— définit trois nombres a, b et c,
— affiche le maximum des trois nombres. Par exemple, une sortie attendue serait : Le maximum des
nombres 12, 28 et 36 est 36.
Comment réaliser ce programme avec seulement deux comparaisons, sans utiliser la fonction max ?
2. Tester ce programme avec des exemples pertinents, et vérifier son déroulement dans le débogueur.
Combien de tests faut-il faire au minimum pour cette fonction ?

10
Algorithmique TD 4

4.4 Rideau
Créer un fichier rideau.py pour cet exercice.
On souhaite un programme qui permet de calculer le prix à payer pour l’achat d’un rideau. Les trois
premiers mètres sont vendus au prix unitaire, les 4 suivants avec une réduction au mètre de 10%, les autres
avec une réduction au mètre de 20%.
1. Rédiger une tel programme qui affichera le prix à payer, sachant qu’on considère deux variables pré-
définies, indiquant le prix au mètre ainsi que la longueur de rideau souhaitée. Par exemple, une sortie
attendue serait : Pour 10 mètres de rideau à 20 euros le mètre unitaire, la facture sera de 180.0 euros.
2. Tester pour différentes longueurs d’un rideau dont le prix unitaire est de 20 euros le mètre. Utiliser
le débogueur pour vérifier que votre code passe bien par les différentes expressions conditionnelles.

4.5 Nombres de Harshad


Créer un fichier harshad.py pour cet exercice.
Un nombre de Harshad est un entier naturel qui est divisible par la somme de ses chiffres.
1. Ecrire un programme qui :
— définit un nombre n strictement inférieur à 100,
— affiche un message indiquant si ce nombre est un nombre de Harshad.
Par exemple, une sortie attendue serait :
Le nombre 12 est un nombre de Harshad
ou
Le nombre 46 n’est pas un nombre de Harshad
2. Tester ce programme avec des exemples pertinents, et vérifier son déroulement dans le débogueur.
3. Enrichir ce programme pour qu’il affiche la justification du calcul. Par exemple, une sortie attendue
serait :
Le nombre 12 est un nombre de Harshad car 12 est divisible par 3 (1+2)
ou
Le nombre 46 n’est pas un nombre de Harshad car 46 n’est pas divisible par 10 (4+6)

4.6 Mention
Créer un fichier mention.py pour cet exercice.
1. En s’inspirant de l’exercice 3.3, rédiger un programme permettant de demander une note à l’utilisa-
teur et d’indiquer la mention associée (Recalé, Passable, Assez bien, Bien, Très bien). Attention à
l’imbrication des conditionnelles !
2. Tester pour différentes notes. Utiliser le débogueur pour vérifier que votre code passe bien par les
différentes expressions conditionnelles.

11
L1 MIASHS
Programmation 2023/2024

TD 5 : Algorithmique

Répétitives et itérations

5.1 Répétitive
Soit l’algorithme ci-dessous :

1 k = 16
2 somme = 0
3 w h i l e k> 1 :
4 somme = somme + k
5 k = k // 2
6 p r i n t ( somme )

Remplir le tableau d’exécution de cet algorithme. Quelle est la valeur affichée à la fin ?

5.2 Itération
Soit l’algorithme ci-dessous :

1 total = 0
2 f o r i in range ( 0 , 4 ) :
3 total = total + i
4 print ( total )

Remplir le tableau d’exécution de cet algorithme. Quelle est la valeur affichée à la fin ?

5.3 Itération et conditionnelle


Soit l’algorithme ci-dessous :

1 f o r i in range ( 0 , 20 ) :
2 i f i % 2 == 0 :
3 print ( i )

1. Quelles seront les valeurs prises par i à la ligne 1 ?


2. Combien de fois la ligne 2 sera-t-elle exécutée ?
3. Combien de fois la ligne 3 sera-t-elle exécutée ?
4. Quelle sera la première valeur affichée ?
5. Quelle sera la dernière valeur affichée ?

12
Python TD 5

5.4 Double itération


Soit le programme ci-dessous :

1 f o r i in range ( 0 , 3 ) :
2 f o r j in range ( 0 , 3 ) :
3 p r i n t ( f ”{ i } + { j } = { i+j } ”)

Remplir le tableau d’exécution de cet algorithme.

5.5 Carrés
Ecrire un algorithme qui définit un nombre n qui affiche les valeurs au carré des n premiers nombres. Par
exemple, n vaut 5, le programme affichera 1, 4, 9, 16, 25.

5.6 Moyenne des notes


Un enseignant souhaite faire la moyenne des notes obtenues par les étudiants à son module.

5.6.1 Première version


Ecrire un programme qui a le comportement suivant :
— demander le nombre nb de notes à saisir à l’utilisateur ;
— demander successivement les nb notes à l’utilisateur ;
— calculer la moyenne des notes et l’afficher.

5.6.2 Seconde version


Ecrire un programme qui a le comportement suivant :
— demander à l’utilisateur de saisir toutes ses notes ;
— l’utilisateur saisit -1 lorsque sa saisie est terminée ;
— calculer la moyenne des notes et l’afficher.

5.7 Affichages
Par défaut, l’instruction print inclut systématiquement un retour à la ligne après la chaine de caractères
affichée. La variante print(contenu,end=’’) permet d’afficher le contenu sans effectuer de retour à la ligne.
Soit le programme ci-dessous :

1 nb = 6
2 f o r i i n r a n g e ( 0 , nb ) :
3 f o r j in range (0 , i ) :
4 p r i n t ( ” * ” , end= ’ ’ )
5 print ()

Quel est l’affichage produit par ce programme ? On pourra rédiger une version simplifiée du tableau
d’exécution si nécessaire.

13
L1 MIASHS
Programmation 2023/2024

TD 6 : Python

Répétitives et itérations

— Démarrer Visual Studio Code


— Ouvrir le dossier Python
— Créer un sous-dossier TD6 dans lequel vous mettrez les fichiers sources python pour ce TD.

6.1 Ecriture d’une itération et debug pas à pas


Créer un fichier somme.py pour cet exercice.
1. Ecrire un algorithme qui définit un nombre n et affiche la somme des entiers de 0 à n. On pourra
s’inspirer de l’exercice 5.2. L’affichage attendu est du type : La somme des nombres de 0 à 10 est 55.
2. Utiliser le débogueur pour comprendre la manière dont s’accumule le résultat.

6.2 Moyenne
L’objectif est de coder les deux versions de moyennes vues dans l’exercice 5.6.
1. Créer un fichier moyenne1.py pour cette question. Coder l’algorithme de l’exercice 5.6.1.
2. Tester avec deux nombres de notes différents.
3. Créer un fichier moyenne2.py pour cette question. Coder l’algorithme de l’exercice 5.6.2.
4. Tester avec des nombres de notes différents. Vérifier notamment que la moyenne calculée est correcte.

6.3 Tables de multiplication


Créer un fichier tables.py pour cet exercice.
1. Ecrire un programme permettant d’afficher les tables de multiplication entre 0 et 9. L’affichage produit
est présenté ci-dessous. Attention, votre code ne devra pas faire plus de 6 lignes. On pourra s’inspirer
de l’exercice 5.4.
0x0=0 1x0=0 2x0=0 3x0=0 4x0=0 5x0=0 6x0=0 7x0=0 8x0=0 9x0=0
0x1=0 1x1=1 2x1=2 3x1=3 4x1=4 5x1=5 6x1=6 7x1=7 8x1=8 9x1=9
0x2=0 1x2=2 2x2=4 3x2=6 4x2=8 5x2=10 6x2=12 7x2=14 8x2=16 9x2=18
0x3=0 1x3=3 2x3=6 3x3=9 4x3=12 5x3=15 6x3=18 7x3=21 8x3=24 9x3=27
0x4=0 1x4=4 2x4=8 3x4=12 4x4=16 5x4=20 6x4=24 7x4=28 8x4=32 9x4=36
0x5=0 1x5=5 2x5=10 3x5=15 4x5=20 5x5=25 6x5=30 7x5=35 8x5=40 9x5=45
0x6=0 1x6=6 2x6=12 3x6=18 4x6=24 5x6=30 6x6=36 7x6=42 8x6=48 9x6=54
0x7=0 1x7=7 2x7=14 3x7=21 4x7=28 5x7=35 6x7=42 7x7=49 8x7=56 9x7=63
0x8=0 1x8=8 2x8=16 3x8=24 4x8=32 5x8=40 6x8=48 7x8=56 8x8=64 9x8=72
0x9=0 1x9=9 2x9=18 3x9=27 4x9=36 5x9=45 6x9=54 7x9=63 8x9=72 9x9=81

14
Algorithmique TD 6

6.4 L’ı̂le aux loups


Des loups, des moutons et des serpents vivent sur une ı̂le isolée du reste du monde. Chaque jour, le même
phénomène se produit :
— le matin, chaque loup tue un mouton ;
— le midi, chaque mouton tue un serpent ;
— l’après-midi, chaque serpent tue un loup.
1. Créer un fichier loups.py pour cette question. Ecrire un programme permettant de répondre au
problème suivant : à l’aube du premier jour, on considère qu’il y a sur cette ı̂le 322 loups, 567
moutons et 427 serpents. Combien de chaque animaux de chaque espèce restera-til à l’aube du 5ème
jour ? Vérifier avec le débogueur que le nombre de jours exécutés est bien correct.
2. Créer un fichier loups2.py pour cette question. Ecrire un programme permettant de répondre au
problème suivant : à l’aube du premier jour, on considère qu’il y a sur cette ı̂le 15 681 566 loups,
27 519 230 moutons et 20 773 652 serpents. Déterminer le nombre de jours j au bout duquel il restera
moins de 200 moutons sur cette ı̂le. Afficher le nombre de loups, serpents et moutons au jour j.

6.5 Nombres de Harshad


Un nombre de Harshad est un entier naturel qui est divisible par la somme de ses chiffres.
1. Créer un fichier harshad.py pour cette question. Ecrire un programme qui :
— définit un nombre entier nb, de valeur quelconque,
— affiche un message indiquant si ce nombre est un nombre de Harshad.
Par exemple, une sortie attendue serait : Le nombre 24130 est un nombre de Harshad ou Le nombre
246 n’est pas un nombre de Harshad
On pourra s’inspirer du TD précédent. On ne demande pas ici d’afficher la justification du calcul.
Bien visualiser dans le débogueur l’évolution du nombre dans la boucle.
2. Créer un fichier harshad2.py pour cette question. Ecrire un programme qui affiche tous les nombres
de Harshad compris entre 100 et 150.
3. Compléter le programme précédent pour afficher le nombre de nombres de Harshad compris entre
100 et 150.
4. Créer un fichier harshad3.py pour cette question. Ecrire un programme qui affiche le plus petit
nombre de Harshad supérieur à 501.

15
L1 MIASHS
Programmation 2023/2024

TD 7 : Algorithmique

Listes

7.1 Parcours par indice


Soit le programme ci-dessous :

1 l i s t e 1 = [2 ,13 ,26 ,18]


2 f o r i in range ( 0 , ( l e n ( l i s t e 1 ) ) ) :
3 i f i %2 == 0 :
4 print ( l i s t e 1 [ i ])

1. Quelles seront les valeurs prises par i ?


2. Remplir le tableau d’exécution de cet algorithme.
3. D’une manière générale, que fait cet algorithme par rapport à la liste liste1 ?

7.2 Parcours par valeurs


Soit le programme ci-dessous :

1 l i s t e 1 = [2 ,13 ,26 ,17]


2 max = 0
3 for val in l i s t e 1 :
4 i f v a l > max :
5 max = v a l
6 p r i n t (max)

1. Quelles seront les valeurs prises par val ?


2. Remplir le tableau d’exécution de cet algorithme.
3. D’une manière générale, que fait cet algorithme par rapport à la liste liste1 ?

7.3 Cumul
1. Ecrire un algorithme permettant de faire la somme des nombres contenu dans une liste. On définira
la liste à l’intérieur du programme.
2. Remplir le tableau d’exécution pour la liste [4,7,9]

16
Python TD 7

7.4 Comptage
Ecrire un programme qui définit une liste l1 ainsi qu’un nombre nb. Ce programme doit afficher le nombre
d’éléments de la liste qui sont des multiples de nb.
Par exemple, avec l1=[12,6,5,24,3] et nb=4, le programme affichera 2.

7.5 Construction de liste


Ecrire un programme qui définit une liste l1, contenant des entiers. Ce programme doit construire et
afficher une liste l2 contenant uniquement les nombres pairs contenus dans l1.
Par exemple, avec l1=[12,6,5,24,3], le programme affichera la liste l2 valant [12,6,24].

7.6 Rang
Ecrire un programme qui définit une liste l1 et qui affiche le rang de la plus petite valeur de la liste.
Par exemple, l1=[12,6,5,24,3,9], le programme affichera 4 (qui est l’indice de la valeur 3).

7.7 Liste de liste


Soit le programme ci-dessous :

1 l s t = [ [ ”A” , ”B” , ”C” ] , [ ”D” , ”E” ] ]


2 for ligne in l s t :
3 for val in ligne :
4 print ( val )

1. Combien d’éléments la liste lst contient-elle ?


2. Que vaut lst[1] ?
3. Que vaut lst[0][2] ?
4. Remplir le tableau d’exécution de cet algorithme.

7.8 Liste de mots


Soit ch une chaine de caractères. L’appel len(ch) permet d’accéder au nombre de caractères contenus
dans ch.
On considère un programme dans lequel est défini une liste de mots.
Par exemple : ["Bonjour", "bienvenue", "bon", "travail"]
Ecrire un algorithme permettant de construire et d’afficher une liste contenant la longueur de chaque
mot de la liste.
Par exemple, ici on affichera : [7, 9, 3, 7]

17
L1 MIASHS
Programmation 2023/2024

TD 8 : Python

Listes

— Démarrer Visual Studio Code depuis Anaconda


— Ouvrir le dossier Python
— Créer un sous-dossier TD8 dans lequel vous mettrez les fichiers sources python pour ce TD.

8.1 Multiple
Créer un fichier multiple.py pour cet exercice.
Ecrire un programme qui definit une liste l1 ainsi qu’un nombre nb. Ce programme doit afficher les
éléments de la liste qui sont des multiples de nb. Par exemple, avec l1=[12,6,5,24,3] et nb=4, le programme
affichera 12 et 24.

8.2 Moyenne
Créer un fichier moyenne.py pour cet exercice.
On considère le problème du calcul d’une moyenne de notes déjà vu dans les TDs précédents. Cette
fois, on considère que les notes sont stockées dans une liste l notes définie dans le programme. Ecrire un
programme qui calcule et affiche la moyenne des notes contenues dans la liste.
On produira un affichage du type : La moyenne des notes [12, 13, 8, 7, 15, 5, 10] est 10.0.

8.3 Construction de liste


Créer un fichier impairs.py pour cet exercice.
Ecrire un programme qui construit et affiche la liste des entiers impairs entre 1 et 49 inclus.

8.4 Mot plus court


Créer un fichier motcourt.py pour cet exercice.
1. Ecrire un programme qui :
— demande un entier nb à l’utilisateur,
— demande nb mots à l’utilisateur (mot par mot),
— stocke ces mots dans une liste l,
— affiche la liste saisie et le mot le plus court.
Par exemple, si l’utilisateur saisit 4, pomme, poire, abricots, kiwi, l’affichage sera : Dans la liste
[”pomme”, ”poire”, ”abricots”, ”kiwi”], le mot le plus court est kiwi.
2. Compléter cet affichage pour ajouter la position de la chaine la plus courte de la manière suivante :
Dans la liste [”pomme”, ”poire”, ”abricots”, ”kiwi”], le mot le plus court est kiwi au rang 3.

18
Algorithmique TD 8

8.5 Comparaison de listes


Créer un fichier comparaison.py pour cet exercice.
1. Ecrire un programme qui :
— définit deux listes lst1 et lst2, de même longueur, contenant des entiers.
— construit puis affiche une liste lst3, contenant les chaines de caractères ”=”, ”<”, et ”>”, résultant
de la comparaison deux à deux des éléments de lst1 et lst2, situés aux mêmex rangs.
Par exemple, pour lst1=[4,6,7,9] et lst2=[5,6,2,12], le résultat sera lst3=["<","=",">","<"]
On produira un affichage selon le modèle suivant : Le résultat de la comparaion entre [4, 6, 7, 9] et
[5, 6, 2, 12] est [’<’, ’=’, ’>’, ’<’]
2. Rajouter un test pour vérifier que les listes lst1 et lst2 sont de même longueurs. On affichera un
message d’erreur si cela n’est pas le cas.

8.6 Liste de listes


Créer un fichier liste2liste.py pour cet exercice.
Soit une liste définie de la manière suivante : lst = [["A","B","C"],["D","E","F"],["G","H","I"]]
Ecrire un programme affichant cette liste ligne par ligne :

A B C
D E F
G H I

Chaque valeur est séparée par des tabulations. Ce programme devra fonctionner pour toute autre liste en
entrée, quel que soit le nombre de lignes et de colonnes.

8.7 Harshad
Créer un fichier harshad.py pour cet exercice.
Ecrire un programme qui définit deux valeurs a et b et construit la liste de tous les nombres de Harshad
compris entre a et b.
Par exemple, un affichage produit serait : Il y a 10 nombres de Harshad entre 1400 et 1450 : [1400, 1404,
1410, 1413, 1416, 1417, 1422, 1431, 1440, 1450].

19
L1 MIASHS
Programmation 2023/2024

TD 9 : Algorithmique

Fonctions

9.1 Appels de fonctions simples

1 d e f c h i f f r e u n i t e s ( nombre ) :
2 u n i t e = nombre % 10
3 return unite
4 d e f c h i f f r e d i z a i n e s ( nombre ) :
5 dz = nombre // 10
6 r e t u r n dz
7
8 nb = 48
9 c h i f f r e 1 = c h i f f r e u n i t e s ( nb )
10 c h i f f r e 2 = c h i f f r e d i z a i n e ( nb )
11 t o t a l = c h i f f r e 1 * 10 + c h i f f r e 2
12 print ( total )

1. Remplir le tableau d’exécution du code ci-dessus.


2. Que fait ce programme par rapport à la valeur définie dans nb ?

9.2 Types d’entrées / sorties

1 d e f demander nombre ( ) :
2 nb = i n t ( i n p u t ( ” S a i s i r un nombre e n t i e r ”) )
3 r e t u r n nb
4 d e f e s t p o s i t i f ( nbr ) :
5 p o s i t i f = nbr > 0
6 return p o s i t i f
7 d e f a f f i c h e s y m b o l e ( symb ) :
8 p r i n t ( symb , symb , symb , symb )
9 v a l = demander nombre ( )
10 i f e s t p o s i t i f ( val ) :
11 a f f i c h e s y m b o l e ( ”+”)
12 else :
13 a f f i c h e s s y m b o l e ( ”= ”)

1. Dans le code ci-dessus, quelle sera la première ligne exécutée ?


2. Indiquer le prototype de chacune des fonctions, c’est à dire le nombre et le type des paramètres
d’entrée et de sortie de la fonction.
3. Remplir le tableau d’exécution du code ci-dessus pour une valeur de votre choix.

20
Algorithmique TD 9

9.3 Portée des variables

1 def calcul (a , b , c ) :
2 t o t a l = a *b + c
3 return total
4
5 a = 10
6 b = 15
7 c = 24
8 x = 12
9 y = 5
10 z = 20
11 print ( calcul (x , y , z ) )
12 total = calcul (a ,b , c )
13 print ( calcul (c ,b , a) )
14 print ( total )

1. Quels seront les affichages produits par ce code ?


2. Remplir le tableau d’exécution du code ci-dessus pour le justifier.

9.4 Affichage

1 def fonction1 () :
2 p r i n t ( ”a ”)
3
4 def fonction2 (b) :
5 return fonction4 (b , b)
6
7 def fonction3 ( c ) :
8 p r i n t ( ”c ”)
9 print ( c )
10
11 def fonction4 (a , b) :
12 r e t u r n a *b
13
14 a = 4
15 b = 5
16 fonction1 ()
17 a = fonction2 (7)
18 print (a)
19 fonction3 (8)

Quel est l’affichage produit par ce programme ?

9.5 Appels de fonctions par des fonctions


1. Écrire une fonction aff_liste qui prend une liste en entrée et affiche toutes les valeurs de la liste,
une par une.
2. Écrire une fonction somme_chiffres qui prend en entrée un entier positif et renvoie la somme de ses
chiffres. Par exemple, pour la valeur 1245, la fonction renvoie 12.
3. Écrire une fonction somme_liste_chiffres qui prend en entrée une liste d’entiers positifs et renvoie
une liste des sommes de chiffres de chaque entier. Par exemple, pour la liste [1245,351,6,52], la fonction
renvoie [12,9,6,7]. On réutilisera la fonction précédente.

21
Python TD 9

4. Écrire un programme qui définit une liste maliste = [1245,351,6,52], l’affiche élément par élément,
puis calcule la liste des sommes de chiffres et l’affiche élément par élement.

9.6 Appels récursifs


Le code ci-dessous permet de calculer une valeur de la suite de Fibonacci.

1 def fibonacci (n) :


2 i f n == 0 :
3 return 0
4 e l i f n == 1 :
5 return 1
6 else :
7 f 1 = f i b o n a c c i ( n = 1)
8 f 2 = f i b o n a c c i ( n = 2)
9 r e t u r n f 1+f 2
10
11 print ( fibonacci (3) )

1. Quelle est l’expression mathématique de la suite de Fibonacci ?


2. Remplir un schéma (tableau d’exécution ou pile d’appels) permettant de montrer l’imbrication des
appels successifs.

9.7 Suite
Soit la suite définie par :
Un = Un−1 ∗ n + 3
U0 = 1
1. Écrire une fonction récursive suite qui permet d’évaluer la valeur de Un pour une valeur de n passée
en paramètre.
2. Ecrire un programme qui définit une valeur nb, calcule puis affiche la valeur de Unb .

22
L1 MIASHS
Programmation 2023/2024

TD 10 : Python

Fonctions

— Démarrer Visual Studio Code depuis Anaconda


— Ouvrir le dossier Python
— Créer un sous-dossier TD10
L’intégralité du travail doit être réalisé dans un fichier jeu.py.

Pérsentation du problème
Ce TD est inspiré du jeu de société ”Turing Machine”, dans lequel les joueurs collectent des indices pour
trouver un nombre à troix chiffres, ABC. A est le chiffre des centaines, B le chiffre des dizaines et C le chiffre
des unités. A, B et C varient entre 1 et 5.
A B C
1 1 1
2 2 2
3 3 3
4 4 4
5 5 5
Par exemple, si les contraintes collectées sont :
— la somme des chiffres vaut 6,
— le chiffre B vaut 2,
— les chiffres A, B, C sont décroissants strictement (A>B>C),
alors il existe une seul nombre possible qui est ...
L’objectif du TD est de résoudre automatiquement cette enigme. Pour cela, l’idée est de générer la liste
de toutes les valeurs possibles : [111, 112, 113, ... , 224, 225, 231, 232, ..., 553, 554, 555] ; puis d’appliquer
au fur et à mesure les contraintes pour réduire la liste aux valeurs compatibles.

10.1 Accès à chacun des chiffres


1. Écrire une fonction chiffre_A qui prend en entrée un nombre de la forme ABC et qui renvoie le
chiffre A (c’est à dire le chiffre des centaines).
2. Écrire une fonction chiffre_B qui prend en entrée un nombre de la forme ABC et qui renvoie le
chiffre B (c’est à dire le chiffre des dizaines).
3. Écrire une fonction chiffre_C qui prend en entrée un nombre de la forme ABC et qui renvoie le
chiffre C (c’est à dire le chiffre des unités).
4. Ecrire un programme qui définit un nombre nb_test et qui affiche les valeurs de ses chiffres A, B et
C. Par exemple, une sortie attendue serait : Les valeurs ABC pour le nombre 254 sont A=2, B=5,
C=4

23
Algorithmique et Python TD 10

10.2 Somme des chiffres


1. Écrire une fonction somme_chiffres qui prend en entrée un nombre de la forme ABC et qui renvoie
la sommes des chiffres A, B, C.
2. Ecrire un programme qui affiche la somme des chiffres du nombre nb_test. Par exemple, une sortie
attendue serait : Quelle est la sommes de chiffres de 254 ? 11

10.3 Génération de la liste


1. Écrire une fonction liste_initiale qui construit et renvoie une liste contenant tous les nombres
ABC possibles pour le jeu, sachant que A, B et C peuvent varier de 1 à 5.
2. Ecrire un programme qui crée cette liste, la stocke dans la variable maliste et l’affiche. Note : cette
liste doit contenir 125 éléments.

10.4 Filtres de contraintes


Nous allons maintenant créer des fonctions pour appliquer les contraintes sur la liste.
1. Écrire une fonction filtre_somme qui prend en entrée une liste de nombres lst et une valeur val.
Cette fonction construit et retourne une liste contenant les nombres de lst dont la somme des chiffres
ABC vaut val.
2. Écrire un programme qui filtre la liste maliste pour obtenir une liste réduite maliste1 dont les
valeurs vérifient la contrainte : ”la somme des chiffres vaut 6”.
3. Écrire une fonction filtre_valeur_B qui prend en entrée une liste de nombres lst et une valeur
val. Cette fonction construit et retourne une liste contenant les nombres de lst dont la valeur de B
vaut val.
4. Écrire un programme qui filtre la liste maliste1 pour obtenir une liste réduite maliste2 dont les
valeurs vérifient la contrainte : ”le chiffre B vaut 2”.
5. Écrire une fonction filtre_decroissant qui prend en entrée une liste de nombres lst.Cette fonction
construit et retourne une liste contenant les nombres de lst tels que les chiffres A, B et C soient
décroissants (A>B>C).
6. Écrire un programme qui filtre la liste maliste2 pour obtenir une liste réduite maliste3 dont les
valeurs vérifient la contrainte : ”les chiffres sont dans l’ordre décroissant”.
7. Vérifier que la maliste3 ne contient plus qu’une valeur, celle que vous aviez prédite au début du TD !

10.5 Pour aller plus loin


Sur le même principe que précédemment, écrire les fonctions et le programme nécessaire pour trouver le
nombre vérifiant les trois contraintes suivantes :
— les chiffres A et C sont pairs,
— le chiffre B est supérieur à A et C,
— la somme des chiffres est 8.

24
L1 MIASHS
Programmation 2023/2024

TD 11 : Algorithmique et Python

Révisions

— Démarrer Visual Studio Code depuis Anaconda


— Ouvrir le dossier Python
— Créer un sous-dossier TD11 dans lequel vous mettrez les fichiers sources python pour ce TD.

11.1 Coccinelles
On étudie l’évolution d’une population de coccinelles. Cette population augmente de 5% tous les ans, et
50 coccinelles meurent chaque année. Cette année, on a recensé 5000 individus.
1. Écrire un programme coccinelles1.py permettant de déterminer la population de coccinelles au
bout de N années. Par exemple, un affichage produit sera : Au bout de 10 ans, la population sera de
7512 coccinelles.
2. Écrire un programme coccinelles2.py permettant de déterminer combien d’années sont nécessaires
pour que la population augmente d’au moins une valeur P%. Par exemple, un affichage produit pour
P = 20% sera : La population aura augmenté de 20% au bout de 5 ans (avec 6104 coccinelles).

11.2 Algorithmique
Soit le code suivant.

1 def plus long mot ( l i s t e ) :


2 plus grand = l i s t e [ 0 ]
3 f o r mot i n l i s t e :
4 i f l e n ( mot ) > l e n ( p l u s g r a n d ) :
5 p l u s g r a n d = mot
6 return plus grand
7 d e f e n l e v e m o t ( l i s t e , mot ) :
8 lst2 = []
9 for val in l i s t e :
10 i f v a l != mot :
11 l s t 2 . append ( v a l )
12 return l s t 2
13
14 l i s t e m o t s = [ ” s u c r e ” , ” s e l ” , ”pamplemousse ” ]
15 lst2 = []
16 nb mots = l e n ( l i s t e m o t s )
17 f o r i i n r a n g e ( 0 , nb mots ) :
18 mot = p l u s l o n g m o t ( l i s t e m o t s )
19 l i s t e m o t s = e n l e v e m o t ( l i s t e m o t s , mot )
20 l s t 2 . append ( mot )
21 print ( lst2 )

25
Algorithmique et Python TD 11

Répondre aux questions sur papier.


1. Quelle est la première ligne de code qui sera exécutée ?
2. Quel est le prototype de chacune des deux fonctions ? Que font chacune de ces deux fonctions ?
3. A la ligne 17, quelles seront les valeurs prises par i ?
4. Tracer un tableau d’exécution simplifié, en montrant bien les appels des fonctions, avec les valeurs des
paramètres et les valeurs de retour. On pourra se contenter de représenter les contenus de l’exécution
des fonctions avec de simples boites.
5. Que fait ce programme ?

11.3 Etoiles
Créer un fichier etoiles.py pour cet exercice.
Écrire un programme qui définit un nombre nb et affiche une structure d’étoiles selon le modèle suivant.
Ici, la figure est affichée pour nb=5.

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

Ici, la figure est affichée pour nb=3.

***
*
*
*
***

11.4 Carré magique


Créer un fichier carre.py pour cet exercice.
Un carré magique est une grille dont la somme de chaque ligne et la somme de chaque colonne sont
égales. Par exemple, le carre ci-dessous est magique :

4 14 15 1
9 7 6 12
5 11 10 8
16 2 3 13

1. Dans le programme principal, définir une variable carre contenant le carré magique ci-dessus. On
choisit de représenter le carré comme une liste de lignes, chaque ligne étant une liste d’entiers.
2. Écrire une fonction affiche_carre qui prend en entrée un carré (une liste de listes) et l’affiche le
carré de la manière ci-dessous.

26
Algorithmique et Python TD 11

4 14 15 1
9 7 6 12
5 11 10 8
16 2 3 13

Chaque valeur est séparée par une tabulation.


3. Écrire une fonction somme_ligne qui prend en entrée une liste d’entiers et renvoie la somme de tous
les entiers de la liste.
4. Écrire une fonction lignes_egales qui prend en entrée un carré magique (une liste de listes) et
renvoie un booléen qui indique si toutes les lignes du carré ont une somme égale.

Pour aller plus loin


1. Écrire une fonction somme_colonne qui prend en entrée un carré et un indice i, et qui calcule la
somme de la colonne i dans le carré.
2. Écrire une fonction colonnes_egales qui prend en entrée un carré et renvoie un booléen qui indique
si toutes les colonnes du carré ont une somme égale.
3. Écrire une fonction est_magique qui prend en entrée un carré et renvoie un booléen indiquant si le
carré est magique.

27

Vous aimerez peut-être aussi