Python et les listes,
Forum Programmation : Python et les listes,
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 :
| Citation : test = lettre[compteur]
|
Je ne comprend pas pourtant je fais un
| Citation :
|
et sa m'affiche les bonne donné que je met en clair après :
| Citation : print a[0] |
qui est donc l'équivalent de
| 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
Message édité par Prog le 18-08-2006 à 22:07:46
Je ne vois pas où est le problème.
As-tu une valeur dans la variable "compteur" ?
Code :
|
Bien oui, justement c'est ce que je disais le problème n'a pas lieu d'etre pourtant sa ne marche pas !!
Et oui compteur a la valeur 0
Dans une liste on peut mettre des chiffres et des lettres non ?? Et le nom de la liste peut etre composé d'autant de caractère qu'on veut non ?
Message édité par Prog le 19-08-2006 à 19:24:58
Dons, une liste on peut y mettre tout ce qu'on veut:
Code :
|
Que signifie exactement ton "ça ne marche pas" ? Tu as une erreur ou ça ne fais pas ce que tu voudrais ?
Tien voici mon script
| Citation : chaine = raw_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 ??
Message édité par Prog le 19-08-2006 à 20:21:54
Le problème vient d'ici:
Code :
|
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):
Code :
|
et tu ferais simplement:
Code :
|
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 :
| Citation :
|
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".
Message édité par Prog le 20-08-2006 à 16:18:05
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:
Code :
|
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.
Code :
|
dans le même exemple, ça fait:
Code :
|
qui exécute crypte = ba[compteur]
Et là je pense que tu auras ce que tu veux.
Message édité par CRicky le 20-08-2006 à 18:26:37
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"
Message édité par Prog le 20-08-2006 à 19:11:03
Je ne regarde que la doc qui est fournie avec python (qui n'est pas toujours très claire).
Heu et sa se trouve ou sa ? :s
Dans le menu python, tu as "Python manuals", c'est une aide .chm
Il n'y a pas vraiment de tutorial, mais c'est parfois pratique pour trouver certaines choses.
Ok merci, je vais aller voir sa.
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 :
| Citation :
|
Message édité par Prog le 21-08-2006 à 00:40:46
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:
Code :
|
il faut remplacer les retours à la ligne par '\n'.
Donc pour exécuter ça à partir d'une chaine de caractère:
Code :
|
pour ton exemple:
Code :
|
si dans la variable toto tu as le nom de la variable de la liste à utiliser, tu as:
Code :
|
il te suffit de concaténer les chaines de caractère (le + permet de faire de collage de chaines
Code :
|
Bon bon bon est ce que tu vois un problème la dedans :
| Citation :
|
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.
Message édité par Prog le 21-08-2006 à 13:58:07
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:
Code :
|
ce qui revient à faire:
Code :
|
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.
Oui bien c'est le cas, liste contien la variable d'une liste. Pourtant sa ne marche pas et apparement j'ai bien utilisé le exec() ....
Remplace
Code :
|
par
Code :
|
Et vérifie que le nom afihé est bien celui d'une variable.
Comme tu es dans une boucle, il se peut que certains éléments ne sont pas corrects
Oui oui la variable est bien la bonne !
Ok, je viens de comprendre: il te manque un espace juste après le "in"
si liste contient 'toto', ta ligne exécute:
Code :
|
qui donc incorrect à cause du intoto.
Donc, faut pas hésiter à mettre des espaces:
Code :
|
Message édité par CRicky le 21-08-2006 à 21:21:55
Aaaa oui exacte !!
Et bien tout sa à cause de sa !!
Bon je continu la suite je vais voir si j'ai d'autre problème
Il y a 480 utilisateurs connus et inconnus. Pour voir la liste des connectés connus, cliquez ici.

CRicky