我是一名使用Python的初学者,我正在尝试创建加密软件(初学者(。我正在寻找类似的东西:
输入:Apple->A、p、p、L、E->ord((->97,","、"、
然而,我找不到一种方法来将我的字符转换为整数,同时考虑输入中未知数量的字符。
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
只会导致它打印序列的第一个数字,然后中断。
如有任何帮助,我们将不胜感激!非常感谢。
我认为您需要重新阅读循环是如何工作的。当您对某个内容进行迭代时,该值将被分配给一个变量。在您的代码中,这是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);