#1 Le 05/02/2013, à 23:50
- bmzoom
[RESOLU] Python chaine vers liste
bonjour ,
Je ne vois pas comment passer une chaîne en liste:
tabf="000000000000000000000000000000000000000000000000000"
ttf=tabf.split("'")
print ttf
Cela donne : ['000000000000000000000000000000000000000000000000000']
Et il faut : ['0','0', ... ... '0']
Pour remplacer après ttf[20]=5 , vu que une chaîne n'a pas d'indexation
A+
Dernière modification par bmzoom (Le 06/02/2013, à 13:58)
Hors ligne
#2 Le 06/02/2013, à 02:47
- El Pensador
Re : [RESOLU] Python chaine vers liste
Bonjour,
Tu peux tout simplement utiliser la méthode list(). Exemple dans l'interpréteur Python :
>>> tabf="000000000000000000000000000000000000000000000000000"
>>> ttf = list(tbaf)
>>> ttf
['0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0',
'0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0',
'0', '0', '0', '0', '0', '0', '0']
Ou sinon, en moins direct tu peux utiliser une boucle for :
ttf = []
for i in tabf:
ttf.append(i)
« À quoi je sers ? Sans doute à rien du tout... »
A Tunisian Girl
Hors ligne
#3 Le 06/02/2013, à 03:29
- nesthib
Re : [RESOLU] Python chaine vers liste
Les caractères d'une chaîne en python peuvent être accédés par leur index :
>>> s='abcde'
>>> s[2]
'c'
toutefois une chaîne est immuable et ne supporte pas d'affectation par index.
>>> s[2]='C'
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'str' object does not support item assignment
En revanche tu peux facilement faire :
>>> s[:2]+'C'+s[3:]
'abCde'
Ce qui donnerait avec une fonction :
>>> def remplace(s, n, car=''):
... return s[:n]+car+s[n+1:]
>>> remplace(s, 2, 'C')
'abCde'
NB. cette solution est plus rapide que la méthode proposée par El Pensador (voire même beaucoup plus dès qu'on augmente la taille de la chaîne de caractères) :
def repl1(s, n, car=''):
return s[:n]+car+s[n+1:]
def repl2(s, n, car=''):
l=list(s)
l[n]=car
return ''.join(l)
timeit.timeit("repl1('abcdefghijklmnopqrstuvwxyz', 13, 'N')", setup="from __main__ import repl1", number=1000000)
# retourne 0.27860283851623535
timeit.timeit("repl2('abcdefghijklmnopqrstuvwxyz', 13, 'N')", setup="from __main__ import repl2", number=1000000)
# retourne 1.2946109771728516
GUL Bordeaux : Giroll – Services libres : TdCT.org
Hide in your shell, scripts & astuces : applications dans un tunnel – smart wget – trouver des pdf – install. auto de paquets – sauvegarde auto – ♥ awk
⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn
Hors ligne
#4 Le 06/02/2013, à 09:44
- bmzoom
Re : [RESOLU] Python chaine vers liste
ok - je passe à côté des commandes de base sans le savoir
>>> chaine=str(ttf)
>>> chaine
"['0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', 5, '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0']"
>>>
-------------------------------------
Pour revenir de la liste vers la chaîne est réunir les caractères "000000000000000000000000000000000000000000000000000" , il faut quelle syntaxe ?
A+
Hors ligne
#5 Le 06/02/2013, à 10:06
- tiramiseb
Re : [RESOLU] Python chaine vers liste
Pour revenir de la liste vers la chaîne est réunir les caractères "000000000000000000000000000000000000000000000000000" , il faut quelle syntaxe ?
nesthib te l'a déjà montré :
''.join(ttf)
Sébastien Maccagnoni - https://www.maccagnoni.eu - https://www.domotego.com
Hors ligne
#6 Le 06/02/2013, à 10:20
- bmzoom
Re : [RESOLU] Python chaine vers liste
@ tiramiseb : il peut y avoir des pb interne à python ( objet , methode , attribut )
''.join(ttf) >>> là c'est attribut , methode , objet
Je n'ai pas le catalogue de toutes les commandes pour savoir quand il faut mettre le clignotant à droite ou à gauche !
Hors ligne
#7 Le 06/02/2013, à 10:27
- tiramiseb
Re : [RESOLU] Python chaine vers liste
Je ne te dis pas que tu aurais pu deviner tout seul, je te dis que nesthib, dans la réponse juste au-dessus (dans la fonction qu'il a appelée "repl2") a montré exactement ce que tu cherches à faire. Donc il ne s'agit pas d'avoir un catalogue, il s'agit de lire les réponses qu'on te donne
Il a même montré une fonction plus performante... qui me semble préférable également (même si ça semble plus "sale" à première vue, la performance 5 fois supérieure est à prendre en considération).
Dernière modification par tiramiseb (Le 06/02/2013, à 10:27)
Sébastien Maccagnoni - https://www.maccagnoni.eu - https://www.domotego.com
Hors ligne
#8 Le 06/02/2013, à 11:51
- bmzoom
Re : [RESOLU] Python chaine vers liste
bah , la performance c'est de sortir un résultat , et pas d'optimiser 10 lignes !
Ca va mon prog principal est bon , et c'est pour décrypter un mot secret ( ce que je fais c'est en amateur , et je débute en python )
Ici 5 lignes de 50 caractères du code :
XSDSBGSCPGSFJOVCZASGOAAOFHWBEISJCIGTSFSNPWSBRSRSAO
BRSFIBSSGQCFHSDOFHSZSUFOAASQOFGWASGDFSJWGWCBGGCBHS
MLRODXDKBOIBDOXKAGBRZLKZLROPFICXRQQOLRSBOIBJLQLDOB
TVMWSRHYGSQXIPIKEVSRUYMZETSVXIVGIXXIRSXITSYVVEWERW
XIONYMYWBULAYLXYPINLYXYJYWBYKOUHNUHIOMQUNMIHMCFSUO
Mon prog-1 prend tab1="XSDSBGSCPGSFJOVCZASGOAAOFHWBEISJCIGTSFSNPWSBRSRSAO"
et fait des rotations sur les lettres
Quelle commande peut chercher les lignes 1 par 1 dans un fichier data.txt , faire le traitement de prog-1 , et ensuite
copier le résultat ligne par ligne dans un fichier sortie.txt ?
A+
Hors ligne
#9 Le 06/02/2013, à 11:58
- tiramiseb
Re : [RESOLU] Python chaine vers liste
Si j'ai bien compris ce que tu veux faire, pour traiter ligne par ligne utilise readline...
data = file('data.txt', 'r')
sortie = file('sortie.txt', 'w')
for ligne in data.readline():
nouvelleligne = <CE QUE TU VEUX>
sortie.write(nouvelleligne)
Sébastien Maccagnoni - https://www.maccagnoni.eu - https://www.domotego.com
Hors ligne
#10 Le 06/02/2013, à 12:00
- tiramiseb
Re : [RESOLU] Python chaine vers liste
Tout ça, ce sont des choses assez basiques en Python. As-tu suivi des documentations d'introduction à Python ou acheté/lu des livres d'introduction ? Cela te serait bénéfique.
Sébastien Maccagnoni - https://www.maccagnoni.eu - https://www.domotego.com
Hors ligne
#11 Le 06/02/2013, à 13:58
- bmzoom
Re : [RESOLU] Python chaine vers liste
ok - Bien sur que c'est basique , et si j'ai une direction à suivre cela va plus vite
que 300 vérifications proposé par les auteurs de n'importe quel livre de programmation
Exemple :
Ecrivez un programme qui convertira en radians un angle fourni en degrés, minutes ,secondes
Faites le même de deg , min , sec vers radians ( ajouter après modulo 2 pi , qui n'est pas fourni dans l'énoncé )
[RESOLU]
Hors ligne
#12 Le 06/02/2013, à 14:14
- tiramiseb
Re : [RESOLU] Python chaine vers liste
Il faut croire que tu lis les mauvais livres
Tu en trouveras aisément des bons qui donnent des situations concrètes et qui sont bien foutus !
Imagine si tout le monde venait se faire guider sur des forums comme ça... Ça saoulerait vite les bénévoles, qui en auraient marre d'expliquer des trucs de base
Les livres d'apprentissage, c'est fait pour apprendre, non ?
En plus tu y apprendrais bien plus de choses qu'avec des questions "one-shot" comme ça !
J'ajouterai également que de genre de commandes sont expliquées sur le site officiel.
Sébastien Maccagnoni - https://www.maccagnoni.eu - https://www.domotego.com
Hors ligne
#13 Le 06/02/2013, à 14:21
- bmzoom
Re : [RESOLU] Python chaine vers liste
Un forum n'occupent pas tout le temps des bénévoles ..
Quand ils y restent trop longtemps , il y a un souci pour eux !
Hors ligne
#14 Le 06/02/2013, à 15:21
- tiramiseb
Re : [RESOLU] Python chaine vers liste
En effet.
Tu dis ça parce que je devrais un peu plus travailler, c'est ça hein ?
Cela dit, s'il y a trop de questions trop basiques le forum risque d'avoir trop de questions sans réponses
Plus sérieusement, maintenant que je suis de retour à mon bureau (les derniers messages étaient depuis mon smartphone), je peux plus facilement te retrouver les liens suivants, qui me semblent bien pour débuter (la maîtrise de l'anglais est nécessaire, cela dit peu de choses en développement informatique permettent de se passer de l'anglais) :
http://docs.python.org/2/tutorial/
http://wiki.python.org/moin/BeginnersGuide
Et pour ma part, pour trouver "comment faire" dans plein de situations j'utilise beaucoup l'index des modules python :
http://docs.python.org/2/py-modindex.html
Sébastien Maccagnoni - https://www.maccagnoni.eu - https://www.domotego.com
Hors ligne
#15 Le 06/02/2013, à 15:30
- nesthib
Re : [RESOLU] Python chaine vers liste
@tiramiseb : je pense que c'est toujours bien d'essayer d'apprendre par soi-même, cela dit je te rejoins sur le fait qu'il y a énormément de bons tutoriels, livres et documentations sur python et qu'il serait dommage de s'en priver.
@bmzoom : voici un casseur de mot de passe par rotation. Je te donne la solution pour que tu puisses comprendre les commandes de bases et j'espère que ça te donnera envie de suivre les conseils de tiramiseb.
lettres='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
tab1="XSDSBGSCPGSFJOVCZASGOAAOFHWBEISJCIGTSFSNPWSBRSRSAO"
def permute(s, n):
'''cette fonction permute les caractères d'une chaîne s avec un incrément n'''
out=''
for c in s:
i = lettres.index(c)
out += lettres[(i + n) % len(lettres)]
return out
for i in xrange(26):
print(permute(tab1, i))
Essaie de comprendre le code, il ne s'agit que de commandes très basiques de python. Aide-toi de la documentation et essaie de commenter le code pour décrire ce que fait chaque ligne.
Dernière modification par nesthib (Le 06/02/2013, à 15:44)
GUL Bordeaux : Giroll – Services libres : TdCT.org
Hide in your shell, scripts & astuces : applications dans un tunnel – smart wget – trouver des pdf – install. auto de paquets – sauvegarde auto – ♥ awk
⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn
Hors ligne
#16 Le 06/02/2013, à 15:36
- tiramiseb
Re : [RESOLU] Python chaine vers liste
nesthib : y'a un problème dans ton code : la variable "l" n'est pas définie.
à part ça...
tu aurais pu faire plus propre quand meme, des noms de variables à plus d'une lettre par exemple...
parce que là c'est peut-être un code simple mais il est un peu crado...
Sébastien Maccagnoni - https://www.maccagnoni.eu - https://www.domotego.com
Hors ligne
#17 Le 06/02/2013, à 15:44
- nesthib
Re : [RESOLU] Python chaine vers liste
Pardon j'ai changé l en lettres au denier moment, je corrige.
En ce qui concerne les variables à une lettre c'est pour laisser à bmzoom le soin de décortiquer le code par lui même, il n'y a rien de « crado »
GUL Bordeaux : Giroll – Services libres : TdCT.org
Hide in your shell, scripts & astuces : applications dans un tunnel – smart wget – trouver des pdf – install. auto de paquets – sauvegarde auto – ♥ awk
⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn
Hors ligne
#18 Le 06/02/2013, à 15:51
- bmzoom
Re : [RESOLU] Python chaine vers liste
Ok - tout est bon a prendre et une grosse application est ce pour prevoir le rechauffement climatique ?
Avec mon prog j ai 10 fois plus vu que je permute les 26 lettres 1 par 1
Sur pc cela va vite et optimiser sera pour un autre post si necessaire
Hors ligne
#19 Le 06/02/2013, à 15:54
- nesthib
Re : [RESOLU] Python chaine vers liste
euh… je n'ai pas tout compris à ta phrase
As-tu compris le morceau de code que je t'ai donné ?
GUL Bordeaux : Giroll – Services libres : TdCT.org
Hide in your shell, scripts & astuces : applications dans un tunnel – smart wget – trouver des pdf – install. auto de paquets – sauvegarde auto – ♥ awk
⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn
Hors ligne
#20 Le 06/02/2013, à 16:44
- bmzoom
Re : [RESOLU] Python chaine vers liste
ok - les 26 permutations sont faites - mon but était d'en avoir 1 par 1
dans le même bloc , avec une sortie dans un fichier différent (pour chaque bloc)
pass1
...
pass26
Passage 0:
XSDSBGSCPGSFJOVCZASGOAAOFHWBEISJCIGTSFSNPWSBRSRSAO
BRSFIBSSGQCFHSDOFHSZSUFOAASQOFGWASGDFSJWGWCBGGCBHS
MLRODXDKBOIBDOXKAGBRZLKZLROPFICXRQQOLRSBOIBJLQLDOB
TVMWSRHYGSQXIPIKEVSRUYMZETSVXIVGIXXIRSXITSYVVEWERW
XIONYMYWBULAYLXYPINLYXYJYWBYKOUHNUHIOMQUNMIHMCFSUO
Passage 1:
YTETCHTDQHTGKPWDABTHPBBPGIXC0JTKDJHUTGTOQXTCSTSTBP
...
Passage 2 :
ZU0UDIUERIUHLQXEBCUIQCCQHJYD0KULEKIVUHUPRYUDTUTUCQ
...
Passage 26 :
-----------------------------------------------------
Vu que je bloque sur des détails , c'est très long !
nom == ['']
print 'Veuillez entrer 50 caracteres : '
nom=input()
print nom
nom == ['']
NameError: name 'nom' is not defined
Quelle synthaxe pour entrer 50 maudit caractères ?
http://www.larsen-b.com/static/intro_python/
Une intro , qui passe au dessus de input()
C'est vite du délire dans les fonctions , alors que la base
est d'obtenir des résultats , avant de se prendre la boule dans les fonctions ..
Dernière modification par bmzoom (Le 06/02/2013, à 16:54)
Hors ligne
#21 Le 06/02/2013, à 16:47
- tiramiseb
Re : [RESOLU] Python chaine vers liste
http://docs.python.org/2/library/functi … #raw_input
>>> s = raw_input('--> ')
--> Monty Python's Flying Circus
>>> s
"Monty Python's Flying Circus"
J'ai même envie d'ajouter :
http://google.fr/?q=python+read+keyboard
Dernière modification par tiramiseb (Le 06/02/2013, à 16:48)
Sébastien Maccagnoni - https://www.maccagnoni.eu - https://www.domotego.com
Hors ligne
#22 Le 06/02/2013, à 17:11
- bmzoom
Re : [RESOLU] Python chaine vers liste
Le temps que je passe en python ne va pas me tuer
Hors ligne
#23 Le 06/02/2013, à 17:52
- nesthib
Re : [RESOLU] Python chaine vers liste
nom == [''] NameError: name 'nom' is not defined
Si tu fais ce genre d'erreurs, tu devrais définitivement lire une introduction à python. Tu confonds affectation de variable et test.
Une intro , qui passe au dessus de input()
C'est vite du délire dans les fonctions , alors que la base
est d'obtenir des résultats , avant de se prendre la boule dans les fonctions ..
La base c'est déjà de comprendre les mécanismes du langages, il n'y a pas de honte à ne pas savoir, mais il est indispensable de les maîtriser pour pouvoir obtenir des résultats.
GUL Bordeaux : Giroll – Services libres : TdCT.org
Hide in your shell, scripts & astuces : applications dans un tunnel – smart wget – trouver des pdf – install. auto de paquets – sauvegarde auto – ♥ awk
⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn
Hors ligne
#24 Le 06/02/2013, à 18:14
- bmzoom
Re : [RESOLU] Python chaine vers liste
http://www.amazon.fr/Python-Pocket-Refe … d_sim_eb_4
Est ce bien pour résumer ce qu'il faut savoir ?
Hors ligne
#25 Le 06/02/2013, à 18:46
- tiramiseb
Re : [RESOLU] Python chaine vers liste
Les "Pocket Reference" d'O'Reilly sont géniaux pour avoir les bases sous le coude rapidement.
Je n'ai pas celui sur Python mais j'en ai d'autres.
Cela ne dispense pas de lire une introduction pour comprendre les mécanismes du langages, mais ça aide vachement les débutants au quotidien (en tout cas moi ça m'aidait au quotidien quand j'étais débutant )
Et de manière générale les livres d'O'Reilly sont très bons.
Dommage qu'O'Reilly France ait fermé...
Dernière modification par tiramiseb (Le 06/02/2013, à 18:46)
Sébastien Maccagnoni - https://www.maccagnoni.eu - https://www.domotego.com
Hors ligne