| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
- MySQL
- 서브쿼리
- count
- alias
- IN
- is null
- 해외결제
- where
- 투자자산운용사
- SQL
- SubQuery
- 금융IT
- ifnull
- having
- GROUP BY
- LIMIT
- 트래블테크
- order by
- date_format
- inner join
- Python
- IELTS
- MAX
- Round
- programmers
- 날짜 포맷
- 도서추천
- IS NOT NULL
- 금융 플랫폼
- join
- Today
- Total
Every Step Matters
[python] &와 and의 차이 본문
<문제상황>
백준 2480번 문제를 풀다가 &와 and의 사용에 따라 결과가 달라지는 상황을 발견했다.
a, b, c = input().split() # 2 3 4 입력
a = int(a)
b = int(b)
c = int(c)
print(a!=b & a!=c) # False
print(a!=b and a!=c) # True
입력칸에 2 3 4 시에 첫 번째 출력결과는 False가, 두 번째 출력결과는 True가 나왔다. 나는 둘 다 True가 나올 줄 알았는데...
구글링해 보니 &와 and는 엄연히 다른 연산자. and가 내가 사용하려 했던 의도의 논리연산자이고, and 앞뒤의 조건 두 개가 모두 참인 경우 Boolean값인 True를, 그 외의 경우는 False를 반환한다. 반면 &의 경우 연산자는 파이썬에서 비트 연산자로 사용되며, 두 정수의 각 비트를 비교하여 둘 다 1인 경우에만 1을 반환한다고 한다.
& 연산자에 대해 조금 더 자세히 알아보자.
<비트 연산 예시>
a = 5 # 5는 이진수로 0101
b = 3 # 3은 이진수로 0011
result = a & b # 0101 & 0011 = 0001
print(result) # 출력: 1
위 예제에서 5와 3의 비트 연산 수행 결과는 1이 된다.
<논리 연산 예시>
논리 연산에서도 & 연산자를 사용할 수는 있다.
논리 연산에서 &는 보통 and와 같은 역할을 하지만, 비트 단위로 연산을 수행합니다. 이 때문에, &를 논리 연산자로 사용할 때는 두 피연산자가 반드시 True나 False로 평가될 수 있는 불리언 값이어야 한다. 만약 불리언 값이 아닌 정수나 비트 단위로 비교 가능한 값이라면, 비트 연산을 수행한다. 즉 비트 단위 비교가 논리 연산보다 우선순위에 있는 것!
a = True
b = False
print(a & b) # 출력: False (a와 b 모두 True여야 True)
내 코드의 오류도 이곳에서 발생한 것 같다.
print(a!=b & a!=c)
위의 코드에서 a!=b와 a!=c 의 비교 연산이 먼저 수행되지 않고 b & a!=c라는 비트 연산이 먼저 수행되어 논리적인 오류가 발생한 것이다. 따라서 이런 경우 & 대신 논리 연산자인 and를 사용하여 조건을 명확하게 표현해야 할 듯 싶다.
<백준 2480 문제코드>
# 입력 받기
a, b, c = map(int, input().split())
# 세 가지 조건에 따라 상금 계산
if a == b == c:
# 같은 눈이 3개 나오는 경우
result = 10000 + a * 1000
elif a == b or b == c or a == c:
# 같은 눈이 2개 나오는 경우
if a == b or a == c:
result = 1000 + a * 100
else:
result = 1000 + b * 100
else:
# 모두 다른 눈이 나오는 경우
result = max(a, b, c) * 100
# 결과 출력
print(result)'Python' 카테고리의 다른 글
| [python] 주피터노트북 sys.stdin.readline() 실행안됨 / 표준입력 / input()과의 차이점 (0) | 2024.08.14 |
|---|---|
| [python] 재귀함수 이해하기 / 두 개의 재귀 호출을 포함하는 경우 (0) | 2024.08.12 |
| [Python] 맥북프로 주피터 노트북 설치하기 (0) | 2024.08.12 |
| [Python/Anaconda] 맥북프로 아나콘다 가상환경 생성 (0) | 2024.08.10 |
| [Python] 아나콘다(Anaconda)란? (0) | 2024.08.10 |