如何才能完成以下工作?
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: ')
我'已经尝试了很多方法来解决,但无法达到平特一肖。我想做的是ex。如果我输入"hello",输出要像字母表一样排成数字。例如a = 1 < 在字母表中。
像这样的事情呢:
print [ord(char) - 96 for char in raw_input('Write Text: ').lower()]
顺序 [列表理解][2] [ASCII字符编码][3]
EDIT 既然你让我解释,我就解释一下......虽然在评论中已经被[?]解释得很好了。
让我们用更多的行来开始吧。
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。 所以,'b'的序数==98,'c'==99,等等。 当你减去96时,'b'==2,'c'==3,等等。
我发布的最初解决方案的其余部分只是一些你可以学习的Python技巧,称为列表理解。 但是,我不会把注意力放在这个问题上,而会把注意力放在学习用任何语言解决问题上,因为在这种情况下,命令是你的朋友。 我希望这有帮助。
这是我以前用于此目的的一个函数。对大写字母和小写字母都适用。
def convert_char(old):
if len(old) != 1:
return 0
new = ord(old)
if 65 <= new <= 90:
# Upper case letter
return new - 64
elif 97 <= new <= 122:
# Lower case letter
return new - 96
# Unrecognized character
return 0
>>> [str(ord(string.lower(c)) - ord('a') + 1) for c in string.letters]
['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12', '13', '14', '15', '16', '17',
'18', '19', '20', '21', '22', '23', '24', '25', '26', '1', '2', '3', '4', '5', '6', '7', '8',
'9', '10', '11', '12', '13', '14', '15', '16', '17', '18', '19', '20', '21', '22', '23', '24',
'25', '26']