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

3 réponses

  1. kilian Messages postés 8675 Date d'inscription   Statut Modérateur Dernière intervention   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
  2. 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
    1. AwwA
       
      Merci beaucoup :)

      en effet le print c'est pas mega malin ...
      0
  3. sebsauvage Messages postés 33284 Date d'inscription   Statut Modérateur Dernière intervention   15 684
     
    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