Définir un palyndrome python
Forum Programmation : Définir un palyndrome python
bonjour,
Je suis débutant et j'aimerais connaitre la sxolution a cet exercice, svp aidez-moi :
-En partant de l'exercice précédent, écrivez un script qui détermine si une chaîne de
caractères donnée est un palindrome (c'est-à-dire une chaîne qui peut se lire indifféremment
dans les deux sens), comme par exemple « radar » ou « s.o.s ».
merci d'avance.
bonsoir,
Et c'est quoi l'exemple précédent?
Déjà, comparer les longueurs des 2 chaines, si longueur différente,c 'est que les chaines sont différentes... Ca evite une boucle inutile
Personnellement j'aurai tendance à parcourir la chaine 2 fois, croissant puis décroissant en enregistrant le parcours dans 2 chaines temporaires (en fonction de l'ordre du parcours), puis comparer simplement les 2 chaines résultantes....... réinventer donc une valeur absolue de chaine..
ou,
parcourir les 2 chaines sequentiellement, la 1ere en ascendant, la 2nde en descendant et comparer chacun des caractères des 2 chaines en fonction de la chaine parcourue..
C'est des problèmes bateau d'algo!
mais bon,
sans l'exercice précédent, c'est dur!
Message édité par elendilm le 01-08-2009 à 09:59:56
tu vas dans les "Opérations élémentaires sur les chaînes" et l'exercice précédent est le n° 5.9 et donc cet exercice est le n° 5.10 !
désolé d'avoir oublié ce détail !
merci de vos réponses !
pouvait vous me donner le script car j'ai un peu de mal a comprendre !
Il faut peut être que tu le cherches non ? pas le but d'un exercice dans le genre ? De plus elendilm à déjà donné l'algo ou presque à implémenter.
Donc je répète.
Tu coupes la chaine en 2 par le milieu.
Tu inverses une des chaines obtenues
Si les 2 chaines sont maintenant identique alors c'est un palindrome.
Répondre à SiM07
merci de vos explications, mais pouvez-vous me donner au moins le début des chaines à faire car la je vous avoue que je ne sait plus par où commencer ?
merci
salut:
1 conseil d'abord:la casse . En info, a!=A !!
Chaine origine (chaine_org): AAttAA
Si chaine_org longueur mod 2 != 0 => meme pas la peine d'aller plus loin .....
Chaine 1: AAt
Chaine 2: tAA
comme dis précédemment, tu inverse une des chaines (peu importe laquelle)
Chaine 2 devient Chaine 3 : AAt
.
Puis tu compare le résultat de l'inversion à la chaine non bidouillée.
Si les chaines (1 et 3) sont identiques, c'est ok , sinon, tu prouve que ce n'est pas un palyndrome.
Sinon,
tu peux aussi faire un compteur de 0 à n/2 (moitié de la chaine complete) et comparer simultanément caractere par caracter
(tjrs modulo 2 avant de commencer
ca évite les boucles inutiles.
0 <> dernier
1 <> avant dernier
2 <> avant avant dernier [...]
si tu a la moindre différence jusqu'a arriver à n/2 , tu arrete ta boucle car ce n'est pas un palyndrome, sinon ca en est 1.
Je suis sur qu'on peut trouver d'autres manière plus tordues ....
Cependant, reviens bien dessus pour comprendre, non pas le resultat, mais le raisonnement ... Si tu ne comprends pas ici ... revient vite en arrière!!!
Message édité par elendilm le 27-08-2009 à 21:22:13
merci de ton explication elendilm !
je vais voir ce que je peux faire !
Il y a 216 utilisateurs connus et inconnus. Pour voir la liste des connectés connus, cliquez ici.
