Skip to content

Latest commit

 

History

History
506 lines (360 loc) · 12.7 KB

File metadata and controls

506 lines (360 loc) · 12.7 KB

✅Python 제어문(조건문/반복문)

  1. 제어문이란?
  2. 조건문
  3. 반복문

💡 학습에 도움되는 사이트: Python Tutor

1. 제어문(Control Statement)

  • 제어문이란?

    • 조건문, 반복문!

    • 파이썬은 기본적으로 위에서부터 아래로 순차적으로 명령을 수행

    • 특정 상황에 따라 코드를 선택적으로 실행(분기/조건)하거나 계속하여 실행

      (반복하는 제어가 필요함)

    • 제어문은 순서도(flow chart)로 표현이 가능


2. 조건문(Conditional Statement)

  • 조건문 기본

    • 조건문은 참/거짓을 판단할 수 있는 조건식과 함께 사용
  • 조건문 형식

    • expression 에는 참/거짓에 대한 조건식
      • 조건이 참인 경우 이후 들여쓰기 되어있는 코드 블럭을 실행
      • 이외의 경우 else 이후 들여쓰기 되어있는 코드 블럭을 실행
        • else는 선택적으로 활용 가능함
      • 코드 블록을 실행한 다음, 다음 코드를 실행하는 형식
    if < expression >:
        # Run this Code block    <- 참일때 실행
    else:
        # Run this Code block    <- 거짓일때 실행(선택적, 직접조건X)
    
    +++++++++++++++++++++++++++++++
    
    <예제1>
    아래의 순서도를 코드로 나타내세요(pdf 참조)
    ◇ 부분: , 거짓을 확인하는 조건
    
    a = -10
    if a >= 0:
        print('양수')   # -10 은 음수이므로 여기는 실행되지 않음
    else: 
        print('음수')   # -10 은 음수이므로 여기가 실행됨
    print(a)           # 출력되는 결과는 '음수' -10
    
    +++++++++++++++++++++++++++++++
    
    <예제2(실습 문제)>
    예제1에서 a가 홀수인지 확인하고 싶다면?
    [조건문을 통해 변수 num 값의 홀수/짝수 여부를 출력하시오
     *이때 num  input을 통해 사용자로부터 입력 받으시오]
    ◇ 부분: 2 나눈 나머지가 1인지?
    
    num = input()
    print(num)              #input을 제대로 받고 있는지 반드시 확인!
    print(num, type(num))   #num의 타입이 문자열인지, 숫자인지 확인
    이때 <class 'str'> , 문자열이라는 결과가 출력되기에
    숫자(정수) 결과를 얻기 위해 아래와 같이 코드를 수정해야 ( 변환)
    
    num = int(input())
    if num % 2 == 1:
        print('홀')
    else:
        print('짝')
    여기서 Terminal에 $ python 파일명.py 입력해서 정상 실행되는지 확인
  • 복수 조건문

    • 홀수, 짝수가 아니라, 여러 구간으로 나누어서 결과를 확인하고 싶을 때 활용

      ex) A: 90점100점, B: 80점89점, C: 70점~79점 ... 를 출력하고 싶을 때

    • 복수의 조건식을 활용할 경우 elif 를 활용하여 표현함

    if <expression>:
        # Code block
    elif <expression>:
        # Code block
    elif <expression>:
        # Code block
    else:
        # Code block
        
    +++++++++++++++++++++++++++++++
    
    <실습문제>
    다음 미세먼지 농도에 따른 등급일 ,
    dust 값에 따라 등급을 출력하는 조건식을 작성하시오(pdf 참조)
    
    # 조건문을 시작하기에 앞서, 변수 dust 의 초기값을 임의로 define
    # 꼭 100이 아니라, 80, 70, 99 등 자유롭게 입력해도 됨
    dust = 100    
    
    # dust 가 150보다 크면, 매우 나쁨
    if dust > 150:
        print('매우 나쁨')
    # dust 가 80보다 크면, 나쁨
    elif dust > 80:
        print('나쁨')
    # dust 가 30보다 크면, 보통
    elif dust > 30:
        print('보통')
    # 좋음
    else:
        print('좋음')
    
    ※ 위에서 주의해야 하는 실수! ※
     elif 쓰다보니 else 에도 조건을 추가해버림
     그러나 else  위의 조건을 제외한 나머지 전부기 때문에
     절대로 추가적인 조건문 쓰면 안됨!
     심지어 else  상황에 따라 생략해도 결과가 출력됨
  • 중첩 조건문

    • 조건문을 다른 조건문에 중첩되어 사용할 수 있음
    • 들여쓰기에 유의하여 작성하자
    if <expression>:
        # Code block
        if <expression>:
            # Code block
    else:
        # Code block
    
    +++++++++++++++++++++++++++++++
            
    <실습 문제>
    아래의 코드에서 중첩조건문을 활용하여 미세먼지 농도(dust ) 300 넘는 경우 '실외 활동을 자제하세요' 추가적으로 출력하고 음수인 경우 '값이 잘못 되었습니다' 출력하시오
    
    dust = -10
    if dust > 150:
        print('매우 나쁨')
    elif dust > 80:
        print('나쁨')
    elif dust > 30:
        print('보통')
    else:
        print('좋음')
    print('미세먼지 확인 완료')
        
    ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓
        
    dust = -10
    if dust > 150:
        print('매우 나쁨')
        if dust > 300:
            print('실외 활동을 자제하세요.')
    elif dust > 80:
        print('나쁨')
    elif dust > 30:
        print('보통')    
    else:
        if dust >= 0:
            print('좋음')
        else: 
        	print('값이 잘못되었습니다.')
  • 조건 표현식(Conditional Expression)

    • 이런 게 있다! 정도로만 이해하자

    • 조건문을 다른 형식으로 쓸 수 있는 방법

    • 프린트할 땐 안 쓰고, 상황에 맞춰 활용

    <true인 경우 > if <expression> else <false인 경우 >
    
    +++++++++++++++++++++++++++++++
    
    <실습문제>
    
    Q: num  정수일 , 아래의 코드는 무엇을 위한 코드일까요?
    value = num if num >= 0 else -num
    
    A: 절댓값을 만드는 코드!
        
    value = num  # 참일 경우
    if num >= 0
    else -num      # 거짓일 경우
    
     코드가 if문이었다면?
    num = -10
    if num >= 0:
        value = num
    else:
        value = -num
    print(num, value)    # 양수면 그대로, 음수면 -붙여서
    
    # 조건 표현식 코드: 위의 코드를 아래와 같이 변형
    # 원리는 하단 이미지 파일 참조
    value = num if num >= 0 else -num

