Muntee Hapenga
Muntee Hapenga

Reputation: 1

My caesar cipher does not output any encrypted message

#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

Answers (2)

Artjom B.
Artjom B.

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

Joran Beasley
Joran Beasley

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

Related Questions