我想逐个比较字符串的长度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
别忘了你的进口:
我以前在哪里见过这个代码。。。:)
您将
Index
设置为行的长度;但是索引将转到len() - 1
,因为Python使用基于0的索引。在减去1:
如果
thisline
中有5个以上的元素,这将仍然抛出一个IndexError
,因为p
只有5个字符。在如果使用
^{pr2}$zip()
、reversed()
和for
循环,则会更容易:现在保证不会遇到索引问题。在
相关问题 更多 >
编程相关推荐