0

我是使用 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[]))

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

...
...
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

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

任何帮助将不胜感激!谢谢!!!

4

3 回答 3

0

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

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

像您在这里所做的那样迭代 arange和索引是可行的,但它不像直接迭代列表那样直接。你可以改为:

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

于 2020-04-08T02:13:14.810 回答
0

不要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 和 your hex()andord()函数,这变得非常简洁。您可以编写函数,如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'
于 2020-04-08T02:17:46.800 回答
0

这可以满足您的要求

s='APPLE';
l=list(s);
h=list(map(lambda x: '0x%x' % (ord(x)), l));
print(h);
于 2020-04-08T02:30:24.763 回答