일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
26 | 27 | 28 | 29 | 30 | 31 |
- 프로그램
- 파싱
- phython
- Game
- Pygame
- API플랫폼
- 웹크롤링
- twilio
- 부트스트랩
- 최저가
- 파이썬
- 쉬티
- 계산기
- udemy
- API
- 유데미
- Python
- 오류
- 프로젝트
- Sheety
- SMTP
- ndarray
- Endpoint
- HTTP
- 웹페이지
- 게임
- Tequila
- HTML
- 상태코드
- class
- Today
- Total
데이터 분석가
파이썬(Python) 카이사르 암호(caesar cipher) 프로젝트 본문
안녕하세요 !
이번에는 전 시간보다 더 재미 있는 프로그램을 가져왔습니다 !
일명 카이사르 암호라고 하는 암호 해독 프로그램입니다
alphabet = ['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', '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']
먼저, 알파벳 리스트를 만듭니다 ! 여기서 알파벳 26자에서 복붙하여 52자로 중복해 줍시다 !
이렇게 하면 암호를 해독하기 조금 더 어려워졌군요 ㅎㅎ
def caesar(start_text, shift_amount, cipher_direction): #def 함수 선언 !
end_text = "" #
if cipher_direction == "decode": #만약 카이사르 암호 '해독'일 경우
shift_amount *= -1 #encode는 alphabet 순서대로 인덱싱, decode는 반대로 -1 인덱싱
for char in start_text: #char는 문자(character)의 줄임말이다
if char in alphabet: #알파벳 리스트에서 임의변수 char(문자) 순서
position = alphabet.index(char) #알파벳 리스트에 index 함수 이용해 몇번째인지 찾기
new_position = position + shift_amount #몇번째인지 찾고 변환할 숫자를 더한다
end_text += alphabet[new_position] #변환할 숫자를 end_txt = ""에 문자로 넣는다
else:
end_text += char
print(f"Here's the {cipher_direction}d result: {end_text}") #결과를 보여준다.
먼저, def 함수 선언으로 참고 변수 start_text, shift_amount, cipher_direction을 설정하고
위의 설명대로 암호화일 경우 알파벳 인덱싱을 인덱싱, 해독일 경우 -1로 인덱싱
**char는 character은 문자의 줄임말로 그냥 임의 변수이다
encode일 경우 for char in start_text 실행되어 임의변수 char를 index 함수를 이용해 숫자로 변환
alphabet 리스트를 index 함수로 나온 몇번째 인지 나온 숫자 + 변환할 숫자를 인덱싱한다.
from art import logo #import로 로고를 불러온다
print(logo)
앞에 있는 카이사르 로고 불러오기
should_end = False #while not을 쓰기 위해 should_end = False 기본값 설정
while not should_end: #while not은 should_end = True일 때 중단.
direction = input("Type 'encode' to encrypt, type 'decode' to decrypt:\n") #encode or decode
text = input("Type your message:\n").lower() #임의의 문자를 소문자로 받는다
shift = int(input("Type the shift number:\n")) #변환 숫자를 정수로 받는다
shift = shift % 26 #알파벳은 26자이므로
#ex) 260 입력시 % 26 = 0 이므로 그대로 입력됨
caesar(start_text=text, shift_amount=shift, cipher_direction=direction)
#def 선언문에 start_text, shift_amount, cipher_direction을 넣는다)
restart = input("Type 'yes' if you want to go again. Otherwise type 'no'.\n") #다시시작 ?아니오
if restart == "no":
should_end = True #아니오 선택 시 종료
print("Goodbye")
이번 코드에서는 딱히 어려울 내용은 없지만, while not 문은 True일 때 중단이라는 것을 주의하자
그 외는 def 선언문에 넣을 caesar(start_text=text, shift_amount=shift,cipher_direction=direction)으로 input 함수 값을
def 선언문에 넣어 실행한다.
'yes'일 경우 반복되며, 'no'일 경우 종료된다.
조금 복잡해 보일 수 있는 식이지만 사실 단순히 인덱싱을 하여 반복한 것이다.
다만 이중 반복문으로 인해 순서가 헷깔릴 수 있는데, 이는 반복하여 공부해야 할 우리들의 숙제인 것 같다
봐주셔서 감사합니다 !
한번 연습해봅시다 !
'파이썬(python) 프로젝트 모음' 카테고리의 다른 글
파이썬(Python) 경매(bidding) 프로젝트 (0) | 2023.03.21 |
---|---|
파이썬(Python) 딕셔너리(dictionary) 채점프로그램, 목록 사전 (0) | 2023.03.21 |
파이썬(Python) 소수(Prime_number) 프로젝트 (0) | 2023.03.14 |
파이썬(Python) 프로젝트(행맨 게임) (0) | 2023.03.06 |
파이썬(Python) 프로젝트 패스워드(Password)생성 프로그램 (0) | 2023.03.02 |