Permutation circulaire d'une chaine de caractères [Résolu/Fermé]

Signaler
Messages postés
9
Date d'inscription
lundi 22 décembre 2014
Statut
Membre
Dernière intervention
31 décembre 2014
-
mamiemando
Messages postés
29238
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
27 mars 2020
-
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.

1 réponse

Messages postés
29238
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
27 mars 2020
6 812
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 (ie
len(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
1
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 79184 internautes nous ont dit merci ce mois-ci

Taranis33
Messages postés
9
Date d'inscription
lundi 22 décembre 2014
Statut
Membre
Dernière intervention
31 décembre 2014

Oui en effet ce n'est pas bien difficile... Et c'est tout de suite beaucoup plus clair. Merci pour le lien sur le cours concernant python, je l'avais déjà vaguement survolé pour voir s'il n'y avait pas quelques fonctions intéressantes.

En tout cas merci beaucoup !
mamiemando
Messages postés
29238
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
27 mars 2020
6 812
Ok, je bascule ce sujet en résolu car je pense que tu as l'essentiel du matériel. Si tu es bloqué n'hésite pas à demander des éclaircissements.

Bonne chance, et bonnes fêtes
Taranis33
Messages postés
9
Date d'inscription
lundi 22 décembre 2014
Statut
Membre
Dernière intervention
31 décembre 2014

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 !
mamiemando
Messages postés
29238
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
27 mars 2020
6 812
Merci pour ces précisions et surtout bravo d'y être arrivé. Dans mon cas je partais du principe qu'on décalait les caractère vers le droite (donc le caractère 1 arrive en position 3, etc).

Bonne continuation et bonnes fêtes :)