[英]I am getting out of range error on code, see details below
代码:
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()
我的数组也没有填满。
这很简单。 Arrays 从 0 开始,但len()
返回项目数,因此您需要减少此数字。 我建议在 while 循环中将其更改为i < enterlen
。 您应该考虑使用 for 循环。
使用while i<enterlen:
而不是while i<=enterlen:
因为在你的情况下i直到 4 [第 5 个字符] 而 John 只有 4 个字符,所以它给出的索引超出范围
您正在尝试访问不是该字符串值的有效索引的 enter[4]。 Arrays 是基于 0 的索引,因此输入的唯一有效索引是 0、1、2 和 3。
要解决您的问题,您必须将 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
-loop,但索引没有问题。
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
enter 转换to
lower()` 以确保你没有大写字符。
enter = enter.lower()
顺便说一句:如果您只想将字符添加到数组中,那么您可以这样做
enterarray = [randomnum, enterlen] + list(enter)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.