Python et les listes,
Dernière réponse : dans Programmation
Salut bon voila j'ai un petit problème dont mes nombreux teste prouvent qu'il ne devrait pas exister mais bon il existe bel et bien donc je vien vous demander votre avis.
voici le bou de mon code qui ne marche pas :
print test
Je ne comprend pas pourtant je fais un
print lettre
print compteur
et sa m'affiche les bonne donné que je met en clair après :
qui est donc l'équivalent de
.
Mais lorsque j'essaye avec les variable il ne me les accepte pas ...
Alors je suis pas sur d'avoir été très clair mais bon, si vous voulez plus de précision ^^
Merci
voici le bou de mon code qui ne marche pas :
Citation :
test = lettre[compteur]print test
Je ne comprend pas pourtant je fais un
Citation :
print lettre
print compteur
et sa m'affiche les bonne donné que je met en clair après :
Citation :
print a[0]Citation :
lettre[compteur]Mais lorsque j'essaye avec les variable il ne me les accepte pas ...
Alors je suis pas sur d'avoir été très clair mais bon, si vous voulez plus de précision ^^
Merci
Autres pages sur : python listes
Lassé par la pub ? Créez un compte
Tien voici mon script
longueurChaine=len(chaine)
compteur = 0
ChaineCrypte = 999
a = ['a32','rui','atp','b68','nio','xla']
b = ['fla','mor','nfh','edj','cur','qor']
while compteur < longueurChaine:
lettre = chaine[compteur]
crypte = lettre[compteur]
ChaineCrypte = str(ChaineCrypte) + str(crypte)
compteur = compteur + 1
print ChaineCrypte
input()
Dans ce script il y a 2 problème le premier ce situe au niveau de la commande que je t'es mis en rouge, sa ne renvoi pas du tout ce que sa devré renvoyer.
Et le 2eme se situe quelques part dans la boucle ou je sais pas trop car lors du lancement la fenetre se ferme directement sans attendre au "input ()" à la fin que je t'es mis en jaune.
Lors des testes je rentré comme comme valeur à "chaine" (à la première ligne) : abab
Voila tu sais tout ^^
PS : c'est quoi le "None" que tu as mis à la fin de ta liste juste en haut dans ton exemple ??
Citation :
chaine = raw_input()longueurChaine=len(chaine)
compteur = 0
ChaineCrypte = 999
a = ['a32','rui','atp','b68','nio','xla']
b = ['fla','mor','nfh','edj','cur','qor']
while compteur < longueurChaine:
lettre = chaine[compteur]
crypte = lettre[compteur]
ChaineCrypte = str(ChaineCrypte) + str(crypte)
compteur = compteur + 1
print ChaineCrypte
input()
Dans ce script il y a 2 problème le premier ce situe au niveau de la commande que je t'es mis en rouge, sa ne renvoi pas du tout ce que sa devré renvoyer.
Et le 2eme se situe quelques part dans la boucle ou je sais pas trop car lors du lancement la fenetre se ferme directement sans attendre au "input ()" à la fin que je t'es mis en jaune.
Lors des testes je rentré comme comme valeur à "chaine" (à la première ligne) : abab
Voila tu sais tout ^^
PS : c'est quoi le "None" que tu as mis à la fin de ta liste juste en haut dans ton exemple ??
Le problème vient d'ici:
apparemment, "chaine" est ce que l'utilisateur tape (une chaine de caractères je suppose).
sur le "lettre = chaine[compteur]", lettre représente 1 caractère. Donc, "lettre" n'est pas un tableau (ou une chaine de 1 caractère).
En fait, "lettre[compteur]" n'a pas de sens.
Si tu veux un chiffrement par permutation (très facilement déchiffrable), tu peux faire un dictionnaire (liste de [lettre, lettre chiffrée]).
exemple (je ne met que le cryptage de a,b et c):
et tu ferais simplement:
Par contre si un caractère écrit n'est pas présent dans le dictionnaire, ça retourne une erreur (on peut tester si la lettre est présente dans le dictionnaire en faisant "cleDicthas_key('a')").
Pour ton second problème, pourquoi ne mets-tu pas directement raw_input() au lieu de input() ?
ps: "None" c'est pour indiquer "rien": un objet qui n'existe pas (donc pas vraiment d'intérêt :-D )
lettre = chaine[compteur] crypte = lettre[compteur]
apparemment, "chaine" est ce que l'utilisateur tape (une chaine de caractères je suppose).
sur le "lettre = chaine[compteur]", lettre représente 1 caractère. Donc, "lettre" n'est pas un tableau (ou une chaine de 1 caractère).
En fait, "lettre[compteur]" n'a pas de sens.
Si tu veux un chiffrement par permutation (très facilement déchiffrable), tu peux faire un dictionnaire (liste de [lettre, lettre chiffrée]).
exemple (je ne met que le cryptage de a,b et c):
cleDict={'a':'r', 'b':'p', 'c':'o'}
et tu ferais simplement:
crypte=cleDict[lettre]
Par contre si un caractère écrit n'est pas présent dans le dictionnaire, ça retourne une erreur (on peut tester si la lettre est présente dans le dictionnaire en faisant "cleDicthas_key('a')").
Pour ton second problème, pourquoi ne mets-tu pas directement raw_input() au lieu de input() ?
ps: "None" c'est pour indiquer "rien": un objet qui n'existe pas (donc pas vraiment d'intérêt :-D )
Merci Cricky, enfaite mon erreur venait du faite que je ne savais pas que l'on pouvait mettre de caractère dans un dictionnaire je pensais que c'était limité à clé, avec une valeur qui était obligatoirement un chiffre.
Bon j'ai adopté ta méthode, mais j'ai quand meme essayé de faire marcher le mien et j'ai essayé de modifier le code en fonction de tes remarques et sa donne ceci :
chaine = raw_input()
longueurChaine=len(chaine)
compteur = 0
ChaineCrypte = 999
aa = ['a32','rui','atp','b68','nio','xla']
ba = ['fla','mor','nfh','edj','cur','qor']
while compteur < longueurChaine:
lettre = chaine[compteur]
crypte = str(lettre) + str('a')[compteur]
ChaineCrypte = str(ChaineCrypte) + str(crypte)
compteur = compteur + 1
print ChaineCrypte
raw_input()
Mais la je ne vois pas trop ou se trouve le problème ...
Avec mes modifications lettre devrait à tout les coup devenir une chaine de 2 caractère le premier étant le caractère qu'a tapper l'utilisateur et le second est un "a".
Bon j'ai adopté ta méthode, mais j'ai quand meme essayé de faire marcher le mien et j'ai essayé de modifier le code en fonction de tes remarques et sa donne ceci :
Citation :
chaine = raw_input()
longueurChaine=len(chaine)
compteur = 0
ChaineCrypte = 999
aa = ['a32','rui','atp','b68','nio','xla']
ba = ['fla','mor','nfh','edj','cur','qor']
while compteur < longueurChaine:
lettre = chaine[compteur]
crypte = str(lettre) + str('a')[compteur]
ChaineCrypte = str(ChaineCrypte) + str(crypte)
compteur = compteur + 1
print ChaineCrypte
raw_input()
Mais la je ne vois pas trop ou se trouve le problème ...
Avec mes modifications lettre devrait à tout les coup devenir une chaine de 2 caractère le premier étant le caractère qu'a tapper l'utilisateur et le second est un "a".
Ok, je viens de comprendre ce que tu veux faire.
"str(lettre)" est équivalent à "lettre"
en fait tu voudrais tranformer un nom de variable en variable (à partir de la chaine " 'ab' " obtenir le tableau mis dans "ab").
Ce n'est pas str() qui fait ça, ça transforme n'importe quel objet en chaine de caractère (toi tu veux l'inverse).
si lettre = 'b' pour la 3ème boucle, tu fais:
La seule chose que je vois serait d'utiliser la commande "exec()" qui exécute une commande donnée sous forme de chaine de caractère. Donc, il te suffit de tout transformer en chaine de caractère et de l'exécuter.
dans le même exemple, ça fait:
qui exécute crypte = ba[compteur]
Et là je pense que tu auras ce que tu veux.
"str(lettre)" est équivalent à "lettre"
en fait tu voudrais tranformer un nom de variable en variable (à partir de la chaine " 'ab' " obtenir le tableau mis dans "ab").
Ce n'est pas str() qui fait ça, ça transforme n'importe quel objet en chaine de caractère (toi tu veux l'inverse).
si lettre = 'b' pour la 3ème boucle, tu fais:
crypte = 'b' + 'a'[3]
La seule chose que je vois serait d'utiliser la commande "exec()" qui exécute une commande donnée sous forme de chaine de caractère. Donc, il te suffit de tout transformer en chaine de caractère et de l'exécuter.
exec('crypte = ' + lettre + 'a' + '[compteur]')
dans le même exemple, ça fait:
exec('crypte = ba[compteur]')
qui exécute crypte = ba[compteur]
Et là je pense que tu auras ce que tu veux.
Oui voila c'est sa mais je croyait pas qu'il fallait utiliser une commande spécial mais que avec une variable sa marcherait.
Dailleur je ne connaissais pas l'existence de cette commande (je vien de commencer python il y a 3jour
)
Si tu avais un ou 2 liens à m'envoyer pour que j'élargisse la liste des commandes que je connais en python je ne dirais pas non ^^
Merci
PS : Merci beaucoup sa marche avec la commande "exec"
Dailleur je ne connaissais pas l'existence de cette commande (je vien de commencer python il y a 3jour
)Si tu avais un ou 2 liens à m'envoyer pour que j'élargisse la liste des commandes que je connais en python je ne dirais pas non ^^
Merci
PS : Merci beaucoup sa marche avec la commande "exec"
Cricky tu peux m'expliquer un peu l'utilisation de la commande exec() parce que j'essaye de l'ap^pliquer sur une autre ligne mais je n'y arrive pas ...
Quand est ce qu'il fauit mettre des + et des ' ' ??
Merci
Pour info j'essaye de placer la commande exec() sur cette ligne :
for crypto in liste:
Quand est ce qu'il fauit mettre des + et des ' ' ??
Merci
Pour info j'essaye de placer la commande exec() sur cette ligne :
Citation :
for crypto in liste:
exec() prend 1 seul paramètre qui est une chaine de caractère.
par exemple si tu veux exécuter en mettant tout dans une chaine de caractère:
il faut remplacer les retours à la ligne par '\n'.
Donc pour exécuter ça à partir d'une chaine de caractère:
pour ton exemple:
si dans la variable toto tu as le nom de la variable de la liste à utiliser, tu as:
il te suffit de concaténer les chaines de caractère (le + permet de faire de collage de chaines
par exemple si tu veux exécuter en mettant tout dans une chaine de caractère:
>>> for i in range(1,10,1): ... print i ...
il faut remplacer les retours à la ligne par '\n'.
Donc pour exécuter ça à partir d'une chaine de caractère:
exec('for i in range(1,10,1):\n print i')
pour ton exemple:
exec('for crypto in liste:\n la suite')
si dans la variable toto tu as le nom de la variable de la liste à utiliser, tu as:
toto = 'liste'
il te suffit de concaténer les chaines de caractère (le + permet de faire de collage de chaines
exec('for crypto in ' + 'liste' + ':\n la suite') exec('for crypto in ' + toto + ':\n la suite')
Bon bon bon est ce que tu vois un problème la dedans :
while compteur < LongueurChaineCrypte:
LettreCrypte = ChaineCrypte[compteur:compteur2]
for liste in ListeCrypte:
exec('if LettreCrypte in' + liste + ':\n print liste\n raw_input()')
Parce la moi je commence à déséspérer, j'arrive pas à faire la moindre ligne sans qu'il n'y ai un problème !!
PS : ce que tu vois en rouge c'est sur une ligne dans le script.
Citation :
while compteur < LongueurChaineCrypte:
LettreCrypte = ChaineCrypte[compteur:compteur2]
for liste in ListeCrypte:
exec('if LettreCrypte in' + liste + ':\n print liste\n raw_input()')
Parce la moi je commence à déséspérer, j'arrive pas à faire la moindre ligne sans qu'il n'y ai un problème !!
PS : ce que tu vois en rouge c'est sur une ligne dans le script.
Le exec ne s'utilise que lorsque le contenu d'une variable est le nom d'une autre variable.
C'était le cas lorsque tu avais les listes aa, ab, tu avais une variable lettre dont la valeur était le nom de la variable aa ou ab.
Dans la ligne en rouge, il faut que liste contienne le nom d'une autre variable que tu veux utiliser.
Si tu veux utiliser directement la variable liste, il faut faire:
ce qui revient à faire:
En gros, il ne faut jamais utiliser le exec(), sauf dans le cas particulier où tu veux accéder au contenu d'une variable, mais d'une varible dont tu ne connais pas le nom à l'avance.
C'était le cas lorsque tu avais les listes aa, ab, tu avais une variable lettre dont la valeur était le nom de la variable aa ou ab.
Dans la ligne en rouge, il faut que liste contienne le nom d'une autre variable que tu veux utiliser.
Si tu veux utiliser directement la variable liste, il faut faire:
exec('if LettreCrypte in liste :\n print liste\n raw_input()')
ce qui revient à faire:
if LettreCrypte in liste : print liste raw_input()
En gros, il ne faut jamais utiliser le exec(), sauf dans le cas particulier où tu veux accéder au contenu d'une variable, mais d'une varible dont tu ne connais pas le nom à l'avance.
Ok, je viens de comprendre: il te manque un espace juste après le "in"
si liste contient 'toto', ta ligne exécute:
qui donc incorrect à cause du intoto.
Donc, faut pas hésiter à mettre des espaces:
si liste contient 'toto', ta ligne exécute:
if LettreCrypte intoto: print liste raw_input()
qui donc incorrect à cause du intoto.
Donc, faut pas hésiter à mettre des espaces:
exec('if LettreCrypte in ' + liste + ' :\n print liste\n raw_input()')
Lassé par la pub ? Créez un compte
- Contenus similaires :
- SolutionsEcrivez un programme python
- Solutions[Python] requete page internet avec variable en POST
- SolutionsCréé un jeux 2D en python
- SolutionsProblèmme de programme python
- SolutionsParseur de distance en python
- SolutionsPYTHON
- SolutionsProgrammation python sous windows xp
- SolutionsProgrammation python sous windows
- Forumpython: comment tester l'existence du caractère "-" dans une ligne d'un fichier
- Voir plus