Bibm@th

Forum de mathématiques - Bibm@th.net

Bienvenue dans les forums du site BibM@th, des forums où on dit Bonjour (Bonsoir), Merci, S'il vous plaît...

Vous n'êtes pas identifié(e).

Répondre

Veuillez composer votre message et l'envoyer
Nom (obligatoire)

E-mail (obligatoire)

Message (obligatoire)

Programme anti-spam : Afin de lutter contre le spam, nous vous demandons de bien vouloir répondre à la question suivante. Après inscription sur le site, vous n'aurez plus à répondre à ces questions.

Quel est le résultat de l'opération suivante (donner le résultat en chiffres)?
quaranteet un moins trente et un
Système anti-bot

Faites glisser le curseur de gauche à droite pour activer le bouton de confirmation.

Attention : Vous devez activer Javascript dans votre navigateur pour utiliser le système anti-bot.

Retour

Résumé de la discussion (messages les plus récents en premier)

yoshi
26-08-2021 19:43:32

Bonsoir,

Coder un message avec ton algorithme, ne sera pas compliqué...
Par contre le décodage, risque de ne pas être simple, sauf si on sépare les groupes de chiffres correspondant aux lettres...
mais là, ce ne serait plus qu'un codage de César déguisé et particulièrement évident à décoder...

Un peu moins simple serait de respecter le découpage en mots.

Vite fait :

Phrase_A_Coder='PAR CONTRE LE DECODAGE RISQUE DE NE PAS ETRE SIMPLE SAUF SI ON SEPARE LES GROUPES DE CHIFFRES CORRESPONDANT AUX LETTRES MAIS LA CE NE SERAIT PLUS QU UN CODAGE DE CESAR DEGUISE PARTICULIEREMENT EVIDENT A DECODER'
Dico_Alphabet_Inverse={'K': 16, 'Z': 1, 'X': 3, 'N': 13, 'B': 25, 'M': 14, 'V': 5,\
                       'L': 15, 'C': 24, 'E': 22, 'H': 19, 'J': 17, 'I': 18, 'T': 7,\
                       'O': 12, 'U': 6, 'G': 20, 'S': 8, 'Y': 2, 'W': 4, 'R': 9,\
                       'A': 26, 'D': 23, 'Q': 10, 'P': 11, 'F': 21}

Blanc=" "
Phrase_Codee=""
for lettre in Phrase_A_Coder:
    if lettre== " ":
        Phrase_Codee+=Blanc
    else:
        valeur_b2=bin(Dico_Alphabet_Inverse[lettre])[2:]
        Phrase_Codee+=valeur_b2
print("        La phrase :")
print(Phrase_A_Coder)
print()
print("        est devenue :")
print(Phrase_Codee)
 

Voilà ce que ça donne :

La phrase :
PAR CONTRE LE DECODAGE RISQUE DE NE PAS ETRE SIMPLE SAUF SI ON SEPARE LES GROUPES DE CHIFFRES CORRESPONDANT AUX LETTRES MAIS LA CE NE SERAIT PLUS QU UN CODAGE DE CESAR DEGUISE PARTICULIEREMENT EVIDENT A DECODER

        est devenue :
1011110101001 1100011001101111100110110 111110110 101111011011000110010111110101010010110 1001100101000101011010110 1011110110 110110110 1011110101000 10110111100110110 10001001011101011111110110 10001101011010101 100010010 11001101 100010110101111010100110110 1111101101000 10100100111001101011101101000 1011110110 11000100111001010101101011001101101000 1100011001001100110110100010111100110110111110101101111 1101011011 1111101101111111001101101000 111011010100101000 111111010 1100010110 110110110 10001011010011101010010111 101111111101000 1010110 1101101 11000110010111110101010010110 1011110110 11000101101000110101001 10111101101010011010010100010110 10111101010011111001011000110111110010101101001101101110101101101111 101101011001010111101101101111 11010 101111011011000110010111101101001


@+

louis muscat
26-08-2021 11:32:41

Bonjour, j'aimerais crée un algorithme de décodage en python mais je ne sais pas comment faire.
Mon algorithme est en binaire exemple : 01 = Z         10 = Y          11 = X      100 = W        101 = V   etc... je veut que l'on puisse copier coller le message et que ca le code ou décode SVP aidez moi.

