Forum |  HardWare.fr | News | Articles | PC | Prix | S'identifier | S'inscrire | Aide | Shop Recherche
1443 connectés 

  FORUM HardWare.fr
  Programmation
  Python

  DM programme CHiffre de Vigenère

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

DM programme CHiffre de Vigenère

n°2292838
cookie-22
Posté le 27-11-2016 à 19:33:27  profilanswer
 

Bonjour,  
Alors voilà je dois faire un programme sur le Chiffre de [/contents/217-le-chiffrement-de-vigenere Vigenère] sur Python. Il doit être très simple car je suis une très grande débutante (c'est pour l'ISN) et je ne m'y connais pas en programmation. Il doit aussi coder seulement les lettres minuscules.
J'ai fait le programme mais je n'arrive pas à comprendre mes erreurs car il ne fonctionne pas.  
J'en ai fait plusieurs différents de programme et dans mon ancienne version il fonctionnait seulement si le nombre de caractères de ma clé était supérieure ou égale au nombre de caractères de mon message à coder ( en effet la clé ne se répétait pas ). Je l'ai donc modifié et ce petit problème est résolu sauf que maintenant il ne code pas du tout selon Vigenère...
 
Voilà mon programme:
t=input("Saisir le message" )
c=input("Donner la clé" )
C=len(c)
T=len(t)
for i in range (0,T):
      w=ord(t[i])
      for k in range (0,C):
            x=ord(c[k])
      y=(w+x)-ord('a')
      if y>122:
         y=y-26
      z=chr(y)
      print(z)
 
Si quelqu'un pourrait m'aider svp, seulement en essayant de m'expliquer ce qui ne va pas. Bien sûr je ne demande pas qu'on fasse mon travail mais seulement un petit peu d'aide ou quelque chose qui pourrait m'aider à trouver seule.
Merci d'avance

mood
Publicité
Posté le 27-11-2016 à 19:33:27  profilanswer
 

n°2292843
H3bus
Troll Inside
Posté le 28-11-2016 à 00:18:37  profilanswer
 

Le problème vient de ton "for k ...".
En effet tu vas boucler sur tout les lettres de la clé à chaque fois et donc X prendra toujours la valeur de la dernière lettre de la clé.

 

Il te faut y remplacer ce for qui ne fait pas ce que tu penses par un index que tu initialises à 0 avant la boucle "for i ..." Et que tu incrémentes modulo C à chaque iteration.


Message édité par H3bus le 28-11-2016 à 00:20:48

---------------
sheep++
n°2292844
cookie-22
Posté le 28-11-2016 à 06:40:14  profilanswer
 

Merci beaucoup pour votre réponse, je vais essayer de modifier ça !
Sinon dans l'idée avec deux boucles "for" je peux pas réussir à le faire ? Car il me semblait que mon prof nous avait conseillé de faire ça, sauf que je n'ai pas réussi...

n°2292845
H3bus
Troll Inside
Posté le 28-11-2016 à 07:42:15  profilanswer
 

C'est possible d'utiliser deux boucles for en rusant, mais mon avis est que c'est une très mauvaise idée dans ce cas précis.
Une seule boucle for sur l chaîne de caractères et un index qui boucle sur la clé c'est tout ce dont tu as besoin.

 

À noter que tu peux itérer sur une chaine de caractère directement en python:

Code :
  1. for car in c:
  2.    // Do stuff with car


Message édité par H3bus le 28-11-2016 à 07:58:30

---------------
sheep++
n°2292883
cookie-22
Posté le 28-11-2016 à 14:27:39  profilanswer
 

Ah d'accord merci mais je sais pas trop comment faire car on ne l'a pas vu mais je vais y réfléchir.
 
C'est bien ça, il faut que j'essaie merci !

n°2292889
cookie-22
Posté le 28-11-2016 à 15:54:26  profilanswer
 

Je l'ai refait :
t=input("Saisir le message" )  
c=input("Donner la clé" )  
C=len(c)  
T=len(t)
l=0
for i in range (0,T):  
      w=ord(t[i])  
       x=ord(c[l])  
      y=(w+x)-ord('a')  
      if y>122:  
         y=y-26  
      z=chr(y)
      l=l+1
      if l==C:
          l=0
      print(z)
 
Est-ce mieux ?

n°2292901
H3bus
Troll Inside
Posté le 28-11-2016 à 18:33:04  profilanswer
 

Oui c'est mieux.
 
Une version un peu plus lisible:

Code :
  1. import os
  2. str_plain = input("Chaîne à encoder: " )
  3. key = input("Clé: " )
  4. key_index = 0
  5. str_encoded = ""
  6. // Boucle sur les caractères d'entrée
  7. for char in str_plain:
  8.     // encode
  9.     char_encode = ord(char)
  10.     char_encode += ord(key[key_index]) - ord('a')
  11.     if char_encode > ord('z'):
  12.         char_encode -= ord('z') - ord('a')
  13.     // On stock le caractère encodé
  14.     str_encoded += str(chr(char_encode))
  15.    
  16.     // On passe au caractère de la clé suivant
  17.     key_index += 1
  18.     if key_index >= len(key):
  19.         key_index = 0
  20. print(str_encoded)


 
Ça ne fonctionne que si tous les caractères entrés sont en minuscule et sans accents par contre.


---------------
sheep++
n°2292902
cookie-22
Posté le 28-11-2016 à 18:38:24  profilanswer
 

Oh merci beaucoup !! C'est très gentil pour votre aide.
Et oui en effet il faut que ça marche pour les lettres minuscules et sans accents.

n°2341196
erwan192
Posté le 08-11-2019 à 15:43:53  profilanswer
 

Bonjour comment on peut decrypter ce code en python alors?


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Python

  DM programme CHiffre de Vigenère

 

Sujets relatifs
Utilisation de tableaux - programme débutant (besoin d'aide !)[DM Code]en fait un système permettant de définir des nombres premiers
[Programme] Eclipse[SQL] Programme gratuit pour tester des requêtes SQL
Programme assembleur x86 sans OS, caméra, micro et haut-parleurTraiter sons et images dans un programme Linux
Programme qui récupere une trame et l'envoi via liaison Xbee[QB64] Saisie d'un fonction dans un programme de maths
AIDE programme python DEBUTANTappel de sous programme par entrée textuelle.
Plus de sujets relatifs à : DM programme CHiffre de Vigenère


Copyright © 1997-2018 Hardware.fr SARL (Signaler un contenu illicite) / Groupe LDLC / Shop HFR