Bonjour j'ai besoin d'aide pour cette exercice je n'y arrive vraiment pas je ne sais pas par où commencer merci de votre aide
Bonjour j'ai besoin d'aide pour cette exercice je n'y arrive vraiment pas je ne sais pas par où commencer merci de votre aide
Salut,
La difficulté pour le programmeur Python est de savoir comment passer de "BBB" à sa forme canonique "AAA".
Soit f la fonction (inconnue) qui permet de passer d'une chaîne de caractères à sa forme canonique.
Fabriquer un dictionnaire où les clefs sont f(x) et les valeurs la liste des x correspondants est assez trivial:
et est tellement "commun" qu'on pourra réduire le nombre de lignes avec un defaultdict ou simplement avec .setdefault
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 D = dict() for x in ...: key = f(x) if key not in D: D[key] = [] D[key].append(x)
- W
bonjour merci mais du coup il faut faire comme cela et je suis censé mettre quoi à la place des pointillés s'il vous plaît:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 def equiv_canonique(): D = dict() for x in ...: key = f(x) if key not in D: D[key] = [] D[key].append(x)
Ça ne fonctionne toujours pas ça me met erreur
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 def equiv_canonique(): D = dict() for x in d: key = f(x) if key not in D: D[key] = [] D[key].append(x) print(equivalence_canonique('BBB', CCC, BABA, ABBA))
Bonjour
Et tu te dis "expert sécurité" ? Remarque t'as raison, le titre d'expert n'est pas protégé en France. C'est à dire que n'importe qui peut se proclamer "expert" en quoi que ce soit sans avoir à fournir de quelconque certificat ou titre officiel. T'as même le droit de te proclamer "expert en orthographe" !!!
Donc ça ne fonctionne toujours pas ça te met erreur. Surtout ne nous dit pas quelle erreur ça te met, ça serait trop facile (oui, tant qu'à nous demander de l'aide, autant nous la challenger un peu). A mon avis, ça te met "erreur" lorsque tu appelles f(x). As-tu lu attentivement la phrase de wiztricks quand il écrit "Soit f la fonction (inconnue) qui permet de passer d'une chaîne de caractères à sa forme canonique." ??? Quel est le mot de cette phrase que tu ne comprends pas ? "inconnue" ??? ça signifie que cette fonction n'existe pas et que tu dois alors l'écrire
Accessoirement, si ta fonction est censée recevoir une liste de mots en paramètres, ce serait bien aussi de la définir dans ce sens. Remarque c'est peut-être là aussi l'erreur (quand tu écris for x in d: alors que "d" n'existe pas)
Et quand tu postes un code,
Mon Tutoriel sur la programmation «Python»
Mon Tutoriel sur la programmation «Shell»
Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
Et on poste ses codes entre balises [code] et [/code]
bonsoir mon professeur vient de modifier l'exercice il n'y a pas grande différence je pense ?
je n'arrive toujours pas à comprendre ce que je doit mettre à la place de f(x)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 def equiv_canonique(*donnee): D = dict() for x in D: key = f(x) if key not in D: D[key] = [] D[key].append(x) equiv_canonique(BBB, CCC, BABA, ABBA)
Explique avec des phrases comment, à partir de "BABA", tu obtiens "AZAZ" comme forme canonique ? Ou (inversement) comment à partir de "AZAZ" tu sais que "BABA" appartient à son groupe ?
Une fois que tu auras réussi à l'expliquer avec des mots et ordres simples, ne restera qu'à convertir ces mots et ordres en instructions Python.
Mon Tutoriel sur la programmation «Python»
Mon Tutoriel sur la programmation «Shell»
Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
Et on poste ses codes entre balises [code] et [/code]
Bonjour je ne comprends rien à l'énoncé qui t'a été donné:
pourquoi pas en réponse: {'AAA':['BBB','CCC'],'AZAZ':['BABA','ABAB']} à l'exemple donné vu que la clé DCCD peut renvoyer aussi à 'ABBA'.
En l'état difficile de proposer un algorithme vu le gros flou de la notion de canonicité dans l'énoncé; il n'y a pas de définition, juste un exemple et qui n'est pas clair du tout.
A+
Dernière modification par olivier50 ; 03/02/2020 à 19h41.
mon prof m'a dit d'utiliser translate ()
https://www.journaldev.com/23697/pyt...ring-translate
salut,
avec translate() ça peut se faire mais ça me semble peu adapté
d'autant qu'il y a une petite vilénie dans l'exercice, 'ABBA' peut assez facilement donner 'CDDC' mais pas 'DCCD', ça oblige à bidouiller la translation dont on perd alors la logique, à ce stade une forêt de if adéquate ferait aussi bien le job à mon avis...
avec quelques regexp bien senties en revanche ça passe comme dans du beurre
1. Je verrais la liste transformée en dataframe.
2. Je construis une fonction qui pour chaque chaîne renvoie la clé.
3. J'applique la méthode apply sur le dataframe avec la fonction en paramètre afin d'obtenir une seconde colonne au dataframe qui donne la clé pour chaque chaîne en colonne 1.
4. Je boucle sur le dataframe et pour chaque valeur clé je fais un append pour ajouter les valeurs de chaine et obtenir le dictionnaire.
Pour la fonction j'analyse la chaine, je prends la plus petite lettre dans l'ordre alphabétique et lui affecte la valeur 00 puis chaque autre lettre l'écart. J'ai une correspondance de tableau de 00 à 25 qui affecte la lettre donc translate peut servir ici. 'TOTO' prend la valeur clé BABA.
A+
Cet énoncé est délirant ou incomplet : on tourne en rond car personne n'est capable de dire comment construire une clé dynamiquement (le machin canonique), puis comment tester quels mots respectent cette clé.
Le plus croustillant étant de voir ce que cet exercice est apparemment donné à de parfaits débutants en Python
Il vaut mieux mobiliser son intelligence sur des conneries que mobiliser sa connerie sur des choses intelligentes --- devise SHADOKS
Kit de survie Android : mon guide pour apprendre à programmer sur Android, mon tutoriel sur les web services et enfin l'outil en ligne pour vous faire gagner du temps - N'oubliez pas de consulter la FAQ Android
Hello, j'imagine ça mais ???
ce qui donne :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 canon = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" eq_canon = {} def equiv_canonique(mot) : indice = 0 dico = {} forme = '' res = '' for l in mot : if l not in dico : dico[l] = indice forme += str(indice) indice += 1 else : forme += str(dico[l]) for i in forme : res += canon[int(i)] if res not in eq_canon : eq_canon[res] = [mot] else : eq_canon[res].append(mot) equiv_canonique('toto') equiv_canonique('tata') equiv_canonique('tordu') print(eq_canon)
A adapter pour une liste de mot bien évidement.
Code : Sélectionner tout - Visualiser dans une fenêtre à part {'ABAB': ['toto', 'tata'], 'ABCDE': ['tordu']}
En repartant de ta solution, je propose la solution suivante :
Code python : Sélectionner tout - Visualiser dans une fenêtre à part
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 #fonction de calcul de la clé canonique def computeKey(mot): canon = iter("ABCDEFGHIJKLMNOPQRSTUVWXYZ") assoc, canonical_key = dict(), "" for l in mot: if not l in assoc: assoc[l]= next(canon) canonical_key += assoc[l] return canonical_key #fonction des équivalences canoniques def equiv_canonique(*word_list): dico = dict() for w in word_list: k = computeKey(w) dico[k] = dico.get(k, []) + [w] return dico # tests print(equiv_canonique("toto", "tata", "tordu"))
Il vaut mieux mobiliser son intelligence sur des conneries que mobiliser sa connerie sur des choses intelligentes --- devise SHADOKS
Kit de survie Android : mon guide pour apprendre à programmer sur Android, mon tutoriel sur les web services et enfin l'outil en ligne pour vous faire gagner du temps - N'oubliez pas de consulter la FAQ Android
en voyant les solutions proposées et après relecture de l'énoncé je comprends un peu mieux la logique de l'exercice et l'intérêt de translate() finalement :
donc finalement la forme canonique est indexée sur le premier caractère du mot qu'on traite comme devant devenir un 'A', ce qui pour 'BABA' permet de donner 'AZAZ'
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 def equiv_canonique(*donnee): dst = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' dico = dict() for mot in donnee: idx = (dst*2).index(mot[0]) src = (dst*2)[idx:idx+26] tab = str.maketrans(src, dst) cle = mot.translate(tab) dico[cle] = dico.get(cle, []) + [mot] return dico
Okay, je viens (enfin) de comprendre le principe de cette clé. Ton code est le plus efficient
Il vaut mieux mobiliser son intelligence sur des conneries que mobiliser sa connerie sur des choses intelligentes --- devise SHADOKS
Kit de survie Android : mon guide pour apprendre à programmer sur Android, mon tutoriel sur les web services et enfin l'outil en ligne pour vous faire gagner du temps - N'oubliez pas de consulter la FAQ Android
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager