[python] poker problème avec les strings

Fermé
AwwA Messages postés 1 Date d'inscription lundi 28 avril 2008 Statut Membre Dernière intervention 28 avril 2008 - 28 avril 2008 à 21:28
sebsauvage Messages postés 32893 Date d'inscription mercredi 29 août 2001 Statut Modérateur Dernière intervention 21 octobre 2019 - 30 avril 2008 à 10:45
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

3 réponses

kilian Messages postés 8731 Date d'inscription vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 20 août 2016 1 527
29 avril 2008 à 00:08
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 3645 Date d'inscription dimanche 18 mars 2001 Statut Modérateur Dernière intervention 15 janvier 2017 934
29 avril 2008 à 01:08
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
Merci beaucoup :)

en effet le print c'est pas mega malin ...
0
sebsauvage Messages postés 32893 Date d'inscription mercredi 29 août 2001 Statut Modérateur Dernière intervention 21 octobre 2019 15 659
30 avril 2008 à 10:45
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