본문 바로가기
파이썬 코드업 기초 100제

파이썬 코드업 기초 8 - 논리연산

by chanfficial 2022. 1. 25.

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)이 입력될 때, 모두 참일 때에만 참을 출력하는 프로그램을 작성해보자.

이 경우의 수 때문에 4번 반복한다.

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. aNOT bAND 연산 해준다.

2. NOT abAND 연산 해준다.

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))

- 이것만 그나마 이해가 된다