Как назначить числовое значение каждой заглавной букве? - PullRequest
4 голосов
/ 14 сентября 2010

Как назначить числовое значение каждой заглавной букве, а затем использовать его позже через строку и затем сложить значения.

A = 1, B = 2, C = 3 (etc..)

string = 'ABC'

Затем верните ответ 6 (в данном случае).

Ответы [ 9 ]

11 голосов
/ 14 сентября 2010
base = ord('A') - 1
mystring = 'ABC'
print sum(ord(char) - base for char in mystring)
6 голосов
/ 14 сентября 2010

Вы можете использовать ord, чтобы получить код ascii, затем вычесть 64.

def codevalue(char):
    return ord(char) - 64
4 голосов
/ 14 сентября 2010
import string

letter_to_numeral = dict(zip(string.uppercase, range(1, len(string.uppercase) + 1) ))

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

def score_string(s):
    return sum([letter_to_numeral[character] for character in s])


score_string('ABC')
>>> 6
3 голосов
/ 14 сентября 2010

Перечислить может сделать нумерацию за вас:

import string
numerology_table = dict((ch,num+1) 
                         for (num,ch) in enumerate(string.ascii_letters[:26].upper()))

или даже лучше, вы можете начать перечисление с 1 вместо значения по умолчанию 0:

numerology_table = dict((ch,num) 
                         for (num,ch) in enumerate(string.ascii_letters[:26].upper(),
                                                   start=1))
2 голосов
/ 14 сентября 2010
def getvalue(mystring):
    letterdict = dict(zip('ABCDEFGHIJKLMNOPQRSTUVWXYZ',range(1,27)))
    return sum(letterdict[c] for c in mystring)
1 голос
/ 15 сентября 2010

Самый разумный ответ, конечно, использует ord, как показано ранее.Но для тех, кто решил создать словарь, я бы предпочел просто использовать индекс в строке:

>>> import string
>>> mystring = 'ABC'
>>> sum(string.uppercase.index(c) + 1 for c in mystring)
6
1 голос
/ 14 сентября 2010

Гольф ответ наверняка раздражает вашего профессора:

>>> s = 'ABC'
>>> sum(map(ord,s),-64*len(s))
6
1 голос
/ 14 сентября 2010

Если вы используете Python3:

result = 0
mystring = 'ABC'
for char in mystring.encode('ascii'):
    result += char - 64

>>> result
6
0 голосов
/ 14 сентября 2010

После определения переменных вы можете просто вернуть ответ или распечатать ответ. A = 1 B = 2 C = 3 всего = A + B + C печать (всего) возврат всего

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...