origAlpha = string.ascii_lowercase string.ascii_uppercase string.digits string.punctuation ''
shift = int(input("what shift do you want to use to decode? "))
shiftAlpha = origAlpha[shift : ] origAlpha[ : shift]
messageToDecode = 'k@nkmg@rtqitcookpi'
decodedMessage = ""
count = 0
while count < len(messageToDecode):
nextLetter = messageToDecode[count]
if(nextLetter=='@'):
decodedMessage = ' '
elif nextLetter.isalpha():
index = shiftAlpha.index(nextLetter)
nextLetter = origAlpha[index]
decodedMessage = nextLetter
count = 1
im trying to decode the @ into whitespaces but its not working and cant seem to figure out the error can someone help- shift is 2 - i get this answer 'i@like@programming' when i want it 'i like pogramming'
CodePudding user response:
Note that you're including digits and punctuation in your origAlpha and shiftAlpha, even though you're checking for nextLetter.isalpha(), and digits and punctuation aren't alphabetic characters. That said, you unconditionally add nextLetter to decodedMessage. To make sure no @ characters get added, you can do something like this:
nextLetter = messageToDecode[count]
if nextLetter == '@':
nextLetter = ' '
elif nextLetter.isalpha():
index = shiftAlpha.index(nextLetter)
nextLetter = origAlpha[index]
decodedMessage = nextLetter
Bonus:
Instead of using origAlpha and shiftAlpha to find a string in linear time, consider using a dictionary, and instead of using a while loop, consider using a for loop. You can get something like this:
origAlpha = string.ascii_lowercase string.ascii_uppercase string.digits string.punctuation
shift = int(input("what shift do you want to use to decode? "))
shiftAlpha = origAlpha[shift:] origAlpha[:shift]
mapping_characters = dict(zip(shiftAlpha, origAlpha))
mapping_characters['@'] = ' '
message_to_decode = 'k@nkmg@rtqitcookpi'
decoded_message = ""
for letter in message_to_decode:
decoded_message = mapping_characters.get(letter, letter)
CodePudding user response:
I might be missing something but can you just use:
message = 'k@nkmg@rtqitcookpi'
decoded = message.replace('@', ' ')
