Python - Exercises - En.fr (1) - Copie
Python - Exercises - En.fr (1) - Copie
Python - Exercises - En.fr (1) - Copie
com
Chapitre 1
1. Utilisez plusieurs instructions d'impression pour imprimer un triangle qui ressemble exactement à celui ci-dessous.
*
**
***
****
2. Utilisez plusieurs déclarations imprimées pour imprimer la lettreUNexactement comme celui ci-dessous.
*
**
*****
* *
* *
14·12
3. Écrivez une ligne de code qui calcule et imprime le résultat du calcul .
33·144−187
4. Écrivez un programme qui demande à l'utilisateur d'entrer une distance en kilomètres, puis imprime la
distance en miles. Il y a 0,621371 miles dans un kilomètre.
5. Écrivez un programme qui demande à l'utilisateur d'entrer son nom. Puis imprimez le nom de l'utilisateur trois fois sur la
même ligne.
6. Écrivez un programme qui demande à l'utilisateur d'entrer deux nombres (vous voudrez probablement utiliser dessaisir
déclarations pour cela). Ensuite, imprimez le résultat de l'addition de ces deux nombres.
703w
IMC = ,
h2
oùwest le poids de la personne en livres ethest la taille de la personne en pouces. Écrivez un programme qui
demande à l'utilisateur sa taille, son poids et imprime son IMC. [Remarque : une façon de calculerh2est tel queh
·h.]
8. Écrivez un programme qui demande à l'utilisateur d'entrer cinq chiffres (utilisez cinqsaisirdéclarations). Ensuite,
imprimez tous ces nombres sur la même ligne, chaque nombre étant séparé des autres par exactement trois espaces.
Utilisez lesepargument facultatif à l'instruction print pour ce faire.
9. Écrivez un programme qui demande à l'utilisateur d'entrer un nombre. Stockez ce nombre dans une variable. Ajoutez 2
à ce nombre, stockez le résultat dans la même variable, puis imprimez la valeur de cette variable.
1
Chapitre 2
Note:Les programmes de cette section impriment beaucoup de choses. Par défaut, lorsque plusieursimprimerinstructions
sont utilisées, chacune s'imprimera sur une ligne distincte. Cependant, en ajoutant un argument optionnel commefin=''ou
fin='', nous pouvons forcer les choses à rester sur la même ligne. Par exemple, au lieu deimprimer('Bonjour')on peut utiliser
imprimer('Bonjour',fin=''). Cela rendra la sortie de certains programmes plus facile à lire et à tester. Notez
également qu'un champ videimprimer()déclaration annulera l'effet de lafinargument facultatif.
1. Écrivez un programme qui demande à l'utilisateur d'entrer un mot, puis imprime ce mot 25 fois (chacune sur des lignes
séparées).
2. Écrivez un programme qui demande à l'utilisateur d'entrer un mot, puis imprime ce mot 200 fois, chacune sur la même
ligne.
3. Écrivez un programme qui utilise une boucle for pour imprimer les nombres 5, 6, 7, 8, 9, . . . 89, 90, tous sur la même ligne
séparés par des espaces.
4. Écrivez un programme qui utilise une boucle for pour imprimer 2, 6, 10, 14, 18, . . . , 98, 102, tous sur la même ligne séparés par des
espaces.
5. Écrivez un programme qui utilise une boucle for pour imprimer 29, 28, 27, 26, 26, . . . , 5, 4, tous sur la même ligne séparés par des
espaces.
6. Écrivez un programme qui utilise une boucle for pour imprimer la sortie ci-dessous :
1. Un
2. Un
3. Un
4. Un
5. Un
7. Écrivez un programme qui utilise une boucle for pour imprimer les 20 premiers carrés parfaits, tous sur la même ligne. Les
premiers sont 1, 4, 9, 16, 25, . . . .
8. Écrivez un programme qui utilise des boucles for pour imprimer 40 A suivis de 50 B, tous sur la même ligne.
9. Écrivez un programme qui utilise une boucle for pour afficher ABCABCABC. . . , où ABC se répète 100 fois. Imprimez
tout cela sur la même ligne.
10. Écrivez un programme qui utilise exactement trois boucles for pour imprimer la sortie ci-dessous. Il a 10 A,
suivis de 5 copies de BCD, suivis d'un E, suivis de 15 F.
AAAAAAAAAABCDBCCDBCDBCDBCDEFFFFFFFFFFFFFFF
11. Écrivez un programme qui demande à l'utilisateur d'entrer un nombre, puis imprime la lettre A autant de fois, toutes
sur la même ligne.
2
12. Écrivez un programme qui utilise une boucle et unsaisirpour demander à l'utilisateur d'entrer 10 chiffres. Après
avoir entré chaque nombre, imprimez le carré de ce nombre.
13. Écrivez un programme qui demande à l'utilisateur d'entrer une hauteur, puis dessine une boîte comme celle ci-dessous qui est large de
10 astérisques et aussi haute que spécifiée par l'utilisateur.
**********
**********
**********
**********
14. Écrivez un programme qui demande à l'utilisateur d'entrer une taille, puis dessine la lettre C comme celle ci-dessous. Sa largeur
et sa hauteur doivent être égales et la taille spécifiée par l'utilisateur.
*****
*
*
*
*****
3
chapitre 3
1. Ecrire un programme qui demande à l'utilisateur deux nombresXetypuis imprime le résultat deXy.
9+3
2. Écrivez un programme qui effectue le calcul suivant en Python : to 2. . Le résultat devrait sortir
8−2
Faites attention à l'ordre des opérations.
3. Certains jeux de société exigent que vous réduisiez de moitié le nombre de cartes que vous détenez, arrondi à
l'inférieur. Par exemple, si vous avez 10 cartes, vous réduiriez à 5 et si vous aviez 11 cartes, vous réduiriez
également à 5. Avec 12 cartes, vous réduiriez à 6. Écrivez un programme qui demande à l'utilisateur d'entrer
combien de cartes il a et imprimez ce que leur main réduirait selon cette règle.
4. La distance entre deux nombres sur la droite numérique est la valeur absolue de la différence des deux
nombres. Par exemple, la distance entre 3 et 7,2 est|3−7.2|=4.2.Écrivez un programme qui demande à
l'utilisateur deux nombres et imprime la distance qui les sépare.
5. Écrivez un programme qui demande à l'utilisateur d'entrer un nombre positif, puis imprime la racine carrée de
ce nombre arrondie à 2 décimales.
6. Écrivez un programme qui imprime les nombres de 1 à 20 et leurs racines carrées, arrondies à 4
décimales, la racine carrée du nombre étant sur la même ligne que le nombre.
8. Au format 24 heures, les heures vont de 0 heures (minuit) à 23 heures (alias 23 heures). Écrivez un programme
qui demande à l'utilisateur l'heure actuelle et combien d'heures dans le futur il veut passer. Demandez au
programme d'imprimer ce que sera l'heure de ce nombre d'heures à l'avenir. Par exemple, s'il est 13 heures
maintenant, dans 27 heures il sera 16 heures. [Astuce : utilisez l'opérateur mod.]
9. Écrivez un programme qui demande à l'utilisateur une taille en pouces et imprime combien de pieds et de pouces cela
représente. Il y a 12 pouces dans un pied. Par exemple, 40 pouces correspondent à 3 pieds et 4 pouces. [Astuce : utilisez
l'opérateur // et l'opérateur % pour obtenir chaque partie.]
10. Écrivez un programme qui génère deux nombres aléatoires de 1 à 10 et imprime les deux nombres et
leur somme.
11. Écrivez un programme qui génère et imprime 100 nombres aléatoires de 50 à 60, tous sur la même ligne,
séparés par des espaces.
12. Écrivez un programme qui demande à l'utilisateur d'entrer une lettre. Ensuite, il génère un nombre aléatoire
entre 1 et 10 et imprime la lettre autant de fois.
4
13. Écrivez un programme qui demande à l'utilisateur d'entrer un entier positif. Générez ensuite un nombre
aléatoire entre ce nombre et 10 de plus que ce nombre et imprimez la lettre A autant de fois sur la même ligne.
14. Écrivez un programme qui génère et imprime 10 zéros et uns aléatoires, tous sur la même ligne, sans espace entre eux.
Ensuite, sur la ligne suivante, faites la même chose mais avec 11 zéros et uns aléatoires. Sur la ligne suivante, faites la
même chose mais avec 12 zéros et uns aléatoires. Au total, il devrait y avoir 50 lignes, chacune avec une valeur
aléatoire de plus que la ligne précédente. Les premières lignes pourraient ressembler à celles ci-dessous. [Astuce :
vous voudrez utiliser une boucle for imbriquée dans une autre.]
1000110101
11100100101
110101000100
0010010001000
15. Ce problème consiste à trouver le jour de la semaine de n'importe quelle date depuis environ 1583. Demandez à l'utilisateur
d'entrer l'annéey, moism, et jourdséparément. Les formules suivantes donnent le jour de la semaine :
⌊ ⌋
14− m
p=
12
q=y−p
⌊⌋ ⌊ ⌋⌊ ⌋
q q q
r=q+ − +
4 100 400
s=m+12p−2
( ⌊ ⌋)
31s
t=d+r+ mode 7
12
Leavant JCles parenthèses indiquent la fonction de plancher. En Python, vous pouvez le faire simplement en faisant une
division entière. Par exemple,ppeut être calculé simplement en faisant (14-m)//12.
5
Chapitre 4
1. Écrivez un programme qui demande à l'utilisateur d'entrer un langage de programmation. S'ils entrentpython, puis
imprimez le message "Ce programme a été écrit en Python". Sinon, rien ne devrait se passer (aucune instruction else
n'est nécessaire).
2. Écrivez un programme qui demande à l'utilisateur d'entrer un nombre. Si le nombre est négatif, imprimez un message
leur indiquant qu'ils ne peuvent pas entrer de négatif. Sinon, imprimez la racine carrée de ce nombre.
3. Demandez à l'utilisateur d'entrer une température en degrés Celsius. Si la température est inférieure ou égale à 0, imprimez
"Avertissement : Basse température". Si la température est comprise entre 0 et 35, écrivez "La température est correcte".
Sinon, imprimez « Avertissement : température élevée ».
4. Demandez à l'utilisateur d'entrer un nombre de jours. Si l'utilisateur saisit 28 ou 29, le programme doit
imprimer "Feb". S'ils entrent 30, le programme devrait imprimer "Apr, Jun, Sep, Nov". S'ils entrent 31, le
programme devrait imprimer « Jan, Mar, May, Jul, Aug, Oct, Dec ». Pour toute autre entrée, le programme doit
afficher "Erreur".
5. Demandez à l'utilisateur une longueur en pieds. Demandez-leur ensuite dans quelle unité ils veulent convertir (pouces,
centimètres ou mètres) et imprimez la valeur convertie. Il y a 12 pouces dans un pied, 30,48 cm dans un pied et 0,3048
mètre dans un pied. Si l'unité choisie ne fait pas partie des unités ci-dessus, imprimez un message d'erreur.
6. Demandez à l'utilisateur d'entrer un nombre de 20 à 99. Si le nombre est dans les années 20, écrivez "veinte",
qui est l'espagnol pour vingt. Si le nombre est dans les années 30, écrivez "treinta", espagnol pour trente. Faites
la même chose pour toutes les autres gammes. Les noms des numéros espagnols pour 40 et au-delà sont
actuellement, cincuente,senta,setenta,ochente, etnoventa. Si le nombre n'est pas compris entre 20 et 99,
imprimez un message d'erreur.
8. Les mods sont utiles pour savoir si un nombre est divisible par un autre. Écrivez un programme qui demande à
l'utilisateur un nombre et affiche ensuite si ce nombre est divisible par 7.
9. Écrivez un programme qui imprime tous les nombres de 1 à 100 qui sont divisibles par 3 ou 7 mais pas divisibles
par les deux.
10. Écrivez un programme qui génère 100 zéros et uns aléatoires. Chaque fois qu'un 0 est généré, le programme
doit imprimer un point d'interrogation et chaque fois qu'un 1 est généré, un astérisque doit être imprimé. Que
tout soit imprimé sur la même ligne.
11. Écrivez un programme qui imprime 100 lettres aléatoires qui peuvent être A, B, C, D ou E, toutes sur la même ligne.
12. Écrivez un programme qui imprime 100 zéros et uns aléatoires sur la même ligne, mais tel que les zéros soient deux fois plus
susceptibles que les uns d'apparaître.
6
13. Il s'agit d'un programme de facturation très simple. Demandez à l'utilisateur une heure de début et une heure de fin,
toutes deux données au format 24 heures (par exemple, 13 h = 13, 14 h = 14, etc.). Les frais d'utilisation du service
sont de 5,50 $ de l'heure. Imprimez la facture totale de l'utilisateur. Vous pouvez supposer que le service sera utilisé
pendant au moins 1 heure et jamais plus de 23 heures. Veillez à prendre soin du cas où l'heure de début est avant
minuit et l'heure de fin est après minuit.
14. Écrivez un programme qui imprime sur des lignes séparées les 200 éléments suivants :fichier0.jpg, fichier1.jpg, . . . ,
fichier199.jpg,sauf qu'il ne devrait rien imprimer lorsque le nombre se termine par 8, commefichier8.jpg
,fichier18.jpg,etc. [Astuce :sije % 10n'est pas 8, alorsjene se termine pas par 8.]
15. La conjecture de Collatz est un problème mathématique bien connu. Commencez avec n'importe quel nombreX. S'il est
pair, divisez-le par 2. S'il est impair, calculez3X+1.Ensuite, répétez le processus avec le numéro suivant, celui d'après,
etc. Collatz a supposé que peu importe où vous commencez, vous finirez toujours par arriver au numéro 1.
Par exemple, en commençant parX=3,puisque 3 est impair, on calcule3X+1pour obtenir 10. Puis puisque 10 est pair, on divise
par 2 pour obtenir 5. Puis puisque 5 est impair, on fait3X+1pour obtenir 16. Puis puisque 16 est pair, nous divisons par 2 pour
obtenir 8. En continuant, nous obtenons alors 4, 2 et 1, à quel point la séquence commence à se répéter.
Écrivez un programme qui demande à l'utilisateur une valeur de départ, puis imprime les 30 premiers termes de la séquence
de Collatz, tous sur la même ligne.
16. Une façon de résoudre des équations mathématiques est par essais et erreurs. Les ordinateurs peuvent aider à cela.
L'équation 21X2−X3+21904 = 0a une solution entière entre 1 et 100. Utilisez une boucle for et une instruction if pour la
trouver.
17. Écrivez un programme pour jouer au jeu suivant. Le programme devrait générer aléatoirement 10 problèmes
d'addition avec trois nombres allant de 20 à 50 (par exemple23+50+37).Pour chaque problème, l'utilisateur
devine la réponse. S'ils obtiennent la bonne réponse, écrivez "Bien !" Si leur réponse est à moins de 5 de la
bonne réponse, écrivez "Fermer !" Sinon, écrivez "Mauvais".
7
Chapitre 5
1. Écrivez un programme qui génère 50 nombres aléatoires de 1 à 9. Imprimez les 50 nombres sur la même ligne.
Ensuite, imprimez combien de cinq sont générés.
2. Écrivez un programme qui additionne tous les nombres de 1 à 100 et imprime le résultat.
3. Écrivez un programme qui additionne les sinus (utilisez lepéché()fonction de lamathématiquesmodule) de tous
les nombres de 1 à 100 et imprime le résultat.
5. Écrivez un programme qui utilise une boucle pour demander à l'utilisateur d'entrer 10 nombres. Imprimez combien de
nombres sont positifs et additionnez tous les nombres.
6. Écrivez un programme qui génère au hasard 10 nombres de 1 à 5 et demande à l'utilisateur de deviner chaque
nombre. Pour chaque supposition, imprimez si elle est bonne ou mauvaise. À la fin, imprimez combien
l'utilisateur a raison et combien il a tort.
7. Écrivez un programme qui génère au hasard 10 nombres de 1 à 10 et demande à l'utilisateur de deviner chaque nombre. Pour chaque
supposition, imprimez si elle est bonne, mauvaise ou proche (à moins de 1 de la bonne réponse). Gardez également le score, où les
joueurs marquent 5 pour une estimation correcte, 2 pour une estimation proche et -1 pour une estimation erronée. Imprimez le score
accumulé après chaque supposition.
8. Une façon d'estimer les probabilités est d'exécuter ce qu'on appelle unsimulation par ordinateur. Ici, nous allons
estimer la probabilité de lancer des doubles avec deux dés (où les deux dés sortent à la même valeur). Pour ce faire,
exécutez une boucle 10 000 fois dans laquelle des nombres aléatoires sont générés représentant les dés et un compte
est tenu du nombre de fois où des doubles apparaissent. Imprimez le pourcentage final de rouleaux qui sont des
doubles.
9. Dans le jeu Yahtzee, les joueurs lancent cinq dés. Un Yahtzee, c'est quand les cinq dés sont identiques. Écrivez un
programme qui simule le roulement cinq 10 000 fois et compte le nombre de Yahtzees qui se produisent. Imprimez
quel pourcentage des rouleaux sont des Yahtzees.
10. Écrivez un programme qui demande à l'utilisateur quatre valeurs —w,X,y, etz. Trouvez le plus petit deXety, le
plus petit deyetz, et échangez leurs deux valeurs. Puis imprimez les valeurs dew,X,y, etz.
11. Écrivez un programme qui génère 20 nombres aléatoires de 1 à 10. Imprimez tous les nombres générés
sur la même ligne. Une seule fois, après que tous les nombres ont été imprimés, imprimez si oui ou non
le nombre 10 a été généré.
12. Écrivez un programme qui génère 20 nombres aléatoires de 1 à 10. Imprimez tous les nombres générés
sur la même ligne. Une seule fois, une fois que tous les numéros ont été imprimés, imprimez si oui ou
non le même numéro a été généré deux fois de suite. [Astuce : utilisez une variable pour garder une
trace du dernier numéro généré.]
8
13. Ecrivez un programme qui demande à l'utilisateur d'entrer 10 nombres entre 0 et 100. Une fois tous les
nombres entrés, de tous les nombres que l'utilisateur entre entre 50 et 100, imprimez le plus petit. Si
aucun n'est dans cette plage, imprimez un message indiquant ce fait.
14. Écrivez un programme qui demande à l'utilisateur d'entrer 10 nombres. Imprimez ensuite les deux plus petits nombres
saisis (ils peuvent avoir la même valeur).
15. Considérez la séquence suivante : 1, 1, 3, 7, 17, 41, 99, 239, 577, 1393, . . . . Les deux premiers termes sont 1 et
chaque terme de la séquence est obtenu à partir des deux termes précédents en prenant deux fois le terme
précédent et en l'ajoutant au terme précédent. Par exemple,3 = 2·1 + 1, 7 = 2·3 + 1,et17 = 2·7 + 3.Sous forme
d'équation, chaque termeunnest donné parunn=2unn−1+unn−2. Écrire un programme qui demande à l'utilisateur
une valeur,n, et imprime le premierntermes de la suite.
16. Considérez la séquence suivante : 1, 2, 3, 2,0, 2,333, 2,444, 2,259, 2,345, . . . Les trois premiers termes sont 1, 2, 3 et
chaque terme supplémentaire de la séquence est obtenu à partir de la moyenne des trois termes précédents.
Par exemple, le quatrième terme est (1+2+3)/3 = 2,et le cinquième terme est (2+3+2)/3 = 2.333.Sous forme d'équation,
chaque termeunnest donné parunn= (unn−1+unn−2+unn−3)/3.Écrire un programme qui demande à l'utilisateur une
valeur,n, et imprime le premierntermes de la suite.
9
Chapitre 6
1. Créez la chaîne Python suivante :Hamlet n'a-t-il pas dit "Être ou ne pas être" ?
2. Créez une chaîne multiligne contenant la lettre A sur la première ligne, la lettre B sur la deuxième ligne, une seule barre
oblique inverse (\) sur la troisième ligne et les lettres C et D séparées par une tabulation (\t)sur la quatrième ligne.
3. Écrivez un programme qui demande à l'utilisateur d'entrer une chaîne d'au moins six caractères. Puis imprimez ce qui
suit :
4. Écrivez un programme qui demande à l'utilisateur d'entrer deux chaînes. Sortez ensuite la première chaîne répétée 10
fois et sortez la concaténation des deux chaînes (d'origine).
5. Écrivez un programme qui demande à l'utilisateur d'entrer un nombre (mais lisez simplement cette valeur sous forme de chaîne).
Imprimez si ce nombre est un nombre entier ou un nombre à virgule flottante. Les nombres à virgule flottante contiennent des points
décimaux, contrairement aux nombres entiers.
7. Écrivez un programme qui demande à l'utilisateur d'entrer une chaîne. Si la chaîne contient des points, des
virgules ou des points-virgules, imprimez le message "Il y a de la ponctuation". Sinon, imprimez le nombre
d'espaces qu'il y a dans la chaîne.
8. Écrivez un programme qui demande à l'utilisateur d'entrer une phrase, supprime tous les espaces de la
phrase, convertit le reste en majuscules et imprime le résultat.
dix
9. Écrivez un programme qui demande à l'utilisateur d'entrer une chaîne, remplace tous les espaces par des
astérisques, puis remplace chaque cinquième caractère (en commençant par l'index 0) par un point
d'exclamation, et enfin concatène trois copies de ce résultat ensemble. Par exemple,c'est un testdeviendrait !
son * !s * un * !est!son * !s * un * !est!son * !s * un * !est.
10. Écrivez un programme qui demande à l'utilisateur d'entrer une chaîne. Si la chaîne comporte au moins cinq caractères,
créez une nouvelle chaîne composée des cinq premiers caractères de la chaîne et de trois astérisques à la fin. Sinon,
ajoutez suffisamment de points d'exclamation (!) à la fin de la chaîne pour obtenir une longueur maximale de cinq.
11. Écrivez un programme qui demande à l'utilisateur d'entrer une chaîne. Ensuite, parcourez la chaîne et imprimez tous
les caractères de la chaîne avec un espace inséré après chaque caractère. Par exemple, si l'utilisateur saisit
ABCDE,la sortie seraitABCD E.
12. Écrivez un programme qui demande à l'utilisateur d'entrer une chaîne. Ensuite, parcourez la chaîne et créez une
nouvelle chaîne composée de tous les caractères de l'original avec des espaces insérés après chaque caractère. Par
exemple, si l'utilisateur saisitABCDE,la nouvelle chaîne serait'AB CDE '. Assurez-vous que cette nouvelle chaîne est
stockée dans une variable. Imprimez la valeur de la nouvelle chaîne.
13. Écrivez un programme qui demande à l'utilisateur d'entrer une chaîne. Afficher si la chaîne contient plus de A majuscules que
de B majuscules, le même montant ou plus de B majuscules.
14. Écrivez un programme qui demande à l'utilisateur d'entrer une chaîne et imprime combien de lettres (majuscules et
minuscules) sont dans la chaîne. [Astuce : il est possible d'utiliser la chaînecompter()méthode pour ce faire, mais il
pourrait être plus facile d'utiliser la technique de comptage du chapitre 5 avec laisalpha()méthode.]
15. Écrivez un programme qui demande à l'utilisateur d'entrer une chaîne. Afficher si la chaîne contient plus de majuscules
que de minuscules, le même nombre ou plus de minuscules que de majuscules.
16. Écrivez un programme qui demande à l'utilisateur d'entrer une chaîne de lettres minuscules. Ensuite, imprimez toutes les lettres
minuscules qui n'apparaissent pas dans la chaîne.
17. Écrivez un programme qui demande à l'utilisateur d'entrer deux chaînes. Imprime si la première chaîne contient ou
non des caractères qui ne sont pas dans la deuxième chaîne.
18. Écrivez un programme qui demande à l'utilisateur d'entrer deux chaînes. Si les chaînes ont des longueurs différentes,
imprimez un message l'indiquant. Sinon, imprimez si oui ou non les chaînes diffèrent dans exactement une position.
Par exemple, ABCDE et ABCXE diffèrent exactement sur une position (indice 3).
19. Écrivez un programme qui imprime 10 lettres minuscules au hasard, toutes sur la même ligne.
20. Écrivez un programme qui demande à l'utilisateur d'entrer une chaîne. Créez ensuite une nouvelle chaîne composée de 10 caractères
sélectionnés au hasard dans la chaîne de l'utilisateur. Imprimez la nouvelle chaîne.
21. Écrivez un programme qui demande à l'utilisateur d'entrer une chaîne de lettres minuscules. Ensuite, pour chaque
lettre minuscule, si la lettre n'est pas dans la chaîne, imprimez un message indiquant cela et sinon imprimez l'index de
la première occurrence de cette lettre dans la chaîne.
22. Écrivez un programme qui demande à l'utilisateur d'entrer une adresse e-mail. Supposons pour ce problème que les
adresses e-mail sont de la formenom d'utilisateur@undomaine.com ,où il y a un nom d'utilisateur et un nom de domaine
séparés par le symbole @. Imprimez le nom d'utilisateur et le nom de domaine sur des lignes séparées.
23. Écrivez un programme qui fait ce qui suit : Il demande d'abord à la personne d'entrer son prénom et son nom (ensemble sur la
même ligne). Pour plus de simplicité, supposez que leurs nom et prénom sont composés d'un seul mot chacun. Demandez-
leur ensuite leur sexe (masculin/féminin). Enfin, demandez-leur s'ils préfèrent une adresse formelle ou informelle. Les
majuscules/minuscules ne devraient pas avoir d'importance lorsqu'ils font leurs sélections. Imprimez ensuite une ligne qui
leur dit bonjour, en utilisant M. ou Mme.<nom de famille>s'ils demandent une adresse officielle et juste leur prénom sinon.
Voici deux exemples d'exécution :
11
24. Écrivez un programme qui demande à l'utilisateur d'entrer une chaîne composée de plusieurs mots. Imprimez ensuite la
première lettre de chaque mot, le tout sur la même ligne.
25. Écrivez un programme qui demande à l'utilisateur d'entrer une chaîne. Ensuite, imprimez (tous sur la même ligne) les
indices de la chaîne contenant des lettres. Par exemple, si l'utilisateur saisitABC,le programme produirait 0, 2 et 5
puisque les seules lettres sont à ces indices.
26. Écrivez un programme qui demande à l'utilisateur d'entrer un nombre entiern. Ensuite, produisez une sortie qui change une
lettre à la fois d'une chaîne de tous les A à une chaîne de tous les B, en commençant à l'arrière de la chaîne. Ci-dessous la
sortie avecn=4.
AAAA
AAAB
AABB
ABBB
BBBB
27. Les adresses IP sont importantes dans les réseaux informatiques. Ils se composent de quatre nombres, chacun de 0 à
255, séparés par des points. Par exemple, une adresse IP de www.google.com est 74.125.22.99. Les adresses IP des
formes suivantes sont considérées comme des adresses locales spéciales : 10.*.*.* et 192.168.*.*. Les étoiles peuvent
représenter n'importe quelle valeur de 0 à 255. Écrivez un programme qui demande à l'utilisateur d'entrer une
adresse IP et imprime si elle est dans l'une de ces deux formes. Vous pouvez supposer que l'utilisateur saisit une
adresse valide. [Astuce : Considérez lecommence avecméthode. Par exemple,sicommence par('un B')dit si oui ou non
scommence par les lettresun B.]
28. Écrivez un programme qui demande à l'utilisateur d'entrer son nom en minuscules et remplace chaque
caractère de son nom par la lettre qui le suit immédiatement dans l'alphabet (avecunsuivantz). [Astuce : Pour
éviter d'utiliser 26 instructions if, une chaîne contenant toutes les lettres de l'alphabet avec leindice
méthode peut être utile, sinon recherchez laord()etchr()les fonctions.]
12
Chapitre 7
1. Écrivez un programme qui demande à l'utilisateur d'entrer une liste d'au moins cinq nombres entiers. Procédez comme suit :
(d) Imprimez tous les éléments de la liste sauf les deux premiers.
(k) Remplacez l'avant-dernier élément de la liste par 9876 et imprimez la nouvelle liste.
(l) Ajoutez la valeur -500 à la fin de la liste et imprimez la nouvelle liste.
2. À l'aide de l'opérateur *, écrivez une seule ligne de code qui crée une liste composée de 100 zéros. Sur la ligne suivante,
imprimez la liste.
(a) Essayer de faire une copie de la liste en utilisantcopie=L.Définissez ensuite le premier élément dansLà 999, et imprimer
dehorscopie.
(b) EnsembleLretour à [1,2,3,4,5],faire une copie correcte deL,définir le premier élément dansLà 9, et imprimez
copie.
4. Écrivez un programme qui crée et imprime une liste des racines carrées des nombres entiers de 1 à 100, chacun
arrondi à 4 décimales.
5. Écrivez un programme qui génère et imprime une liste de 10 nombres aléatoires de 1 à 20.
6. Écrivez un programme qui génère une liste de 20 zéros et uns aléatoires. Imprimez la liste, puis imprimez
combien de zéros il y a.
7. Écrivez un programme qui génère et imprime une liste de 20 nombres aléatoires de 1 à 1000. Imprimez ensuite
le nombre de nombres pairs dans la liste.
8. Écrivez un programme qui demande à l'utilisateur d'entrer une liste de nombres de 1 à 100. Créez une nouvelle liste qui
contient uniquement les entrées de la liste aléatoire qui sont supérieures à 50.
13
9. Écrivez un programme qui demande à l'utilisateur d'entrer une liste de nombres. Imprimez ensuite la plus petite chose de la
liste et le premier index auquel elle apparaît dans la liste.
10. Écrivez un programme qui demande à l'utilisateur d'entrer une liste de nombres avec certaines des valeurs supérieures
à 10. Imprimez le plus petit élément de la liste supérieur à 10.
11. Écrivez un programme qui demande à l'utilisateur d'entrer une liste de nombres. Remplacez ensuite tous les nombres
pairs de la liste par des zéros, imprimez la liste et remplacez chaque nombre impair de la liste par deux uns.
Par exemple, si les premières choses de la liste sont [33,2,14,197,26,. . . ,alors la liste deviendrait
[1,1,0,0,1,1,0, . . . .Imprimez la nouvelle liste. [Astuce : il peut être plus facile de créer une nouvelle liste plutôt que
d'essayer de modifier directement la liste elle-même.]
12. Écrivez un programme qui demande à l'utilisateur d'entrer une liste d'au moins trois nombres. Puis imprimez ceci :
13. Écrivez un programme qui demande à l'utilisateur un numéro de mois et imprime le nom du mois associé à ce
numéro (où 1 est janvier, 2 est février, etc.). Faites cela de deux manières :
14. Écrivez un programme qui crée et imprime la liste suivante contenant un 1, deux 2, trois 3, etc., en terminant
avec dix 10 : [1,2,2,3,3,3,4,4,4,4,...,10,10,10,10,10,10,10,10,10,10]
15. Écrivez un programme qui demande à l'utilisateur d'entrer deux listes de même longueur. Créez ensuite une nouvelle
liste où l'entrée à chaque indexjedans la nouvelle liste est la plus grande des entrées à l'indexjedes deux listes de
l'utilisateur. Par exemple, si les deux listes sont [1,25,3]et [18,2,30],alors la nouvelle liste serait [18,25,30].
16. Écrivez un programme qui demande à l'utilisateur d'entrer une liste. Créez ensuite une nouvelle liste de "sommes cumulées" à
partir de la liste de l'utilisateur. Lejela ième entrée de la nouvelle liste est la somme des premièresjeentrées de la liste des
utilisateurs. Par exemple, si l'utilisateur saisit [1,3,5,7],la liste générée serait [1,4,9,16] (où4 = 1 + 3, 9 = 1 + 3 + 5, et16 = 1 + 3 + 5
+ 7).
17. Ecrire un programme qui demande à l'utilisateur un nombre entiernpuis génère et imprime une liste des premiersn
nombres triangulaires. Les nombres triangulaires sont 1,3 = 1 + 2, 6 = 1 + 2 + 3, 10 = 1 + 2 + 3 + 4,etc.
18. Écrivez un programme qui demande à l'utilisateur d'entrer deux listes de même taille. Ensuite, rassemblez les listes
dans une nouvelle liste en prenant alternativement des éléments des deux listes, comme dans un mélange de fusils.
Par exemple, si une liste est [1,2,3]et l'autre est [7,8,9],la nouvelle liste serait [1,7,2,8,3,9].
19. Écrivez un programme qui fait pivoter tous les éléments d'une liste d'un élément vers la gauche, le premier
élément tournant jusqu'à la fin. Par exemple, si la liste est [1,2,3,4],il tournerait dans [2,3,4,1].
20. Écrivez un programme qui génère une liste de 20 0, 1 et 2 aléatoires. Créez ensuite une nouvelle liste qui se
compose de tous les indices auxquels une répétition consécutive se produit (où l'élément à l'index actuel est
égal à l'élément à l'index juste avant). Par exemple, si la liste commence par [0,2,2,1,0,1,1,. . . ,il y a des répétitions
aux indices 2 et 6.
21. Écrivez un programme qui demande à l'utilisateur d'entrer une liste d'au moins six éléments. Créez ensuite une nouvelle liste
qui se compose des cinq premiers éléments de la liste de l'utilisateur, mais dans l'ordre inverse, puis le reste de la liste de
l'utilisateur reste inchangé. Par exemple, si l'utilisateur saisit [2,4,7,8,9,14,15,16],alors la nouvelle liste devrait être
[9,8,7,4,2,14,15,16].
22. Écrivez un programme qui demande à l'utilisateur d'entrer une chaîne de lettres minuscules et crée une liste contenant
le nombre de fois où chaque lettre apparaît dans la chaîne. Le premier index est le nombre de a dans la chaîne, le
second est le nombre de b, etc.
23. Écrivez un programme qui demande à l'utilisateur combien d'élèves il y a dans une classe. Le programme doit
ensuite générer et imprimer une liste de « notes » pour les étudiants qui sont tous des nombres aléatoires de
90 à 100, sauf qu'un élément aléatoire de la liste doit être 0.
14
24. Écrivez un programme qui génère une liste de 100 nombres aléatoires de 1 à 50. Imprimez la liste, puis écrivez
un code qui change les deux premières occurrences de 50 en -999. S'il n'y a qu'un seul 50 dans la liste, changez-
le simplement. S'il n'y a pas de 50 dans la liste, imprimez un message le disant.
25. Dans le jeu de dés Yahtzee, vous lancez 5 dés. Une grande quinte, c'est quand les dés sortent en 1-2-3-4-5 ou 2-3-4-5-6.
Écrivez un programme qui simule le lancement de cinq dés 10 000 fois et comptez combien de fois une grande quinte
se produit. [Astuce : les dés sont cinq nombres aléatoires. Mettez-les dans une liste et triez-les. Cela permet de
comparer facilement s'ils sont 1-2-3-4-5 ou 2-3-4-5-6.]
26. Écrivez un programme qui demande à l'utilisateur d'entrer une liste. Ensuite, mélangez la liste en utilisant l'algorithme
suivant : Choisissez un élément aléatoire de la liste et échangez-le avec l'élément à l'index 0. Ensuite, choisissez un
élément aléatoire parmi les entrées à l'index 1 jusqu'à la fin de la liste et échangez-le avec l'élément à l'index 1.
Choisissez ensuite un élément aléatoire parmi les entrées à l'index 2 jusqu'à la fin de la liste et échangez-le avec
l'élément à l'index 2. Continuez ainsi jusqu'à ce que la fin de la liste soit atteinte. Imprimez la liste mélangée.
27. Écrivez un programme qui demande à l'utilisateur d'entrer une liste de chaînes et une liste d'indices. Créez ensuite une
nouvelle liste composée de toutes les chaînes de la liste de l'utilisateur, à l'exception de celles situées aux index de la
liste liste des index. Par exemple, si la liste de chaînes est ['un','avant JC','d','e','fg']et la liste des indices est
[2,4],alors la nouvelle liste serait ['un','avant JC','e'].
15
Chapitre 8
1. Écrivez un programme qui demande à l'utilisateur d'entrer une liste d'au moins quatre choses. Ensuite, procédez comme suit :
2. Écrivez un programme qui crée une chaîne aléatoire de longueur 100, où chaque entrée a une chance égale
d'être soit un H, soit un T. L'idée est que la chaîne représente le résultat de 100 lancers de pièces. Utilisez le
choix()fonction pour ce faire.
4. Écrivez un programme qui demande à l'utilisateur une longueur, puis génère un mot de passe aléatoire de cette longueur. Les
caractères du mot de passe peuvent être des lettres minuscules et majuscules, des chiffres et n'importe lequel de ces
caractères spéciaux : !@ #$%ˆ&*()
5. Écrivez un programme contenant une liste d'au moins 10 verbes, une liste d'au moins 10 noms et une liste d'au moins
10 adjectifs. Demandez ensuite au programme de générer et d'imprimer au hasard une phrase de la forme "Le
<adjectif> <nom 1> <verbe>le <nom 2>." Tous les mots sauf "le" doivent être extraits au hasard des listes
appropriées. Ce n'est pas grave si les deux noms sont identiques.
6. Répétez le problème précédent, mais assurez-vous que les deux noms sont différents.
7. Écrivez un programme qui crée une liste des 52 cartes d'un jeu standard. Représentez les cartes sous forme de chaînes
avec la valeur suivie de la couleur. Les valeurs possibles sontDeux trois, . . . , dix, valet, reine, roi, etAs.Les combinaisons
possibles sontTrèfles, Carreaux, Coeurs,etLes espaces.Une carte typique serait une chaîne commeSevenofClubs.Mélangez
ensuite les cartes et imprimez les cinq premières cartes de la liste mélangée. [Astuce : Plutôt que de saisir
manuellement 52 noms de cartes, vous pouvez utiliser une boucle for imbriquée dans une autre boucle for pour créer
la liste.]
8. Écrivez un programme qui demande à l'utilisateur d'entrer un mot d'au moins trois lettres. Choisissez ensuite
exactement trois indices dans ce mot à remplacer par des astérisques et imprimez le résultat. Par exemple, si le mot
estpython,alors une sortie possible pourrait êtrep*t**n.
9. Écrivez un programme qui prend une chaîne puis remplace un par un au hasard tous ses caractères par des
astérisques, en imprimant chaque étape. Par exemple, si le mot est'liste', alors une sortie possible estl*er,
L ** t, *** t, ****.
10. Créez une liste qui contient les nombres de 1 à 20 dans l'ordre. Demandez ensuite au programme de choisir au
hasard trois paires d'éléments dans la liste et de les échanger. Imprimez la liste résultante. Un élément peut
être permuté plus d'une fois, mais il ne peut pas être permuté avec lui-même. Une sortie possible est
16
[7,2,3,4,5,6,1,8,12,10,11,9,13,14,15,18,17,16,19,20].Les échanges dans cet exemple sont1,7,
alors9,12,et enfin16,18.
11. Écrivez un programme qui demande à l'utilisateur d'entrer un groupe de mots séparés par des espaces. Utilisez ensuite le
diviser()méthode pour créer une liste de mots saisis par l'utilisateur.
12. Lorsque vous envoyez des e-mails à plusieurs personnes, les adresses sont généralement séparées par des points-virgules. Écrivez un
programme qui demande à l'utilisateur d'entrer une liste d'adresses e-mail (sous forme de liste de chaînes), puis d'utiliser la
rejoindre()méthode pour joindre les e-mails en une seule chaîne avec des points-virgules les séparant.
13. Ecrire un programme qui demande à l'utilisateur d'entrer une date dans un formulaireannée mois jourpuis utilise le
diviser()méthode pour imprimer le mois, le jour et l'année sur des lignes séparées.
14. Écrivez un programme qui demande à l'utilisateur d'entrer un groupe de mots séparés par des espaces, tous en minuscules.
Ensuite, mettez en majuscule la première lettre de chaque mot et imprimez la chaîne résultante. [Astuce : Utilisezdiviser()et
rejoindre().]
15. Voici une belle façon de créer une liste de tous les réarrangements de la chaînea B c d:
depuisitertoolsimporterpermutations pourX
danspermutations('a B c d'):
imprimer(X)
La sortie semble un peu désordonnée. Au lieu de cela, nous aimerions que tout soit sorti sous forme de chaînes, commeabcd,
abdc,etc. Utilisez lerejoindre()fonction pour y parvenir.
16. Demandez à l'utilisateur de saisir plusieurs phrases. Ensuite, imprimez le dernier mot de chaque phrase. Pour ce
problème, supposons que les phrases se terminent toujours par un point et qu'il n'y a pas de points ailleurs dans une
phrase.
17. Écrivez des compréhensions de liste Python pour résoudre chacun des problèmes suivants.
(a) Écrivez un programme qui crée et imprime une liste des racines carrées des nombres entiers de 1 à 100,
chacun arrondi à deux décimales.
(b) Écrivez un programme qui demande à l'utilisateur d'entrer une liste d'entiers. Ensuite, créez et imprimez une liste
composée de chaque entrée de la liste de l'utilisateur avec 1 ajouté. Par exemple, si l'entrée est [3,4,5], la
nouvelle liste devrait être [4,5,6].
(c) Écrivez un programme qui demande à l'utilisateur d'entrer une liste d'entiers. Ensuite, créez et imprimez une liste contenant
uniquement les nombres entiers pairs de la liste de l'utilisateur.
(d) Écrivez un programme qui demande à l'utilisateur d'entrer une liste d'entiers. Ensuite, créez et imprimez une nouvelle
liste composée de toutes les entrées de la liste de l'utilisateur, à l'exception des négatifs remplacés par 0. Par exemple,
si l'entrée est [2,-4,5,-6,-7],la nouvelle liste devrait être [2,0,5,0,0]. [Astuce : utilisermaximum(x,0).]
(e) Écrivez un programme qui demande à l'utilisateur d'entrer une chaîne. Ensuite, créez et imprimez une liste contenant
uniquement les lettres de la chaîne de l'utilisateur (et aucun autre caractère à part les lettres). [Astuce : utilisez le
isalpha()méthode.]
(f) Écrivez un programme qui demande à l'utilisateur d'entrer une liste de listes. Créez et imprimez ensuite une liste
contenant les derniers éléments de chacune des listes de la liste principale. Par exemple, si l'utilisateur saisit
[[1,2,3],[4,8],[15,13]],la liste créée serait [3,8,13].
(g) Écrivez un programme qui demande à l'utilisateur d'entrer une chaîne de lettres minuscules. Ensuite, créez et imprimez
une liste de 26 éléments, composée des fréquences de chaque lettre dans l'ordre alphabétique. Pour la chaîne
Bonjour le monde,la liste serait [0,0,0,1,1,0,0,1,0,0,0,3,0,0,2,0,0,1,0,0,0,0,1,0,0, 0].
[Astuce : utilisez lecompter()méthode.]
(h) Écrivez un programme qui demande à l'utilisateur d'entrer deux chaînes de longueur égale. Ensuite, créez et
imprimez une liste de tous les indices dans lesquels les chaînes diffèrent. Par exemple, étant donnépython?et
Python!,la liste serait [0,6].
18. Écrivez un programme qui demande à l'utilisateur d'entrer une liste de résultats de test. Ensuite, créez et imprimez une
liste de listes, où la première liste contient tous les A (90 ou plus), la seconde tous les B (80–89), etc. (où les C sont 70–
79, les D sont 60–69, et Fs sont 0-59).
17
19. Écrivez un programme qui crée un6×6liste d'entiers aléatoires de 0 à 9. Ensuite, procédez comme suit :
(d) Imprimez la chose la plus grande dans la troisième colonne (colonne 2).
(f) créer et imprimer une nouvelle liste unidimensionnelle à partir de la liste bidimensionnelle de sorte que toutes les
entrées de la ligne 0 de l'original soient suivies de toutes les entrées de la ligne 1, qui sont suivies de toutes les entrées
de la ligne 2, etc. Voir l'exemple ci-dessous :
249110
575421
663592
712094
702187
700037
[2,4,9,1,1,0,5,7,5,4,2,1,6,6,3,5,9,2,7,1,2,0,9,4,7 ,0,2,1,8,7,7,0,0,0,3,7]
(g) Créez une nouvelle liste à deux dimensions en échangeant les lignes et les colonnes de l'original.
Autrement dit, la ligne 0 de l'original doit devenir la colonne 0 du nouveau, la ligne 1 de l'original doit
devenir la colonne 1 du nouveau, etc.
20. Ce qui suit est utile dans le cadre d'un programme pour jouerBataille navale. Écrivez un programme qui crée et
imprime undix×dixliste composée de zéros et de uns aléatoires. Demandez ensuite à l'utilisateur d'entrer un numéro
de ligne et de colonne. Si l'entrée dans la liste à cette ligne et cette colonne est un, le programme doit imprimerFrapper
et sinon il devrait imprimerManquer.
21. Écrivez un programme qui crée et imprime d'abord un6×6liste de zéros, uns et deux aléatoires. Demandez ensuite à
l'utilisateur d'entrer une ligne de début, une ligne de fin, une colonne de début et une colonne de fin, et imprimez la
somme de toutes les entrées de la liste dans la plage spécifiée par l'utilisateur.
22. Écrivez un programme qui génère et imprime un15×15liste de zéros, uns et deux aléatoires, puis additionne
toutes les entrées sur ou en dessous de la diagonale principale. Ce sont toutes les entrées (r, c), où le numéro
de colonnecest inférieur ou égal au numéro de ligner.
23. Écrivez un programme qui crée et imprime d'abord un6×6liste d'entiers de 0 à 5. Ensuite, écrivez un code qui
détermine s'il y a deux zéros consécutifs dans la liste, horizontalement ou verticalement. Essayez de le faire
avec des boucles plutôt qu'avec des dizaines d'instructions if.
24. Demander à l'utilisateur un nombre entiern. Ensuite, créez et imprimez unn×nliste qui se compose d'espaces partout sauf que la
première ligne, la dernière ligne, la première colonne, la dernière colonne, la diagonale principale et la diagonale hors doivent toutes
être des symboles #. Vous trouverez ci-dessous un exemple de ce à quoi la liste devrait ressembler avecn=dix.N'oubliez pas que vous
créez une liste, pas seulement des caractères d'impression.
##########
## ##
## ##
## # #
### #
### #
## # #
## ##
## ##
##########
25. Écrivez un programme qui crée et imprime undix×dixliste contenant exactement 10 zéros et 90 uns, tous
ordonnés au hasard. [Astuce : une façon de résoudre ce problème consiste à créer une liste composée de
10 zéros et de 90 uns, à mélanger la liste, puis à ajouter les éléments de cette liste un par un à ladix×dixliste, où
ligne r, colonnecde ladix×dixla liste est mappée à l'indexjede la liste mélangée parr=i//10, c=i%10.
18
26. Écrivez un programme qui crée et imprime undix×dixliste de zéros et de uns aléatoires, où pour chaque entrée,
lorsqu'elle est générée, il y a 10 % de chances que ce soit un zéro et 90 % de chances que ce soit un. Contrairement au
problème ci-dessus, il n'est pas nécessaire qu'il y ait exactement 10 zéros et 90 uns dans le produit fini.
19
Chapitre 9
1. À l'aide d'une boucle while, écrivez un programme qui affiche les nombres entiers 2, 5, 8, 11, 14, 17 et 20 dans cet ordre, tous
sur la même ligne.
2. À l'aide d'une boucle while, écrivez un programme qui compte à rebours à partir de 100, s'arrêtant à 1, en imprimant tous les nombres
sur la même ligne.
3. Écrivez un programme qui demande à plusieurs reprises à un utilisateur d'entrer des nombres entiers positifs. L'utilisateur arrête le
programme en entrant un négatif. Après cela, imprimez la somme de tous les nombres entrés par l'utilisateur, à l'exclusion du dernier
négatif.
4. Écrivez un programme qui demande à l'utilisateur d'entrer des nombres de 1 à 10. Le programme doit s'arrêter
lorsque l'utilisateur entre un 5. Une fois la boucle terminée, le programme doit imprimer le nombre de
nombres saisis et imprimer oui ou non, selon que l'utilisateur a entré des nombres inférieurs à 3.
5. Écrivez un programme qui demande à l'utilisateur d'entrer une chaîne d'au moins cinq caractères. Si l'utilisateur saisit
une chaîne qui n'est pas assez longue, un message doit être imprimé et il doit lui être demandé à nouveau la chaîne.
Continuez ainsi jusqu'à ce qu'ils entrent une chaîne suffisamment longue, puis imprimez le cinquième caractère (index
4) de cette chaîne.
6. Écrivez un programme qui demande à l'utilisateur d'entrer une chaîne d'au moins cinq caractères. Si l'utilisateur saisit
une chaîne qui n'est pas assez longue, un message doit être imprimé et il doit lui être demandé à nouveau la chaîne.
Continuez ainsi jusqu'à ce qu'ils entrent dans une chaîne suffisamment longue. Demandez ensuite à l'utilisateur
d'entrer un index dans cette chaîne. Si l'utilisateur entre un nombre négatif ou supérieur ou égal à la longueur de la
chaîne, dites-lui d'entrer un index valide. Continuez ainsi jusqu'à ce qu'ils entrent un index valide et demandent à
nouveau l'index. Ensuite, imprimez le caractère de la chaîne de l'utilisateur à l'index qu'il a entré.
7. Écrivez un programme qui demande à plusieurs reprises à l'utilisateur d'entrer une chaîne. Pour chaque chaîne, imprimez s'il
s'agit ou non d'un palindrome (se lit de la même manière à l'envers qu'à l'avant). L'utilisateur indique qu'il a terminé en
appuyant sur Entrée sans entrer de chaîne (ce qui signifie que son entrée sera la chaîne vide).
8. Écrivez un programme qui demande à l'utilisateur d'entrer un nombre positif entre 20 et 100. Ensuite, soustrayez à
plusieurs reprises des nombres aléatoires dans la plage de 1 à 10 de cette valeur jusqu'à ce que le nombre devienne
négatif. Après chaque soustraction, imprimez la nouvelle valeur du nombre. Par exemple, si l'utilisateur entre 25, le
programme peut imprimer quelque chose comme 25, 18, 16, 7, 3, -2.
9. La conjecture de Collatz est un problème mathématique bien connu. Commencez avec n'importe quel nombreX. S'il est
pair, divisez-le par 2. S'il est impair, calculez3X+1.Ensuite, répétez le processus avec le numéro suivant, celui d'après,
etc. Collatz a supposé que peu importe où vous commencez, vous finirez toujours par arriver au numéro 1.
Par exemple, en commençant parX=3,puisque 3 est impair, on calcule3X+1pour obtenir 10. Puis puisque 10 est pair, on divise
par 2 pour obtenir 5. Puis puisque 5 est impair, on fait3X+1pour obtenir 16. Puis puisque 16 est pair, nous divisons par 2 pour
obtenir 8. En continuant, nous obtenons alors 4, 2 et 1, à quel point la séquence commence à se répéter.
20
Écrivez un programme qui demande à l'utilisateur une valeur de départ, puis imprime tous les termes de la séquence
de Collatz, en s'arrêtant lorsque le a 1 est atteint.
10. Écrivez un programme qui construit une liste, en ajoutant des nombres aléatoires de 1 à 10 à la liste, en s'arrêtant
lorsque le cinquième 10 est généré. Imprimez la liste à la fin.
11. Écrivez un programme qui crée et imprime une liste de 50 nombres aléatoires de 1 à 5 avec la propriété que le même
nombre n'apparaît jamais deux fois ou plus de suite. [Astuce : une façon de procéder consiste à utiliser une boucle
while pour s'assurer que le nombre actuel généré n'est pas égal au nombre précédent.]
12. Écrivez un programme qui demande à l'utilisateur d'entrer une liste de nombres. Remplacez le premier nombre négatif
par 0, laissez le reste de la liste seul et imprimez la nouvelle liste. S'il n'y a pas de points négatifs, la liste ne change
pas. [Astuce : assurez-vous, dans le cadre de votre boucle while, que vous vérifiez que l'index ne dépasse pas la fin de
la liste.]
13. Écrivez un programme qui demande à l'utilisateur d'entrer une liste de nombres. Remplacez les trois premiers
nombres négatifs par 0, laissez le reste de la liste seul et imprimez la nouvelle liste. S'il y a moins de trois négatifs,
alors tous les négatifs deviendront 0, et s'il n'y a pas de négatifs, alors la liste ne change pas.
14. Écrivez un programme qui demande à l'utilisateur d'entrer une chaîne composée de lettres et de non-
lettres. Imprimez la sous-chaîne qui se compose de tous les caractères de la chaîne depuis le premier
caractère jusqu'à la première non-lettre, mais sans l'inclure. Par exemple, si la chaîne estabc#defg,la
sortie seraitabc.La sortie peut finir par être la chaîne vide si le premier caractère n'est pas une lettre.
15. Écrivez le jeu suivant. Le joueur commence avec 100 points. Le programme choisit ensuite un nombre aléatoire de 1 à
10 et demande au joueur de le deviner. S'ils le devinent correctement, ils gagnent 100 points. Si leur estimation est
inférieure au nombre, alors ils perdent 10 points. Si leur estimation est plus grande, ils perdent 20 points. Après la
supposition, imprimez le résultat de la supposition et le nombre de points du joueur. L'ordinateur choisit ensuite un
nouveau numéro et le jeu continue de la même manière jusqu'à ce que le joueur atteigne 200 points ou plus (auquel
cas il gagne) ou 0 point ou moins (auquel cas il perd). Imprimez un message à la fin indiquant si le joueur a gagné ou
perdu.
16. Écrivez le jeu suivant. Le joueur doit répondre à un problème de multiplication aléatoire. Faites en sorte que les
nombres aléatoires varient de 2 à 99. Pour chaque problème, le joueur obtient une hypothèse. S'ils réussissent,
le nombre de points ajoutés à leur score est la somme des deux nombres du problème (par exemple, si le
problème est7 x 12,ils gagneraient 19 points). S'ils se trompent, leur score ne change pas, mais ils perdent une
estimation. Après chaque problème, imprimez s'ils ont réussi et imprimez leur score et le nombre de
suppositions restantes. Le joueur commence avec trois suppositions. Le jeu se termine lorsque le joueur gagne
en atteignant un score de 200 ou perd en manquant de suppositions.
17. Considérez le jeu suivant. Le joueur commence avec 50 $. Ils doivent choisir un nombre de 1 à 10. L'ordinateur
choisit ensuite un nombre aléatoire de 1 à 10. Si le nombre du joueur correspond à celui de l'ordinateur ou si la
supposition du joueur n'est pas dans cette fourchette, alors le joueur doit 50 $ à l'ordinateur et le le jeu se
termine. Sinon, l'argent du joueur double à 100 $ et il continue à jouer.
Cette fois, le joueur et l'ordinateur choisissent des numéros de 1 à 9, et si leurs numéros correspondent ou si la
supposition du joueur n'est pas dans cette fourchette, alors le joueur doit tout l'argent à l'ordinateur (100 $).
Sinon, l'argent du joueur double à 200 $ et le jeu continue, cette fois avec des nombres de 1 à 8. Ce processus
se poursuit, la plage de nombres diminuant de 1 à chaque tour, jusqu'au dernier tour avec des nombres allant
uniquement de 1 à 2.
Si les numéros du joueur et de l'ordinateur correspondent ou si leur estimation n'est pas dans la bonne
fourchette, le jeu est terminé et le joueur doit payer l'ordinateur quel que soit le montant d'argent atteint. À
tout moment, au lieu de deviner un nombre, le joueur peut taper 0 pour quitter le jeu et repartir avec ses gains
actuels.
Écrivez un programme qui joue à ce jeu, en imprimant après chaque supposition si le joueur a raison ou
non, et combien d'argent il a. Imprimez également le résultat de la fin de la partie.
18. Écrivez un programme qui demande à l'utilisateur d'entrer une chaîne composée de lettres et de non-lettres.
Ensuite, retirez au hasard les non-lettres une par une de la chaîne jusqu'à ce qu'il n'y ait plus de lettres. Une fois
chaque lettre supprimée, imprimez la chaîne.
21
19. Ecrire un programme qui demande à l'utilisateur un nombre entiernpuis génère et imprime une liste des premiersn
nombres premiers.
20. Écrivez un programme qui demande à l'utilisateur d'entrer un entier positif. Ensuite, générez et imprimez des nombres
aléatoires de 1 ànjusqu'à ce qu'une répétition soit générée. Veuillez également étiqueter les numéros dans l'ordre
dans lequel ils sont générés. La sortie devrait ressembler à ceci (s'arrêtant à 12 à cause de la répétition).
1. 7
2. 12
3. 15
4. 12
21. Voici une question intéressante : supposons qu'un pays ait une politique selon laquelle les couples doivent continuer à
avoir des enfants jusqu'à ce qu'ils aient un garçon, auquel cas ils ne peuvent plus avoir d'enfants. Quel sera le
pourcentage à long terme de garçons et de filles? Ignorer la possibilité de jumeaux et d'autres complications. Trouvez
une réponse approximative à cette question en simulant 10 000 couples ayant des enfants selon cette règle. Il doit
compter le nombre total de garçons et de filles nés et renvoyer le pourcentage de filles.
22. Considérez une boucle while qui génère des nombres aléatoires de 1 à 10 jusqu'à ce qu'un 6 apparaisse.
Parfois, un 6 apparaîtra tout de suite et parfois cela prendra un certain temps. Par exemple, si nous
imprimons les nombres générés par la boucle, nous pourrions voir la séquence2,3,1,3,6ou la suite
2,1,9,9,2,2,10,8,9,6.Nous sommes intéressés par le temps qu'il faudrait pour qu'un 6 apparaisse.
Écrivez un programme qui simule cela en exécutant cette expérience 10 000 fois et indique la durée
de la plus longue séquence de nombres issue de ces 10 000 essais.
23. Les gens essaient souvent de rassembler tous les objets d'un ensemble. Supposons que nous ayons un ensemble de 100
éléments que nous essayons de collecter. Les articles sont vendus en paquets de 20 articles, les 20 articles de chaque paquet
étant différents. Écrivez un programme qui simule le temps qu'il faudra pour que nous ayons collecté les 100 éléments.
Faites cela en générant au hasard des paquets de 20 et en les ajoutant à une collection jusqu'à ce que cette collection contienne les 100
éléments différents.
24. Écrivez un programme qui demande à l'utilisateur d'entrer deux listes. Triez ensuite ces deux listes et « fusionnez-les ».
La fusion de deux listes signifie que nous créons une nouvelle liste en parcourant chacune des listes, en comparant les
éléments actuels dans les deux listes et en ajoutant le plus petit élément à la nouvelle liste. Par exemple, si les deux
listes sont [1,4,5,8,10]et [2,3,7],alors la liste fusionnée est [1,2,3,4,5,7,8,10],qui consiste à prendre d'abord 1 dans la liste de
gauche, puis à prendre 2 et 3 dans la liste de droite, puis à prendre 5 dans la liste de gauche, puis à prendre 7 dans la
liste de droite, et enfin à prendre 8 et 10 dans la liste de gauche.
22
Chapitre 10
1. Demandez à l'utilisateur d'entrer un code de cours, comme MATH 247 ou CMSCI 125. Le code se compose d'un code de
département alphabétique suivi d'un espace, puis d'un numéro de cours. Si le numéro de cours n'est pas compris entre 100 et
499, la sortie indique que l'entrée de l'utilisateur n'est pas valide.
2. Écrivez un programme qui demande à l'utilisateur d'entrer plusieurs nombres séparés par des points-virgules. Ensuite, imprimez la
somme de tous les nombres.
3. Écrivez un programme qui demande à l'utilisateur d'entrer un nombre (un entier ou un flottant) comme1 000 000.123qui
utilise des virgules pour clarifier les groupes du nombre. Imprimez la racine carrée de ce nombre.
4. Écrire un programme utilise une boucle pour créer une liste composée des chaînes'a1','b2','c3', à travers
'z26'. Imprimez ensuite la liste.
5. Écrivez un programme qui demande à l'utilisateur d'entrer une phrase contenant des nombres entiers positifs.
Ensuite, écrivez un programme qui lit la chaîne et remplace chaque nombrendans la phrase avecn+1.Par
exemple:
saisir: J'ai acheté 4 pommes et 17 oranges. saisir:Mon chiffre préféré est le 8. sortir:
sortir:J'ai acheté 5 pommes et 18 oranges. Mon chiffre préféré est le 9.
6. Écrivez un programme qui boucle sur les nombres entiers de 100 à 120. Pour chaque nombre, réorganisez au hasard
ses chiffres entiers pour créer un nouveau nombre et imprimez le nouveau nombre avec l'original. [Indice:
Utiliserchaîne(),liste(), mélanger()etrejoindre().]
7. Écrivez un programme qui demande à l'utilisateur une longueur, puis génère un mot de passe aléatoire de cette
longueur. Les caractères du mot de passe peuvent être des lettres minuscules et majuscules, des chiffres et n'importe
lequel de ces caractères spéciaux : !@ #$%ˆ&*(). Le mot de passe doit contenir au moins une lettre majuscule, au
moins une lettre minuscule, au moins un chiffre et au moins un de ces caractères spéciaux.
8. Écrivez un programme qui imprime au hasard 10 dates valides. Faites cela de deux manières différentes :
(a) Choisissez au hasard un mois, puis choisissez au hasard un jour valide de ce mois. fois. Il Faites ceci 10
est possible qu'une date se répète.
(b) Créez une liste contenant les 365 jours de l'année, puis utilisez lagoûter()fonction ou mélanger la liste et prendre
les 10 premières choses. Cela garantit qu'il n'y aura pas de répétitions.
9. Écrivez un programme qui génère une liste de 10 problèmes de multiplication aléatoire, qui sont des chaînes de la
forme suivante :2 x 9ou10x 7,où les deux nombres peuvent aller de 2 à 12. En même temps, générez une liste de
réponses à ces problèmes. Ensuite, parcourez la liste en demandant à l'utilisateur d'entrer des réponses aux
problèmes. Imprimez si chaque réponse est bonne ou mauvaise, et à la fin imprimez combien l'utilisateur a obtenu de
bonnes réponses.
23
10. Écrivez un programme qui génère et imprime une liste de 20 problèmes de multiplication aléatoire, chacun une chaîne
comme'2x 11', avec la propriété que les nombres aléatoires multipliés peuvent aller de 2 à 12, mais ne peuvent pas
être 10. Procédez de deux manières :
(a) Utilisationaléatoire(2,12)pour générer les nombres aléatoires et utiliser une boucle while pour continuer à générer jusqu'à
ce qu'un nombre différent de 10 soit généré.
11. Écrivez un programme qui demande à l'utilisateur d'entrer une date au format mois/jour. Le programme doit
imprimer si la date est réelle. Par exemple,14/10n'est pas une vraie date, et non plus2/30.Pour ce faire, utilisez
une liste contenant le nombre de jours de chaque mois.
12. Écrivez un programme qui demande à l'utilisateur un angle sous la forme degrés-minutes-secondes,
tel que49d33'22'' ou153d4'22'',où l'entrée commencera par le nombre de degrés (0 à 360), suivi de la
lettred,suivi du nombre de minutes (0 à 60), suivi d'une apostrophe, suivi du nombre de secondes (0
à 60), suivi de deux apostrophes.
Le programme doit convertir cet angle en forme décimale, arrondi à deux décimales. Par exemple,
49j33'22devrait devenir 49,56 et153d4'22''devrait devenir 153.07. Pour convertir de
degrés/minutes/secondes à la forme décimale, utilisezd+m 60+s 3600,oùd,m, etssont les chiffres
de degrés, minutes et secondes, respectivement.
13. Écrivez un programme qui demande à l'utilisateur d'entrer une liste des coûts des produits. Ajoutez ensuite une taxe de 6 % à chaque
coût et imprimez les nouveaux coûts, chacun sur des lignes séparées, justifiés à droite et affichés avec exactement deux décimales (par
exemple, 2,4 devrait être 2,40). Pour la bonne justification, supposons que les coûts ne seront jamais supérieurs à 999 $.
14. Écrivez un programme qui imprime un tableau des sinus et cosinus des angles de 0 à 360 en augmentant par
incréments de 30 degrés. Les angles doivent être justifiés à droite. Les sinus et cosinus doivent être affichés
avec exactement 3 décimales. Il doit y avoir plusieurs espaces entre les angles, les sinus et les cosinus. Tous les
points décimaux doivent être alignés. Le début de la sortie est illustré ci-dessous. [Astuce : les fonctions sinus et
cosinus fonctionnent en radians et non en degrés, utilisez doncradiansfonction de lamathématiquesmodule à
convertir en premier.]
0 0,0000 1.0000
30 0,5000 0,8660
Lisez toutes ces listes et imprimez toutes les informations pour chaque personne sur la même ligne avec les 12 places
attribuées pour le nom, avec la date de naissance reformatée de sorte qu'il y ait des zéros non significatifs pour les
mois et les jours à un chiffre, et formatez les salaires avec des virgules dans les nombres comme séparateurs. Pour
ajouter des zéros et des virgules, utilisez le code de formatage approprié au lieu des opérations de chaîne.
16. Écrivez un programme qui utilise des boucles imbriquées pour produire un9×9tableau avec des entrées de la forme (je, j)oùje et
jexécuter de 1 à 9. La sortie est partiellement illustrée ci-dessous.
17. (a) Modifiez le programme ci-dessus pour qu'il n'affiche rien au-dessus de la diagonale ; c'est-à-dire qu'aucun de
Les objets (je, j)avecjplus grand quejesont indiqués.
(b) Modifiez le programme ci-dessus afin qu'il ne montre rien en dessous de la diagonale; c'est-à-dire qu'aucun des
éléments (je, j)avecjeplus grand quejsont indiqués.
18. Écrivez un programme qui utilise des boucles imbriquées pour imprimer toutes les solutions entières de l'équation37X
+14y=11 avecXetyentre -100 et 100.
24
19. Écrivez un programme qui demande à l'utilisateur d'entrer une liste d'entiers. Utilisez ensuite une boucle while pour
parcourir la liste et imprimer le premier index auquel une répétition se produit et arrêter la boucle. S'il n'y a pas de
répétition dans la liste, imprimez un message l'indiquant. [Astuce : Utilisez le court-circuit duetopérateur pour éviter
une erreur d'index hors limites.]
20. Écrivez un programme qui crée et imprime un6×6liste d'entiers aléatoires de 0 à 3. Demandez ensuite à l'utilisateur
d'entrer un emplacement dans la liste et d'imprimer la somme de tous les voisins de la valeur à cet emplacement. Les
voisins d'une cellule sont les huit cellules qui la touchent horizontalement, verticalement et en diagonale. Soyez
prudent car les cellules situées au bord de la liste n'auront pas les huit voisins.
25
Chapitre 11
1. Créer un dictionnaire dont les clés sont les chaînes'abc','définitivement,'ghi','jkl', et'mno'et dont les valeurs
correspondantes sont 7, 11, 13, 17 et 19. Ensuite, écrivez un code de dictionnaire qui fait ce qui suit :
2. Écrivez un programme qui crée un dictionnaire pour les 10 premiers éléments du tableau périodique. Les clés
doivent être les symboles des élémentsH, He, Li, Be, B, C, N, O, F, Ne.Les valeurs doivent être les noms des
éléments : hydrogène, hélium, lithium, béryllium, bore, carbone, azote, oxygène, fluor et néon. Demandez
ensuite à l'utilisateur d'entrer une abréviation et d'imprimer son nom.
3. Pour convertir des pouces en centimètres, la conversion consiste à multiplier par 2,54. Pour convertir des pouces en
mètres, la conversion consiste à multiplier par.0254.Pour convertir des pouces en pieds, la conversion consiste à
multiplier par1/12.Pour convertir des pouces en yards, la conversion consiste à multiplier par1/36.Écrire un
programme qui crée un dictionnaire dont les clés sontcm, m, pietmet dont les valeurs sont ces facteurs de conversion.
Demandez ensuite à l'utilisateur d'entrer une valeur en pouces et l'unité (abréviation) vers laquelle il souhaite
convertir. Utilisez le dictionnaire pour faire la conversion et imprimez le résultat.
4. Écrivez un programme qui demande à plusieurs reprises à l'utilisateur d'entrer un mot et de créer un
dictionnaire dont les clés sont ces mots et dont les valeurs sont le nombre de voyelles dans les mots.
L'utilisateur indique qu'il a terminé en appuyant sur Entrée sans rien saisir (l'entrée sera donc une chaîne
vide). Imprimez le dictionnaire après sa création.
5. Écrivez un programme qui utilise une boucle pour créer un dictionnaire dont les clés sont toutes les lettres
majuscules et minuscules et dont les valeurs sont les codes ASCII de ces lettres. Le code ASCII d'un caractèrec
peut être obtenu en appelantord(c)à l'aide de la fonction intégréeord()fonction. Une fois le dictionnaire créé,
imprimez-le.
6. Écrivez un programme qui demande à l'utilisateur d'entrer une chaîne (composée de n'importe quels caractères). Ensuite, créez
et imprimez un dictionnaire à partir de cette chaîne dont les clés sont les caractères de la chaîne et dont les valeurs sont le
nombre de fois que ces caractères apparaissent dans la chaîne.
7. Écrivez un programme qui demande à l'utilisateur deux chaînes. Utilisez ensuite des cartes comme dans le problème
précédent pour imprimer si les mots contiennent les mêmes caractères avec les mêmes fréquences, mais
éventuellement dans des ordres différents. Par exemple,AABCCCetCCCABAles deux contiennent deux A, un B et trois C,
de sorte que le programme imprimeraitOuipour ces deux chaînes. Mais il imprimeraitNonpour les cordesAAABC
etABC,puisque les fréquences ne correspondent pas.
26
8. Écrivez un programme qui demande à l'utilisateur d'entrer une date sous la forme d'un nom de mois suivi d'un numéro
de jour. Le programme doit imprimer si la date est réelle. Par exemple, le 32 janvier n'est pas une date réelle, pas plus
que le 30 février. Supposons que l'utilisateur entre le nom complet du mois et que le nom du mois soit valide. Pour
valider le numéro du jour, utilisez un dictionnaire contenant le nombre de jours de chaque mois.
9. Écrivez un programme qui demande à l'utilisateur d'entrer le nom d'une personne, puis une liste de numéros de cours
que cette personne a suivis. Faites cela cinq fois. Créez une carte à partir de là où les clés sont les noms et les valeurs
sont les listes de cours que la personne a suivis. Demandez ensuite à l'utilisateur un nom de cours et utilisez la carte
pour imprimer toutes les personnes qui ont suivi ce cours.
10. Écrivez un programme qui crée un dictionnaire dont les clés sont des questions et dont les valeurs correspondantes
sont des réponses à ces questions. Utilisez ensuite ce dictionnaire pour jouer à un jeu de quiz simple, où les questions
du quiz sont données dans un ordre aléatoire. Pour chaque question, demandez au joueur une réponse et dites-lui s'il
a bien compris ou non.
11. Une utilisation des dictionnaires est ce qu'on appelle untableau clairsemé. Ce sont des tableaux (listes) de nombres, où la
plupart des entrées sont 0. Utiliser une liste régulière lorsque la plupart des entrées sont 0 gaspillerait de l'espace. Donc, à la
place, nous stockons uniquement les valeurs qui ne sont pas 0 et nous utilisons un dictionnaire pour le faire. Les clés sont les
index de la liste et les valeurs sont les valeurs à cet index. Par exemple, la liste [0,0,27,0,0,0,0,15,0,0,...]
serait stocké avec le dictionnaire{2:27,7:15}. Écrivez un programme qui demande à l'utilisateur trois indices et
trois valeurs à stocker dans le tableau clairsemé à ces indices. Demandez-leur ensuite d'entrer un index et
d'imprimer la valeur de cet index (qui sera soit une valeur du dictionnaire, soit 0 si l'index n'est pas une clé du
dictionnaire).
12. Le chiffrement par substitution est un moyen simple de chiffrer un message, où chaqueunest remplacé par une
certaine lettre, disonsF,chaquebest remplacé par une certaine lettre, disonsje.La clé du chiffrement est une chaîne
indiquant les remplacements. Par exemple,fiepltdkjbsuywqxanczrmvhgdit que chaqueunest remplacé parF,chaquebest
remplacé parje,chaquecest remplacé pare,etc. On peut générer une clé en mélangeant les lettres de l'alphabet.
Ensuite, étant donné un mot, nous pouvons l'encoder avec le chiffrement de substitution en utilisant un dictionnaire
dont les clés sont les lettres de l'alphabet et dont les valeurs sont les lettres auxquelles elles sont mappées dans la clé.
Un dictionnaire similaire, mais inversé, peut être utilisé pour le décryptage.
Programme d'écriture qui génère et imprime une clé aléatoire et utilise cette clé pour créer un dictionnaire comme
celui décrit ci-dessus. Demandez ensuite à l'utilisateur un mot en minuscules. Chiffrez puis déchiffrez ce mot à l'aide
du dictionnaire de chiffrement par substitution et imprimez le résultat chiffré et déchiffré.
27
Chapitre 12
1. Le dossierdepenses.txta un tas de dépenses, chacune un entier, un sur chaque ligne. Écrivez un programme qui
lit le fichier et affiche le nombre de dépenses supérieures à 2 000 $. Imprimez-les tous sur la même ligne.
2. Le dossierdepenses.txta un tas de dépenses, chacune un entier, un sur chaque ligne. Écrivez un programme qui lit le
fichier, applique une taxe de 10 % à chaque dépense et affiche les nouvelles dépenses dans un fichier appelé
new_expenses.txtavec une dépense sur chaque ligne. Assurez-vous que les dépenses sont formatées comme l'argent est
généralement, avec chaque valeur donnée à exactement deux décimales.
(e) Le mot le plus long qui commence et se termine par la même lettre.
(f) Tous les mots qui contiennent quatre lettres alphabétiquement consécutives (comme abc, bcd, cde, def, . . . ).
7. Chaque ligne du fichierpopulation.txtcontient un nom de pays et sa population, séparés par une tabulation. Écrivez un
programme qui utilise le fichier pour imprimer tous les pays dont les noms commencent pargqui comptent au moins
500 000 personnes.
8. Écrivez un programme qui lit un fichier texte nomméétudiantParagraphes.txt.Le fichier contient plusieurs paragraphes de
texte, chaque paragraphe étant séparé par deux caractères de retour à la ligne. Au début de chaque paragraphe se
trouve un nom d'étudiant suivi de deux-points. Le programme doit imprimer les lignes du formulairenom de l'élève :
classe, où la note de chaque élève est basée sur la longueur de son paragraphe. Voici les règles pour les notes :
28
9. Chaque ligne du fichieréléments.txta un numéro d'élément, son symbole et son nom, chacun séparé par un
espace, suivi d'un trait d'union puis d'un autre espace. Écrivez un programme qui lit ce fichier et génère un
nouveau fichiernew_elements.txt,où chaque ligne du fichier contient uniquement le symbole et le numéro de
l'élément, séparés par une virgule, comme ci-dessous.
H,1
Il,2
Li,3
...
10. Vous recevez un fichier appelébaseball.txt.Une ligne typique du fichier commence comme ci-dessous.
Chaque entrée est séparée par une tabulation, \t.La division de ces entrées par onglets donne une liste où la première
entrée est le nom du joueur, la seconde est son équipe, la huitième est le nombre de circuits et la 14e est la moyenne.
Imprimez le nom, l'équipe, les circuits et la moyenne de tous les joueurs qui ont réussi au moins 20 circuits et qui ont
une moyenne d'au moins 0,300.
11. Le dossierhigh_temperatures.txta la température élevée pour chaque date de l'année dans une certaine ville.
Écrire un programme qui lit le fichier et écrit un nouveau fichiernew_high_temperatures.txt,où les températures
sont converties de Fahrenheit en Celsius et arrondies au nombre entier le plus proche, et chaque date est
convertie à partir dumois/jourformat pour donner le nom complet du mois. Par exemple, la première ligne, qui
est1/1 37,devraient devenir1 3 janvier.
12. Le dossierpays.txta des noms de pays, un nom sur chaque ligne. Écrivez un programme qui lit ce fichier et crée
une liste de listes, où le premier élément de la liste est une liste de tous les pays commençant par UN, le
deuxième élément est une liste de tous les pays commençant parB, etc. Il devrait y avoir 26 listes au total, dont
certaines peuvent être vides. Imprimez la liste.
13. Demandez à l'utilisateur d'entrer une chaîne de lettres minuscules. Utilisez ensuiteliste de mots.txtpour trouver tous les mots qui peuvent
être composés à partir des lettres de la chaîne de l'utilisateur, en tenant compte des fréquences. [Astuce : créer un dictionnaire des
fréquences des lettres peut aider.]
14. Le dossierpays.txtcontient les noms des pays, un sur chaque ligne. Demander à l'utilisateur un nom de pays et
un nombre entiern. Si le nom du pays ne figure pas dans le fichier, imprimez un message. Sinon, imprimez le
nom du pays qui vientnlignes avant le pays de l'utilisateur dans le fichier, revenant à la fin de la liste si
nécessaire. [Astuce : utilisez un mod pour envelopper.]
15. Les dossiersfootball_teams.txtetbasketball_teams.txtcontiennent tous les noms des équipes de la NFL et de la NBA. Lisez ces
fichiers et utilisez-les pour répondre à cette question : Quel surnom d'équipe de la NFL, lorsque vous supprimez une seule
lettre, donne le surnom d'une équipe de la NBA ? [Astuce : supprimez systématiquement les lettres des surnoms des équipes
de la NFL pour trouver la réponse.]
16. Le dossierromeoandjuliet.txtqui contient le texte d'une pièce shakespearienne bien connue. Écrivez un
programme qui lit le fichier et crée un dictionnaire dont les clés sont les mots du fichier et dont les valeurs sont
le nombre de fois que ces mots apparaissent. Pour des résultats plus précis, convertissez tout en minuscules et
supprimez tous les signes de ponctuation à l'exception des apostrophes et des traits d'union. Alors
utilisertrié(liste(d.items()), clé=lambdax:-x[1])[:10]imprimer les dix mots les plus courants
(remplacerdavec ce que vous appelez votre dictionnaire.)
17. Une façon de sauvegarder l'état d'un jeu est d'écrire les valeurs de toutes les variables importantes dans un fichier.
Écrivez un jeu simple de deviner un nombre, où l'ordinateur choisit des nombres aléatoires de 1 à 5, et l'utilisateur a
un essai pour deviner le nombre. Après chaque supposition, le programme devrait imprimer s'ils ont bien compris ou
non et imprimer le nombre total de bons et de mauvais. De plus, après chaque supposition, l'utilisateur a la possibilité
de sauvegarder sa progression et de quitter ou de continuer à jouer. Pour enregistrer leur progression, écrivez le
montant du bien et du mal dans un fichier appelédevine_un_nombre.txt.Lorsque le joueur démarre le jeu, il doit avoir la
possibilité de commencer un nouveau jeu ou de continuer un ancien. S'ils commencent un nouveau jeu, le nombre de
bons et de mauvais doit commencer à 0 et sinon, ils doivent être lus à partir du fichier.
29
18. Le dossiercontinents.txtcontient une liste de noms de pays classés par continent. Veuillez regarder le fichier pour voir
comment les choses sont arrangées. À l'aide de ce fichier, écrivez un programme de quiz qui sélectionne au hasard un
pays et demande à l'utilisateur de deviner sur quel continent se trouve le pays. Imprimez un message indiquant s'ils
ont deviné correctement ou non.
19. Le dossierchoix_multiple.txtcontient des questions à choix multiples. Écrivez un programme qui lit ce
fichier et créez un nouveau fichier,nouveau_choix_multiple.txt,avec les mêmes questions mais avec les
choix pour chaque question réorganisés.
2. Après l'Asie, le plus grand continent est 2. Après l'Asie, le plus grand continent est
(a) Afrique (a) Amérique du Nord
(b) Amérique du Nord (b) Afrique
(c) Amérique du Sud (c) Amérique du Sud
Notez que certaines questions peuvent avoir plus de choix que d'autres et supposez qu'il n'y a pas de limite au nombre de
questions dans le fichier. Les questions sont séparées les unes des autres par une ligne blanche.
20. Le dossierhigh_temperatures.txtcontient les températures maximales moyennes pour chaque jour de l'année dans une
certaine ville. Chaque ligne du fichier se compose de la date, écrite au format mois/jour, suivie d'un espace et de la
température maximale moyenne pour cette date. Trouvez toutes les périodes de 30 jours sur lesquelles il y a la plus
forte augmentation de la température maximale moyenne (il y a en fait quelques périodes de 30 jours avec la même
augmentation maximale). [Astuce : un mod pourrait être utile pour considérer le cas d'une période de 30 jours qui
commence en décembre et se termine en janvier.]
21. Le dossiernfl1978-2013.csvcontient les résultats de chaque match de la saison régulière de la NFL de 1978 à 2013. Ouvrez
le fichier pour voir comment il est arrangé. Autorisez l'utilisateur à saisir deux noms d'équipe (vous pouvez supposer
qu'il saisit les noms correctement) et que le programme imprime tous les matchs impliquant les deux équipes où l'une
des équipes a été blanchie (n'a marqué aucun point).
22. Le dossiernfl_scores.txtcontient des informations sur le nombre de fois où chaque score final s'est produit dans un match de la
NFL. Veuillez regarder le fichier dans un éditeur de texte pour voir comment les choses sont arrangées. À l'aide du fichier,
imprimez toutes les notes finales qui ontjamaiss'est produit, avec la limitation que le total des points des deux équipes doit
être de 0 ou compris entre 2 et 29. Par exemple, les scores 4-2, 11-9 et 6-5. 20-1 et 77-55 ne se sont jamais produits non plus,
mais ceux-ci se situent en dehors de la plage spécifiée, ils ne seraient donc pas imprimés.
30
Chapitre 13
1. Écrivez un programme appelétriangulaire()qui prend un entiernet renvoie lenème nombre triangulaire. Len
ème nombre triangulaire est donné par la formulen(n+1)/2.
2. Écrivez une fonction appeléeget_bill_total()qui prend un montant de facture et un pourcentage de taxe de vente et
renvoie le montant total de la facture, arrondi à deux décimales.
3. W
√écrire une fonction appeléedistance()qui prend quatre nombresX1,y1,X2, ety2et revient
(X2− X1)2+ (y2−y1)2.
4. Écrivez une fonction appeléeprint_blank_lines()qui prend un entier et imprime autant de lignes vides.
Cela ne devrait rien renvoyer.
5. Écrivez une fonction appeléeprint_perfect_squares()qui prend un nombre entier et imprime tous les
carrés parfaits de 1 à ce nombre. Cela ne devrait rien renvoyer.
6. Écrivez une fonction appeléeadd_up_range()qui prend un emplacement de départ, un emplacement de fin et une étape et
additionne tous les entiers de cette plage. Par exemple,add_up_range(2,6,1)additionnerait les nombres entiers 2 + 3 + 4 + 5et
retournez 14. Faites en sorte que les trois arguments se comportent comme ils le font dans Pythongamme
déclaration.
7. L'Eulerφfonction,φ(n), indique le nombre d'entiers positifs inférieurs ou égaux ànsont relativement premiers àn.
(Deux nombres sont dits premiers entre eux s'ils n'ont aucun diviseur en commun, c'est-à-dire si leur pgcd vaut
1). Écrire une fonction appeléephi()qui implémente l'Eulerφfonction. [Indice : lefractionsmodule a une fonction
appeléepgcd()cela pourrait être utile.]
8. Ci-dessous est décrit comment trouver la date de Pâques dans n'importe quelle année. Écrire une fonction appelée
Pâques()qui prend l'année et renvoie une chaîne avec la date de Pâques de cette année. Malgré son apparence
intimidante, ce n'est pas un problème difficile. Noter quebXcest leflsolfonction, qui pour les nombres positifs
supprime simplement la partie décimale du nombre. En Pythonbx/ycestx // y.
31
Pâques est soit mars (22 +d+e)ou avril (d+e-9).Il y a une exception sid=29ete=6.Dans ce cas, Pâques
tombe une semaine plus tôt le 19 avril. Il y a une autre exception sid=28,e=6,et m=2,5,dix,13,16,21,
24,ou 39. Dans ce cas, Pâques tombe une semaine plus tôt le 18 avril.
9. Écrivez une fonction appeléeest_supérieur()qui prend une chaîne de lettres et renvoie si chaque lettre de la chaîne
est en majuscule ou non.
10. Écrivez une fonction appeléerand_lower_string()qui prend un paramètre entier et renvoie une chaîne aléatoire de
ce nombre de lettres minuscules.
11. Écrivez une fonction appeléecontient_une_lettre()qui prend une chaîne et retourneVraisi la chaîne contient
des lettres (majuscules ou minuscules) etFAUXsinon.
12. Écrivez une fonction appeléetexte_simplifié()qui reçoit une chaîne et convertit la chaîne en minuscules, supprime toutes
les ponctuations courantes à l'exception des traits d'union et des apostrophes, et renvoie la nouvelle chaîne.
13. Sur Mars, les habitants ont une journée de 25 heures, où chaque heure dure 60 minutes. Les résidents de l'hémisphère
nord utilisent un système où les heures sont appelées 0, 1, . . . 24. Les résidents de l'hémisphère sud étiquettent leurs
heures comme 1A, 2A, 3A, 4A, 5A, 1B, 2B, . . . , 5E, où la journée est découpée en 5 portions égales (matin (A), après-
midi (B), soir (C), nuit (D), fin de nuit (E)). Écrire une fonction appeléeconvert_time()qui prend une chaînetempsdans le
temps de l'hémisphère nord et le convertit dans le temps de l'hémisphère sud. Les heures d'entrée auront des heures
et des minutes. A titre d'exemples,3h30convertit en4A:30et19:45convertit en
5D :45.
14. Écrivez une fonction appeléenom_suivant()qui renvoie le nom suivant dans une séquence, où les noms de
la séquence sontUN,B, . . . ,Z,AA,UN B, . . . ,ZZ,AAA,AAB. . . .Par exemple,nom_suivant('S')concernant-
se tourne'T',nom_suivant('CD')Retour'CE',nom_suivant('AZ')Retour'BA', etnom_suivant('ZZZ')
Retour'AAAA'.
15. Écrivez une fonction appeléereverse_only_letters()qui prend une chaîne et crée renvoie une nouvelle chaîne où
toutes les positions de toutes les lettres ont été inversées, mais tous les autres caractères ont été laissés en
place. Par exemple, si l'argument estab*c&&dealors la chaîne retournée seraitéd*c&&ba.
16. Écrivez une fonction appeléemoyenne()qui prend une liste de nombres et renvoie la moyenne de ces nombres.
17. Écrivez une fonction appeléemid_range()qui prend une liste d'entiers et renvoie (X+y)/2,oùXest la plus
grande valeur de la liste etyest la plus petite valeur.
18. Écrivez une fonction appeléele plus proche()qui prend une liste d'entiers et un autre entiernet renvoie l'entier de
la liste le plus proche den. Si deux entiers sont à égalité pour le plus proche, renvoie le plus petit des deux.
19. Écrivez une fonction appeléechanges_by_one()qui prend une liste d'entiers et d'entiers et renvoie une liste de tous
les indices auxquels la valeur actuelle est égale à 1 de plus que la valeur précédente. Par exemple,
si la liste est [1,2,5,5,10,11,12,15,16],ça reviendrait [1,5,6,8].
20. Écrivez une fonction appeléestring_sort()qui prend une chaîne de lettres minuscules et renvoie une chaîne avec tous les
mêmes caractères, mais classés par ordre alphabétique. [Astuce : convertissez la chaîne en liste et utilisez la listetrier()
méthode.]
21. Sur les téléphones, les chiffres correspondent aux lettres, selon le tableau ci-dessous. Écrire une fonction appelée
telephone_match()qui détermine si un numéro de téléphone numériquenombrecorrespond à la chaînes
selon le tableau ci-dessous. Par exemple, sinombreest468-3437etsestENTIER,alors la fonction reviendrait
vraiparce que chaque lettre dansscorrespond au numéro correspondant dansnum.
2 abc
3 DÉF
4 GHI
5 JKL
6 ORM
7 PQRS
8 TÜV
9 WXYZ
32
22. Écrivez une fonction appeléeentier_longueurs()qui prend une liste d'entiers et renvoie la somme de toutes leurs
longueurs. Par exemple, étant donné [2,44,532,3,44,22],la somme des longueurs est1+2+3+1+2+2 = 11.
23. Écrivez une fonction appeléesyndicat()qui prend deux listes et renvoie une nouvelle liste qui contient tous les éléments qui se
trouvent dans l'une, l'autre ou les deux listes. Faites en sorte que la liste renvoyée ne contienne pas de copies répétées
d'éléments.
24. Écrivez une fonction appeléeéquipes()qui prend un argument qui est une liste de noms et imprime un
regroupement aléatoire des noms en équipes de deux. Vous pouvez supposer qu'il y a un nombre pair de noms.
La fonction ne doit rien renvoyer. Voici un exemple de sortie pour la liste [A, B, C, D, E, F, G, H, I, J] :
Equipe 1 : D, J
Equipe 2 : I, A
Equipe 3 : B, C
Equipe 4 : E, G
Equipe 5 : F, H
25. Écrivez une fonction appeléetriple_shuffle()qui prend trois listes de la même taille et les mélange
simultanément, de sorte qu'elles soient mélangées exactement de la même manière. Par exemple,
si les listes sont [1,2,3,4,5], [11,22,33,44,55],et [9,8,7,6,5],et la première liste est mélangée en [4,5,3,2,1],
alors le second deviendrait [44,55,33,22,11]et le troisième deviendrait [6,5,7,8,9].La fonction doit
modifier les listes et ne rien retourner.
26. Écrivez une fonction appeléeprint_2d()qui prend une liste à 2 dimensions et imprime bien la liste, chaque ligne
étant imprimée sur sa propre ligne.
27. Écrivez une fonction appeléerandom_2d_list()qui prend des entiers,m,n,X, etyet crée unm×n 2d-liste dont
les éléments sont des nombres aléatoires deXpoury.
28. Écrivez une fonction appeléenombre_de_lignes()qui prend un nom de fichier (une chaîne) et renvoie le nombre de lignes
dans le fichier.
29. Écrivez une fonction appeléetrouver les mots()qui prend une chaîne donnée une chaînesde consonnes, et renvoie
une liste de tous les mots anglais (deliste de mots.txt)qui ont ces consonnes dans cet ordre, lorsque les voyelles
(a, e, i, o, u) sont exclues. Il ne doit pas y avoir d'autres consonnes dans le mot en plus de celles de la chaîne
d'entrée. Par exemple, étant donnébt,ça reviendraitchauve-souris, mors, bateau,etdiminuer,entre autres mots.
30. Écrivez une fonction appeléemots_dans_mot()qui prend une chaîne comme paramètre et renvoie une liste de tous les
groupes de lettres contiguës dans ce mot qui sont de vrais mots anglais (en utilisant le fichierliste de mots.txtsavoir si
un mot est réel). Par exemple, simotestrestaurant,alors la liste retournée devrait être
[a,an,ant,aura,es,ran,rant,re,rest,restaurant,ta,tau].
33
Chapitre 14
Puis testez la classe, en créant un nouveauCompte bancaireobjet pour un utilisateur nommé Juan De Hattatime qui a
1000 $ à 3% d'intérêt. Ensuite, procédez comme suit :
2. Écrivez une classe appeléeArticlequi représente un article à vendre. Il devrait avoir les éléments suivants :
3. Écrivez une classe appeléePanierqui pourraient être utilisés dans une boutique en ligne. Il devrait avoir les éléments suivants :
34
• Une méthode appeléesupprimer des éléments()qui prend un nom d'élément (une chaîne) et supprime toutArticle
objets portant ce nom depuis le panier. Cela ne devrait rien renvoyer.
• UN __str__()méthode qui renvoie une chaîne contenant des informations sur tous les articles du panier
Testez ensuite le panier d'achat comme suit : (1) créez un panier d'achat ; (2) y ajouter plusieurs éléments ; (3)
imprimer le coût total du panier (en utilisant letotal()méthode); (4) supprimer l'un des types d'éléments ; (5) imprimez le
panier.
• Un champcoûtpour le prix du billet et un champ de chaînetempspour l'heure de début de l'événement (en supposant que
les heures sont au format 24 heures, comme'18:35')
6. Écrivez une classe appeléeBillet de cinémaqui hérite de laBilletclasse du problème précédent. Il devrait
avoir les éléments suivants (en plus de tout ce qu'il obtient duBilletclasse):
35
• Un champnomc'est le nom du cours, un champcapacitéc'est-à-dire le nombre maximum d'étudiants
autorisés dans le cours, et une liste appeléeétudiant_IDsreprésentant les étudiants du cours par leurs
numéros d'identification (stockés sous forme de chaînes).
• Un constructeur qui prend le nom du cours et de la capacité et définit ces champs en conséquence. Le
constructeur doit également initialiserétudiant_IDslist en une liste vide, mais il ne doit pas prendre une liste
en paramètre. Il ne doit contenir que le nom et la capacité du cours comme paramètres.
• Une méthode appeléeest rempli()qui ne prend aucun argument et renvoieVraiouFAUXselon que le cours est
complet ou non (c'est-à-dire si le nombre d'étudiants dans le cours est égal ou supérieur à la capacité).
Testez la classe en créant unCoursobjet, en ajoutant plusieurs élèves à la classe et en appelantest rempli()
méthode. Imprimer la valeur duétudiant_ID fichamp pour s'assurer que tout se passe comme prévu.
8. Écrivez une classe appeléeAvatarqui représente un personnage dans un jeu de rôle. La classe doit avoir les éléments
suivants :
Testez ensuite la classe en créant un programme qui crée contenant au moins troisAvatarobjets. Ensuite,
choisissez à plusieurs reprises deux avatars aléatoires différents et faites en sorte que l'un d'eux attaque
l'autre. Imprimez quels avatars sont choisis et le résultat de l'attaque. Chaque fois qu'un avatar n'est plus en
vie, un message doit être imprimé et cet avatar doit être supprimé de la liste. Le programme s'arrête lorsqu'il
ne reste qu'un seul avatar. Pour ralentir la vitesse à laquelle les choses se produisent, vous pouvez importer
tempset utilisetime.sleep(.5)pour mettre le programme en pause pendant 0,5 seconde après chaque attaque.
9. Écrire des classes appeléesCombattantetmagequi hérite de laAvatarclasse. LeCombattantclasse devrait avoir une
méthode supplémentaire appeléepouvoir spécial()qui, avec une probabilité de 1 sur 5, renvoie une quantité
d'attaque égale à deux fois la valeur depuissance d'attaqueet renvoie sinon la valeur 0.magela classe doit avoir
une méthode également appeléepouvoir spécial()qui ajoute 10 à la valeur depoints de dommage.
Utilisez ensuite ces deux classes pour créer un jeu. Un joueur est un combattant et l'autre est un mage. Les joueurs se
relaient jusqu'à ce qu'un joueur ne soit plus en vie. À chaque tour, le joueur peut choisir entre attaquer et utiliser son
pouvoir spécial. Montrez le résultat de chaque attaque et continuez le jeu jusqu'à ce qu'un joueur soit vaincu.
10. Écrivez une classe appeléeMinuteurutilisé pour chronométrer les choses. Il devrait avoir les éléments suivants :
36
• Créez une minuterie et démarrez-la.
• une méthodepremier_jour(m)qui renvoie le jour de la semaine du premier jour du moism (donnée sous la
forme d'un nombre de 1 à 12) dans l'année donnée. Pour obtenir le premier jour, utilisez la formule ci-
dessous, où y,m, etdsont l'année, le mois et le jour. Le résultat du calcul, ainsi que la valeur renvoyée, est
un entier compris entre 0 et 6, 0 signifiant dimanche, 1 signifiant lundi, etc.
⌊ ⌋
14− m
p=
12
q=y−p
⌊⌋ ⌊ ⌋ ⌊ ⌋
q q q
r=q+ − +
4 100 400
s=m+12p−2
( ⌊ ⌋)
31s
t=1 +r+ mode 7
12
Testez votre classe en créant un objet calendrier et en appelant toutes ses méthodes.
37