여러가지 경우를 시도해봄
1-1. if num == 1 or 3
-> 결과는 남자4줄..
1-2. if int(num) == 1 or 3
-> 같은 남자 4줄
1-3. if int(num) == 1 | 3
-> 여자 여자 남자 여자(3의 값만 남자로 출력)
1-4. if int(num) == 1 | int(num) == 3
-> 여자 여자 남자 여자 (3의 값만 남자로 출력)
1-5. if (int(num) == 1 | int(num) == 3)
-> 여자 여자 남자 여자
1-6. if int(num) == 1 or int(num) == 3 #( 해결1 )
if (int(num) == 1) | (int(num) == 3) #( 해결2 )
-> 남자 여자 남자 여자
* if구문은 True여야 적용이되고 여러 조건이 있을때 적어도 하나의 True가 있는 경우 전체를 True로 인식하게 됨
바이너리 관련해서 공부를 더 해봐야 될 것 같다.
비트연산자
양수 음수 바이너리
1-1. if num == 1 or 3
- num의 값이 문자열이기 때문에 원하는 값 도출할 수 없음.
- 논리연산자 or을 사용, 때문에 ('num == 1) or (3)의 bool값 비교
- num의 값이 순서대로 1~4가 들어갈때마다 앞의 값은 바뀌더라도 뒤에 3은 언제나 True
- if 안에서 True값이 하나라도 있으면 True로 보기때문에 결과값은 전부 '남자'
1-2. if int(num) == 1 or 3
- 위와 동일한 이유로 전부 다 '남자'가 출력된다.
1-3. if int(num) == 1 | 3
- 비트연산자 |을 사용, 때문에 이 구문은 if int(num) == 3이 된다.
- num의 값이 순서대로 1~4가 들어가게 되면 3일때만 True
- 따라서 결과값은 '여자' '여자' '남자' '여자'(3의 값만 남자로 출력)
1-4. if int(num) == 1 | int(num) == 3
- 비트연산자 |을 사용, 때문에 |로 묶여진 것을 먼저 계한다.
- 이 구문 이해에서 좀 헤맸다. 적용되는 방식은 다음과 같다.
if int(num) == (1 | int(num)) == 3
num의값을 순서대로 1~4 대입시
- num = 1일때
if 1 == 1 == 3 -> False
- num = 2일때
if 2 == 2 == 3 -> False
- num = 3일때
if 3 == 3 == 3 -> True
- num = 4일때
if 4 == 4 == 3 -> False
따라서 결과값은 '여자' '여자' '남자' '여자'가 나온다.
1-5. if (int(num) == 1 | int(num) == 3)
- 위와 같은 이유로 '여자' '여자' '남자' '여자'
1-6.1 if int(num) == 1 or int(num) == 3
- 논리연산자 or이기 때문에 순서대로 num 1~4 대입
- 1과 3이 들어갔을때 하나라도 True가 생겨서 '남자'출력, 2와 4가 들어갔을때 둘다 False기때문에 둘다 '여자' 출력
1-6.2if (int(num) == 1) | (int(num) == 3)
- 비트연산자 |을 사용했지만 앞과 뒤를 한 덩어리로 묶어줬기 때문에 1-4의 예시와는 다르게 의도한 결과를 출력할 수 있음.
- num이 1과 3일때 True존재로 '남자'로 출력
- 2와 4일때 False만 존재하기 때문에 '여자'로 출력된다.