[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
    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
      1. Merci beaucoup :)

        en effet le print c'est pas mega malin ...
    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