有没有办法创建一个字符列表,将它们 ord() 为整数,然后将它们 hex() 为十六进制代码?

Is there a way to create a list of characters, ord() them to integers, and hex() them to a hex code?

我是使用 Python 的初学者程序员,我正在尝试创建加密软件(初学者)。 我正在寻找类似的东西:

输入:Apple -> A、P、P、L、E -> ord() -> 97,"","","","" -> hex() -> 0x16, "" ,"" ,"" ,""

但是,我无法找到一种方法将我的字符转换为整数,同时考虑输入中未知数量的字符。

Sentence = list(input("Enter"))
print(Sentence)
ord_sentence = []
for each in range(len(Sentence)):
    ord_sentence.append(ord(Sentence[]))

这不起作用,因为 Sentence 末尾的参数是空的,但我不知道如何用每个单独的字符填充它。我可以试试

...
...
while len(ord_sentence) <= len(Sentence)
   ord_sentence.append(ord(sentence[0]))
   ord_sentence.append(ord(sentence[1]))
##Continues on to 1000 to account for unknown input##

但是,当输入的长度不完全是 1000 个字符时,我 运行 进入 INDEX ERROR,并输入如下内容:

...
ord_sentence.append(ord(sentence[0]))
if IndexError:
    print(ord_sentence)
    break

只会导致它打印序列的第一个数字,然后中断。

如有任何帮助,我们将不胜感激!谢谢!!!

我认为您需要再次阅读有关循环如何工作的内容。当您迭代某些内容时,该值将分配给一个变量。在您的代码中,那是 each。您永远不会将该变量用于任何事情,但我认为这就是您要找的东西。

for each in range(len(Sentence)):
    ord_sentence.append(ord(Sentence[each]))

迭代 range 并像您在此处所做的那样建立索引是可行的,但它不像直接在列表上迭代那样直接。你可以改为:

for each in Sentence:                   # no range, len, each is a character
    ord_sentence.append(ord(each))      # take its ord() directly

或者您可以使用列表理解直接从旧列表构建新列表,而无需单独的循环和一堆 append 调用:

ord_sentence = [ord(each) for each in Sentence]

虽然 each 是您在代码中使用的名称,但更好的做法是为变量指定一个更具体的名称,以告诉您值的含义。在这里的第一个版本中,您要迭代 range,我会使用 index,因为这就是您得到的数字(列表中的索引)。对于其他两个,valuecharacter 可能更有意义,因为该值是 Sentence 列表中的单个字符。说到那个列表,它的名字有点误导,因为我希望一个句子是一个字符串,或者可能是一个单词列表,而不是一个字符列表(可能来自多于或少于一个句子,例如['f', 'o', 'o']['F', 'o', 'o', '.', ' ', 'B', 'a', 'r', '.']).

不要为此使用 while 循环。如果可能,您应该避免使用索引——这些是小错误的常见来源,并且会使代码难以阅读。 Python 使得直接遍历值变得非常容易。您应该有 真正 使用的充分理由:

for each in range(len(Sentence)):

而不是:

for a_char in Sentence:
  # use a_char here

这将依次为您提供每个字符

或者一个理解,它会做同样的事情并同时创建一个列表。这些是 python.

的核心
[a_char for a_char in s]

连同 join 以及您的 hex()ord() 函数,这变得非常简洁。你可以像 hex(ord('A')) 这样组合函数。有了它,您就可以理解它可以处理您传递的任何长度的字符串:

s = "APPLE"

codedList = [hex(ord(c)) for c in s]
# ['0x41', '0x50', '0x50', '0x4c', '0x45']

# ... or:
codedstring = "".join(hex(ord(c)) for c in s)
# '0x410x500x500x4c0x45'

这就是您所要求的

s='APPLE';
l=list(s);
h=list(map(lambda x: '0x%x' % (ord(x)), l));
print(h);