我希望用户输入一个词,例如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]
这会单独打印字符,但我无法弄清楚如何将它们打印为相应的数字,然后我可以将它们相加。
答案 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();
};