ABOUT ME

Today
Yesterday
Total
  • [Python] Part.2 제어문
    Python 2023. 2. 6. 22:07

     

     

     

    Ch02-01. 기초 연산자들

     

    Boolean 타입 : True or False 의 두가지 경우만 있는 자료형

     

    비교 연산자 설명 예제 결과
    > 값을 비교하여 왼쪽의 값이 크면 True, 그렇지 않으면 False 7 > 3 True
    < 값을 비교하여 왼쪽의 값이 작으면 True, 그렇지 않으면 False
    3 < 3 False
    >=
    값을 비교하여 왼쪽의 값이 크거나 같으면 True,
    그렇지 않으면 False
    17 >= 17 True
    <=
    값을 비교하여 왼쪽의 값이 작거나 같으면 True,
    그렇지 않으면 False
    3 <= 7 True
    ==
    값을 비교하여 동일하면 True, 동일하지 않으면 False
    7 == 7 True
    !=
    값을 비교하여 동일하면 False, 동일하지 않으면 True
    7 != 7 False

     

    다음 예시는 b가 문자열, 리스트, 튜플, set, dictionary 등일 때 유효.

    멤버 연산자 설명 예제
    in a가 b에 포함되어 있다면 참을, 그렇지 않으면 거짓을 반환 a in b
    1 in (1,2,3) → True
    b=[1, 2, 3, 4]
    5 in b → False
    not in a가 b에 포함되어 있지 않으면 참을, 그렇지 않으면 거짓을 반환 5 not in(1,2,3) → True
    b=[1, 2, 3, 4]
    3 not in b → False

     

    여러 개의 판별문이 중첩되어 있을 경우 and, or을 사용한다. 

    논리 연산자 설명 예제
    and 둘 모두 참일 경우에만 참을 반환
    연산자 모두 True인 경우에만 True 그 외는 전부 False
    A and B
    x>y and a>b
    x가 y보다 크고, a보다 b보다 크면 참을 반환
    or 둘 중 하나만 참이면 참을 반환
    연산자 중 하나라도 True라면 True 모두 False인 경우에만 False
    A or B
    x>y or a>b
    둘 중 하나만 성립해도 참을 반환
    not 결과값을 반전
    True는 False , False는 True
    not A

     

    비트 연산자 : 정수 데이터끼리 비트 단위로 연산을 수행 한 후 결과를 10진수로 반환

    ex) a=12 ( 2진법으로 1100 ), b=61 ( 2진법으로 111101 )

    비트 연산자 이름 설명 예제
    & AND 연산 비트 단위로 비교,
    대응되는 비트가 모두 1이면 1을 반환함.
    a&b = 1100(2진법) = 12
    | OR 연산 대응되는 비트 중에서 하나라도 1이면 1을 반환함 a&b = 111101(2진법) = 61
    ^ XOR 연산 대응되는 비트가 서로 다르면 1을 반환함 a ^ b = 110001(2진법) = 49
    ~ NOT 연산 비트를 1이면 0으로, 0이면 1로 반전 후 반환  
    << Left shift 연산 왼쪽으로 지정된 비트 수 만큼 이동 a << 2 = 110000(2진법) = 48
    >> Right shift 연산
    오른쪽으로 지정된 비트 수 만큼
    부호를 유지하면서 이동
     

    - 비트 AND 연산

    두 비트가 모두 1이면 1을 반환 아니라고 한다면 0을 반환한다. 결과는 5가 나온다.

    - 비트 OR 연산

    두 비트 중 하나라도 1이라면 1 모두 0이라면 0 그 외는 1을 반환한다 결과는 31이 나온다 .

    - 비트 XOR 연산

    두 비트가 모두 다르면 1 모두 같다면 0을 반환한다 26의 결과값이 나온다.

    - Left 연산자

    15를 2비트만큼 왼쪽으로 이동시키면 비트들이 2칸 왼쪽으로 이동이 되어 60이라는 결과값이 나오게 된다.

    - Right 연산자

    15를 2비트만큼 오른쪽으로 이동시킨다면 3이라는 결과가 나오게 된다.

     

     

    식별 연산자: 같은 메모리 위치를 가리키는지 판단

    식별 연산자 설명 예제
    is 같은 메모리 위치를 가리키면 참
    두피 연산자의 식별 값을 비교하였을 때 동일한 객체이면 True
    A is B
    is not 다른 메모리 위치를 가리키면 참
    두피 연산자의 식별 값을 비교하였을 때 동일한 객체이면 False
    B is not True
    a=[1,2,3,4]
    b=a
    a is b
    
    True

     

    변수 변경 후 할당 연산자들

    복합 연산자 설명 예제 결과
    += 왼쪽 변수에 오른쪽 값을 더하고 결과를 왼쪽 변수에 할당
    x = x + y
    A = 7
    A += 3
    A = 10
    -= 왼쪽 변수에 오른쪽 값을 빼고 결과를 왼쪽 변수에 할당
    x = x - y
    A = 10
    A -= 9
    A = 1
    *= 왼쪽 변수에 오른쪽 값을 곱하고 결과를 왼쪽 변수에 할당
    x = x * y
    A = 10
    A *= 10
    A = 100
    /= 왼쪽 변수에 오른쪽 값을 나누고 결과를 왼쪽 변수에 할당
    x = x / y
    A =10
    A /= 4
    A = 2.5
    //= 왼쪽 변수에 오른쪽 값을 나눈 결과의 정수만 왼쪽 변수에 할당
    x = x // y
    A = 10
    A //= 4
    A = 2
    %= 왼쪽 변수에 오른쪽 값을 나눈 나머지 결과를 왼쪽 변수에 할당
    x = x % y
    A = 10
    A %= 3
    A = 1
    **= 왼쪽 변수에 오른쪽 값을 제곱한 결과를 왼쪽 변수에 할당
    x = x ** y
    A = 10
    A **= 3
    A = 1000

     


     

    Ch02-02. if문

     

    제어문이란?

    프로그램은 보통 위에서 아래로 한 문장씩 수행된다. 이를 순차적인 제어 흐름이라 한다.

    때로는 이 흐름에서 벗어나 건너뛰거나 반복하기로 할 필요가 있는데 이를 컨트롤하는 문장을 제어문이라고 한다.

    파이썬의 제어문은 if, for, while 이라는 단어로 시작함

     

    파이썬의 코드 작성 규칙 : 첫 코드는 들여쓰기 없이 작성.

    제어문 작성 규칙 : 제어문으로 인해 통제받는 문장(이하 코드블록이라 부름)은 들여쓰기로 구분.

    들여쓰기 방법으로는 스페이스 바와 탭(tab)이 있음. 들여쓰기 간격은 일정하기만 하면 둘을 혼용해도 무방하나, 보통은 스페이스 바 4번을 쓰는 게 일반적임.

    ex)

    if x>0:

        print(‘양수입니다.’)

    Else:

        print(‘음수입니다.’)

     

     

    if 문의 기본 구조 : 조건문을 확인하여 참일 경우 if의 코드블록을 수행하고 거짓일 경우 else의 코드블록을 수행

    if 조건문:
    
        수행할 문장1
    
        수행할 문장2
    
    else:
    
        수행할 문장x
    
        수행할 문장y
    i=0
    if i>0:
     print("양수입니다.")	#스페이스바를 통한 구분도 가능
    elif i<0:
      print("음수입니다.")	#tab을 통한 구분도 가능 일반적으로  Tab 사용
    else:
      print("0입니다.")
      
    0입니다.

     

    조건문이 여러 개일 때

    만약 조건문이 여러 개라면 elif로 시작하는 다음과 같은 형태로 작성
    
    if 조건1:
    	문장
    elif 조건2:
    	문장
    elif 조건3:
    	문장:
    	...
    else:
    	문장

     

    조건문을 한 줄로 표현?

    if a>b: 문장1
    else: 문장2
    
    또는
    
    문장1 if 조건문1 else 문장2

     


     

    Ch02-03. for문

     

    For문 : 조건을 평가하는 대신 순서열을 순회하며 반복적으로 코드를 실행.

    몇 번 정도 반복을 할 것인지 알고 있거나 계획이 있을 때 사용

    다음과 같은 형태로 작성

    for 반복변수 in 순서열(문자열, 리스트, 튜플 등 순서를 갖은 자료):
    	코드블록
    
    ex) 
    for i in [1,2,3,4]: 
    	print(i)
        
    ''' 
    순서열에 들어갈 수 있는 데이터 형식에는 list, tuple, 문자열 등이 있고, 
    순서열은 아니지만 set이나 dictionary도 사실은 들어갈 수 있다.  '''
    msg = "hello python"
    for i in msg:
        print(i)
    
    
    h
    e
    l
    l
    o
    
    p
    y
    t
    h
    o
    n
    for i in [1,21,3,42]:
      print(i)
      
     1
     21
     3
     42

     

    이중 for문

    for x in range(반복횟수):
      for y in range(반복횟수):
        수행코드y	# 안쪽 for문이 끝날 때 출력
      수행코드x		# 밖 for문이 끝나면 출력
    
    '''
    상위 for문의 첫 문장이 동작이 되고
    하위 for문의 모든 문장이 동작이 완료가 되면
    다음 상위 for문의 두 번째 문장이 동작이 되고
    또 다시 하위 for문의 모든문장이 동작이 된다 '''
    구구단 출력(가로)
    for i in range(2,10):
      for j in range(1,10):     
        print(f"{i} * {j} = {i*j}",end='\t')
      print()
    print()
    
    2 * 1 = 2	2 * 2 = 4	2 * 3 = 6	2 * 4 = 8	2 * 5 = 10	2 * 6 = 12	2 * 7 = 14	2 * 8 = 16	2 * 9 = 18	
    3 * 1 = 3	3 * 2 = 6	3 * 3 = 9	3 * 4 = 12	3 * 5 = 15	3 * 6 = 18	3 * 7 = 21	3 * 8 = 24	3 * 9 = 27	
    4 * 1 = 4	4 * 2 = 8	4 * 3 = 12	4 * 4 = 16	4 * 5 = 20	4 * 6 = 24	4 * 7 = 28	4 * 8 = 32	4 * 9 = 36	
    5 * 1 = 5	5 * 2 = 10	5 * 3 = 15	5 * 4 = 20	5 * 5 = 25	5 * 6 = 30	5 * 7 = 35	5 * 8 = 40	5 * 9 = 45	
    6 * 1 = 6	6 * 2 = 12	6 * 3 = 18	6 * 4 = 24	6 * 5 = 30	6 * 6 = 36	6 * 7 = 42	6 * 8 = 48	6 * 9 = 54	
    7 * 1 = 7	7 * 2 = 14	7 * 3 = 21	7 * 4 = 28	7 * 5 = 35	7 * 6 = 42	7 * 7 = 49	7 * 8 = 56	7 * 9 = 63	
    8 * 1 = 8	8 * 2 = 16	8 * 3 = 24	8 * 4 = 32	8 * 5 = 40	8 * 6 = 48	8 * 7 = 56	8 * 8 = 64	8 * 9 = 72	
    9 * 1 = 9	9 * 2 = 18	9 * 3 = 27	9 * 4 = 36	9 * 5 = 45	9 * 6 = 54	9 * 7 = 63	9 * 8 = 72	9 * 9 = 81
    구구단 출력(세로)
    for i in range(1, 10):
      for j in range(2, 10):
        print('{} * {} = {}'. format(j, i, i*j), end='\t')
      print()
      
    2 * 1 = 2	3 * 1 = 3	4 * 1 = 4	5 * 1 = 5	6 * 1 = 6	7 * 1 = 7	8 * 1 = 8	9 * 1 = 9	
    2 * 2 = 4	3 * 2 = 6	4 * 2 = 8	5 * 2 = 10	6 * 2 = 12	7 * 2 = 14	8 * 2 = 16	9 * 2 = 18	
    2 * 3 = 6	3 * 3 = 9	4 * 3 = 12	5 * 3 = 15	6 * 3 = 18	7 * 3 = 21	8 * 3 = 24	9 * 3 = 27	
    2 * 4 = 8	3 * 4 = 12	4 * 4 = 16	5 * 4 = 20	6 * 4 = 24	7 * 4 = 28	8 * 4 = 32	9 * 4 = 36	
    2 * 5 = 10	3 * 5 = 15	4 * 5 = 20	5 * 5 = 25	6 * 5 = 30	7 * 5 = 35	8 * 5 = 40	9 * 5 = 45	
    2 * 6 = 12	3 * 6 = 18	4 * 6 = 24	5 * 6 = 30	6 * 6 = 36	7 * 6 = 42	8 * 6 = 48	9 * 6 = 54	
    2 * 7 = 14	3 * 7 = 21	4 * 7 = 28	5 * 7 = 35	6 * 7 = 42	7 * 7 = 49	8 * 7 = 56	9 * 7 = 63	
    2 * 8 = 16	3 * 8 = 24	4 * 8 = 32	5 * 8 = 40	6 * 8 = 48	7 * 8 = 56	8 * 8 = 64	9 * 8 = 72	
    2 * 9 = 18	3 * 9 = 27	4 * 9 = 36	5 * 9 = 45	6 * 9 = 54	7 * 9 = 63	8 * 9 = 72	9 * 9 = 81

     

    range 함수

    range(num) : 0에서부터 시작해서 1씩 증가해서 num 직전까지 증가하며 만들어진 순서열
    
    for i in range(5):
      print(i)
     
     0
     1
     2
     3
     4
    range(num1, num2): num1에서부터 시작해서 1씩 증가해서 num2 직전까지 증가하면서 만들어진 순서열.
    
    for i in range(1,5):
      print(i)
      
      1
      2
      3
      4
    range(num1,num2,간격) : range(num1,num2)와 같으나 간격이 1이 아니라 직접 입력가능.
    
    for i in range(5,0,-1):
      print(i)
     
     5
     4
     3
     2
     1

     


     

    Ch02-04. while문

     

    while : 조건식이 거짓이 될 때까지 무한적으로 반복되는 방식

    몇 번 반복을 시켜야 될지 모를 때 주로 사용

    while문과 for문은 굉장히 비슷하며 대부분의 경우 서로 호환 가능하다.

    조건이 참인 동안에 계속 코드블록을 반복한다.
    
    while 조건:
    	코드블록
    
    예시)
    i = 0
    while i<=5:
    	print(i)
    	i += 1
    
    0
    1
    2
    3
    4

     

     

    pass, break, continue

    제어문 안에서 쓸 수 있는 특수 명령어로 pass, break, continu가 있다

    • pass : 아무 일 없이 그냥 통과. (pass가 없으나 있으나 똑같음)
    • break : for문이나 while문에서 loop를 끝냄.
    • continue : for문이나 while문에서 현재 loop를 중단하고 다음 loop로 넘어감.

     


     

    Ch02-05. 실전 문제풀이

    i=1
    sum = 0
    while True:   # while 뒤에 True이면 무한 반복
      if i > 50:    # 종료하기 위해서는 break을 사용 sum+=i
        break   # 반복문 종료
      sum += i
      i += 1
    print('합계 : ',sum)
    
    합계 : 1275
    # continue는 아래 부분을 실행하지 않고 다음 반복문 실행
    for i in range(10):
      print(i)
      if i > 4:
        continue
        # break 반복문 종료
      print('난 출력 되나')
      
    0
    난 출력 되나
    1
    난 출력 되나
    2
    난 출력 되나
    3
    난 출력 되나
    4
    난 출력 되나
    5
    6
    7
    8
    9
    # while문을 사용하여 1부터 25사이의 짝수를 출력해 보세요
    i = 1
    while i <= 25:
      if i % 2 == 0:
        print(i)
      i += 1
      
    2
    4
    6
    8
    10
    12
    14
    16
    18
    20
    22
    24
    - 튜플
    for i in (1, 2, 3):
      print(i)
    sings = '안녕하세요'
    
    1
    2
    3
    
    - 문자열
    for s in sings:
      print(s)
    
    안
    녕
    하
    세
    요
    
    - list
    li = [1, 2, 3]
    for i in li:
      print(i)
      
    1
    2
    3
    li = [1,2,3,4,5]
    # li데이터 하나씩 가져와서 3승하여 출력
    for i in li:
      print('{} ** 3 = {}'.format(i,i**3))
     
    1 ** 3 = 1
    2 ** 3 = 8
    3 ** 3 = 27
    4 ** 3 = 64
    5 ** 3 = 125
    # for문에 for가 있는 경우 중첩 for
    for i in range(4):
      # i 가 0일 때 j가 0부터 3까지
      # i 가 1일 때 j가 0부터 3까지
      # i 가 2일 때 j가 0부터 3까지
      # i 가 3일 때 j가 0부터 3까지
      print('i = {}, '.format(i), end='')
      for j in range(4):
        print(j, end=' ')
      print()
      
    i = 0, 0 1 2 3 
    i = 1, 0 1 2 3 
    i = 2, 0 1 2 3 
    i = 3, 0 1 2 3
    # 주사위를 두 번 던져서 나온 숫자들의 합이 4의 배수가 되는 경우
    for i in range(1,7):  # 1 ~ 6 첫 번째 주사위
      for j in range(1,7):  # 1 ~ 6 두 번째 주사위
        k = i + j
        if k % 4 == 0:
          print('{} + {} = {}'.format(i, j, i+j))
          
    1 + 3 = 4
    2 + 2 = 4
    2 + 6 = 8
    3 + 1 = 4
    3 + 5 = 8
    4 + 4 = 8
    5 + 3 = 8
    6 + 2 = 8
    6 + 6 = 12
    # 주사위 두 개를 던져서 나온 숫자의 합이 6이 되는 경우 출력
    for i in range(1, 7):
      for j in range(1, 7):
        k = i + j
        if k == 6:
          print('{} + {} = {}'.format(i, j, i+j))
          
    1 + 5 = 6
    2 + 4 = 6
    3 + 3 = 6
    4 + 2 = 6
    5 + 1 = 6
    print('수박 무게를 입력하세요.')
    weight = int(input())
    if weight > 10: result = 1
    elif weight > 7: result = 2
    elif weight > 4: result = 3
    else: result = 4
    print('수박은 {}등급입니다.'.format(result))
    
    수박 무게를 입력하세요.
    11
    수박은 1등급입니다.
    print('아이디를 입력하세요 : ')
    id = input()
    password = input('암호를 입력하세요 : ')
    if id == 'root' and password == 'system':
      print('로그인 성공')
    elif id != 'root':
      print('넌 누구냐!!!')
    else:
      print('암호를 모르네')
      
    아이디를 입력하세요 : 
    root
    암호를 입력하세요 : sdlf
    암호를 모르네
    # while문을 사용하여 100이상의 자연수 중 가장 작은 23의 배수를 출력해 보세요.
    i=100
    while True:
      if i % 23 == 0:
        print('23의 배수 : ',i)
        break
      i += 1
      
      23의 배수 :  115
    score = int(input('점수? '))
    # if score > 60: message = '성공'
    # else: message = '실패'
    message = '성공' if score > 60 else '실패'
    print(message)
    
    점수? 70
    성공
    sings = ['아이유', '뉴진스', 'Blxst', 'NCT Dream']
    for i in range(len(sings)):
      if i == len(sings) - 1:
        print(sings[i])
      else:
        print(sings[i], end=', ')
        
    아이유, 뉴진스, Blxst, NCT Dream
    numbers=[2, 3, 5, 7, 11, 13, 17, 19]
    # 인덱스 값
    for i in range(len(numbers)):
      print(i, numbers[i])
      
    0 2
    1 3
    2 5
    3 7
    4 11
    5 13
    6 17
    7 19
    # 1 - 1000 3의 배수 합
    result = 0
    i = 1
    while i <= 1000:
      if i % 3 ==0:
        result += i
      i += 1
    print('1000까지 3의 배수 합 : ',result)
    
    1000까지 3의 배수 합 :  166833
    # 중첩 while
    i = j = 0
    while i < 5:
      while j < i +1:
        print('*', end='')
        j += 1
      i += 1  
      print()
      j = 0
    # while로 처리 파이썬은 *를 그 갯수 만큼 반복
    i = 0
    while i < 5:
      i += 1
      print('*' * i)
      
    *
    **
    ***
    ****
    *****
    *
    **
    ***
    ****
    *****
    # for문을 사용하여 평균
    a = [70, 60, 55, 75, 95, 90, 80, 80, 85, 100]
    sum = 0
    for score in a:
      sum += score
    print('평균 : ',sum/len(a))
    
    평균 :  79.0

     

     

     

     

    'Python' 카테고리의 다른 글

    [Python] Part.6 상속과 예외처리  (0) 2023.02.15
    [Python] Part.5 클래스  (0) 2023.02.07
    [Python] Part.4 함수 심화학습  (0) 2023.02.07
    [Python] Part.3 함수 및 변수  (0) 2023.02.07
    [Python] Part.1 Python의 자료형  (0) 2023.02.04
Designed by Tistory.