Permutation circulaire d'une chaine de caractères

Résolu
Taranis33 Messages postés 9 Statut Membre -  
mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   -
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

  1. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 944
     
    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
    1. Taranis33 Messages postés 9 Statut Membre
       
      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 !
      0
    2. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 944
       
      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
      0
    3. Taranis33 Messages postés 9 Statut Membre
       
      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 !
      0
    4. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 944
       
      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 :)
      0