# En utilisant les ordinaux

def cesar(text : str, shift : int) -> str :
    resp = ""
    for c in text:
        resp += chr(ord('a') + ((ord(c) - ord('a')) + shift) % 26)
    return resp
    
def vigenere(text : str, key : str):
    resp = ""
    for i,c in enumerate(text):
        resp += cesar(c , ord(key[i % len(key)]) - ord('a'))
    return resp

print(vigenere('abc', 'key'))

# en stoquant l'alphabet dans une chaine de caractères

alphabet = "abcdefghijklmnopqrstuvwxyz"

def cesar_2(text : str, shift : int) -> str :
    resp = ""
    for c in text:
        resp += alphabet[(alphabet.index(c) + shift)%26]
    return resp

def vigenere_2(text : str, key : str):
    resp = ""
    for i,c in enumerate(text):
        resp += cesar(c , alphabet.index(key[i % len(key)]))
    return resp
    
print(vigenere_2('abc', 'key'))