У меня проблемы с моей программой Ceasar Chiper.Python. Индекс строки вне диапазона. Ceasar Cipher
Это то, что я до сих пор:
def enchiper(s,n):
'''
This function takes a string(s) and an integer(n) and
shifts the elements of s around the alphabet
'''
Alpha1 = 'abcdefghijklmnopqrstuvwxyz'
Alpha2 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
if 1 == len(s):
if 'a' <= s[0] <= 'z':
spot1 = myIndex(s[0],Alpha1)
x = spot1 + n
if 26 < x:
y = x - 26
return Alpha1[y]
else:
return Alpha1[x]
elif 'A' <= s[0] <= 'Z':
spot1 = myIndex(s[0],Alpha2)
x = spot1 + n
if 26 < x:
y = x - 26
return Alpha2[y]
else:
return Alpha2[x]
else:
return s[0]
else:
if 'a' <= s[0] <= 'z':
spot1 = myIndex(s[0],Alpha1)
y = spot1 + n
if 26 < y:
x = y - 26
return Alpha1[x] + enchiper(s[1:],n)
else:
return Alpha1[y] + enchiper(s[1:],n)
elif 'A' <= s[0] <= 'Z':
spot1 = myIndex(s[0],Alpha2)
y = spot1 + n
if 26 < y:
x = y - 26
return Alpha2[x] + enchiper(s[1:],n)
else:
return Alpha2[y] + enchiper(s[1:],n)
else:
return s[0] + enchiper(s[1:],n)
def myIndex(element, sequence):
''' returns the number of times that an element appears in a list
returns a random number from 0 to length of sequence if the element
does not appear in the list
Input: element is either an integer or string
sequence is a list of strings and integers
'''
if 0 == len(sequence):
return 0
elif sequence[0] == element:
return 0
else:
return 1 + myIndex(element, sequence[1:])
Программа работает довольно хорошо, несколько раз Струны Вхожу дать мне «индекс строки из диапазона». Например:
>>> enchiper('hello',15)
Traceback (most recent call last):
File "<pyshell#48>", line 1, in <module>
enchiper('hello',15)
File "/Users/spencerzanardi/Documents/hw3pr2.py", line 41, in enchiper
return Alpha1[y] + enchiper(s[1:],n)
File "/Users/spencerzanardi/Documents/hw3pr2.py", line 41, in enchiper
return Alpha1[y] + enchiper(s[1:],n)
File "/Users/spencerzanardi/Documents/hw3pr2.py", line 41, in enchiper
return Alpha1[y] + enchiper(s[1:],n)
IndexError: string index out of range
Кроме того, у меня есть использование для рекурсии в моей программе. Я не разрешается использовать циклы
положить 'попробовать: ... кроме IndexError: ... 'вокруг строки 41, а затем вы можете распечатать значения Alpha1, s, y и n. – Harvey