Probleme avec un programe python

Probleme avec un programe python - Python - Programmation

Marsh Posté le 03-04-2017 à 14:19:51    

Bonjour a tous, j ai commencé la programmation en Python il y à peu et je voulais crée un petit programme pour séparer les lettres d'un message pour ensuite les transformée en une autre lettres(cryptage César). Malheureusement j'ai une erreur que je ne comprend pas... :fou:  :fou:  
mon code:
 
message = input("Message: " )
 
i = int(0)
j = slice(1)
 
liste = []
letters = ['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z']
listePlace = []
 
print(letters)
 
for x in message:
    liste.extend(message[i])
    i += 1
 
print(liste)
 
for q in range(len(message)):
    listePlace.extend(letters.index(liste[j]))
    j+=1
 
print(listePlace)
 
 
Le message d’erreur:
 
Message: message
['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z']
['m', 'e', 's', 's', 'a', 'g', 'e']
Traceback (most recent call last):
  File "C:\Users\*********\Desktop\test2.py", line 19, in <module>
    listePlace.extend(letters.index(liste[j]))
ValueError: ['m'] is not in list
>>>

Reply

Marsh Posté le 03-04-2017 à 14:19:51   

Reply

Marsh Posté le 03-04-2017 à 18:31:51    

Utilise les balises code.

 

Qu'est-ce que tu cherches à faire exactement avec

Code :
  1. j = slice(1)
  2. ...
  3. for q in range(len(message)):
  4.     listePlace.extend(letters.index(liste[j]))
  5.     j+=1


La méthode index retourne l'indice d'un élément alors que tu passes une tranche de ta liste (d'un seul élément).
Et j+=1 n'a aucun sens.


Message édité par DDT le 03-04-2017 à 18:32:38

---------------
click clack clunka thunk
Reply

Marsh Posté le 03-04-2017 à 18:42:26    

Merci. Après modification de mon code:
 
message = input("Message: " )
 
i = int(0)
j = int(0)
 
liste = []
letters = ['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z']
listePlace = []
 
print(letters)
 
for x in message:
    liste.extend(message[i])
    i += 1
print(liste)
 
for q in range(len(message)):
    l = str(letters.index(liste[j]))
    listePlace.extend(l)
    j+=1
print(listePlace)
 
J'obtiens un résultat incompréhensible:
 
Message: message
['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z']
['m', 'e', 's', 's', 'a', 'g', 'e']
['1', '2', '4', '1', '8', '1', '8', '0', '6', '4'] <========
 
Pourquoi le 'm' est devenu un '1', et pourquoi y a t il plus de numéro que de lettre?
 
Merci d'avance

Reply

Marsh Posté le 03-04-2017 à 18:55:31    

Parce que l'indice de 'm' c'est 12.
 

Code :
  1. >>> foo = []
  2. >>> foo += '12'
  3. >>> foo
  4. ['1', '2']
  5. >>> foo += ['34']
  6. >>> foo
  7. ['1', '2', '34']
  8. >>> foo.extend('56')
  9. >>> foo
  10. ['1', '2', '34', '5', '6']
  11. >>> foo.extend(['78'])
  12. >>> foo
  13. ['1', '2', '34', '5', '6', '78']
  14. >>> foo.append('90')
  15. >>> foo
  16. ['1', '2', '34', '5', '6', '78', '90']


---------------
click clack clunka thunk
Reply

Marsh Posté le 03-04-2017 à 19:11:20    

AAAAAAAAAAAAAAAAAAAAAAAAA....okkkkkkkk
Merci bcp.
 
Du coup comment je peu faire pour qu'il écrive '12' et pas '1','2' ?
Ou alors si c'est pas possible avec se code comment faire?
 
merci d'avance

Reply

Marsh Posté le 03-04-2017 à 19:13:06    

Avec append, je viens de te le montrer. Mais pourquoi tu convertis l'indice en string?


---------------
click clack clunka thunk
Reply

Marsh Posté le 03-04-2017 à 19:14:14    

je sais pas... surement parce que sa marchais comme sa...

Reply

Marsh Posté le 03-04-2017 à 19:15:24    

Effectivement sa marche mieux!!!! merci bcp

Reply

Marsh Posté le 04-04-2017 à 23:02:54    

Plusieurs remarques,
 
1) La variable letters, où l'on est pas obligé de se taper toutes les lettres de l'alphabet...
 

Code :
  1. >>> from string import ascii_lowercase as alphabet
  2. >>> alphabet
  3. 'abcdefghijklmnopqrstuvwxyz'


 
2) Pour séparer les lettres de ton message, on peut directement utiliser la construction d'un objet list
 

Code :
  1. >>> s = 'message'
  2. >>> list(s)
  3. ['m', 'e', 's', 's', 'a', 'g', 'e']


 

Reply

Marsh Posté le 05-04-2017 à 10:02:52    

Pour la liste des caractères:

Code :
  1. import string
  2. string.ascii_lowercase


---------------
sheep++
Reply

Marsh Posté le 05-04-2017 à 10:02:52   

Reply

Marsh Posté le 05-04-2017 à 12:06:40    

Merci pour l'astuce mais j aimerais pouvoir ajouter des majuscule et de la ponctuation a l'alphabet (ce que j'ai fais) et puis de toute façons je l ai déjà écris donc...
 Sinon pour transformée le string en liste merci sa marche nickel et le code est plus lisible.

Reply

Marsh Posté le 05-04-2017 à 13:20:37    

Dans ce cas rien de plus simple en python
 

Code :
  1. >>> from string import ascii_letters as alphabet
  2. >>> from string import punctuation
  3. >>> alphabet + punctuation
  4. 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~'

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed