J'ai réussi à faire ce petit logiciel de cryptage.
J'aimerais savoir ce que vous en pensez.
Version imprimable
J'ai réussi à faire ce petit logiciel de cryptage.
J'aimerais savoir ce que vous en pensez.
Salut,
Corrigé sur la forme, pas sur le fond, excepté pour l'usage de pickle.
Code:
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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66 # -*- coding: utf-8 -*- import sys import pickle from random import randrange while 1: # Pas d'espace avant le double point final print "Veux-tu crypter(1) ou décrypter(2) Quitter(3)?" # Une espace après print, donner la possibilité de quitter choix = input() # Une espace de part et d'autre des opérateurs # On aère le code if choix == 1: print "Entre ton code." code = input() facteur1 = randrange(10, 100) # Une espace entre les arguments facteur2 = randrange(10, 100) facteur3 = randrange(10, 100) facteur4 = randrange(10, 100) facteur5 = randrange(10, 100) facteur6 = randrange(10, 100) diviseur = randrange(10, 100) nom_code = randrange(1000000000000, 10000000000000) facteur = (facteur1 * facteur2 * facteur3 * facteur4 * facteur5 * facteur6) / diviseur code_final = code * facteur with open("top_secret","w") as fichier: pickle.dump([facteur, nom_code], fichier) # Simplifions #mon_pickler = pickle.Pickler(fichier) #mon_pickler.dump(facteur) #mon_pickler3 = pickle.Pickler(fichier) #mon_pickler3.dump(nom_code) print "Ton mot de passe est :", nom_code, ". Code :" print code_final elif choix == 2: with open("top_secret","r") as fichier: facteur_recupere, nom_code = pickle.load(fichier) # Simplifions encore #mon_depickler = pickle.Unpickler(fichier) #facteur_recupere = mon_depickler.load() #mon_depickler3 = pickle.Unpickler(fichier) #nom_code = mon_depickler3.load() print "Entre le nom du code." # Lequel ? mot2pass = input() if mot2pass == nom_code: print "Entre le code à décrypter." # Lequel ? adecrypter = input() code_decrypte = adecrypter / facteur_recupere print "Le code de départ est :", code_decrypte else: print "Me prends pas pour un gland." elif choix == 3: # Sinon on ne quitte jamais, except Ctrl+C sys.exit() #Ref: http://www.python.org/dev/peps/pep-0008/ # http://docs.python.org/library/pickle.html?highlight=pickle#pickle
Merci de l'aide et du temps passé
:aie:Citation:
facteur1 = randrange(10, 100) # Une espace entre les arguments
facteur2 = randrange(10, 100)
facteur3 = randrange(10, 100)
facteur4 = randrange(10, 100)
facteur5 = randrange(10, 100)
facteur6 = randrange(10, 100)
diviseur = randrange(10, 100)
Ne prend pas mal afranck64, mais j'ai comme l'impression que la correction n'a pas grand intérêt pour lui, et comme je suis fainéant, ça me saoule de le faire pour des prunes ;)
Il manquait quelque chose ou c'est un private joke qui m'échappe ?
@VinsS
Ce n'est pas en rapport avec toi :) En fait je disais que le code se simplifiait si on le souhaitait, mais le PO ne semble pas très motivé à le savoir ;)
Si, ça m'intéresse, mais je n'avais plus le wifi, désolé
ok :)Citation:
Si, ça m'intéresse, mais je n'avais plus le wifi, désolé
Quand on code, on essaie d'éviter le plus possible les répétitions, et dans ton cas j'en ai vu une (j'ai regardé le code en diagonale) assez visible (celle que j'ai citée plus haut).
On peut simplifier ces lignes en une seule.
Ensuite cette ligneCode:
1
2 liste_fact = [randrange(10, 100) for i in range(7)] diviseur = liste_fact[6]
peut se transformer enCode:
1
2 facteur = (facteur1 * facteur2 * facteur3 * facteur4 * facteur5 * facteur6) / diviseur
Après je n'ai pas regardé...Code:
1
2 from operator import mul facteur = reduce(mul, liste_fact[:5])/diviseur
juste en passant...
:whistle:Citation:
The Zen of Python
Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.
Flat is better than nested.
Sparse is better than dense.
Readability counts.
Special cases aren't special enough to break the rules.
Although practicality beats purity.
Errors should never pass silently.
Unless explicitly silenced.
In the face of ambiguity, refuse the temptation to guess.
There should be one-- and preferably only one --obvious way to do it.
Although that way may not be obvious at first unless you're Dutch.
Now is better than never.
Although never is often better than *right* now.
If the implementation is hard to explain, it's a bad idea.
If the implementation is easy to explain, it may be a good idea.
Namespaces are one honking great idea -- let's do more of those!
Super, ça prendra beaucoup moins de place! Je n'ai pas tout compris ce que tu avais fiat, mais ca fonctionne bien.
Dommage, car c'était ça le plus important: comprendre ; pour pouvoir ensuite faire de toi-même des choses similaires mais tout seul...
Il crée une liste à la volée (ce qu'on nomme "list comprehension")Code:
1
2 liste_fact = [randrange(10, 100) for i in range(7)] diviseur = liste_fact[6]
Les crochets [] marquent la liste à la volée
for i in range(7) créera un itérateur de 7 éléments
randrange(10, 100) sera répété pour chaque élément de l'itérateur
=> identique à [randrange(10, 100), randrange(10, 100), randrange(10, 100), (répété 7 fois)]
Il appelle via reduce (va lire dans un tuto ce que ça fait) la fonction "mul" (qui fait une multiplication) sur les 5 premiers éléments de liste_factCode:
1
2 from operator import mul facteur = reduce(mul, liste_fact[:5])/diviseur