-
220706_부트캠프시작_python_1주_3일차 (복기)bigdata_bootcamp_12th/daily review 2022. 7. 6. 22:31
1. 우연한 발견
- 아직 배울 단계가 아님에도 여러 상황에 도출되는 답이 도저히 이해가 가지 않아서 한 번 물고 늘어져 보기로 했다.
1) 사건의 발단
arr = [1, 2, 3]
arr이란 list는 DB에서 가져온 자료 혹은 사용자로부터 입력받은 자료로 뭐가 들어있는지는 모른다 라는 설정
- arr 안에 1, 2, 3 중 어느 정수가 들어있으면'참', 그렇지 않으면 '거짓' 을 출력하는 조건문 -2) 풀이
# 1번 풀이 (통과) arr =[1,2,3] if 1 in arr : print("있음") elif 2 in arr : print("있음") elif 3 in arr : print("있음") else : print("없음") # 2번 풀이 (불통) arr = [1, 2, 3] if (1 or 2 or 3) in arr : print('있음') else: print('없음') # 3번 풀이 (통과) arr =[1,2,3] if (1 in arr) | (2 in arr) | (3 in arr): print("참") else: print("거짓")
3) 의문
- 나는 코딩의 기반지식이 전무하여 한 줄씩 코드에 복사해보고 원리를 파악하려는 이상한 버릇이 있다.
- 그런 와중 결과가 특이한 것을 몇가지 발견했다
2. or
1) 1 or 2 or 3
=> 1
2) 3 or 5 or 2
=> 3
3) 0 or 7 or 3
=> 0
or을 사용 했을 때는 맨 앞의 수가 기준이 되고 (단락)
맨 앞의 수가 0 (=false) 일 때는 그 다음 수가 기준이 되고
그 다음 수도 0 일 때는 0이 아닌 그 다음 수가 기준이 된다.3. | (or 연산자 기호)
1) 1 | 2 | 3
=> 3
2) 3 | 5 | 2
=> 7
3) 0 | 7 | 3
=> 7
???? or의 기호가 | (버티칼바) 인데 왜 같지 않을까?
4. 문제 해결을 위한 규칙성 찾기
1) 강사님께 질문하여 얻은 답 : 이건 비트연산자 때문인데 2진법으로 비교해서 그래요.
아직 배울 단계도 아니고 크게 많이 쓰이는 논리는 아닙니다.
2) 비트연산자, 2진수
- 힌트를 무려 2개 얻었다. 당장 비트연산에 대한 기반 지식은 없으니 모든 숫자를 2진수로 바꿔 규칙성을 찾아보았다
3) 해결
- 1번
구분 2진수 변경 1 0 0 0 1 2 0 0 1 0 3 0 0 1 1 3 0 0 1 1 ↓ 세로 방향으로 각각 or 비교를 한다고 생각
ex ) 첫번째 값 행 0 or 0 or 0 == 0
두번째 값 행 0 or 0 or 0 == 0
세번째 값 행 0 or 1 or 1 == 1
네번째 값 행 1 or 0 or 1 == 1
※ 결과 열 (2진수) 0011 == (10진수) 3
- 2번
구분 2진수 변경 3 0 0 1 1 5 0 1 0 1 2 0 0 1 0 7 0 1 1 1 ↓ 세로 방향으로 각각 or 비교를 한다고 생각
ex ) 첫번째 값 행 0 or 0 or 0 == 0
두번째 값 행 0 or 1 or 0 == 1
세번째 값 행 1 or 0 or 1 == 1
네번째 값 행 1 or 1 or 0 == 1
※ 결과 열 (2진수) 0111 == (10진수) 7
- 3번
구분 2진수 변경 0 0 0 0 0 7 0 1 1 1 3 0 0 1 1 7 0 1 1 1 ↓ 세로 방향으로 각각 or 비교를 한다고 생각
ex ) 첫번째 값 행 0 or 0 or 0 == 0
두번째 값 행 0 or 1 or 0 == 1
세번째 값 행 0 or 1 or 1 == 1
네번째 값 행 0 or 1 or 1 == 1
※ 결과 열 (2진수) 0111 == (10진수) 7
재밌어..
'bigdata_bootcamp_12th > daily review' 카테고리의 다른 글
220711_부트캠프시작_python_2주_1일차 (복기) (0) 2022.07.11 220708_부트캠프시작_python_1주_5일차 (복기) (0) 2022.07.10 220707_부트캠프시작_python_1주_4일차 (복기) (0) 2022.07.07 220705_부트캠프시작_python_1주_2일차 (복기) (0) 2022.07.05 220704_부트캠프시작_python_1주_1일차 (복기) (0) 2022.07.04