Python 3.3列表索引超出范围ERROR

时间:2015-04-24 08:08:42

标签: python encryption

我的任务是使用7,3,19,5的列表加密随机消息。这是我执行此任务的代码:

def k():
    m=input ("Please enter a message: ")
    x=""
    w = [7,3,19,5]
    g=0
    for ch in m:
        en = chr(ord(ch)+ w[g])#encryption
        x = (x+en)#adding
        print(str(x))#output
        g=g+1
k()

我的输出是:

Please enter a message: hello world
o
oh
oh
ohq
Traceback (most recent call last):
   File "<pyshell#0>", line 1, in <module>
 k()
File "H:\t2test.py", line 7, in k
   en = chr(ord(ch)+ w[g])#encryption
IndexError: list index out of range

3 个答案:

答案 0 :(得分:1)

如果您了解模运算符%(除法余数),则无需修改列表。

您也不需要手动计算(这里有enumerate()),您应该使用更好的变量名称:

def encrypt():
    message = input("Please enter a message: ")
    encrypted = ""
    offsets = [7,3,19,5]
    lenoff = len(offsets)
    for index, char in enumerate(message):
        encrypted += chr(ord(char)+ offsets[index % lenoff]) #encryption
        print(encrypted) 

答案 1 :(得分:0)

字符串的长度是可变的,列表有固定的元素。所以修改你的列表。

修改您的列表w = [7,3,19,5]*len(m)

def k():
    m=input ("Please enter a message: ")
    x=""
    w = [7,3,19,5]*len(m)
    g=0
    for ch in m:

        en = chr(ord(ch)+ w[g])#encryption
        x = (x+en)#adding
        print(str(x))#output
        g=g+1
k()

输出:

Please enter a message: hello world
o
oh
oh
ohq
ohqv
ohqv#
ohqv#
ohqv#t
ohqv#ty
ohqv#tyo
ohqv#tyow

相反,您可以使用随机数字。

对于上述功能,您可以随机导入

w=[]
for i in range(len(m)):
    w.append(random.randrange(len(m)))

答案 2 :(得分:0)

当达到w的长度时重置g值也可以。

def k():
m=input("Please enter a message: ")
x=""
w = [7,3,19,5]
g=0
for ch in m:
    en = chr(ord(ch)+ w[g])#encryption
    x = (x+en)#adding
    print(str(x))#output
    g=g+1
    if (g==len(w)):
        g=0
k()