Проблема в том, что когда вы добавляете shift_number
к буквенному индексу, он может вырасти больше 25. Тогда вы должны применить модуль по модулю.
Аналогичным образом, вычитая значение, вы можете перейти в отрицательное значение.В этом случае это безопасно, так как Python допускает отрицательную индексацию.Однако вы должны знать, что вы создаете там отрицательный индекс.
Я также исправил некоторые другие проблемы в вашем коде:
alphabet = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m",
"n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"]
if __name__ == '__main__':
print()
# you should use snake_case for local variables in Python
original_message = input("Enter a message: ") # user input for message to be encrypted
ciphered_message = ''
shift_number = int(input("Enter a number to shift by (0-25): ")) # user input for value to shift by
# for loop to encrypt message using a ciphered alphabet
for letter in original_message.lower(): # call lower() once for the whole string
if letter.isalpha():
shift = alphabet.index(letter) + shift_number
# Add modulo to keep shift in 0..25 range
shift = shift % len(alphabet)
new_letter = alphabet[shift]
ciphered_message += new_letter
elif letter in ' !.,;:-': # the condition was incorrect
ciphered_message += letter
print("Encrypting message....")
print("\tEncrypted message: " + ciphered_message)
# for loop to decrypt the message into its orginal form
deciphered_message = ''
for letter in ciphered_message.lower():
if letter.isalpha(): # checks to make sure the message contains alphabets
shift = alphabet.index(letter) - shift_number
new_letter = alphabet[shift]
deciphered_message += new_letter
elif letter in ' !.,;:-': # makes sure spaces and punctuation is not affected in the encryption
deciphered_message += letter
print("Decrypting message....")
print("\tDecrypted message: " + deciphered_message)
print("\tOriginal message: " + original_message)