8. 기초-논리연산
- 1(true, 참) 또는 0(false, 거짓) 이 입력되었을 때 반대로 출력하는 프로그램을 작성해보자.
내 풀이)rev = bool(input()) print(not rev)
강의 풀이)
boolean = int(input()) print( not boolean )
어차피 1, 0이 입력된다 했으므로 불리언형식으로 바꿀 필요가 없었다.
**참고** 파이썬에서 비교/관계 연산(==, !=, >, <, >=, <=)이 수행될 때, 0은 거짓(false)으로 인식되고, 0이 아닌 모든 수는 참(true)으로 인식된다. 참 또는 거짓의 논리값을 역(반대)으로 바꾸기 위해서는 논리(logical)연산자 'not'를 사용할 수 있다. 이러한 논리연산을 NOT 연산이라고 부른다. 참, 거짓의 논리값(boolean value)인 불 값을 다루어주는 논리연산자는 'not', 'and', 'or'가 있다. ** 불 대수(boolean algebra)는 수학자 불이 만들어낸 것으로 참/거짓만 가지는 논리값과 그 연산을 다룬다.
- 두 개의 참(1) 또는 거짓(0)이 입력될 때, 모두 참일 때에만 참을 출력하는 프로그램을 작성해보자.
내 풀이)a, b = map(bool, input().split()) if a == True and b == True: print('True')
강의 풀이)
a, b = map(int, input().split()) print( a and b )
파이썬에서는 AND연산값이 참이면 뒤에 있는 값을 출력하게 된다.
ex) 0 and 0 = 0 1 and 0 = 0 0 and 1 = 0 1 and 1 = 1
- 두 개의 참(1) 또는 거짓(0)이 입력될 때, 하나라도 참이면 참을 출력하는 프로그램을 작성해보자.
내 풀이)a, b = map(int, input().split()) print(a or b)
강의 풀이)
a, b = map(int, input().split()) print(a or b)
파이썬에서는 OR연산값이 참이면 참인 값을 출력하게 된다.
ex) '참' or 0 >> '참
ex) 0 or True >> True
- [우리밋이 알려주는 Bonus 문제 (1)]
1개의 정수형 입력이 들어오면 논리 연산을 이용하여 '홀수'와 '짝수'를 판별하여라
Tip::
입력이 2로 나눠지면 짝수이고, 그렇지 않으면 홀수임을 이용한다.
파이썬에서의 AND와 OR의 특징을 이용한다. => 파이썬에서는 이러한 연산을 "삼항 연산"으로 정의한다.(삼항연산은 Chapter 10에서 다룬다)
내 풀이)a = int(input()) if a % 2 and True == True: print('홀수') else: print('짝수')
강의 풀이)
number = int(input()) print( number%2 and '홀수' or '짝수' )
내 풀이가 틀린건 아니지만 훨씬 간단하고 쉽게 작동되는 코드 구현도 익히자.
- 두 가지의 참(1) 또는 거짓(0)이 입력될 때, 참/거짓이 서로 다를 때에만 참을 출력하는 프로그램을 작성해보자.
내 풀이)a, b = map(int, input().split()) print(not ((a and 1) and (b and 1)))
강의 풀이)
a, b = map(int, input().split()) print( (a and (not b)) or ((not a) and b) )
내 풀이에서는 두 값 모두 0(False)일 때에는 True가 나와 완벽히 구현하지 못했다.
이러한 논리연산을 XOR(exclusive or, 배타적 논리합)연산이라고도 부른다. 이를 표현하기 위해서는 (a AND (NOT b)) OR ((NOT a) AND b)처럼 하면 된다.
- 두 개의 참(1) 또는 거짓(0)이 입력될 때, 참/거짓이 서로 같을 때에만 참이 계산되는 프로그램을 작성해보자.
내 풀이)a, b = map(int, input().split()) print((1 and a) and (1 and b))
강의 풀이)
a, b = map(int, input().split()) print( ((not a) and (not b)) or (a and b) )
- 두 개의 참(1) 또는 거짓(0)이 입력될 때, 모두 거짓일 때에만 참이 계산되는 프로그램을 작성해보자.
내 풀이)a, b = map(int, input().split()) print((not a) and (not b))
강의 풀이)
a, b = map(int, input().split()) print( not(a or b) )
두 풀이다 같은 의미이다.