在Python中将字母转换为数字

2024-04-19 00:34:57 发布

您现在位置:Python中文网/ 问答频道 /正文

如何完成以下工作?

characters = ['a''b''c''d''e''f''g''h''i''j''k''l''m''n''o''p''q''r''t''u''v''w''x''y''z']
numbers = ['1''2''3''4''5''6''7''8''9''10''11''12''13''14''15''16''17''18''19''20''21''22''23''24']
text = raw_input(' Write text: ')

我试过很多方法来解决这个问题,但都没法解决。我想让exc。如果我键入“hello”,输出将以数字的形式排列,就像字母表一样。字母表中的示例a=1<。


Tags: 方法textlt示例helloinputraw键入
3条回答

可以使用chr()和ord()在字母和整数之间进行转换。

这里有一个简单的例子。

>>> chr(97)
'a'
>>> ord('a')
97

像这样的事情呢:

print [ord(char) - 96 for char in raw_input('Write Text: ').lower()]

ord
list comprehension
ASCII character codes

编辑
既然你让我解释我会。。。尽管在评论中已经有很好的解释了[?].

让我们从这一行开始。

input = raw_input('Write Text: ')
input = input.lower()
output = []
for character in input:
    number = ord(character) - 96
    output.append(number)
print output

这做了同样的事情,但更可读。在你试图理解我的第一个答案之前,一定要弄清楚这里发生了什么。这里的一切都很标准,简单的Python。需要注意的是ord函数。ord代表序数,几乎每种高级语言都有这种类型的函数可用。它给你一个映射到任何字符的数字表示。ord的逆函数称为chr。

chr(ord('x')) == 'x' # for any character, not just x.

如果你自己测试,a的序数是97(我在上面发布的第三个链接将显示完整的ASCII字符集)。每个小写字母都在97-122(26个字符)的范围内。因此,如果你只是从任何小写字母的序数中减去96,你将得到它在字母表中的位置,假设你取“a”==1。所以,当你减去96,'b'==2,'c'==3,等等时,序数是'b'==98,'c'==99

我发布的最初解决方案的其余部分只是一些Python技巧,您可以学习称为列表理解。但是,我不会像专注于学习在任何语言中解决问题那样专注于这个问题,因为ord是你的朋友。我希望这能有帮助。

如果要大量使用此转换,请考虑计算一次并将结果放入字典:

>>> import string
>>> di=dict(zip(string.letters,[ord(c)%32 for c in string.letters]))
>>> di['c'] 
3

其优点是字典查找比每次调用时遍历列表都要快。

>>> for c in sorted(di.keys()):
>>>    print "{0}:{1}  ".format(c, di[c])
# what you would expect....

相关问题 更多 >