Pour les erreurs il y en a au moins une chaque ligne de code
Déjà il manque les deux points à chaque while et lors de la définition de la fonction, ensuite le "ou" en python s'écrit "or", pas ||. et on ne peut pas avoir des entiers comme noms de variables.
La dernière ligne, je la comprend même pas.
De toutes façons ta fonction n'est pas documentée, on ne sait pas ce que l'argument de la fonction doit être, ni le résultat qu'elle doit produire, du coup on est pas trop avancés...
Je pense qu'au lieu de poster des codes non testés, tu aurais mieux fait de décrire ton algo en français.
Toutes les conditions de tes boucles ne peuvent pas marcher, elles sont toujours fausses.
Je connais pas énormément de moyens pour créer un nombre réellement unique, soit tu génères un gros nombre au hasard et vérifie que tu ne l'as jamais utilisé avant, soit tu te passes sur le temps (millisecondes, voire plus petite précision encore).
Oups désolé j'ai mélangé quelque code. Voici donc le code corrigé :
#Fonction qui créer un code unique
import random #importation du module de génération de nombre aléatoire
def creationcode(code) :
un = random.randint(1, 100)
while deux == un :
deux = random.randint(1, 100)
while trois == un or trois == deux :
trois = random.randint(1, 100)
while quatre == un or quatre == deux or quatre == trois :
quatre = random.randint(1, 100)
while cinq == un or cinq == deux or cinq == trois or cinq == quatre :
cinq = random.randint(1, 100)
while six == un or six == deux or six == trois or six == quatre or six == cinq :
six = random.randint(1, 100)
while sept == un or sept == deux or sept == trois or sept == quatre or sept == cinq or sept == six :
sept = random.randint(1, 100)
while huit == un or huit == deux or huit == trois or huit == quatre or huit == cinq or huit == six or huit == sept :
huit = random.randint(1, 100)
while neuf == un or neuf == deux or neuf == trois or neuf == quatre or neuf ==
cinq or neuf == six or neuf == sept or neuf == huit :
neuf = random.randint(1, 100)
while zero == un or zero == deux or zero == trois or zero == quatre or zero == cinq or zero == six or zero == sept or zero == huit or zero == neuf :
zero = random.randint(1, 100)
code = [un, deux, trois, quatre, cinq, six, sept, huit, neuf, zero]
Voici donc le résutat que je veux faire :
Le fichier codage.py demande à l'utilisateur quel fichier il veut coder (uniquement des fichiers .txt)
Il lit le fichier indiqué par l'utilisateur.
Il utilise la fonction creationcode qui génére un code chiffré aléatoire.
Il utilise le code généré par creationcode pour coder le fichier.
Exemple :
L'utilisateur indique le fichier bonjour.txt :
Citation : bonjour.txt
Bonjour !
La fonction creation code génère ce code(je n'ai indiqué que les caractère qui sont dans bonjour.txt) :
Citation : creationcode.py
b = 123
o = 234
n = 345
j = 456
u = 567
r = 678
(espace) = 789
! = 890
Non, c'est pas nécessaire, d'ailleurs ton code ne renvoie rien (faut utiliser return, dans ton cas tu modifie une variable locale qui sera détruite à la fin de la fonction).
Mais tu sais, tu peux tester ton code hein, l'interpréteur est fait pour ça...
LoupSolitaire, je ne connaissais pas ideone, merci, c'est dans le marques-pages.
Edit :
ZerodeBlender, ton code est totalement inconcevable dans la façon dont tu l'écris et dont tu penses.
Il n'y a que des incohérences
while deux == un :
Mais la variable deux n'a pas été déclarée.
D'ailleurs dans la suite de ton programme, la variable trois, quatre, cinq, etc... n'y sont pas non plus, elle le sont qu'après tes whiles .
def creationcode(code) :
Ne sert à rien, car tu déclares ta variable en dernière ligne. Je ne comprend pas trop ce que tu veux faire ici ???
Citation
Il utilise le code généré par creationcode pour coder le fichier.
Je ne vois pas l'intérêt de faire ceci, car tes données ne seront plus décodable, tu auras perdu toutes tes données.
Un peu d'explication pourra nous éclaircir.
Pour coder (soit disant une lettre) il suffit de faire
import random
def coding(ch):
code=[]
for i in ch:
code.append(str(random.randint(1,999)))
return "".join(code)
print coding("""Python runs on Windows, Linux/Unix, Mac OS X, and has been ported to the Java and .NET virtual machines.
Python is free to use, even for commercial products, because of its OSI-approved open source license.
New to Python or choosing between Python 2 and Python 3? Read Python 2 or Python 3.
The Python Software Foundation holds the intellectual property rights behind Python, underwrites the PyCon conference, and funds other projects in the Python community.""")
#Fonction qui créer un code unique
import random #importation du module de génération de nombre aléatoire
def creationcode() :
un = 0
deux = 0
trois = 0
quatre = 0
cinq = 0
six = 0
sept = 0
huit = 0
neuf = 0
un = random.randint(1, 100)
while deux == un :
deux = random.randint(1, 100)
while trois == un or trois == deux :
trois = random.randint(1, 100)
while quatre == un or quatre == deux or quatre == trois :
quatre = random.randint(1, 100)
while cinq == un or cinq == deux or cinq == trois or cinq == quatre :
cinq = random.randint(1, 100)
while six == un or six == deux or six == trois or six == quatre or six == cinq :
six = random.randint(1, 100)
while sept == un or sept == deux or sept == trois or sept == quatre or sept == cinq or
sept == six :
sept = random.randint(1, 100)
while huit == un or huit == deux or huit == trois or huit == quatre or huit == cinq or
huit == six or huit == sept :
huit = random.randint(1, 100)
while neuf == un or neuf == deux or neuf == trois or neuf == quatre or neuf == cinq or
neuf == six or neuf == sept or neuf == huit :
neuf = random.randint(1, 100)
while zero == un or zero == deux or zero == trois or zero == quatre or zero == cinq or
zero == six or zero == sept or zero == huit or zero == neuf :
zero = random.randint(1, 100)
return(code = [un, deux, trois, quatre, cinq, six, sept, huit, neuf, zero])
@fred1599 : Je créerai un decodeur.py
Je ne peut pas utiliser ideone car il n'a pas le module random.
Je pige toujours pas pourquoi tu persistes à écrire du code alors que tu peux pas le tester...
Écris juste tes algos, ça suffira.
EDIT : Et comme j'en ai marre de voir ton horreur, j'ai codé un truc plus simple en 2 minutes :
def gencode(length):
code = []
while len(code) < length:
x = random.randint(1, 100)
if x not in code:
code.append(x)
return code
J'ai ajouté un argument length à la fonction pour pouvoir générer des codes de longueurs différentes au besoin, donc pour avoir le résultat que tu veux il faut l'appeler de cette manière : gencode(10).
Appelle pas la fonction avec un argument supérieur à 98 sinon t'as une boucle infinie.
EDIT : En fait on peut l'appeler avec 100 comme argument, je sais pas pourquoi mais randint(1, 100) renvoie parfois 0...
EDIT (bis) : Ah non, c'est un bug dans le code de LeZerodeblender, le deuxième élément de la liste que sa fonction génère est toujours 0 !
Si tu souhaites simplifier ton script, tu peux également t'inspirer de ceci : La fonction te crée une liste de nombre aléatoire de telle manière que chaque élément de cette liste soit unique (ce que je crois avoir compris de ton script, peut-être pas ce que tu souhaite):
#!/usr/bin/env python
#-*-coding:utf8-*-
import random
def create_code():
table = [random.randint(1,100)]
while len(table)<9:
element = random.randint(1,100)
while element in table:
element = random.randint(1,100)
table.append(element)
return table
if __name__ == "__main__":
print create_code()
Le souci, si tu souhaite avoir une grosse liste, il va falloir agrandir la fourchette des nombres.
Si tu souhaite avoir un code unique, tu peux t'inspirer de ceci:
import time
time.time()
Cette fonction renvoie le nombre de secondes depuis l'Epoch.
Ensuite, est-il vraiment recommandé de recourir à ce genre de technique? Je l'ignore.
Mais tant que tu ne transforme pas ce résultat en int, tout devrait aller.
Bien sur que c'est compliqué. Je partais du principe que dans son code initial, il ne veut pas générer 2 fois la même valeur.
Pour moi, la manière la plus simple passe par une list-comprehension dans une expression lambda. Dans ce cas, on peut retrouver plusieur fois un nombre aléatoire, ce qui n'a pas grande importance.
Bien sur que c'est compliqué. Je partais du principe que dans son code initial, il ne veut pas générer 2 fois la même valeur.
Ca ne prend qu'une ligne de plus cette difficulté
Citation
Pour moi, la manière la plus simple passe par une list-comprehension dans une expression lambda. Dans ce cas, on peut retrouver plusieur fois un nombre aléatoire, ce qui n'a pas grande importance.
Tu peux mettre une condition dans une list-comprehension.
decodeur.py lira les nombres de la première liste 3 par 3 et les assigneras a un caractère, les 3 premiers seront assigné au chiffre 1, les suivant au chiffre 2, ect...
Les exemples proposés sont triviaux, tu dois pouvoir les comprendre, au pire regarde dans la doc ce que tu ne comprend pas, c'est un bon exercice de lire et comprendre le code des autres.
Citation : LeZerodeblender
@LoupSolitaire : ça m'occupe quand je n'est rien a faire, je pourrai le tester dans une semaine lorsque j'aurai accès a mon ordinateur
Tu peux écrire les algos en français, pas forcément en Python, je pense que ça t'occuperais autant, et tu ne perdrais pas de temps à essayer de te rappeler d'une syntaxe en particulier alors que tu ne peux pas exécuter le code.
Si tu t'embêtes et que tu veux essayer de crypter le contenu d'un fichier texte pourquoi ne pas plutôt essayer d'implémenter des méthodes de chiffrements connues comme le ROT13, le chiffre de Delastelle, le carré de Polybe, etc. ?
Parce que là, le code est affreusement alambiqué et incorrect pour pas grand chose, à savoir découper une chaîne en séquence d'un caractère et affilié à ce caractère un nombre aléatoire avant de reconvertir le tout en une seule chaîne de caractère.
Étant donné que je voulais m'exercer dans le module random et dans la lecture et l'écriture de fichiers, je pensais à abandonner cette exercice pour faire un jeu de hasard car je ne connait pas méthode de chiffrement.
je pensais à abandonner cette exercice pour faire un jeu de hasard
Bonne idée, avec le module random, je sais pas, créé toi un jeu du loto, où tu as 6 chiffres (5 + le numero chance) au hasard différents les uns des autres, et dont la taille doit rester 6.
Mais bon Loup Solitaire a déjà donner la soluce, donc plus trop d'intérêts.
Je pense qu'il n'est pas obligatoire de passer beaucoup de temps sur ce module.
J'ai fais en 5 minutes ce programme en Qt pour te montrer ce qu'on peut faire avec une GUI
Aux temps pour moi, LoupSolitaire, je n'avais pas bien vu.
Simplifier un code
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Blond, bouclé, toujours le sourire aux lèvres...
Blond, bouclé, toujours le sourire aux lèvres...
Blond, bouclé, toujours le sourire aux lèvres...
Blond, bouclé, toujours le sourire aux lèvres...
Blond, bouclé, toujours le sourire aux lèvres...
Blond, bouclé, toujours le sourire aux lèvres...
Blond, bouclé, toujours le sourire aux lèvres...
Blond, bouclé, toujours le sourire aux lèvres...