Problème de liste

Signaler
Messages postés
2
Date d'inscription
mardi 5 janvier 2021
Statut
Membre
Dernière intervention
6 janvier 2021
-
Messages postés
573
Date d'inscription
mardi 16 avril 2013
Statut
Membre
Dernière intervention
6 janvier 2021
-
Bonjour,
Je suis en train de réaliser un programme python ayant pour but de déchiffrer un message chiffré. Le système de chiffrement est très simple c’est une translation des lettres par exemple (a=1) si la clef est 3 alors 1+3=4=d.
Mon programme pour déchiffrer le message codé sans connaître la clef, utilise toutes les clefs possible (il y’en a que 25) et par conséquent une seule des 26 traduction a du sens. Néanmoins pour faire cela j’ai du crée 25 listes, une liste pour chaque possibilité de déchiffrage. Cela est long, je me demande si l’un d’entre vous connais un système plus optimisé permettant de créer automatiquement une liste.
Merci d’avance !
Voici ci joint les deux programmes

https://docs.google.com/document/d/1M_hV4HXSwnQnWDrKohlIjXrJY2dmM5_Fs2-g0ixaGY0/edit?usp=sharing

4 réponses

Messages postés
573
Date d'inscription
mardi 16 avril 2013
Statut
Membre
Dernière intervention
6 janvier 2021
117
Salut, alors oui il y a plus court, cependant je ne suis pas sûr d'avoir bien saisie ton problème.
En gros une liste par exemple l = [1, 2, 3, 4] correspond avec une clef c = 0 à abcd, et si c =1 par exemple, la liste correspond à bcde c'est bien ça ?

Messages postés
30512
Date d'inscription
mercredi 2 mai 2007
Statut
Modérateur
Dernière intervention
6 janvier 2021
7 195
Bonjour,

Pour le futur, plutot qu'un lien vers ton code (en plus sur fond noir c'est difficile), il faut placer le code sur le forum. Pour la mise en forme des sources, au dessus de la zone d'édition de tes messages, il y a des icônes pour l'enrichissement du texte. Celle qui a cet aspect
<> ▼
permet d'appliquer au code, suivant une liste de valeurs, le format correspondant à sa nature.
Un petit tuto là : https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code

cela doit donner quelque chose comme
for i in len(abc)
   print(i,abc[i])


Je pense que ce n'est pas la peine de mettre ton code, car oui il y a plus court. On ne doit pas avoir des variables en dur t1, t2, ... t25. On constitue une liste.

Une liste ce peut être des caractères comme ton
abc = ['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'] 
,

mais ce peut être aussi des phrases, comme tes 26 phrases décodées.
solutions= ['aababbab','hahhahhh', ....,'jdjjjddl']


voilà de quoi initialiser un tableau avec tes 26 phrases à décoder

abc = ['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']
adecoder="avvavvavav"
solutions=[""]*len(abc)
for i in range(len(abc)):
   solutions[i]=adecoder
   print(i,solutions[i])


L'exemple ci-dessus est "étendu" pour avoir une boucle pour développer ton code. Mais on peut faire plus simple

abc = ['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']
adecoder="avvavvavav"
solutions=[adecoder]*len(abc)
print(solutions)





Messages postés
2
Date d'inscription
mardi 5 janvier 2021
Statut
Membre
Dernière intervention
6 janvier 2021

Tout d’abord merci beaucoup pour vos réponses !
Je débute sur ce forum, j’essayerai de m’améliorer dans la mise en page !
Je vais essayer avec votre solution, merci.
Néanmoins, n’y a t’il pas un moyen pour demander à python de créer une liste ?

M3NSONG3, chaque lettre correspond à une position dans l’alphabet, À=1;B=2;C=3 etc. En utilisant une clef, un décale les lettre d’un certain nombre de rang ex: si clef =3, A+clef =1+3=4=D. « A » chiffré avec une clef égale à 3 devient D.
Messages postés
30512
Date d'inscription
mercredi 2 mai 2007
Statut
Modérateur
Dernière intervention
6 janvier 2021
7 195 >
Messages postés
2
Date d'inscription
mardi 5 janvier 2021
Statut
Membre
Dernière intervention
6 janvier 2021

n’y a t’il pas un moyen pour demander à python de créer une liste ? ce n'est pas une question claire

Dans ton code tu fais beaucoup trop d'étapes et utilises trop de variables, créer une liste avec la valeur de chaque lettre de la phrase à coder pour la convertir après dans une autre boucle cela allonge et complique le code. Mais cela vient vraisemblablement que en débutant, tu n'arrives pas bien à combiner une solution avec tous les types d'instructions, alors tu décomposes à l’extrême au risque de t'y perdre (et de nous perdre ;-)

Tu peux passer de "a" à "d" en une seule ligne, et avec la méthode .index ne pas avoir besoin d'une boucle pour trouver la position d'une lettre
abc = ['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']
angle=3
print(abc.index("a"))
print((abc.index("a") + angle)%26)
print(abc[(abc.index("a") + angle)%26])
Messages postés
833
Date d'inscription
lundi 23 mars 2020
Statut
Membre
Dernière intervention
6 janvier 2021
94
Bonjour Jean-p,

Je ne sais pas si ça pourra t'aider mais je te livre ici un petit programme que j'avais
fait dans le temps pour décoder un message en utilisant une clé de décalage à 4 chiffres

1863: le 1er caractère est décalé de 1, le 2ème de 8, le 3ème de 6 et le 4ème
de 3, et on continue en recommençant à 1, etc. ..

De plus, j'utilise des chaines de caractères et non des listes, mais bon .... à voir

# -*- coding:Latin-1 -*-

msg = 'znikr wnb cwwltnyosk jxqlikr hirq zurlsex uwhby ncqd'
alphabet = 'abcdefghijklmnopqrstuvwxyz'
cle = '1863'
print('\nMessage secret :\n{}\nDécodage :'.format(msg))

j=-1
rang_lettre = -1

for k in range(len(msg)):
    if(msg[k] == ' '):
        print(msg[k], end  ='')
    else:
        rang_lettre += 1
        if(rang_lettre%4 == 0):
            j=0
        else:
            j += 1
	
        lettre =  alphabet.index(msg[k])
        lettre_decalee = (lettre+int(cle[j]))%26
        print(alphabet[lettre_decalee], end  ='')
Messages postés
573
Date d'inscription
mardi 16 avril 2013
Statut
Membre
Dernière intervention
6 janvier 2021
117
Bon bon bon... Du coup je suis en retard mais moi je voulais juste te proposer d'utiliser ce bout de code... :
Un peu plus compacte que les autres...
import string

alphabet = list(string.ascii_lowercase)
message = [15, 10, 6, 19]
for c in range(26):
 words = ''
 for letter in message:
  index = (letter + c) % len(alphabet) - 1
  words += alphabet[index]
 print("Avec la clef " + str(c) + " le mot est: " + words)

Désolé du retard ahah
Je t'ai mis un petit exemple "jean" avec un décalage