py_ctrl


3. 반복문(Loop Statement)

  • 반복문

    • 특정 조건에 도달할 때까지 계속 반복되는 일련의 문장
  • 반복문의 종류

    ① while 문: 종료조건에 해당하는 코드를 통해 반복문을 종료시켜야 함

    ② for 문: 반복가능한 객체를 모두 순회하면 종료(별도의 종료조건의 필요없음)

    ③ 반복 제어: break, continue, for-else

  • while 문

    • while문은 조건식이 참인 경우 반복적으로(=무한) 코드를 실행
      • 조건이 참인 경우 들여쓰기 되어 있는 코드 블록이 실행됨
      • 코드 블록이 모두 실행되고, 다시 조건식을 검사하며 반복적으로 실행됨
      • while 문은 무한 루프를 하지 않도록 종료조건이 반드시 필요
    while <expression>:
        # Code block
        
    +++++++++++++++++++++++++++++++
        
    <예제>
    아래의 순서도를 코드로 나타내세요(pdf 참조)
    # Q: 하단의 코드는 몇 번 반복될까? / A: 5회
    a = 0
    while a < 5:    # 종료조건에 해당하는 부분
        print(a)
        a += 1      # a = a+1 의미
    print('끝')
    
    +++++++++++++++++++++++++++++++
    
    <실습문제>
    1부터 사용자가 입력한 양의 정수까지 총합을 구하는 코드를 작성하시오
    
    # <풀이 절차>
    # 매 회 n 이 1씩 증가해야하고
    # 매 회 result 에는 n을 더해야함
    # 종료는 n = user_input 보다 커졌을 때
    # (True일땐 작거나 같을 때)
    
    n = 0                       # 처음 시작 값
    result = 0                  # 0부터 더하기 위해서
    user_input = int(input())   # user_input 값
    while n <= user_input:
        result += n
        n += 1
    print(result)
    여기서 Terminal에 $ python 파일명.py 입력해서 정상 실행되는지 확인
    
    +++++++++++++++++++++++++++++++
    
    # 실습문제 Q: 그냥 n < user_input 하면 안되나요?
    # 실습문제 A: (하단의 상황1, 상황2 비교해보기)
    
    # 새로운 상황! n < user_input 를 아래와 같은 코드로 작성
    n = 0
    result = 0
    user_input = int(input())
    while n < user_input:
        n += 1
        result += n
    print(result)
    여기서 Terminal에 $ python 파일명.py 입력해서 정상 실행되는지 확인
    처음의 실습문제 풀이와 동일한 값이 출력되는지 확인!
    
    # [상황1,2 비교] 위 상황들이 실제로 어떻게 진행되는 것인지 디버깅 해보기
    
    상황1)
    while n <= user_input:
        print(f'n: {n}, result: {result}')   # 이 코드를 추가
        result += n
        n += 1
    print(result)
    
    상황2)
    while n < user_input:
        print(f'n: {n}, result: {result}')   # 이 코드를 추가
        n += 1
        result += n
    print(result)
    
    # [상황1,2 비교] <- 위의 코드들 사이에 print 추가해서
    # 내가 보기 편하게끔 바꿔나가야 함(아래 코드를 순차적으로 확인)
    n = 0
    result = 0
    user_input = int(input())
    while n <= user_input:
        print(f'n: {n}, result: {result}')  # 작업상황 확인용 추가코드
        result += n
        n += 1
    print(result)
    
    n = 0
    result = 0
    print('=============')       # 요런 줄을 추가해서 상황1,2 사이 코드 가독성 높임
    while n < user_input:
        print(f'n: {n}, result: {result}') # 작업상황 확인용 추가코드
        n += 1
        result += n
    print(result)
  • for 문

    • for문은 시퀀스(string, tuple, list, range)를 포함한 순회 가능한(iterable) 객체 요소를 모두 순회함
      • 처음부터 끝까지 모두 순회하므로 별도의 종료조건이 필요하지 않음
    for <변수명> in <반복 가능한 아이(iterable)>:
        # Code block
    
    +++++++++++++++++++++++++++++++
        
    <예제>
    아래의 순서도를 코드로 나타내세요(pdf 참조)
    for fruit in ['apple', 'mango', 'banana']:
        print(fruit)
    print('끝')
    
    # apple
    # mango
    # banana
  • for 문 일반 형식

    • Iterable
      • 순회할 수 있는 자료형(str, list, dict 등)
      • 순회형 함수(range, enumerate)
  • for 문 문자열 순회

    • (1) 사용자가 입력한 문자를 한 글자씩 세로로 출력하시오
    chars = input()
    # hi 출력
    
    for char in chars:
        print(char)
    # h
    # i 출력
    • (2) 사용자가 입력한 문자를 range 를 활용하여 한 글자씩 출력하시오

      • 위 (1)과 동일하지만, index 를 기준으로 순회한다는 특징/장점이 있음

      • (= 인덱스로 접근해서 씀, 실제 알고리즘 활용할 땐 이 방법을 더 많이 사용)

    chars = input()
    # hi 출력
    
    # range(len(chars)) 활용!
    for idx in range(len(chars)):
        print(chars[idx])
    • enumerate 순회(심화)

      • 튜플을 활용

      • 알고리즘 풀이할 때 잘 안 쓰고, (2) 위주로 많이 사용하게 됨

      • 자세한 내용은 교재 참조

  • 딕셔너리 순회

    • 딕셔너리는 기본적으로 key를 순회하며, key를 통해 값을 활용
    grade = {'john': 80, 'eric': 90}
    for name in grade:
        print(name)
        
    # john
    # eric      이와 같이 key만 출력됨
    
    +++++++++++++++++++++++++++++++
    
    # 위의 상황에서 값과 같이 출력하고 싶다면?
    
    grade = {'john': 80, 'eric': 90}
    for name in grade:
        print(name, grades[name])
    
    # john 80
    # eric 90    이와 같이 키-값이 같이 출력됨
  • 반복문 제어

    • break: 반복문을 종료

    • continue: continue 이후의 코드 블록은 수행하지 않고, 다음 반복을 수행

    • for-else: 끝까지 반복문을 실행한 이후 else문 실행

      • break 통해 중간에 종료되는 경우 else문은 실행되지 않음
    • break / continue / for-else 예시

    [1] break문을 만나면 반복문은 종료됨
    
    상황1)
    n = 0
    while True:
    	if n == 3:
        	break
          print(n)
          n += 1
    # 0
    # 1
    # 2 출력
            
    상황2)
    for i in range(10):
    	if i > 1:
        	print('0과 1만 필요해!')
            break
    	print(i)
    # 0
    # 1
    # 0과 1만 필요해!  
    
    +++++++++++++++++++++++++++++++
    
    [2] continue 이후의 코드 블록은 수행하지 않고, 다음 반복을 수행
    
    for i in range(6):
        if i % 2 == 0
            continue
        print(i)
    # 1
    # 3
    # 5  출력
    
    +++++++++++++++++++++++++++++++
    
    [3] for-else: else 문은 break로 중단되었는지 여부에 따라 실행
    
    상황1)
      for char in 'apple':
          if char == 'b':
              print('b!')
              break
      else:
          print('b가 없습니다.')
    # b가 없습니다.
        
    상황2)
      for char in 'banana'
          if char == 'b'
              print('b!')
              break
      else:
          print('b가 없습니다.')
    # b!