[python] poker problème avec les strings

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
Configuration: Mac OS X
Safari 525.13

3 réponses

  1. Modérateur
    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
    1. Modérateur
      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
      1. Merci beaucoup :)

        en effet le print c'est pas mega malin ...
        0
    2. Modérateur
      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