Problème de liste

Fermé
Jean-p_5035 Messages postés 2 Date d'inscription mardi 5 janvier 2021 Statut Membre Dernière intervention 6 janvier 2021 - 5 janv. 2021 à 15:02
M3NSONG3 Messages postés 615 Date d'inscription mardi 16 avril 2013 Statut Membre Dernière intervention 4 novembre 2021 - 6 janv. 2021 à 17:17
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

M3NSONG3 Messages postés 615 Date d'inscription mardi 16 avril 2013 Statut Membre Dernière intervention 4 novembre 2021 162
5 janv. 2021 à 15:32
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 ?

0
jee pee Messages postés 40596 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 26 décembre 2024 9 463
Modifié le 5 janv. 2021 à 19:15
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)





0
Jean-p_5035 Messages postés 2 Date d'inscription mardi 5 janvier 2021 Statut Membre Dernière intervention 6 janvier 2021
6 janv. 2021 à 09:02
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.
0
jee pee Messages postés 40596 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 26 décembre 2024 9 463 > Jean-p_5035 Messages postés 2 Date d'inscription mardi 5 janvier 2021 Statut Membre Dernière intervention 6 janvier 2021
Modifié le 6 janv. 2021 à 09:48
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])
0
Phil_1857 Messages postés 1872 Date d'inscription lundi 23 mars 2020 Statut Membre Dernière intervention 28 février 2024 168
Modifié le 6 janv. 2021 à 10:02
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  ='')
0
M3NSONG3 Messages postés 615 Date d'inscription mardi 16 avril 2013 Statut Membre Dernière intervention 4 novembre 2021 162
Modifié le 6 janv. 2021 à 17:18
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

0