$30
Lab 3: Shift Cipher
Follow ALL
instructions otherwise you will lose points. In this lab, you will be implementing two
functions. This will require the use
Background:
Shift Cipher: Encrypts messages by “shifting” the letter to the right a certain number of
characters.
The most renown shift cipher is Caesar Cipher which shifts everything by 13 letters 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
Original: 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
Shifted: N O P Q R S T U V W X Y Z A B C D E F G H I J K L M 13 14 15 16 17 18 19 20 21 22 23 24 25 0 1 2 3 4 5 6 7 8 9 10 11 12
To encode text, add 13 to the character’s value. Then, do mod 26 to accommodate overflow
(overflow means that the value is nit within our 0-25 character encoding..
For example, given the text “CECS”
1. C(2) + 13 = 15 mod 26 = 15 (P)
2. E(4) + 13 = 17 mod 26 = 17 (R)
3. S(18) + 13 = 31 mod 26 = 5 (F)
Thus CECS -> PRPF
To decrypt text, subtract 13 from the encrypted character. Then, do mod 26 to
accommodate overflow.
For example, given the text “RHAVPR”
1. R(17) – 13 = 4 mod 26 = 4 (E)
2. H(7) – 13 = -6 mod 26 = 20 (U)
3. A(0) – 13 = 13 mod 26 = 13 (N)
4. V(21) – 13 = 8 mod 26 = 8 (I)
5. P(15) – 13= 2 mod 26 = 2 (C)
Thus RHAVPR -> EUNICE
There are also general shift ciphers. These encrypt any letter by shifting the character right
by n characters instead of strictly 13 like in the Caesar Cipher.
To encrypt text, add n to character’s value. Then, do mod 26 to accommodate overflow
For example, given text “CECS” and n=15
1. C(2) + 15 = 17 mod 26 = 17 (R)
2. E(4) + 15 = 19 mod 26 = 19 (T)
3. S(18) + 15 = 33 mod 26 = 7 (H)
Thus CECS -> RTRH
To decrypt text, subtract n from character’s encoding. Then, do mod 26 to accommodate
overflow
For example, given text: “RTRH” and n=15 (decrypting what we just encrypted)
1. R(17) – 15 = 2 mod 26 = 2 (C)
2. T(19) – 15 = 4 mod 26 = 4 (E)
3. H (7) – 15 = -8 mod 26 = 18 (S)
Thus RTRH -> CECS
Instructions:
1. Take a close look at the shift.py file. There are two empty functions:
shift_cipher_encode(string,n) and shift_cipher_decode(string,n).
Read through both of their descriptions carefully. Remember, you will lose points if
you do not follow the instructions. We are using a grading script
2. Your job is to implement both of these functions so that it passes any test case.
There are some sample test cases provided for you, but these are not the only cases
that we will test. There will be 30 test cases in addition to the ones that you see.
3. Do NOT use a dictionary or list to encode the characters! Using a dictionary or list
will result in a zero!
4. If there are characters other than letters, do NOT try to encrypt these. These should
be left alone!
5. After completing these functions, comment out the test cases (or delete them) or
else the grading script will pick it up and mark your program as incorrect.
6. Convert your shift.py file to a .txt. Submit your shift.py file and your
.txt file on BeachBoard. Do NOT submit it in compressed folder.
7. Do not email us your code asking us to verify it. We will answer general questions,
but we will not debug your code over email.
Some helpful functions (click on function to go to reference link). Please note that you do
not have to use any of these. They may be useful though:
string_name.isalpha() Returns True if all characters in string are letters of the
alphabet. Otherwise, returns False
ord(character) Gets the ascii value of character
chr(num) Gets the character of ascii value num
string_name.isupper() Returns True if all characters in string are upper case.
Otherwise, returns False
string_name.islower() Returns True if all characters in string are lower case.
Otherwise, returns False
string_name.upper() Converts the string to all upper case and returns it
string_name.lower() Converts the string to all lower case and returns it
Ascii table for your reference
Ascii
encoding
ascii
Character
Ascii
encoding
ascii
Character
A 65 a 97
B 66 b 98
C 67 c 99
D 68 d 100
E 69 e 101
F 70 f 102
G 71 g 103
H 72 h 104
I 73 i 105
J 74 j 106
K 75 k 107
L 76 l 108
M 77 m 109
N 78 n 110
O 79 o 111
P 80 p 112
Q 81 q 113
R 82 r 114
S 83 s 115
T 84 t 116
U 85 u 117
V 86 v 118
W 87 w 119
X 88 x 120
Y 89 y 121
Z 90 z 122
Grading rubric
Points Requirement
5 Correct submission (2 files, not in any folder), did not use a dictionaryall or nothing
5 Passes the test cases listed in shift.py and followed instructions by
deleting/commenting the test cases in the file (all or nothing)
15 Passes the remaining 15test cases for shift_cipher_encode
15 Passes the remaining 15test cases for shift_cipher_decode