Reputation: 1
#Caesar Cipher Muntanga
FinalMessage=""
Mode=""
MessageNumber=""
while Mode!="encrypt" and Mode!="decrypt":
Mode = input("Do you wish to encrypt or decrypt a message?")
Mode = Mode.lower()
Message = input("Please enter the message you wish to encrypt:")
Message = Message.upper()
Key = input("Please enter your key:")
Key = int(Key)
if Key < 1:
print("This program does not encrypt backwards. Please restart and enter a key between 1-25")
raise SystemExit
elif Key > 25:
print("You are looping round the alphabet. Please restar the program and enter a key between 1-25")
raise SystemExit
if Mode == "encrypt":
for i in range(0, len(Message)):
if MessageNumber.isalpha():
if MessageNumber.isupper():
MessageNumber = ord(Message[i])
MessageNumber = MessageNumber + Key
if MessageNumber > 90:
MessageNumber = MessageNumber - 26
FinalMessage = FinalMessage + chr(MessageNumber)
elif MessageNumber.islower():
MessageNumber = ord(Message[i])
MessageNumber = MessageNumber + Key
if MessageNumber > 122:
MessageNumber = MessageNumber - 26
FinalMessage = FinalMessage + chr(MessageNumber)
print("Your encrypted message is:")
print(FinalMessage)
raise SystemExit
My cipher outputs blank message (check image) Image of failed test
Upvotes: 0
Views: 78
Reputation: 61892
You're using MessageNumber
before it has any meaningful value. You initialized MessageNumber
with an empty string at the beginning of the script, but since this variable has to be set for each character of the input string, you don't need to initialize it "globally".
When you remove the initialization, you will quickly see a meaningful error saying that MessageNumber
is NoneType in the line if MessageNumber.isalpha():
.
Additionally, you can deduplicate some lines by moving those calls one level higher:
if Mode == "encrypt":
for i in range(0, len(Message)):
MessageChar = Message[i]
MessageNumber = ord(MessageChar)
if MessageChar.isalpha():
MessageNumber = MessageNumber + Key
if MessageChar.isupper():
if MessageNumber > 90:
MessageNumber = MessageNumber - 26
elif MessageChar.islower():
if MessageNumber > 122:
MessageNumber = MessageNumber - 26
FinalMessage = FinalMessage + chr(MessageNumber)
Upvotes: 1
Reputation: 113950
since someone else pointed out your problem i will instead show you an easier way to do ceasar cipher shifts
from string import ascii_lowercase as lc,ascii_uppercase as uc,maketrans as trans
def encode(m,rotation_amount):
alphabet = lc+uc
rotated_alphabet = (lc[rotation_amount:]+lc[:rotation_amount]
+uc[rotation_amount:]+uc[:rotation_amount])
return m.translate(trans(alphabet,rotated_alphabet))
print encode("how are YoU")
Upvotes: 1