IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Python Débutant code Trithème


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2018
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2018
    Messages : 4
    Par défaut Python Débutant code Trithème
    Bonjour, ce serait pour demander de l'aide sur un programme que j'ai à faire en exercice consistant à créer le code trithème :

    Il s'agit de mettre en oeuvre le chiffrage de Trithème. L'utilisateur saisit un mot au clavier et le programme calcule et recherche le mot codé. Exemple :

    'aaaaaaa' est codé 'abcdef' : la première lettre 'a' (rang 0) a pour code elle-même, la lettre de rang 1 est décalée de 1, le 'a' devient 'b', la lettre de rang 2 est décalée de 2, le 'a' devient 'c', ....
    sur le même principe 'abcdefgf' est codé 'acegikm' : la première lettre 'a' (rang 0) a pour code elle-même, la lettre 'b' de rang 1 est décalée de 1 et devient 'c', la lettre 'c' de rang 2 est décalée de 2 et devient 'e', ....

    je n'arrive à rien, j'ai une ébauche de programme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    a = ["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"]
    b = input("Entrez votre texte : ")
    c = [b]
    print(":".join(c))
    b.split()
    d =print(range(26))
    b = list(b)
    print(b)
    print(type(b))
    mais je ne sais pas quoi faire après donc toute aide est bien venu

  2. #2
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 307
    Par défaut
    Salut,

    Tu n'as nul besoin de toutes ces transformations, tu peux directement itérer sur le texte.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    >>> text = "message"
    >>> for idx, letter in enumerate(text):
    ...     print("La lettre %s est au rang %s" %(letter, idx))
    ... 
    La lettre m est au rang 0
    La lettre e est au rang 1
    La lettre s est au rang 2
    La lettre s est au rang 3
    La lettre a est au rang 4
    La lettre g est au rang 5
    La lettre e est au rang 6
    >>>

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2018
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2018
    Messages : 4
    Par défaut
    Salut

    Merci de ton aide il me reste cependant à faire le programme, mais il me de demande de définir idx et je ne sais pas comment faire, j'aimerai que idx soit le nombre qui décale les lettre exemple : abc , pour a idx serait 0, b idx serait 1 et c, idx serait 2

    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    liste_lettre=["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"]
    phrase_codee=[]
    text = input("Entrez votre texte : ")
    text=text.split()
    liste_mot=[]
    while idx>26:
        idx-=26
    for idx, letter in enumerate(text):
        print("La lettre %s est au rang %s" %(letter, idx))
        for mot in text:
            for lettre in mot:
                i=liste_lettre.index(lettre)
            if i+idx>25:
                i-=26
            liste_mot.append(liste_lettre[i+idx])
        text.append("".join(liste_mot))
    print(" ".join(text))

  4. #4
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 307
    Par défaut
    Je ne te suis pas du tout.
    À quoi sert ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    text=text.split()
     
    while idx>26:
        idx-=26
    manifestement à rien.

    Ceci pareil:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
        for mot in text:
            for lettre in mot:
                i=liste_lettre.index(lettre)
            if i+idx>25:
                i-=26
            liste_mot.append(liste_lettre[i+idx])
    Tu n'as pas besoin de tout ça.

    Avec simplement ceci c'est suffisant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    >>> text = "message"
    >>> letters = ["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"]
    >>> for idx, letter in enumerate(text):
    ...     new = letters[(idx + letters.index(letter)) % 26]
    ...     print(" %s --> %s" %(letter, new))
    ... 
     m --> m
     e --> f
     s --> u
     s --> v
     a --> e
     g --> l
     e --> k

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2018
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2018
    Messages : 4
    Par défaut
    Merci de ta patience, je me suis basé sur le code pour césar d'ou le while, je comptais l'enlever mais le code était construit avec et je n'arrivais pas à faire. Pour ce qui est de cette ligne j'ai du mal à comprendre

    new = letters[(idx + letters.index(letter))%26]

    Et si tu voulais le mettre sous ce résultat comment ferais-tu ?

    message
    mfuvelk

    au lieu de ligne par ligne

  6. #6
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 307
    Par défaut
    Il suffit de créer une chaîne vide au départ et au lieu du print tu la complètes avec les nouvelles lettres.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [débutant]Code VBA ou Macro ?
    Par Sarune dans le forum VBA Access
    Réponses: 2
    Dernier message: 20/03/2007, 09h38
  2. Débutante - Code VBA pour MsgBox avec actions multiples
    Par kisscool35 dans le forum Access
    Réponses: 5
    Dernier message: 22/08/2006, 17h43
  3. Réponses: 8
    Dernier message: 12/06/2006, 22h40
  4. DÉBUTANT - Code de couleurs
    Par vdumont dans le forum OpenGL
    Réponses: 7
    Dernier message: 03/04/2006, 07h58

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo