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] Question plus que stupide (j'imagine)


Sujet :

Python

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Avril 2016
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Avril 2016
    Messages : 7
    Par défaut [Python] Question plus que stupide (j'imagine)
    Bonjour bonsoir

    Je suis actuellement en TerS spé isn. J'ai donc un projet d'isn à faire.
    Mon projet un projet de cryptologie. Pendant que mes chères camarades s'amusent avec la crypto bien concrète. Moi je me bat contre la fenêtre graphique.
    Je vous explique mon pti problème:

    http://puu.sh/okDE3/45f892d61c.png

    Voici pour l'instant à quoi ressemble le "programme".
    -Je rentre un texte :ici : "Kappa 123"
    -J’appuie sur entrer, donc il s'affiche: "Cryptage: Ndssd#456"
    -Je clique sur décrypte, donc il s'affiche: "Message: Kappa 123"
    -Quand j'appuie sur définir clef, il s'affiche: "Clef:*****" Toujours au hasard."

    Le fait est, que le cryptage ce fait avec une clé de 3. Alors que je voudrait qu'il se fasse avec une clé "r" et au hasard.
    Je ne sait donc pas par quoi remplacer "+3" et "-3"
    J'ai essayer :" str(r)" et encore "int(3)"-
    Une erreur s'affiche. : http://puu.sh/okEmQ/cb5e6fe3f5.png

    Voilas voilas. Merci bonne journée

    PS:"Pour ce qui est des plus que possibles fautes d’orthographes, ne ne vous privez pas de les corrigées"

  2. #2
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2014
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2014
    Messages : 4
    Par défaut
    Bonjour,

    Je pense que t'on erreur viens du fait que tu utilise l’opérateur '%' sur ta variable r que tu transforme en chaîne.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    >>> r=1754
    >>> print(r%1000000)
    1754
    >>> print(str(r)%1000000)
    Traceback (most recent call last):
      File "<pyshell#2>", line 1, in <module>
        print(str(r)%1000000)
    TypeError: not all arguments converted during string formatting

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Avril 2016
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Avril 2016
    Messages : 7
    Par défaut
    Possiblement. Mais j'ai besoin de ce %1000000 en tant que modulo.

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Avril 2016
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Avril 2016
    Messages : 7
    Par défaut
    Ah, mais en effet, j'imagine que vous ne pouvez pas tester le programme si je ne le recopie pas x).

    Code : 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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    from tkinter import *
    from math import *
    from random import *
    r=''
     
    def clef():
        r=randint(0,999999) 
        cle.configure(text = 'Clef: '+str(r))
     
     
    def messagecrypter(event):
        chaine.configure(text = 'Cryptage: '+crypto(entree.get(),str(r)))
     
    def messagedecrypter():
        message = entree.get()
        l = crypto(entree.get(),3)
        yolo.configure(text = 'Message: '+decrypter(l,str(r)))
     
    def crypto(chaine,r):
        l=''
        for car in chaine:
            l+=chr((ord(car)+3)%1000000)
        return l
     
    def decrypter(l,r):
        s=''
        for car in l:
            s+=chr((ord(car)-3)%1000000)
        return s
     
     
    fenetre=Tk()
    entree=Entry(fenetre)
    entree.bind("<Return>",messagecrypter)
    entree.pack()
    chaine=Label(fenetre)
    chaine.pack()
    yolo=Label(fenetre)
    yolo.pack()
    cle=Label(fenetre)
    cle.pack()
    bou1=Button(fenetre,text='Decrypter',command=messagedecrypter)
    bou1.pack(side=BOTTOM)
    bou2=Button(fenetre,text='Définir clef',command=clef)
    bou2.pack(side=BOTTOM)
    fenetre.mainloop()
    Ridicule oublie de ma part.

  5. #5
    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,

    Ce n'est plus le même code qu'avec l'erreur.

    Tatamy à raison, tu uses du "%" sur la chaîne et non pas sur le nombre.

    "%" est un opérateur de formatage pour les chaînes de texte.

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Avril 2016
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Avril 2016
    Messages : 7
    Par défaut
    Je voit, j'essaye différent chose mais rien n'y fait. Je n'arrive toujours à utiliser "r" à la place de "3"
    Car sans le "%1000000", le code n'est plus optimale. Car le cryptage ce fait en code ASCII, et ce modulo est nécessaire.
    Des idées?

  7. #7
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 741
    Par défaut
    Salut,

    Citation Envoyé par DoM DoW Voir le message
    Je voit, j'essaye différent chose mais rien n'y fait. Je n'arrive toujours à utiliser "r" à la place de "3"
    Car sans le "%1000000", le code n'est plus optimale. Car le cryptage ce fait en code ASCII, et ce modulo est nécessaire.
    Des idées?
    Tatamy vous a déjà donné la réponse: "r" est une chaîne de caractères alors que modulo s'applique à des nombres.
    Convertir une chaîne de chiffres en nombre est ce que vous avez appris avec les premiers exercices de programmation qui demandent à l'utilisateur d'entrer des chiffres que vous convertissez en nombre via "int" ou "float".

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  8. #8
    Nouveau membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Avril 2016
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Avril 2016
    Messages : 7
    Par défaut
    Mhh étrange, parce que "r" n'est pas sensé être une chaine de caractères, c'est sensé être la "clé" du cryptage.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    def clef():
        r=randint(0,999999) 
        cle.configure(text = 'Clef: '+str(r))
    "Convertir une chaîne de chiffres en nombre est ce que vous avez appris avec les premiers exercices de programmation qui demandent à l'utilisateur d'entrer des chiffres que vous convertissez en nombre via "int" ou "float"."
    Eh bah justement non ! x) Nous n'avons jamais utilisés ni "int" ni "float"

    Enfin bon, de ce que je voit, le problème viens donc du fait que r soit considérer comme une chaine et pas comme un nombre.

  9. #9
    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
    Ce que l'on veut dire c'est que tu dois faire ta conversion après modulo, pas avant.

    Donc:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    str(r)%1000000     # Ca pas bon
    str(r%1000000)     # Ca bon

  10. #10
    Nouveau membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Avril 2016
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Avril 2016
    Messages : 7
    Par défaut
    Merci pour vos réponses;
    Bon, je pense avoir fait ce que vous m'avez conseillé,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    def crypto(chaine,r):
        l=''
        for car in chaine:
            l+=chr((ord(car)+str(r%1000000)))
        return l
     
    def decrypter(l,r):
        s=''
        for car in l:
            s+=chr((ord(car)-str(r%1000000)))
        return s
    Mais j'ai toujours droit à une erreur :/

    http://puu.sh/olt4S/e75f0004d4.png

  11. #11
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2014
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2014
    Messages : 4
    Par défaut
    Une petite question:

    Que pense tu faire avec la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    l+=chr((ord(car)+str(r%1000000)))
    ?

    ici tu cherche soit à concaténer soit à additionner.
    Comme la fonction chr prend en paramètre un entier je pense que tu cherche à additionner. Donc la fonction str n'a rien a faire ici.

  12. #12
    Nouveau membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Avril 2016
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Avril 2016
    Messages : 7
    Par défaut
    Et bien, quand j’appuie sur entré;

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    def messagecrypter(event):
        chaine.configure(text = 'Cryptage: '+crypto(entree.get(),str(r)))
    Ca permet donc d'afficher le message, mais en étant crypté.

  13. #13
    Membre très actif Avatar de fifafou
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2016
    Messages
    173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Janvier 2016
    Messages : 173
    Par défaut
    Je me suis deja amusé a creer un code comme ça:
    Code : 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
    cl="abcdefghijklmnopqrstuvwxyz"
    lc={"a":1,"b":2,"c":3,"d":4,"e":5,"f":6,"g":7,"h":8,"i":9,
                        "j":10,"k":11,"l":12,"m":13,"n":14,"o":15,"p":16,"q":17,"r":18,
                        "s":19,"t":20,"u":21,"v":22,"w":23,"x":24,"y":25,"z":26,}
    ch=raw_input("texte").lower()
    cle=raw_input("cle").lower()
    f=int(2*(input("1:decode,2:code")-1.5))
    li=[]
    res=""
    for a in range(len(ch)):
        li.append(lc[ch[a]])
    for a in range(len(ch)):
        li[a]+=lc[cle[a%len(cle)]]*f
    for a in range(len(ch)):
        res+=cl[li[a]%26-1]
    print res
    il n'y a pas d'interface graphique mais ça peut faire avec une clé de plusieurs lettres

Discussions similaires

  1. RJ45 question plus physique que logique
    Par sebatlante dans le forum Hardware
    Réponses: 1
    Dernier message: 19/09/2009, 19h51
  2. height: encore plus que 100%
    Par Anduriel dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 23/06/2005, 13h56

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