# Programming Project 04  SOLUTION

Background A rotation cipher is one of the simplest, plain-text ciphers, known since at least the time of Julius Caesar. It takes in a plain-text string, and translates it into a new string based on a rotation of the alphabet being used. The basis is a “rotation”, a re-sequencing of an alphabet. Consider the following example. Consider the alphabet being a single string consisting of the lower case English letters as below (shown with each letter’s associated index):
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 0 1 2 3 4 5 6 7 8 9 1 0 1 1 1 2 1 3 1 4 1 5 1 6 1 7 1 8 1 9 2 0 2 1 2 2 2 3 2 4 2 5
then a rotation of 3 means that the first three letters of the alphabet are moved to the end of the sequence, while the other letters move up, as shown below. Notice that the movement is done one letter at a time.
d e f g h i j k l m n o p q r s t u v w x y z a b c
A cipher is created by using the rotated alphabet to replace each letter in the original string with its rotated equivalent letter. Using the example above, the word “this” is translated as follows: • the ‘t’ is found at index 19 in the alphabet. The letter in the rotated alphabet is ‘w’. • the ‘h’ is found at index 7, the rotated letter is ‘k’ • the ‘i’ is found at index 8, the rotated letter is ‘l’ • the ‘s’ is found at index 18, the rotated letter is ‘v’ Thus the string ‘this’ becomes the string ‘wklv’ using a rotation of 3.
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 plaintext 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 Handin to turn in the file proj04.py – this is your source code solution; be sure to include your section, the date, the project number and comments describing your code. Please be sure to use the specified file name, and save a copy of your proj04.py file to your H: drive as a backup.