Votre question

Python et les listes,

Tags :
  • Programmation
Dernière réponse : dans Programmation
18 Août 2006 21:58:29

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]
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]
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

Autres pages sur : python listes

a b L Programmation
19 Août 2006 17:33:02

Je ne vois pas où est le problème.
As-tu une valeur dans la variable "compteur" ?

  1. liste=['a','b','c','d']
  2. >>> compteur=3
  3. >>> test=liste[compteur]
  4. >>> print test
  5. d
  6. >>>
19 Août 2006 19:19:15

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 ?
Contenus similaires
a b L Programmation
19 Août 2006 19:43:53

Dons, une liste on peut y mettre tout ce qu'on veut:
  1. >>> [2, "toto", [1,2,3], None]
  2. [2, 'toto', [1, 2, 3], None]


Que signifie exactement ton "ça ne marche pas" ? Tu as une erreur ou ça ne fais pas ce que tu voudrais ?
19 Août 2006 20:20:05

Tien voici mon script

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 ??
a b L Programmation
20 Août 2006 14:42:17

Le problème vient d'ici:
  1. lettre = chaine[compteur]
  2. 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):
  1. cleDict={'a':'r', 'b':'p', 'c':'o'}

et tu ferais simplement:
  1. 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 )
20 Août 2006 16:00:00

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 :

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".
a b L Programmation
20 Août 2006 18:26:08

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:
  1. 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.
  1. exec('crypte = ' + lettre + 'a' + '[compteur]')

dans le même exemple, ça fait:
  1. exec('crypte = ba[compteur]')

qui exécute crypte = ba[compteur]

Et là je pense que tu auras ce que tu veux.
20 Août 2006 18:48:35

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 :p  )

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"
a b L Programmation
20 Août 2006 19:24:39

Je ne regarde que la doc qui est fournie avec python (qui n'est pas toujours très claire).
20 Août 2006 19:25:40

Heu et sa se trouve ou sa ? :s
a b L Programmation
20 Août 2006 19:27:20

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.
20 Août 2006 19:28:18

Ok merci, je vais aller voir sa.
21 Août 2006 00:39:14

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 :

for crypto in liste:
a b L Programmation
21 Août 2006 13:12:58

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:
  1. >>> for i in range(1,10,1):
  2. ... print i
  3. ...


il faut remplacer les retours à la ligne par '\n'.
Donc pour exécuter ça à partir d'une chaine de caractère:
  1. exec('for i in range(1,10,1):\n print i')


pour ton exemple:
  1. 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:
  1. toto = 'liste'

il te suffit de concaténer les chaines de caractère (le + permet de faire de collage de chaines
  1. exec('for crypto in ' + 'liste' + ':\n la suite')
  2. exec('for crypto in ' + toto + ':\n la suite')

21 Août 2006 13:56:42

Bon bon bon est ce que tu vois un problème la dedans :

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.
a b L Programmation
21 Août 2006 20:21:05

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:
  1. exec('if LettreCrypte in liste :\n print liste\n raw_input()')

ce qui revient à faire:
  1. if LettreCrypte in liste :
  2. print liste
  3. 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.
21 Août 2006 20:35:35

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() ....
a b L Programmation
21 Août 2006 20:39:40

Remplace
  1. exec('if LettreCrypte in' + liste + ':\n print liste\n raw_input()')

par
  1. print 'Variable : ' + liste

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
21 Août 2006 21:15:57

Oui oui la variable est bien la bonne !
a b L Programmation
21 Août 2006 21:21:39

Ok, je viens de comprendre: il te manque un espace juste après le "in"
si liste contient 'toto', ta ligne exécute:
  1. if LettreCrypte intoto:
  2. print liste
  3. raw_input()

qui donc incorrect à cause du intoto.

Donc, faut pas hésiter à mettre des espaces:
  1. exec('if LettreCrypte in ' + liste + ' :\n print liste\n raw_input()')
21 Août 2006 21:28:08

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 ;) 
Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS