Permutation circulaire d'une chaine de caractères
Résolu
Bonjour à tous,
Je voudrais écrire la fonction suivante sur spyder :permutation(chaine, x); qui retourne la chaîne après une permutation de x lettres vers la droite, en supposant que x est positif et inférieur à la longueur de la chaîne.
Le soucis c'est que je n'ai aucune idée pour débuter et que mes compétences sur python sont très limitées... Donc toutes vos suggestions sont les bienvenues !
Merci.
Je voudrais écrire la fonction suivante sur spyder :permutation(chaine, x); qui retourne la chaîne après une permutation de x lettres vers la droite, en supposant que x est positif et inférieur à la longueur de la chaîne.
Le soucis c'est que je n'ai aucune idée pour débuter et que mes compétences sur python sont très limitées... Donc toutes vos suggestions sont les bienvenues !
Merci.
1 réponse
-
Pour commencer je t'invite à lire un cours de python, car c'est un exercice très simple.
https://openclassrooms.com/fr/courses/235344-apprenez-a-programmer-en-python
En python ça s'écrit assez facilement : si tu as une chaîne s, alors s[i:j] correspond à la sous-chaîne allant du caractère i au caratère j. Tu peux concaténer deux chaînes avec l'opérateur +.
(mando@velvet) (~) $ python
Python 2.7.8 (default, Oct 18 2014, 12:50:18)
[GCC 4.9.1] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> s = "abcdef"
>>> s[0:3]
'abc'
Maintenant réfléchis avec un papier et un crayon sur comment tu découperais la chaîne s et comment tu réassemblerais les morceaux pour obtenir le bon résultat.
Suppose dans mon exemple que tu veuilles décaler de d = 2 caractères à droite. Alors en gros tu vas obtenir "ef" suivi de "abcd" :
>>> s[4:6] + s[0:4]
'efabcd'
Maintenant regardons les valeurs significatives : 6 correspond à la longueur de la chaîne s (len(s)
) et 4 correspond à 6 - 2 (ielen(s) - d
).
>>> d = 2
>>> s[(len(s)-d):len(s)] + s[0:(len(s)-d)]
'efabcd'
Écrire ça sous forme de fonction devrait maintenant être une formalité.
Bonne chance-
-
-
Je viens de me rendre compte que le programme que vous m'avez donné contenait des erreurs.
En effet,si je l'applique pour une chaine s=abcde et un décalage x=2, Python affiche comme résultat 'deabc'. Or, il faut que le programme affiche comme résultat : 'cdeab'.
Voici les modifications que j'ai apporté :
s=0
s= input("entrer une chaine à permuter :")
x=0
x=int(input("entrer un décalage x :"))
def permutation(s,x):
s= s[(len(s[:-1])-x):len(s)] + s[0:(len(s)-x)] <=== Changement
print (s[:-1]) <=== Changement
Maintenant le programme fonctionne bien :
- ce n'est plus s[(len(s)-d):len(s)] + s[0:(len(s)-d)], mais : s[(len(s[:-1])-x):len(s)] + s[0:(len(s)-x)].
- on demande d'afficher print (s[:-1]) et non plus print(s).
En tout cas merci beaucoup de m'avoir donné la base pour arriver à coder ce programme ! -
-