我知道它的存在但是。。。索引器错误:列表索引超出范围

2024-06-13 12:18:11 发布

您现在位置:Python中文网/ 问答频道 /正文

我想逐个比较字符串的长度thisline。 但是,我得到了超出范围错误。是因为Index,它属于-1或#$½$吗

def vigsquare(printable=False):
    '''
    Returns a string like a vigenere square,
    printable joins each row with a newline so it's literally square
    printable=False (defaul) joins without newlines for easier 
    searching by row and column index
    '''
    alpha = string.ascii_uppercase
    rotater = collections.deque(alpha)
    vigsquare_list = []
    for i in range(26):
        vigsquare_list.append(''.join(rotater))
        rotater.rotate(-1)
    if printable:
        return '\n'.join(vigsquare_list) 
    else:
        return ''.join(vigsquare_list)

def v(row, column):
    ''' 
    Return a character from a vigenere square by 
    row and column letter.
    vigenere('L', 'G') returns 'R'
    '''
    alpha = string.ascii_uppercase
    rowindex = alpha.find(row)
    columnindex = alpha.find(column)
    return vigsquare()[rowindex*26 + columnindex]


p = "LEMON"
Kasiski = open("c:\\HobbitStory.txt","r")

lines = Kasiski.readlines()
for i in lines:
    thisline = i.split()
    Index = len(thisline)
    while (Index>=0):
        print(v(thisline[Index],p[Index]))
        Index -= 1

Tags: alphaforstringindexreturncolumnlistrow
2条回答

别忘了你的进口:

import string
import collections

我以前在哪里见过这个代码。。。:)

您将Index设置为行的长度;但是索引将转到len() - 1,因为Python使用基于0的索引。在

减去1:

thisline = i.split()
Index = len(thisline) - 1
while Index >= 0:
    print(v(thisline[Index], p[Index]))
    Index -= 1

如果thisline中有5个以上的元素,这将仍然抛出一个IndexError,因为p只有5个字符。在

如果使用zip()reversed()for循环,则会更容易:

^{pr2}$

现在保证不会遇到索引问题。在

相关问题 更多 >