[python] poker problème avec les strings

AwwA Messages postés 1 Date d'inscription   Statut Membre Dernière intervention   -  
sebsauvage Messages postés 33284 Date d'inscription   Statut Modérateur Dernière intervention   -
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 936
 
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 33284 Date d'inscription   Statut Modérateur Dernière intervention   15 667
 
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