繁体   English   中英

我的代码出现超出范围错误,请参阅下面的详细信息

[英]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 = 1b = 2c = 3等)。

我将随机乘以给定的数字( a = 1b = 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 使用从0len(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 = 3a = 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM