ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 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

     

     

    재밌어..

Designed by Tistory.