https://school.programmers.co.kr/learn/courses/30/lessons/12926
연습문제
def solution(s, n):
    U = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
    L = "abcdefghijklmnopqrstuvwxyz"
    answer  = ''
    for i in s:
        if i in U:
            answer += U[(U.index(i) +n) % len(U)]
        elif i in L:
            answer += L[(L.index(i) +n) % len(L)]
        else:
            answer += ' '
    return answer
def caesar(s, n):
    s = list(s)
    for i in range(len(s)):
        if s[i].isupper():
            s[i]=chr((ord(s[i])-ord('A')+ n)%26+ord('A'))
        elif s[i].islower():
            s[i]=chr((ord(s[i])-ord('a')+ n)%26+ord('a'))
    return "".join(s)
ord()와 chr()를 이용했다.
나는 몰랐음
ord(): 아스키코드 값을 정수형으로 변환
chr(): 정수형 값을 아스키코드 값으로 변환
아래 예시
print(ord('a'), ord('b'))
print(chr(97), chr(98))
97 98
a b