yoshi
22-02-2010 10:16:20

Re,

Pas de nouvelles ?
Peut-être à cause de ça :
http://www.developpez.net/forums/d87812 … ces-texte/ ?

@+

yoshi
18-02-2010 10:12:11

Salut,

Ton code tourne, ce n'est pas une surprise.

import string
Pour quoi faire ?
Ton code tourne en Python 2.6.4 sans ça...

print "Entrez le texte à crypter en MAJUSCULE"
text=raw_input()

Tu peux condenser les deux en :

text=raw_input("ENTRER le texte à crypter en MAJUSCULES : ")

sauf si tu tiens à avoir la demande et le texte sur deux lignes.
Cela dit,
* Si je rentre des minuscules au milieu des majuscules, ton code plante !
   Remède : text = text.upper()
* Si j'utilise d'autres signes de ponctuation que le . et l'espace, ton code plante.
   Solution : inspecter le message à coder et supprimer les ';:!... éventuels.
   C'est comme tu veux.

* Même remarque pour le pas.
   Condenser en pas raw_input("Entrer le pas  : ") ?
   Si je rentre un pas de 29, ton code plante. Tu as fait un travail modulo 28 (à cause du point et de l'espace)
   Pas de 0 ou pas de 28 donnent le même résultat.

for i in range(0,len(text)):
    code=code+alpha[alpha.index(text[i])+pas]

0, len(text) : le 0 est inutile, par défaut le 1er indice de contrôle d'une boucle en python est 0.
    len(txt) : pourquoi ne pas écrire
   

lg=len(text)
   for i in range(0,lg):
    code=code+alpha[alpha.index(text[i])+pas]

Ca le rend code plus lisible.

* code+=code+alpha[alpha.index(text[i])+pas] peut être raccourci en : code+=alpha[alpha.index(text[i])+pas]

* Tu transformes le . et l'espace en lettres et réciproquement. C'est voulu ?

Concernant l'affichage des décodages possible.
Une proposition : inclure ta boucle de décodage dans une autre boucle

for pas in range(1, 28):
    for i in range(0,len(code)):
        decode+=alpha[alpha.index(code[i])-pas]
    print decode
    print "\n------------------------------------------------------"
    BonMauvais=raw_input("Ce texte est-il cohérent (O/N) ? ")
    if BonMauvais = "O":
        break
    else:
        decode=""
print "\n                      MESSAGE DECODE                   "
print "------------------------------------------------------\n"
print decode
print "\n------------------------------------------------------"

contrôlée par la variable pas (prenant les valeurs de 1 à 27) et permettant de balayer les 27 décodages possibles, si nécessaire...
A chaque pas on pose la question de savoir si le texte affiché a un sens. Si oui, on arrête la boucle (break) et on réaffiche proprement le résultat.
Si non, on réinitialise decode et on repart pour un tour...

Pour utiliser l'histoire des lettres les plus fréquentes, cela n'a un sens que si tu as un texte d'au moins 150 à 200 lettres, sinon, c'est très aléatoire.
Tu peux :
* Transformer ta chaine en une chaine comprenant tous les caractères séparés par une virgule, et stocker tous ces éléments dans une liste,
* Trier la liste en supprimant les doublons et en comptant le nombre d'occurences de chaque caractère
* Stocker le tout sous la forme d'une liste de tuples : (caract, nombre).
* Puis trier sur le 2e élément de chaque tuple : j'ai ça en stock
Tu auras ainsi la liste des caractères différents de la chaîne code, classés par nombre d'occurences décroissant.
Le 1er de la liste correspondant en principe au E, il ne reste plus qu'à calculer le pas et décoder...
Tu devrais créer une fonction decodage, puisque tu vas te servir 3 fois de la même chose.

@+

Unik
17-02-2010 13:27:29

Voici le début!



# -*- coding: cp1252 -*-
import string


alpha="ABCDEFGHIJKLMNOPQRSTUVWXYZ .ABCDEFGHIJKLMNOPQRSTUVWXYZ ."
code=""
decode=""
print "Entrez le texte à crypter en MAJUSCULE"
text=raw_input()

print "Entrez le pas de codage"
pas=input()

for i in range(0,len(text)):
    code=code+alpha[alpha.index(text[i])+pas]


print "                       MESSAGE CODEE                    "
print "------------------------------------------------------\n"
print code
print "\n------------------------------------------------------"


for i in range(0,len(code)):
    decode=decode+alpha[alpha.index(code[i])-pas]

print "                      MESSAGE DECODEE                   "
print "------------------------------------------------------\n"
print decode
print "\n------------------------------------------------------"


Maintenant j'ai des problemes pour les différents décodages à faire...

yoshi
16-02-2010 15:08:46

Salut,

OK ! Tout ce que j'ai fait fonctionnera...
Donc procédons comme ça :
* tu écris un bout de code et tu le postes,
* je le teste et te fais une proposition d'amélioration ou de correction si nécessaire.

Ca te va ?


@+

Unik
16-02-2010 12:06:30

Python 2.5

yoshi
15-02-2010 19:43:36

Salut,

Si je m'abuse, le codage par décalage tel que tu le décris est référencé sous le nom d'algorithme de Cesar.
Voir :
http://www.bibmath.net/crypto/substi/cesar.php3

Quant aux entrées interdites (accents...), j'avais compris.
Ce que je te demande c'est si tu dois tenir du compte du cas où quelqu'un rentrerait un mot avec avec caractères spéciaux, par ex déçu, si tu dois traiter l'entrée pour corriger ça en decu...
De même si la phrase est entrée en minuscules ou mélanges minuscules/majuscules, dois-tu la traiter pour tout convertir tout en majuscules.

Autre chose pour l'avenir, tu n'as pas répondu v: Python 2.6.x ou Python 3.x ?

@+

Unik
15-02-2010 19:10:10

Merci pour ton aide. Par contre je ne dois pas utiliser l algorithyme de césar. Et je ne dois pas utiliser les accents ni les caractères spéciaux, j'ai le droit au point et a l espace.

yoshi
15-02-2010 13:58:03

Bonjour,

Atention ! Python 2.6.x ou 3. ? Il y a de subtiles nuances

Cela s'appelle coder selon l'algorithme de Cesar, tu peux t'inspirer de cette discussion :
http://www.bibmath.net/forums/viewtopic.php?id=2382
Je n'ai utilisé là que des fonctions mathématiques et Python de base : je n'ai pas fait intervenir le % (modulo)

Tu dois insérer une condition : si le caractère lu est une , ou un . tu conserves ce caractère et tu avances d'un pas.

Tu dois encore ajouter un questionnement
En 2.6.x  : phrase_a_coder = raw_input("Veuillez entrer la phrase à coder. Merci")
en 3.x     : phrase_a_coder = input("Veuillez entrer la phrase à coder. Merci")
Dois-tu tenir compte des éventuels accents ou caractères parasites ? ; / * % par ex ?
Si oui, alors tu dois faire un traitement d'erreurs...

Attention tout ce qui se trouve dans cette section est écrit pour python 2.6x. En Python 3.1 le print est devenu une fonction.
On n'écrit plus : print "python", mais print("Python")
Python 2.6 print 6/4 --> 1 et print 6.0/4 = 1.5
Python 3.1 print(6/4) --> 1.5  et print (6//4) --> 1

@+

Unik
15-02-2010 13:24:42

Bonjour,

Je découvre Python et j'ai un petit problème.
j'aimerais coder et décoder un message avec Python.

Je vous expose mon problème:

"Une méthode simple pour crypter un message consiste en un simple décalage: le A devient le K, le B devient le L, le C devient le M, etc... et on boucle sur l'alphabet lorsqu'on arrive à Z.
pour crypter et décrypter, il suffit donc de connaître le pas du décalage.
On limitera dans un premier temps les messages à ceux écrits en lettres majuscules, en acceptant comme seule ponctuation que le point et l'espace.

1 - Ecrire un programme permettant de coder un message, le pas du décalage étant dans un premier temps bloqué à 5, puis on donnera ensuite la possibilité à l'utilisateur de choisir le pas.

2 - Ecrire un programme permettant de décoder un message:
           a - en connaissant le pas de décalage;
           b - sans connaitre le pas de décalage, c'est à dire proposer tous les messages possible;
           c - sans connaitre le pas de décalage, mais en tenant compte d'un résultat statistique très connu:
                le "e" est la lettre la plus fréquente.

Voilà...
Je vous remercie par avance pour votre aide...

Pied de page des forums