53. 1(true, 참) 또는 0(false, 거짓) 이 입력되었을 때 반대로 출력하는 프로그램을 작성해보자.
**참고**
파이썬에서 비교/관계 연산(==, !=, >, <, >=, <=)이 수행될 때,
0은 거짓(false)으로 인식되고, 0이 아닌 모든 수는 참(true)으로 인식된다.
참 또는 거짓의 논리값을 역(반대)으로 바꾸기 위해서는
논리(logical)연산자 'not'를 사용할 수 있다.
이러한 논리연산을 NOT 연산이라고 부른다.
참, 거짓의 논리값(boolean value)인 불 값을 다루어주는 논리연산자는
'not', 'and', 'or'가 있다.
** 불 대수(boolean algebra)는 수학자 불이 만들어낸 것으로
참/거짓만 가지는 논리값과 그 연산을 다룬다.
Tip : 참 또는 거짓의 논리값을 역(반대)으로 바꾸기 위해서는 논리(logical)연산자 'not'를 사용할 수 있다.
1) 정답
boolean = int(input())
print( not boolean )
- 참 또는 거짓을 입력받아 반대로 출력하기 위해 논리값을 역으로 바꿔주는 논리 연산자 not을 사용하여 결과 값을 반대로 출력하게 했다.
2) 내가 쓴 답
a = int(input())
if a == 1:
print(not a)
elif a == 0:
print(not a)
- 저렇게 단순하게 해도 된다는걸 몰라서 이런 구구절절문이 탄생했다.. ^_^ 어쨌든 틀린건 아니니까요
54. 두 개의 참(1) 또는 거짓(0)이 입력될 때, 모두 참일 때에만 참을 출력하는 프로그램을 작성해보자.
Tip : 파이썬에서는 AND연산값이 참이면 뒤에 있는 값을 출력하게 된다.
ex) '앞' and '뒤' >> '뒤'
1) 정답
for _ in range(4):
a, b = map(int, input().split())
print( a and b )
- 두 개의 숫자 1 또는 0을 입력 받은 다음 and 연산자를 사용하여 두 값이 모두 1일 때만 1이 출력되도록 했다. 만약 0과 1이 아닌 12과 20이 입력돼도 둘 다 참이기 때문에 뒤에 있는 값인 20이 출력된다.
0을 제외한 모든 숫자나 문자는 참이라는 것을 잊지말기!
2) 내가 쓴 답
a, b = map(int, input().split())
if a == 1 and b == 1:
print(bool(1))
else:
print(bool(0))
- 문제를 잘못 이해한거 같다. 모두 참일 때만 참인 '값'을 출력하도록 하는건데 나는 bool로 변환해서 true, false를 출력하게 했다. (머쓱....)
55. 두 개의 참(1) 또는 거짓(0)이 입력될 때, 하나라도 참이면 참을 출력하는 프로그램을 작성해보자.
Tip : 파이썬에서는 OR연산값이 참이면 참인 값을 출력하게 된다.
- ex) '참' or 0 >> '참
- ex) 0 or True >> True
for i in range(4):
a, b = map(int, input().split())
print( a or b )
- 두 개의 숫자를 입력 받은 다음 or 연산자를 사용하여 하나라도 참이면 참을 출력하도록 했다.
56. 두 가지의 참(1) 또는 거짓(0)이 입력될 때, 참/거짓이 서로 다를 때에만 참을 출력하는 프로그램을 작성해보자.
Tip : 이러한 논리연산을 XOR(exclusive or, 배타적 논리합)연산이라고도 부른다. 이를 표현하기 위해서는 (a AND (NOT b)) OR ((NOT a) AND b)처럼 하면 된다.
for _ in range(4):
a, b = map(int, input().split())
print( (a and (not b)) or ((not a) and b) )
- (a AND (NOT b)) OR ((NOT a) AND b) :
1. a와 NOT b를 AND 연산 해준다.
2. NOT a와 b를 AND 연산 해준다.
3. 1과 2의 결과를 OR 연산 해준다.
너무 복잡함......어질어질하네
57. 두 개의 참(1) 또는 거짓(0)이 입력될 때, 참/거짓이 서로 같을 때에만 참이 계산되는 프로그램을 작성해보자.
Tip :
for _ in range(4):
a, b = map(int, input().split())
print( ((not a) and (not b)) or (a and b) )
- Tip의 이미지를 참고하여 not A 와 B를 and 연산하고 A와 B를 and 연산한 다음, or 연산을 한다.
1. (not a) and (not b) 연산
2. (a and b) 연산
3. 1과 2의 결과를 or 연산
58. 두 개의 참(1) 또는 거짓(0)이 입력될 때, 모두 거짓일 때에만 참이 계산되는 프로그램을 작성해보자.
Tip :
for _ in range(4):
a, b = map(int, input().split())
print(not(a or b))
- 이것만 그나마 이해가 된다
'파이썬 코드업 기초 100제' 카테고리의 다른 글
파이썬 코드업 기초 10 - 삼항연산 (0) | 2022.01.27 |
---|---|
파이썬 코드업 기초 9 - 비트단위 논리연산 (0) | 2022.01.26 |
파이썬 코드업 기초 7 - 비교연산 (0) | 2022.01.24 |
파이썬 코드업 기초 6 - 비트 시프트 연산 (0) | 2022.01.22 |
파이썬 코드업 기초 5 - 산술연산 (2) | 2022.01.21 |