Sélectionner des informations☘
Ces exercices doivent être utilisés pour vous entraîner à programmer. Ils sont généralement accompagnés d'aide et de leur solution pour vous permettre de progresser.
Avant de vous précipiter sur ces solutions dès la première difficulté, n'oubliez pas les conseils suivants :
- Avez-vous bien fait un schéma au brouillon pour visualiser le problème posé ?
- Avez-vous essayé de rédiger un algorithme en français, avec vos propres mots, avant de vous lancer dans la programmation sur machine ?
- Avez-vous utilisé des affichages intermédiaires, des
print()
, pour visualiser au fur et à mesure le contenu des variables ? - Avez-vous testé le programme avec les propositions de tests donnés dans l'exercice ?
- Avez-vous testé le programme avec de nouveaux tests, différents de ceux proposés ?
Rappels
- Chaque programme Python doit être sauvegardé sous forme de fichier texte
avec l'extension
.py
.
Enregistrez ce fichier dans le dossier[F05-Les_Fichiers]
avec le nom donné à l'exercice :ProgF05.61.py
,ProgF05.62.py
, etc... - Pour exécuter ce programme, il suffit de le sauvegarder puis d'appuyer
sur la touche
[F5]
.
ProgF05.61☘
-
Dans un nouveau fichier, complétez la définition de la fonction
couper()
en respectant ses spécifications.1 2 3 4 5 6 7 8
def couper(texte): """ texte – str Sortie: list – Tableau constitué des "mots" du texte. Chaque espace dans texte conduit à créer un nouvel élément dans le tableau >>> couper('Bonjour, comment ça va ?') ['Bonjour,', 'comment', 'ça', 'va', '?'] """
Une solution
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
def couper(texte): """ texte – str Sortie: list – Liste constituée des "mots" du texte. Chaque espace dans texte conduit à créer un nouvel élément dans la liste >>> couper('Bonjour, comment ça va ?') ['Bonjour,', 'comment', 'ça', 'va', '?'] """ reponse = [] chaine = '' for carac in texte: if carac != ' ': chaine = chaine + carac else: reponse.append(chaine) chaine = '' return reponse
-
En cliquant ici (clic droit puis [enregistrer sous]), téléchargez le texte original et non accentué du Petit Chaperon Rouge écrit par Charles Perrault et libre de droit. Placez le fichier
Petit_Chaperon_Rouge.txt
dans votre répertoire courant. -
Copiez/collez les instructions ci-dessous dans votre programme.
19 20 21 22 23 24
##----- Programme principal -----## import os # Importation du module rep = os.getcwd() # Obtenir le chemin du répertoire courant os.chdir(rep) # Changer de répertoire courant with ...
-
Remplacez les pointillés par les instructions nécessaires pour créer le fichier
Petit_Chaperon_Rouge_Seul_Mot.txt
.
Ce fichier doit contenir l'ensemble du texte du petit chaperon rouge, mais avec un seul mot par ligne :Début du fichier
Petit_Chaperon_Rouge_Seul_Mot.txt
Il etait une fois une adorable petite fille
Une solution
def couper(texte): """ texte – str Sortie: list – Liste constituée des "mots" du texte. Chaque espace dans texte conduit à créer un nouvel élément dans la liste >>> espace('Bonjour, comment ça va ?') ['Bonjour,', 'comment', 'ça', 'va', '?'] """ reponse = [] chaine = '' for carac in texte: if carac != ' ': chaine = chaine + carac else: reponse.append(chaine) chaine = '' return reponse ##----- Programme principal -----## import os # Importation du module rep = os.getcwd() # Obtenir le chemin du répertoire courant os.chdir(rep) # Changer de répertoire courant with open('Petit_Chaperon_Rouge.txt', 'r', encoding='utf-8') as f_source: with open('Petit_Chaperon_Rouge_Seul_Mot.txt', 'w', encoding='utf-8') as f_result: for phrase in f_source: liste_mots = couper(phrase) for mot in liste_mots: f_result.write(mot) f_result.write('\n')
ProgF05.62*☘
-
Dans la console Python, testez les instructions suivantes :
>>> ['a', 'b', 'C', 'D'].index('C') >>> ['a', 'b', 'C', 'D'].index('a')
-
Le fichier
materiel.txt
, téléchargeable en cliquant ici, a été établi par un responsable informatique qui a établi une liste des ordinateurs présents dans chaque salle. Chaque ligne du fichier est écrite uniquement en lettres minuscules sous la forme :Chaque modèle d'ordinateur peut avoir plusieurs caractéristiques, séparées par un espace comme les autres informations de la ligne.constructeur année_d_achat quantité caractéristiques
Complétez le programme ci-dessous afin qu'il exporte, dans un fichier nomménb_materiel.txt
, le nombre de machines par constructeur. Si un constructeur est présent sur plusieurs lignes, il faudra donc additionner les quantités correspondantes.1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
import os # Importation du module rep = os.getcwd() # Obtenir le chemin du répertoire courant os.chdir(rep) # Changer de répertoire courant ##----- Définition des Fonctions -----## def compte_matos(n_fic1, n_fic2, ind_info, ind_qtte): """ n_fic1 - str, nom du fichier source n_fic2 - str, nomdu fichier cible ind_info - int, donne l'indice de l'information à prendre en compte dans chaque ligne de n_fic1 ind_qtte - int, donne l'indice de la quantité à évaluer dans chaque ligne de n_fic1 Sortie: None - écrit dans n_fic2 les quantités correspondants aux informations identiques de n_fic1. """ #- Variables et constantes -# liste_informations = [] liste_quantite = [] #- Lecture des informations -# with open(n_fic1, 'r', encoding='utf-8') as f_source: ... #- Ecriture des informations -# with open(n_fic2, 'w', encoding='utf-8') as f_result: ... ##----- Variables et constantes -----## nom_lire = 'materiel.txt' nom_ecrire = 'nb_materiel.txt' ind_constructeur = 0 ind_quantite = 2 ##----- Programme principal -----## compte_matos(nom_lire, nom_ecrire, ind_constructeur, ind_quantite)
Contenu à obtenir dans
nb_materiel.txt
asus 155 fujitsu 227 hewlett-packard 122 msi 205 dell 148 lenovo 180 acer 214
Une piste
Pensez à utiliser la fonction
couper()
programmée dans l'exercice précédent.Une solution
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62
import os # Importation du module rep = os.getcwd() # Obtenir le chemin du répertoire courant os.chdir(rep) # Changer de répertoire courant ##----- Définition des Fonctions -----## def couper(texte): """ texte – str Sortie: list – Liste constituée des "mots" du texte. Chaque espace dans texte conduit à créer un nouvel élément dans la liste >>> espace('Bonjour, comment ça va ?') ['Bonjour,', 'comment', 'ça', 'va', '?'] """ reponse = [] chaine = '' for carac in texte: if carac != ' ': chaine = chaine + carac else: reponse.append(chaine) chaine = '' return reponse def compte_matos(n_fic1, n_fic2, ind_info, ind_qtte): """ n_fic1 - str, nom du fichier source n_fic2 - str, nomdu fichier cible ind_info - int, donne l'indice de l'information à prendre en compte dans chaque ligne de n_fic1 ind_qtte - int, donne l'indice de la quantité à évaluer dans chaque ligne de n_fic1 Sortie: None - écrit dans n_fic2 les quantités correspondants aux informations identiques de n_fic1. """ #- Variables et constantes -# liste_informations = [] liste_quantite = [] #- Lecture des informations -# with open(n_fic1, 'r', encoding='utf-8') as f_source: for ligne in f_source: liste_mots = couper(ligne) # Ligne transformée en liste de mots if liste_mots[ind_info] not in liste_informations: liste_informations.append(liste_mots[ind_info]) liste_quantite.append(int(liste_mots[ind_qtte])) # Quantité transformée en entier else: indice = liste_informations.index(liste_mots[ind_info]) # Information déjà présente à l'indice indice liste_quantite[indice] += int(liste_mots[ind_qtte]) #- Ecriture des informations -# with open(n_fic2, 'w', encoding='utf-8') as f_result: for i in range(len(liste_informations)): f_result.write(f'{liste_informations[i]} {liste_quantite[i]}\n') ##----- Variables et constantes -----## nom_lire = 'materiel.txt' nom_ecrire = 'nb_materiel.txt' ind_constructeur = 0 ind_quantite = 2 ##----- Programme principal -----## compte_matos(nom_lire, nom_ecrire, ind_constructeur, ind_quantite)
ProgF05.63*☘
A partir du même fichier que dans l'exercice précédent, téléchargeable
en cliquant ici, établir un programme qui exporte,
dans un fichier nommé materiel_linux.txt
, le nombre de machines par
constructeur qui utilise le système d'exploitation Linux
.
Contenu à obtenir dans materiel_linux.txt
asus 97
dell 61
fujitsu 32
hewlett-packard 21
msi 53
lenovo 112
acer 62
Une piste
Il suffit de renommer la fonction de l'exercice précédent (par exemple
compte_matos_2()
) et de lui ajouter un paramètre correspondant à la
caractéristique recherchée (ici 'linux'
).
Une solution
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 |
|