代码:
import random
randomnum = random.randint(1, 256)
enter = "john"
enterlen = (len(enter))
enterarray = [randomnum, enterlen]
i = 0
while i <= enterlen:
enterarray.append(enter[i])
i = i + 1
错误:
Traceback (most recent call last):
File "/home/kdogg/PycharmProjects/starter/encode.py", line 9, in <module>
enterarray.append(enter[i])
IndexError: string index out of range
我试图用这个数组来制作一个加密代码。我应该从一个随机数开始填入数组,然后填入我要编码的字的长度,然后使用1比1的代码 (a = 1
, b = 2
, c = 3
等)。)
我准备将给出的数字随机相乘(a = 1
, b = 2
等),得到两个值之间的数字(a可以是1和25之间,等等,等等),然后将其转换成十六进制来缩小。
例如:假设你把单词ABC.它最终会变成类似这样的东西 (100)(3)(1545784)
首先是随机数,然后是单词长度,然后每个字母将被分配一个介于两个值之间的随机数,然后所有的东西将被转换为十六进制。append()
.
这很简单。数组从0开始,但是 len()
返回一个项目数,所以你需要减少这个数字。我建议在while循环中把它改为 i < enterlen
. 你应该考虑使用for循环。
使用 while i<enterlen:
而不是 while i<=enterlen:
因为 i 在你的例子中,你一直到4[第5个字符],而John只有4个字符,所以它给出的指数超出了范围。
你正试图访问enter[4],它不是该字符串值的有效索引。数组是基于0的索引,因此enter的唯一有效索引是0, 1, 2, 和3.为了解决这个问题,你必须调整你的while循环为i < enterlen.
为了解决你的问题,你必须调整你的while循环为i < enterlen。从而在i = 4时结束。
现在将正确打印[98, 4, 'j', 'o', 'h', 'n']。
正如你在其他答案中所看到的,你需要使用的是 <
而不是 <=
因为list使用的是 0
到 len(enter)-1
i = 0
while i < enterlen:
enterarray.append(enter[i])
i = i + 1
但相反 while
你可以用 for
-循环,然后你就不会有索引的问题。
for char in enter:
enterarray.append(char)
例如,将ASCII字符转换为数字
for char in enter:
number = ord(char) - ord('A') + 1
enterarray.append(number)
A = 1
, B = 2
, C = 3
,等等。a = 33
, b = 34
, c = 34
等。
如果你只想要小写字母,那么你应该使用 ord('a')
而不是 ord('A') and you should convert
进入to
lower()`以确保你没有大写的字符。
enter = enter.lower()
另外,如果你想只在数组中添加字符,那么你可以这样做。 如果你只想在数组中添加字符,那么你可以使用
enterarray = [randomnum, enterlen] + list(enter)