将原始输入字符串转换为数字(对于每个字母),然后将数字相加

时间:2015-06-04 13:45:56

标签: python string

我希望用户输入一个词,例如apple然后将此字符串中的每个字符转换为相应的字母(a = 1,b = 2,c = 3等)

到目前为止,我已经定义了所有字母

a=1
b=2
c=3
d=4 
e=5 
f=6 
g=7 
etc...

并拆分字符串以使用

打印出每个字母
word = str(raw_input("Enter a word: ").lower())

for i in range (len(word)):
    print word[i]

这会单独打印字符,但我无法弄清楚如何将它们打印为相应的数字,然后我可以将它们相加。

9 个答案:

答案 0 :(得分:2)

在您的情况下,最好使用定义所有字符和值的字典。 string库提供了一种更简单的方法。在string.ascii_lowercase中使用dict comprehension,您可以填充字典映射。

>>> import string
>>> wordmap = {x:y for x,y in zip(string.ascii_lowercase,range(1,27))}
>>> wordmap
{'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}

现在您可以轻松地将此映射到您的输出。首先我们接受输入

>>> word = str(raw_input("Enter a word: ").lower())
Enter a word: apple
>>> values = []

现在我们只循环输入单词并将值附加到空列表中。我们附加值,因为我们还需要找到值的总和。

>>> for i in word:
...     print "{}".format(wordmap[i])
...     values.append(wordmap[i])
... 
1
16
16
12
5

您最终可以使用sum函数输出值的总和。

>>> sum(values)
50

答案 1 :(得分:1)

首先,您可以将字符串本身作为迭代器循环,然后您可以使用ord(i)%96获取字母的预期ID:

word = str(raw_input("Enter a word: ").lower())

for i in word:
    print ord(i)%96

请注意ord('a')=97

总结:

sum(ord(i)%96 for i in word)

答案 2 :(得分:1)

>>> string = 'hello'
>>> for char in string:
...     print ord(char) - 96,
... 
8 5 12 12 15

您可以将总和作为

>>> sum = 0
>>> for char in string:
...     sum += ord(char) - 96
... 
>>> sum
52

或更轻的

>>> sum ( [ ord(i) - 96 for i in string ] )
52

答案 3 :(得分:1)

如果在ASCII顺序值下不需要与字母关联的值,则解决方案可以是将字母及其对应的值存储到字典中:

values = {
    'a':1,
    'b':2,
    'c':3,
    'd':4,
    'e':5,
    'f':6,
    'g':7,
    # etc.
}

word = str(raw_input("Enter a word: ").lower())

for i in range (len(word)):
    print values[word[i]]

答案 4 :(得分:0)

使用ord(将字符转换为代码):

def getnumber(letter)
    return ord(letter) - ord('a') + 1

然后,您可以这样做:

print sum(map(getnumber, word))

答案 5 :(得分:0)

如果您想要ANSI字符的默认序号,可以使用:

w = 'apple'
print [ ord(i) for i in w ]

如果没有,请在函数中定义您自己的映射,并在列表理解而不是ord().

中调用它

答案 6 :(得分:0)

将字符存储在dict中:dict ['a'] = 1等等

答案 7 :(得分:0)

要使您当前的方法有效,您可以这样做......

word = str(raw_input("Enter a word: ").lower())

for i in range (len(word)):
    # eval to change the string to an object
    print eval(str(word[i]))

这将用已经定义的字符对象替换字符串。

但解决问题的更好方法可能就是这样......

nums = map(lambda x: ord(x)-96, list(raw_input("Enter word: ").lower()))

这将返回所有字母的列表,其中a为1,b为2 ... y为25,z为26.然后,您可以for i in nums: print i逐行打印所有数字。

答案 8 :(得分:0)

$('#selectProvider').on('change', function(){
    var role = $(this).val();
    switchRole(role);
});

function switchRole(role) {
      var sel = $('select[data-role= ' + role + '  ]');
      sel.show();
      hideSelects(role, sel)
};

hideSelects = function(role, selected) {
    var elements = $("select").filter(function() {
        return $(this).data("role") !== undefined;
    });
    var toHide = $(elements).not(selected);
    toHide.hide();
};