2017-01-25 1 views
0

Y at-il « facile » moyen de convertir une chaîne de lettres à une valeur entière? Je connais une méthode qui fonctionnerait, mais ce serait très fastidieux. Oh et en Python, j'ai oublié de mentionner ça. Ce serait comme "ABC" = 123Conversion des valeurs de chaîne des valeurs entières

+3

Que serait "XYZ" à traduire? –

+0

Oui, c'est tout à fait une bonne question ... Merci –

Répondre

1

prédéfinir un dictionnaire qui associe des lettres aux chiffres:

d = {'A': '1', 'B': '2', 'C': '3', 'D': '4', 
    'E': '5', 'F': '6', 'G': '7', 'H': '8', 
    'I': '9', 'J': '10', 'K': '11', 'L': '12', 
    'M': '13', 'N': '14', 'O': '15', 'P': '16', 
    'Q': '17', 'R': '18', 'S': '19', 'T': '20', 
    'U': '21', 'V': '22', 'W': '23', 'X': '24', 
    'Y': '25', 'Z': '26'} 

Ensuite, vous pouvez convertir avec:

int(''.join(d[c] for c in 'ABC')) 
1
print ([ord (c) - ord ('A') + 1 for c in 'ABC']) 

N.B. La réponse de Rob est mieux ... (jusqu'à la 'i'; =))

+0

, ce que je avais besoin – michael2103

0

Votre problème est underspecified. Il y a littéralement des fonctions infinies qui convertiront 'ABC'-123, dont celui-ci:

def letter2number(s): 
    return 123 

Si vous voulez convertir les chaînes en enchaînant les chiffres décimaux de la lettre de crédits compensatoires dans l'alphabet, celui-ci pourrait fonctionner pour vous. Notez que vous ne pouvez pas aller autour de la valeur: 24 pourrait être X ou il pourrait être BD.

def letter2number(s): 
    return int(''.join('%d'%(ord(ch)-ord('A')+1) for ch in s)) 

assert letter2number('ABC') == 123 
assert letter2number('XYZ') == 242526 
+0

ajouter donc 100 à chaque code (pour faire simple), puis coller ensemble. –

+0

Mais «ABC» ne donnera pas «123», ce qui était une exigence. –

+0

En effet. Il devrait donc être un code de longueur variable, peut-être avec le 0 comme indicateur d'extension. Mais je suppose que ce n'est pas ce que OP recherchait ... –