Codage d'une chaine de caractère

Résolu/Fermé
Taranis33 Messages postés 9 Date d'inscription lundi 22 décembre 2014 Statut Membre Dernière intervention 31 décembre 2014 - 27 déc. 2014 à 12:35
Taranis33 Messages postés 9 Date d'inscription lundi 22 décembre 2014 Statut Membre Dernière intervention 31 décembre 2014 - 31 déc. 2014 à 15:21
Bonjour,

Je souhaiterais écrire la fonction codage_minuscules(chaine, x) qui retourne la phrase chaine chiffrée avec un décalage de x lettres, en supposant que « chaine » ne comporte que des caractères minuscules.

exemple :
chiffre_minuscules('bonjour', 3)
>>>'erqmrxu'

Pour ce faire, j'ai déjà codé deux autres programmes :

- la fonction permutation(chaine, x) qui retourne la chaîne après une permutation de x lettres vers la droite :

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)]
print (s[:-1])


- la fonction indice(c, chaine) qui retourne l'indice de c dans la chaîne ou ?1 si c est
absent:

chaine= 0
chaine= input("entrer une chaine de caractères:")
c= 0
c= input("entrer un caractère c:")


def indice(c,chaine):
if c in chaine:
chaine.find(c)
chaine.index(c)
print (chaine.index(c))
print ("c est dans la chaine:")
print(c)
else:
c= -1
print (c)
print ("c n\'est pas dans la chaine")

Il faudrait que je combine ces deux programmes pour y arriver. Voici ce que j'ai fait :

chaine=0
chaine= input("entrer une chaine :")
x=0
x= int(input("entrer un décalage :"))
c=0
c=["a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z"]

def codage_minuscules(chaine,x):
#retourne la phrase chaine chiffrée avec un décalage de x lettres
while c in chaine:
chaine.find(c)
chaine= chaine.index(c)+x
else:
break

Le programme n'est pas complet et faux. En effet, je n'arrive pas à faire fonctionner la boucle while.

Dans l'absolu, je voudrais que chaque indice de "chaine" soit ajouté au décalage x, et ce pour tous les caractères contenus dans "chaine" (d'où la boucle while). Ensuite je voudrais faire intervenir le premier programme (celui qui retourne la chaîne après une permutation de x
lettres vers la droite) pour associer chaque indice à une lettre de l'alphabet mais je ne vois pas comment.

Si vous avez une idée quant à la manière de procéder, je suis preneur !

Merci beaucoup.


Note : Pardon pour la présentation du code, chaque indentation est suprimmée.



A voir également:

1 réponse

fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 842
Modifié par fiddy le 27/12/2014 à 12:59
Bonjour,

S'il s'agit d'un exercice, je te déconseille d'utiliser index() et find() (cf. ton précédent sujet). Le but est de reconstruire ces fonctions...

Pour décaler les lettres de x, tu n'as pas besoin d'indice, ni de permutation. Il te suffit de parcourir chacun des éléments de la chaîne, de convertir la lettre en entier (avec ord(...)) de l'additionner avec x, et de reconvertir en lettre avec chr(...)). Il faudra faire attention aux dernières lettres. Pour cela, tu devras utiliser l'opération modulo (%). Je te laisse réfléchir sur son utilisation.

Note : Comme dit la dernière fois, n'oublie pas d'utiliser la balise "code python" lorsque tu posteras ton code. Exemple :
<code python>ici tu mets ton code</code>
Sinon c'est illisible...

Cdlt,

Google is your friend
0
Taranis33 Messages postés 9 Date d'inscription lundi 22 décembre 2014 Statut Membre Dernière intervention 31 décembre 2014
29 déc. 2014 à 12:57
En Tp le prof m'avais déjà parlé des fonctions index() et find(), mais je n'avais gardé aucune trace de ce qu'il m'a dit du coup je les ai totalement oubliées... Donc je pense que ça devrait aller quand même ;)

Après presque 3h de recherches sur Python (c'est beaucoup pour si peu), j'ai enfin réussis à coder et voici ce que ca donne :

chaine= 0
chaine= input("entrer une chaine à coder :")
x= 0
x= int(input("entrer un décalage de x lettres :"))
X=0
Xa= 0
Xb= 0


def codage(chaine,x):
    i = 0 
    while i < len(chaine):
        X= ord(chaine[i])
        Xa= X+x
        Xb= chr(Xa)
        print (Xb)
        i += 1


Pour autant, le programme marche pour toutes les lettres et je n'ai pas eu besoin d'utiliser le modulo...

Dans tous les cas, grâce à votre aide j'ai pu répondre à la question posée et j'ai vraiment progressé sur Python ! Merci beaucoup,

Cordialement.
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 842
29 déc. 2014 à 13:24
Pour autant, le programme marche pour toutes les lettres et je n'ai pas eu besoin d'utiliser le modulo...
Ben non, ça ne peut pas marcher... Imagine que tu veux un décalage de 5.
'A' te donnera 'F', mais 'Z' te donnera quoi à ton avis ? Ca te donnera '_'.
D'où la nécessité du modulo pour reboucler sur les premières lettres...
0
Taranis33 Messages postés 9 Date d'inscription lundi 22 décembre 2014 Statut Membre Dernière intervention 31 décembre 2014
31 déc. 2014 à 15:21
Oui c'est vrai j'ai totalement oublié de prendre en compte le z...

Mais je vais me débrouiller tout seul à partir de maintenant, j'ai déjà eu beaucoup d'aide et il est important d'essayer par soi-même. En tout cas merci d'avoir donné de votre temps pour répondre à mes question, cela m'a été fort utile !

Merci,

Salutations.
0