J'ai réussi à faire ce petit logiciel de cryptage.
J'aimerais savoir ce que vous en pensez.
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 : 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
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
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)![]()
Win 10 64 bits / Linux Mint 18, - AMD A6 Quad: Py27 / Py35
CONTENU D'UNE QUESTION
Exemples:
- Configuration (système d'exploitation, version de Python et des bibliothèques utilisées)
- Code source du morceau de programme où il y a un bogue
- Ligne de code sur laquelle le bogue apparaît
- Erreur complète retournée pas l'interpréteur Python
- Recherche déjà effectuée (FAQ, Tutoriels, ...)
- Tests déjà effectués
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 toiEn 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é
okSi, ç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 ligne
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 liste_fact = [randrange(10, 100) for i in range(7)] diviseur = liste_fact[6]
peut se transformer en
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 facteur = (facteur1 * facteur2 * facteur3 * facteur4 * facteur5 * facteur6) / diviseur
Après je n'ai pas regardé...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 from operator import mul facteur = reduce(mul, liste_fact[:5])/diviseur
juste en passant...
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!![]()
Win 10 64 bits / Linux Mint 18, - AMD A6 Quad: Py27 / Py35
CONTENU D'UNE QUESTION
Exemples:
- Configuration (système d'exploitation, version de Python et des bibliothèques utilisées)
- Code source du morceau de programme où il y a un bogue
- Ligne de code sur laquelle le bogue apparaît
- Erreur complète retournée pas l'interpréteur Python
- Recherche déjà effectuée (FAQ, Tutoriels, ...)
- Tests déjà effectués
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 python : Sélectionner tout - Visualiser dans une fenêtre à part
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_fact
Code python : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 from operator import mul facteur = reduce(mul, liste_fact[:5])/diviseur
Mon Tutoriel sur la programmation «Python»
Mon Tutoriel sur la programmation «Shell»
Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
Et on poste ses codes entre balises [code] et [/code]
Partager