有没有办法创建一个字符列表,将它们 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
,因为这就是您得到的数字(列表中的索引)。对于其他两个,value
或 character
可能更有意义,因为该值是 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);
我是使用 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
,因为这就是您得到的数字(列表中的索引)。对于其他两个,value
或 character
可能更有意义,因为该值是 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);