The best way to Resolve Caesar Cipher Helper in Python

0
10
Adv1


Adv2

The problem

Write a category that, when given a string, will return an uppercase string with every letter shifted ahead within the alphabet by nonetheless many spots the cipher was initialized to.

Instance:

c = CaesarCipher(5); # creates a CipherHelper with a shift of 5
c.decode('BFKKQJX') # returns 'WAFFLES'

If one thing within the string shouldn’t be within the alphabet (e.g. punctuation, areas), merely go away it as is.
The shift will at all times be within the vary of [1, 26].

The answer in Python code

Choice 1:

from string import maketrans

class CaesarCipher(object):
    def __init__(self, shift):
        self.alpha = "abcdefghijklmnopqrstuvwxyz".higher()
        self.newalpha = self.alpha[shift:] + self.alpha[:shift]

    def encode(self, str):
        t = maketrans(self.alpha, self.newalpha)
        return str.higher().translate(t)

    def decode(self, str):
        t = maketrans(self.newalpha, self.alpha)
        return str.higher().translate(t)

Choice 2:

class CaesarCipher(object):
    def __init__(self, shift):
        self.s=shift
        cross;

    def encode(self, str):
        return ''.be a part of(chr((ord(i)+self.s-ord('A'))%26+ord('A')) if i.isalpha() else i for i in str.higher())
        
    def decode(self, str):
        return ''.be a part of(chr((ord(i)-self.s+ord('A'))%26+ord('A')) if i.isalpha() else i for i in str.higher())

Choice 3:

class CaesarCipher(object):
    
    def __init__(self, shift):
        abc = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
        self.enc_dict = dict(zip(abc, abc[shift:] + abc[:shift]))
        self.dec_dict = dict(zip(abc[shift:] + abc[:shift], abc, ))
    
    def encode(self, str):
        return ''.be a part of( self.enc_dict.get(c, c) for c in str.higher() )
    
    def decode(self, str):
        return ''.be a part of( self.dec_dict.get(c, c) for c in str.higher() )

Take a look at instances to validate our answer

check.describe("Testing the CaesarCipher class");
check.it("Shift of 5");
    
c =  CaesarCipher(5);

check.assert_equals(c.encode('WAFFLES'), 'BFKKQJX');
check.assert_equals(c.decode('BFKKQJX'), 'WAFFLES');
check.assert_equals(c.encode("IT'S A SHIFT CIPHER!!"), "NY'X F XMNKY HNUMJW!!");
check.assert_equals(c.decode("NY'X F XMNKY HNUMJW!!"), "IT'S A SHIFT CIPHER!!");

check.it("Shift of 13");

c =  CaesarCipher(13);
check.assert_equals(c.encode('CNAPNXRF'), 'PANCAKES');
check.assert_equals(c.decode('PANCAKES'), 'CNAPNXRF');
check.assert_equals(c.encode('JAVASCRIPT'), 'WNINFPEVCG');
check.assert_equals(c.decode('WNINFPEVCG'), 'JAVASCRIPT');

from random import pattern
import string
for i in vary(0, 5):
    rs = ''.be a part of(pattern(string.punctuation + string.ascii_uppercase, 10));
    check.assert_equals(c.decode(c.encode(rs)), rs);

check.it("Shift of 26");
c = CaesarCipher(26);
    
for i in vary(0, 7):
    rs = ''.be a part of(pattern(string.punctuation + string.ascii_uppercase, 15));
    check.assert_equals(c.decode(rs), rs);
    check.assert_equals(c.encode(rs), rs);
Adv3