2017-08-23 12 views
2

J'ai un numéro alphanumérique sous forme de chaîne "4525ABT2", que j'essaie de "traduire" pour n'être qu'un numérique. J'ai essayé de nombreuses façons, intelligentes comme vraiment stupides et longues, et j'ai regardé partout (j'ai trouvé la solution pour Java ici mais ça ne marche pas en python, pas plus que la solution qui change tous les caractères en nombres). Ma dernière tentative ressemble à ceciConversion d'une chaîne alphanumérique en chaîne numérique en python

for i in alpha:  
     alpha1 = alpha.replace("A" or "B" or "C", "2") 
     alpha2 = alpha1.replace("D" or "E" or "F", "3") 
     alpha3 = alpha2.replace("G" or "H" or "I", "4") 
     alpha4 = alpha3.replace("J" or "K" or "L", "5") 
     alpha5 = alpha4.replace("M" or "N" or "O", "6") 
     alpha6 = alpha5.replace("P" or "Q" or "R" or "S", "7") 
     alpha7 = alpha6.replace("T" or "U" or "V", "8") 
     alpha8 = alpha7.replace("W" or "X" or "Y" or "Z", "9") 

phone = str(alpha8) 
return phone 

Merci d'avance !!

+0

Fournir un lien vers la solution Java dont vous parlez aiderait probablement beaucoup les autres tand ce que vous essayez de faire exactement. – anothernode

+0

Vous avez raison. J'aurais dû y penser. Je ne peux pas trouver le poste plus longtemps mais la prochaine fois fera l'affaire. – Ninsa

Répondre

-1

Il serait plus facile si vos remplaçants étaient de la même taille, mais cela devrait fonctionner:

replist = ["","","ABC", "DEF", "GHI", "JKL", "MNO", "PQRS", "TUV", "WXYZ"] 

for i,v in enumerate(replist): 
    for l in v: 
     alpha = alpha.replace(l,str(i)) 

Entrée: "AHK62ZT"

Sortie: "2456298"

+1

c'est toujours une mauvaise solution car le remplacement des caractères dans une chaîne (dans une boucle, pas moins) est coûteux. – hop

+0

@hop oh oui votre solution est beaucoup mieux, je voulais juste fournir une version qui a utilisé les mêmes principes de base que OP tentative originale. – Zinki

+0

Merci beaucoup pour vos réponses !!! – Ninsa

4

Utilisez l'outil approprié :

>>> s = "4525ABT2" 
>>> table = str.maketrans('ABCDEFGHIJKLMNOPQRSTUVWXYZ', 
          '22233344455566677778889999') 
>>> s.translate(table) 
'45252282'