Bonjour j'ai besoin d'aide pour cette exercice python svp
Ecrire une fonction nouveaux_heros dont le but consiste à remplacer les héros d'une histoire. Il y aura deux paramètres:
le premier sera une chaîne de caractères précisant le nom du fichier contenant l'histoire initiale ;
le deuxième sera une chaîne de caractères précisant le nom du fichier dans lequel sera sauvegardée l'histoire modifiée comme précisé ci-dessous
Dans l'histoire initiale, présente dans le fichier dont le nom est donné en premier argument, trois protagonistes interviennent : Pierre, Paul et Jacqueline. La fonction devra remplacer ces trois héros par, respectivement, Paul, Tom et Mathilde. Le texte ainsi modifié sera alors stocké dans le fichier dont le nom est donné en deuxième argument.
C'est vraiment bateau comme exercice, il faut que tu regardes du côté des f-strings en python, ça fait tout le boulot...
As-tu déjà fait un code ? Si oui présentes-le, sinon, travaille déjà sur la ligne avant de travailler sur les fichiers.
Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard) La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)
Wep, le fichier on s'en fout, c'est le traitement de la ligne qui est important, il faut bosser la dessus en te servant des f-strings python. Tu as tes mots clés pour faire une recherche, bon courage.
Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard) La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)
Wep, le fichier on s'en fout, c'est le traitement de la ligne qui est important, il faut bosser la dessus en te servant des f-strings python. Tu as tes mots clés pour faire une recherche, bon courage.
j'ai compris a quoi sert f-string mais moi je ne peut pas mettre des acolades pour changer les noms est ce que vous pouvez juste me donner le début pour m'éclaire svp
TEMPLATE = "Si {fils} est le fils de {pere}, et si {pere} est le frère de {tante}, qui est {fils} pour {tante} ?"
texte = "Si Pierre est le fils de Paul, et si Paul est le frère de Jacqueline, qui est Pierre pour Jacqueline ?"
texte = TEMPLATE.format(fils="Paul", pere="Tom", tante="Mathilde")
print(texte)
Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard) La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)
TEMPLATE = "Si {0} est le fils de {1}, et si {1} est le frère de {2}, qui est {0} pour {2} ?"
texte = "Si Pierre est le fils de Paul, et si Paul est le frère de Jacqueline, qui est Pierre pour Jacqueline ?"
texte = TEMPLATE.format("Paul", "Tom", "Mathilde")
print(texte)
T'as pas à toucher à la constante TEMPLATE, je vois pas le problème, je te propose une solution sans mettre les noms des attributs à la rigueur.
Le principe est d'écraser le texte précédent, par un autre texte construit sur le même template.
Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard) La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)
Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard) La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)
Non je veux dire comment il envoi cette information ? replace n'est pas la seule solution, c'est certains...
EDIT: D'ailleurs pour moi l'énoncé est loin d'être clair, ça manque de précision sur les étapes d'exécution de la tâche.
- Edité par fred1599 28 mars 2020 à 17:51:44
Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard) La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)
j'ai essayer de faire comme ca deja sa m'aidera un peu plus donc la je dois juste remplacer les valeurs entre guillemets par des autres noms avec replace ?
Si la soeur de {Pierre} est la fille de {Jacqueline} et {Paul} qui est {Paul} pour {Pierre} ?
Si la soeur de {0} est la fille de {1} et {2} qui est {2} pour {0} ?
Non la t'as mélangé les 2 ... on reprend depuis le début:
t'as ton texte qui est comme ca au début je ne me trompe ? > Si la soeur de Pierre est la fille de Jacqueline et Paul qui est Paul pour Pierre
soit tu utilise que relace et du coup il fait faire attentien à l'ordre pour pas remplace tes "Paul" nouvellement créés:
tranformation = {
'Paul': 'Tom',
'Pierre': 'Paul',
'Jacqueline': 'Mathlide'
}
for ancien, nouveau in tranformation.items():
texte = texte.replace(ancien, nouveau)
soit tu fait ce qu'as l'air de dire fred1599 (qui nécessite quand même replace mais où tu te fiche de l'ordre puisqu'il n'y as plus de redondance:
preparation = {
'Paul': '{fils}',
'Pierre': '{pere}',
'Jacqueline': '{tante}'
}
for nom, statut_familial in preparation.items():
texte = texte.replace(nom, statut_familial)
texte = texte.format(fils='Paul', pere='Tom', tante='Mathilde') # une fois que tout est remplacé on formate
ou si tu est en python3 l'ordre des dictionnaires est conservé:
transformation = {
'Paul': 'Tom',
'Pierre': 'Paul',
'Jacqueline': 'Mathilde'
}
for i, nom in enumerate(transformation.keys()):
texte = texte.replace(nom, f"\{{i}\}")
texte = texte.format(*transformation.values()) # pour formatter sans s'embeter avec les noms si il y en plein par ex ...
Je vois pas trop comment fred comptait faire sans replace, j'attend de voir.
je préfère celle sur python 3 merci beaucoup mais je ne voit pas comment sa peut marcher vu qu'il n'y a pas de variable nom dans ton code ? et dans transformation keys on doit bien rien mettre vu qu'on la fait plus haut avec la transformation des noms?
TEMPLATE = "Si {0} est le fils de {1}, et si {1} est le frère de {2}, qui est {0} pour {2} ?"
def nouveaux_heros(f1, f2):
noms = ["Paul", "Tom", "Mathilde"]
with open(f2, 'w') as f:
ligne = TEMPLATE.format(*noms)
f.write(ligne)
On voit que f1, qui représente le 1er fichier ne sert à rien, et qu'on peut écrire dans le nouveau fichier f2 les nouveaux noms écrit en dur dans la fonction.
C'est pour ça que je dis que cet exercice ne tient pas la route, voir si on veut lui donner un peu d'importance, très mal exprimé dans l'exécution des tâches.
- Edité par fred1599 29 mars 2020 à 10:20:54
Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard) La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)
oui mais du coup dans mon fichier texte j'ai directement des noms écrits je n'ai pas des accolades c'est pour ca c'est encore plus compliqué mais du coup ce que ta fait sa correspond pas a ce qui est attendu mais merci de m'avoir aidé en tout cas
On voit que f1, qui représente le 1er fichier ne sert à rien, et qu'on peut écrire dans le nouveau fichier f2 les nouveaux noms écrit en dur dans la fonction.
Le truc c'est que c'est pas toi qui decide si le fichier 1 sert ou pas puisque c'est ca l'exercice ! La t'as juste copié collé le contenu du fichier dans ton code , réécrit le truc comme ca te chantais alors que t'aurais directement pu mettre la bonne réponse puis tu sauvegarde. Il t'as dit je ne sais combien de fois que lui il a un fichier (imposé par l'exercice), et il veut remplacer des mots par d'autres.
MarwanBeni a écrit:
je préfère celle sur python 3 merci beaucoup mais je ne voit pas comment sa peut marcher vu qu'il n'y a pas de variable nom dans ton code ? et dans transformation keys on doit bien rien mettre vu qu'on la fait plus haut avec la transformation des noms?
Non en fait c'est la boucle for qui le fait, si tu l'as pas encore vu: la boucle for génère une variable pour chaque élément dans l'ordre dans laquelle elle les trouve, il faut juste lui mettre le nom de cette dite variable, "nom" dans le cas présent.
transformation.keys() c'est une méthode mais des dictionnaires, comme l'est .replace() mais pour les strings. Elle renvoie les clés du dictionnaire (les valeurs de gauche) dans l'ordre. Du coup for peut les utiliser une à une sous le nom qu'on lui a donné: "nom".
enumerate permet en plus de compter à combien d'élément on est rendu dans for. Je l'utilise du coup pour faire ce que fred disais > je remplace les noms par des "{numero_de_la_clé}" comme ca à la fin quand j'utilise format ils sont tous remplacés par ce qu'il faut.
Si t'as encore vu rien de tout ça je pense que la réponse qu'il attendaient doit ressembler à ça:
Après pour la lecture des fichier on préfère écrire comme suit habituellement:
with open('fichier.txt','r') as mon_fichier:
contenu = mon_fichier.read()
# comme ca quand tu sort du bloc de with le fichier sera
# automatiquement fermé (evite les oublis)
Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard) La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)
def subs(text, names, alt):
return alt[0].join(subs(piece, names[1:], alt[1:]) for piece in text.split(names[0])) if names else text
def test():
text = ("Si Pierre est le fils de Paul, et si Paul est le frère"
" de Jacqueline, qui est Pierre pour Jacqueline ?")
names = ["Pierre", "Paul", "Jacqueline"]
alt = ["Paul", "Tom", "Mathilde"]
s = subs(text, names, alt)
print(text)
print(s)
Si Pierre est le fils de Paul, et si Paul est le frère de Jacqueline, qui est Pierre pour Jacqueline ?
Si Paul est le fils de Tom, et si Tom est le frère de Mathilde, qui est Paul pour Mathilde ?
Ça paraît compliqué mais en fait l'idée est simple :
vous découpez le texte (avec split) par le premier prénom,
récursivement, vous substituez dans les différents morceaux les autres prénoms
vous recollez avec le prénom alternatif au premier en utilisant join
EDIT
Merci à MarwanBeni et à tous les autres pour cette discussion, ça me fait un nouvel exercice de récursivité
# -*- coding: utf-8 -*-
def nouveau_heros(a,b):
with open('histoire_1.txt','r') as mon_fichier:
contenu = mon_fichier.read()
transformation = {'Paul': 'Tom','Pierre': 'Paul','Jacqueline': 'Mathilde'}
for i, nom in enumerate(transformation.keys():
texte = texte.replace(nom, f"\{{i}\}")
texte = texte.format(*transformation.values())
le problème la c'est que ma variable et b ne sont pas défini je remplace b par texte et a faut que je fasse à nouveau la lecture du fichier en nommant la variable a aidez moi svp
Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)
Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)
Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)
Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)
Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)
Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)
Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)
Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)
Découverte Python Doc Tkinter Les chaînes de caractères
Découverte Python Doc Tkinter Les chaînes de caractères
le problème la c'est que ma variable et b ne sont pas défini je remplace b par texte et a faut que je fasse à nouveau la lecture du fichier en nommant la variable a aidez moi svp