[python] poker problème avec les strings

AwwA Messages postés 1 Date d'inscription   Statut Membre Dernière intervention   -  
sebsauvage Messages postés 33415 Statut Modérateur -
voila j'ai crée une fonction qui a pour but de suprimer les lettres dans une chaine .


mon but est de transformer cette chaine


['9s', '9d', '10h', '9c', '8h', '13s', '3d']

en

['9', '9', '10', '9', '8', '13', '3']


voila mon programme

def w(liste):
    if liste.count('h')>0:
        print liste.replace("h","",10)


    if liste.count('s')>0:
        print liste.replace("s","",10)

    
    if liste.count('d')>0:
        print liste.replace("d","",10)

    if liste.count('c')>0:
        print liste.replace("c","",10)

def z(liste):
    wow=[]
    i=0
    while i<6:
        wow=wow+[w(liste)]
        i=i+1
    return wow

mais il me donne
[None, None, None, None, None, None]

ce qui n'est pas tres pratique !

merci
A voir également:

3 réponses

kilian Messages postés 8854 Statut Modérateur 1 526
 
Ce ne sont pas des print qu'il te faut, ta fonction doit retourner la chaine et non pas l'afficher:
def w(liste):
    if liste.count('h')>0:
        liste= liste.replace("h","",10)


    if liste.count('s')>0:
        liste= liste.replace("s","",10)

    
    if liste.count('d')>0:
        liste= liste.replace("d","",10)

    if liste.count('c')>0:
        liste= liste.replace("c","",10)
    
    return liste
0
jisisv Messages postés 3678 Statut Modérateur 935
 
Une solution plus pythonique
root@osiris ~/src
$ cat cut.py
#!/usr/bin/python

def chop(aString) :
        return aString[0 : -1]
# on suppose que aString n'est ni None ni vide

avar = ['9s', '9d', '10h', '9c', '8h', '13s', '3d']
result = map(chop , avar)
print result

root@osiris ~/src
$ python cut.py
['9', '9', '10', '9', '8', '13', '3']

Voir par exemple
http://docs.python.org/tut/node7.html#SECTION007130000000000000000
0
AwwA
 
Merci beaucoup :)

en effet le print c'est pas mega malin ...
0
sebsauvage Messages postés 33415 Statut Modérateur 15 663
 
Si c'est pour garder uniquement les chiffres, peut aussi utiliser isdigit() qui indique si un caractère est un chiffre ou non:

#!/usr/bin/python
def keepDigits(chaine):
    return ''.join([c for c in chaine if c.isdigit()])
   
avar = ['9s', '9d', '10h', '9c', '8h', '13s', '3d']
result = map(keepDigits , avar)
print result
0