如何将一段文本转换为数字列表,以便在python中“abc”指向[0,1,2](空格键指向26)等

2024-09-22 20:38:56 发布

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

例如,消息“hello”变成了[7,4,11,11,14]。 目前我有:

print("Please enter message (do not use any capital letters or punctuation marks):")
text = input()
letters = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u",
           "v", "w", "x", "y", "z", " "]
# t is the character of the text we are dealing with
t = 0
# le is the letter of the alphabet we are dealing with
le = 0
numbers = []
length = len(text)
for t in range(length):
    for le in range(27):
        if text[t] == letters[le]:
            numbers.append(le)
print(numbers)

它不工作-输入“hello”输出[7,31,65,92]。 任何帮助都将不胜感激。如果我做错了,抱歉我是新手


Tags: ofthetextlehelloforiswith
1条回答
网友
1楼 · 发布于 2024-09-22 20:38:56

您的代码片段应该可以工作(它在我的计算机上也可以工作)。 您确定运行了正确的文件吗?或者你的代码里还有别的东西

同时,你的代码不是很有效,而且容易出错

正如你所知道的,计算机中的所有东西都以二进制格式存储在计算机中的某个位置,也就是数字。因此,字符也是数字

要了解确切的值字符关系,可以检查ASCII table

在该表中,小写字母按字母顺序依次排列,与'a'关联的值为97。在python中,可以使用内置的ord(character)函数获取表示字符的整数

在您的情况下,您可以:

print("Please enter message (do not use any capital letters or punctuation marks):")
text = input()

numbers = []
length = len(text)
for t in range(length):
    character = text[t]
    if character == ' ':
        value = 26
    else:
        value = ord(character) - 97 # to get 0 for 'a'
    if value >= 26 or value < 0:
        continue  # to ignore non lowercase and non space characters
    numbers.append(value)
print(numbers)

一个更具Python风格的版本是(包括佩曼·马吉迪的建议):

text = input("Please enter message (do not use any capital letters or punctuation marks):")

text = text.lower()  # that way you also handle uppercase characters

numbers = []
for character in text:  # you can iterate over strings directly
    value = ord(character) - 97
    if value not in range(26):
        if character == " ":
            value = 27
        else :
            # define value if character is neither a letter nor a space
            # I'll put -1
            value = -1
    numbers.append(value)

print(numbers)

您也可以在python中以不同的方式生成列表,这里是numbers列表创建的(某种)一行等价物。它给出了与上述完全相同的结果

numbers = [26 if c == " " else ord(c)-97 if ord(c)-97 in range(26) else -1 for c in text]

相关问题 更多 >