Python decrypter. IndexError: string index out of range
Python decrypter. IndexError: string index out of range
我一直在学校学习 python,我决定完成一项制作解密器的任务,但不是输入消息更改的数量,它会执行每一个并寻找常用词并选择最有可能的解密。如果这不是您想要的,那么他们可以查看每一个。但是,我在获取每个金额的解密代码时遇到了问题。这是代码的一部分奇数 return 之后的错误 returned:IndexError: string index out of range。我不明白为什么它不起作用。这是我知道的唯一编程语言,所以它可能很明显,但我只是不明白。我一直无法在网上找到答案,所以如果有人找到解决方案,我将不胜感激。提前致谢。
import sys
import time
from time import sleep as s
import random
import collections
LETTERS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ'
LETTERS = LETTERS.lower()
global c1, message
c1=int(0)
message = input("Enter the thing you want to decrypt. ")
def decrypt():
global c1, LETTERS, message
decrypted = ''
for counter in range(1,27):
for chars in message:
if chars in LETTERS:
c1 = int(c1+counter)
num = LETTERS.find(chars)
num -= c1
decrypted += LETTERS[num]
s(1)
print(decrypted)
decrypt()
完整错误:
Enter the thing you want to decrypt. ij
hh
hhed
hhedzx
hhedzxsp
hhedzxspjf
hhedzxspjfyt
hhedzxspjfytlf
Traceback (most recent call last):
File "C:\Users\TomHu\Documents\Documents\Tom\School\Homework\Year 8\Computing\Python\Encrypter.py", line 30, in <module>
decrypt()
File "C:\Users\TomHu\Documents\Documents\Tom\School\Homework\Year 8\Computing\Python\Encrypter.py", line 25, in decrypt
decrypted += LETTERS[num]
IndexError: string index out of range
在您的示例中,LETTERS 的长度为 52。
可以与 LETTERS (num) 一起使用的索引必须介于 -52 和 51 之间。但是,对于您的示例,num 在错误之前等于 -56。
在decrypted += LETTERS[num]
前加上print(num)
即可看到。
如果你想避免这个问题,你可以做一个 modulo len(LETTERS):
import sys
import time
from time import sleep as s
import random
import collections
LETTERS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ'
LETTERS = LETTERS.lower()
length=len(LETTERS)
global c1, message
c1=int(0)
message = input("Enter the thing you want to decrypt. ")
def decrypt():
global c1, LETTERS, message
decrypted = ''
for counter in range(1,27):
for chars in message:
if chars in LETTERS:
c1 = int(c1+counter)
num = LETTERS.find(chars)
num -= c1
num=num%length
decrypted += LETTERS[num]
s(1)
print(decrypted)
decrypt()
通过此修改,您一定会始终提供有效的索引。之后您可以自由修改算法以获得您期望的输出。
我一直在学校学习 python,我决定完成一项制作解密器的任务,但不是输入消息更改的数量,它会执行每一个并寻找常用词并选择最有可能的解密。如果这不是您想要的,那么他们可以查看每一个。但是,我在获取每个金额的解密代码时遇到了问题。这是代码的一部分奇数 return 之后的错误 returned:IndexError: string index out of range。我不明白为什么它不起作用。这是我知道的唯一编程语言,所以它可能很明显,但我只是不明白。我一直无法在网上找到答案,所以如果有人找到解决方案,我将不胜感激。提前致谢。
import sys
import time
from time import sleep as s
import random
import collections
LETTERS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ'
LETTERS = LETTERS.lower()
global c1, message
c1=int(0)
message = input("Enter the thing you want to decrypt. ")
def decrypt():
global c1, LETTERS, message
decrypted = ''
for counter in range(1,27):
for chars in message:
if chars in LETTERS:
c1 = int(c1+counter)
num = LETTERS.find(chars)
num -= c1
decrypted += LETTERS[num]
s(1)
print(decrypted)
decrypt()
完整错误:
Enter the thing you want to decrypt. ij
hh
hhed
hhedzx
hhedzxsp
hhedzxspjf
hhedzxspjfyt
hhedzxspjfytlf
Traceback (most recent call last):
File "C:\Users\TomHu\Documents\Documents\Tom\School\Homework\Year 8\Computing\Python\Encrypter.py", line 30, in <module>
decrypt()
File "C:\Users\TomHu\Documents\Documents\Tom\School\Homework\Year 8\Computing\Python\Encrypter.py", line 25, in decrypt
decrypted += LETTERS[num]
IndexError: string index out of range
在您的示例中,LETTERS 的长度为 52。
可以与 LETTERS (num) 一起使用的索引必须介于 -52 和 51 之间。但是,对于您的示例,num 在错误之前等于 -56。
在decrypted += LETTERS[num]
前加上print(num)
即可看到。
如果你想避免这个问题,你可以做一个 modulo len(LETTERS):
import sys
import time
from time import sleep as s
import random
import collections
LETTERS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ'
LETTERS = LETTERS.lower()
length=len(LETTERS)
global c1, message
c1=int(0)
message = input("Enter the thing you want to decrypt. ")
def decrypt():
global c1, LETTERS, message
decrypted = ''
for counter in range(1,27):
for chars in message:
if chars in LETTERS:
c1 = int(c1+counter)
num = LETTERS.find(chars)
num -= c1
num=num%length
decrypted += LETTERS[num]
s(1)
print(decrypted)
decrypt()
通过此修改,您一定会始终提供有效的索引。之后您可以自由修改算法以获得您期望的输出。