Project Description / Specification
1) The program should prompt the user for one of three commands:
a)‘e’ to encode a string
b)‘d’ to decode a string
c)‘q’ to quit
Any other command should raise an error and reprompt.
2) If the command is encode, then the program prompts for a string to encode and a rotation
integer in the range of 1-25. The program then returns the encoded string.
a) Important, the program should not encode any letter that is not in the lower case alphabet. Those letters should simply be passed through to the encoded string
3) If the command is decode, then the program should prompt for a string to decode and a plain-text word that appears in the text (decoded string). The output should be the rotation needed to decode the string and the decoded string (text).
a) If the program receives one word that belongs in the decoded string, then the program searches for a rotation that finds that word in the decoded string. That is the proper rotation. Finding that rotation is the goal of the program.
b) If no rotation is found, then the program should indicate this fact.
4) If the command is quit, then the program ends and prints a nice exit message.
Deliverables
You must use turn in the file proj01.py – this is your source code solution; be sure to include your names, the project number and comments describing your code.
Notes and Hints:
You should start with this program, as with all programs, by breaking the program down into parts.
Here is some of that breakdown to help you
- Your program should continuously prompt for a command. Can you write a loop that prompts for one of the three commands ‘d’, ‘e’ or ‘q’ and reports an error if it is not one of those commands?
- A rotation of an alphabet. Start with a string that consists of the letters a-z in a single string. How can you create a new string of the same length that has a particular rotation? Think of the string slicing operators. What do you need to do to the original string to create a new string of the indicated rotation? What pieces can you concatenate together to make the rotated alphabet?
- Given two strings, one the lower-case alphabet and one a rotated alphabet, how can you encode a given string? You need to go through each letter of the string to encode, find it in the regular alphabet, remember its location/index in that alphabet, then find the letter in the rotated alphabet at the same index. The python method indexis helpful here. It indicates the location of a letter. Thus ‘abcdef’.index(‘c’) should return the value 2, the index of the letter ‘c’. ‘abcdef’.index(‘bcd’) returns 1, where the beginning of the sequence ‘bcd’ occurs. ‘xyz’.index(‘c’) returns - 1, as ‘c’ does not occur in the string.
- When encoding a string, you should check to see if the letter from the original string is in the alphabet. You may use the in operator. ‘a’ in ‘abcde’ returns True. ‘.’ in ‘abcde’ returns False.
- Decoding is probably the most complicated, best addressed last. You are given a string to decode and a word that occurs in the string. For example, the string ‘this is a test’, when encoded with a rotation of 3, becomes ‘wklv lvd whvw’. When decoding, you provide the encoded string and the word ‘test’.
Part 1, can you undo the encoding process if you knowthe rotation? Here, we find the letter in the rotated alphabet and decode it to the letter in the normal alphabet (the opposite for what we did for encoding).
Part 2, you need to perform Part 1 above on rotations of 1 to 25. If the decoded string contains (remember the in operator) the target string provided (‘test’), this must be the correct decoding. Remember the rotation and output the rotation and the decoded string.
1. If you go through 1-25 rotations and the target string is not found, then there is no decoding of the string possible. Report that.