Python : 예외 처리, 논리 연산자, 유클리드 호제법
Secure Coding
Secure Coding : 어떠한 기형 불량 입력에 대해서도 프로그램이 "비정상 종료" 되지 않도록 프로그래밍 하는 것.
- 프로그램 작성자는 사용자가 어떤 입력 값을 취할지 모른다
- 따라서 프로그래머는 Secure Coding 을 해야 한다.
- 어떻게?
- 상세한 요구사항 명세를 통해 규격에 맞는 입력을 구체화.
- 규격에 맞지 않는 입력 나머지 전체를 예외처리 해야 한다.
- try - except 문법을 사용하자.
try - except 문법과 예외 처리
- 예외 (Exception) 처리: 기대했던 것과 다른 흐름 발생 시 처리 동작을 설계하는 것.
- ex. 정수 입력을 기대, 정수 아닌 모든 입력 예외 처리.
- 파이썬에서의 예외 처리
- try - except 구조 활용
try: 실행할 코드 except: 예외가 발생했을 때 처리하는 코드
논리 연산자
- 논리 (Boolean) 자료형을 가진 피연산자 간 계산을 수행하는 연산자
- and, or, xor, not
논리연산자: and
- 두 개의 피연산자가 모두 True일 경우에만 True를 반환하고, 나머지 경우에는 모두 False를 반환
>> True and True True >> True and False False >> False and True False >> False and False False
논리연산자: or & xor (^)
- OR: 두 피연산자 중 하나만 True여도 True를 반환하고, 둘 다 False일 경우에만 False를 반환
>> True or True True >> True or False True >> False or True True >> False or False False
- XOR: 두 피연산자 중 하나만 True일 때 True 반환, 나머지는 False 반환
>> True^True False >> True^False True >> False^True True >> False^False False # 주의! XOR 이라는 키워드는 없으니 ^ 기호로 사용하자.
논리연산자: not
- 피연산자가 True일 때는 False를 반환하고, False일 때는 True를 반환
- 단항연산자 (Unary Operator): 1개의 피연산자만을 가짐
>> not True False >> not False True
유클리드 호제법 (Euclidean Algorithm)
🔥 유클리드 호제법 (Euclidean Algorithm) 🔥
- 두 수의 최대공약수를 구하는 알고리즘
- 2개의 자연수 a, b(a>b) 에 대해서 a를 b로 나눈 나머지를 r이라하면, a와 b의 최대공약수는 b와 r의 최대공약수와 같음
- 이 성질에 따라, b를 r로 나눈 나머지 r’를 구하고, 다시 r을 r’로 나눈 나머지를 구하는 과정을 반복하여 나머지가 0이 되었을 때 나누는 수가 a와 b의 최대공약수가 됨
유클리드 호제법 작동 방식
유클리드 호제법의 예
- 720과 186의 최대공약수 구하는 순서
- 720은 186으로 나누어 떨어지지 않기 때문에, 720을 186으로 나눈 나머지 162를 다음 단계에 전달
- 186은 162로 나누어 떨어지지 않기 때문에, 186을 162로 나눈 나머지 24를 다음 단계에 전달
- 162는 24로 나누어 떨어지지 않기 때문에, 162를 24로 나눈 나머지 18을 다음 단계에 전달
- 24는 18로 나누어 떨어지지 않기 때문에, 24를 18로 나눈 나머지 6을 다음 단계에 전달
- 18은 6으로 나누어 떨어짐
따라서, 최대 공약수는 6이 된다.
실습
두 정수 부호의 동일성 검사
- 프로그램 동작
- 0이 아닌 두 정수 a와 b를 입력 받는다.
- 두 정수의 부호가 동일한지 다른지의 여부를 출력한다.
- ex.
- a가 양수이고 b가 양수이면 “같다” 출력
- a가 양수이고 b가 음수이면 “다르다” 출력
>> a=1 b = -1 다르다 >> A = 20 B = 30 같다 >>
두 정수 부호의 동일성 검사 소스코드 (클릭)
소스코드 및 결과
두 자연수의 최대공약수 구하기 (1)
- 프로그램 동작
- 0이 아닌 두 정수 a와 b를 입력 받는다.
- 두 정수의 최대 공약수 출력(유클리드 호제법 사용 X)
>> 자연수 a 입력 : 12 자연수 b 입력 : 18 최대공약수 : 6 >> 자연수 a 입력 : 9 자연수 b 입력 : 15 최대공약수 : 3 >> 자연수 a 입력 : 6 자연수 b 입력 : 12 최대공약수 : 6 >>
두 자연수의 최대공약수 구하기 (1) 소스코드 (클릭)
소스코드 및 결과
두 자연수의 최대공약수 구하기 (2)
- 프로그램 동작
- 0이 아닌 두 정수 a와 b를 입력 받는다.
- 두 정수의 최대 공약수 출력(유클리드 호제법 사용)
>> 자연수 a 입력 : 12 자연수 b 입력 : 18 최대공약수 : 6 >> 자연수 a 입력 : 9 자연수 b 입력 : 15 최대공약수 : 3 >> 자연수 a 입력 : 6 자연수 b 입력 : 12 최대공약수 : 6 >>
두 자연수의 최대공약수 구하기 (2) 소스코드 (클릭)
소스코드 및 결과
세 자연수의 최대공약수 구하기
- 프로그램 동작
- 0이 아닌 두 정수 a, b, c를 입력 받는다.
- 세 정수의 최대 공약수 출력
>> 자연수 a 입력 : 12 자연수 b 입력 : 18 자연수 c 입력 : 24 최대공약수 : 6 >> 자연수 a 입력 : 9 자연수 b 입력 : 15 자연수 c 입력 : 7 최대공약수 : 1 >>
세 자연수의 최대공약수 구하기 소스코드 (클릭)
소스코드 및 결과 - 두 가지 정수의 최대 공약수와 나머지 한 정수와의 최대 공약수를 구하면 된다.
프로그래밍 실습
두 자연수의 최소 공배수 구하기
- 프로그램 동작
- 0이 아닌 두 정수 a와 b를 입력 받는다.
- 두 정수의 최소 공배수 출력 (최대공약수 사용 X)
>> 자연수 a 입력 : 12 자연수 b 입력 : 18 최소공배수 : 36 >> 자연수 a 입력 : 10 자연수 b 입력 : 10 최소공배수 : 10 >> 자연수 a 입력 : 10 자연수 b 입력 : 20 최소공배수 : 20 >>
두 자연수의 최소 공배수 구하기 소스코드 (클릭)
소스코드 및 결과
세 자연수의 최소 공배수 구하기
- 프로그램 동작
- 0이 아닌 두 정수 a와 b를 입력 받는다.
- 두 정수의 최소 공배수 출력 (최대공약수 사용 X)
>> 자연수 a 입력 : 12 자연수 b 입력 : 18 자연수 c 입력 : 24 최소공배수 : 72 >> 자연수 a 입력 : 10 자연수 b 입력 : 20 자연수 c 입력 : 40 최소공배수 : 40 >> 자연수 a 입력 : 2 자연수 b 입력 : 3 자연수 c 입력 : 4 최소공배수 : 12 >>
세 자연수의 최소 공배수 구하기 소스코드 (클릭)
소스코드 및 결과
최대한의 설명을 코드 블럭 내의 주석으로 달아 놓았습니다.
혹시 이해가 안가거나 추가적인 설명이 필요한 부분, 오류 등의 피드백은 언제든지 환영합니다!
긴 글 읽어주셔서 감사합니다. 포스팅을 마칩니다.
Task Lists
- Secure Coding
- try - except 문법과 예외 처리
- 논리 연산자
- 유클리드 호제법 (Euclidean Algorithm)
- 실습
- 프로그래밍 실습
Comments