logo
Search검색어를 포함하는 게시물들이 최신순으로 표시됩니다.
    Table of Contents
    [Python] 흐름과 제어 - 반복

    이미지 보기

    [Python] 흐름과 제어 - 반복

    • 21.12.31 작성

    • 읽는 데 10

    TOC

    참고 강의

    SWEA 파이썬 프로그래밍 기초(1) 파이썬의 기본 구조와 기초 문법 #20


    for문

    List, Tuple, 사전, 문자열과 같은 객체 항목들을 순회하며 특정 작업을 반복해서 수행하기 위해 사용

    for문의 문법

    for 변수 in 순회할 객체:
      명령문1
      명령문2
    

    for문을 활용한 구구단

    무작정 범위 대입

    dan = int(input("단을 입력하세요.: "))
    for i in (1, 2, 3, 4, 5, 6, 7, 8, 9):
      print("{0} X {1} = {2:>2}".format(dan, i, dan * i))
    # {2:>2} : 정렬의 방향을 우측으로 하고 자리수는 2자리
    

    tuple이 아니라 list여도 괜찮음

    Range 함수 사용

    dan = int(input("단을 입력하세요.: "))
    for i in range(1, 10, 1):
      print("{0} X {1} = {2:>2}".format(dan, i, dan * i))
    

    Range() 함수

    • range() 함수는 객체를 생성하는 코드
    • range([시작값], 종료값, [증감치])
      • 시작값은 범위에 포함, 종료값은 범위에 미포함
      • 종료값은 생략할 수 없으나, 시작값과 증감치는 생략 가능
      • 인자를 생략할 경우, 시작값의 default는 0, 증감치의 default는 1
    # 모두 다 같은 결과를 내는 코드
    range(0, 10, 1)
    
    
    # 시작값(0) 생략
    range(10, 1)
    
    # 시작값(0), 증감치(1) 생략
    range(10)
    
    
    [결과]
    0, 1, 2, 3, 4, 5, 6, 7, 8, 9
    
    • 감소하는 range() 함수
    range(10, -1, -2)
    
    
    [결과]
    10, 8, 6, 4, 2, 0
    

    사전 객체를 이용한 항목 출력

    • 사전(Dictinary) 객체를 이용한다.

    dictionary 이용 1

    dogs = {1: "골든리트리버", 2: "진돗개", 3: "보더콜리"}
    
    for key in dogs:
      print("{0} : {1}".format(key, dogs[key]))
    
    
    [결과]
    1 : 골든리트리버
    2 : 진돗개
    3 : 보더콜리
    

    dictionary 이용 2

    dogs = {1: "골든리트리버", 2: "진돗개", 3: "보더콜리"}
    
    for key, value in dogs.items(): # <class 'dict_items'> 객체 사용
      print("{0} : {1}".format(key, value))
      # 변수 key와 변수 value에 key 정보와 value 정보를 차례대로 대입 후 print() 함수 실행
    
    
    [결과]
    1 : 골든리트리버
    2 : 진돗개
    3 : 보더콜리
    

    문자열을 이용한 개별 문자 출력

    str = "Star"
    
    for c in str:   # Star 를 구성하는 문자 각각이 해당 cycle의 c가 됨
      print("{0}".format(c))  # 문자열의 항목을 변수 c에 대입하고 print() 함수 호출
    
    
    [결과]
    S
    t
    a
    r
    

    리스트 객체를 이용해 총점 구하기

    scores = [100, 95, 88, 98]
    total = 0
    
    for score in scores:
      total += score
    
    print("총점 : {0}".format(total))
    
    
    [결과]
    총점 : 381
    

    중첩된 for문

    for문 안에 또 다른 for문이 들어있는 형태

    중첩된 for문의 문법

    for 변수1 in 순회할 객체1:
      for 변수2 in 순회할 객체2:
        명령문1
        명령문2
        명령문3
    

    중첩된 for문을 활용한 구구단 출력 코드

    dan = range(2, 10)
    num = range(1, 10)
    
    for i in dan:
      for k in num:
        print("{0} X {1} = {2:>2}".format(i, k, i * k))
        if k == 9:  # True일 경우 각 단 사이에 공백행을 추가하기 위한 구문
          print()
    

    k가 9인지 검사하는 if문을 사용하고 싶지 않을 경우

    dan = range(2, 10)
    num = range(1, 10)
    
    for i in dan:
      for k in num:
        print("{0} X {1} = {2:>2}".format(i, k, i * k))
      print()   # 안쪽 for문이 완료되면 바로 print() 함수 호출
    

    while문

    bool 값을 반환하는 조건식의 결과에 의해 반복 결정 조건식이 False 값을 반환해요 while문의 반복이 중지되므로 무한반복 방지 고려 필요

    while문의 문법

    while 조건식 :
      명령문1
      명령문2
      명령문3
    

    while문으로 작성한 구구단 출력 코드

    dan = int(input("단을 입력하세요: "))
    i = 1
    
    while i < 10:   # i가 10일 경우 False를 반환하며 while문 종료
      print("{0} X {1} = {2:>2}".format(dan, i, dan * i))
      i += 1  # 변수 i의 값을 1씩 증가시킴으로써 전체 while문 제어
    

    while문에서 리스트 객체를 이용해 총점을 구하는 코드

    scores = [100, 95, 88, 98]  # 리스트형으로 4개의 점수 저장
    total = 0
    cnt = len(scores)   # scores 리스트 내의 항목의 개수
    i = 0
    
    while i < cnt:
      total += score[i]
      i += 1
    
    print("총점 : {0}".format(total))
    
    
    [결과]
    총점 : 381
    

    break문과 continue문

    • for문 : 순회할 객체의 마지막 항목까지 반복
    • while문 : bool 값을 반환하는 조건식이 False를 반환할 때까지 반복
    • break문 : 논리적으로 반복문을 탈출
    • continue문 : 이후 코드는 건너뛰고 반복문을 계속 실행

    break문

    예시. 사용자의 입력값이 문자열 "q"이면 반복문을 빠져나오는 코드

    answer = ""   # 변수 answer는 공백 문자열("")로 초기화
    
    while True:
      answer = input("명령을 입력하세요.\n'q'를 입력하면 프로그램이 종료됩니다. : ")
      if answer == "q":
        break
      print("'{0}'를 입력하셨습니다.".format(answer))
    
    print("프로그램을 종료합니다...")
    
    
    [결과]
    명령을 입력하세요.
    'q'를 입력하면 프로그램이 종료됩니다. : a
    'a'를 입력하셨습니다.
    'q'를 입력하면 프로그램이 종료됩니다. : c
    'c'를 입력하셨습니다.
    'q'를 입력하면 프로그램이 종료됩니다. : q
    프로그램을 종료합니다...
    

    continue문

    예시. 1부터 10까지 저장되어 있는 리스트 객체에서 3의 배수를 제외한 합을 구하는 코드

    numlist = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
    total = 0
    
    for n in numlist:
      if n % 3 == 0:
        continue  # 해당 n 사이클에 대한 코드 진행 종료
      total += n
    
    print("3의 배수를 제외한 총합: {0}".format(total))
    
    
    [결과]
    3의 배수를 제외한 총합: 37
    

    for문과 while문을 활용해 프로그램 만들기

    문제

    [결과1]
    *
    **
    ***
    ****
    
    [결과2]
    *
    **
    ***
    ****
    *
    **
    ***
    ****
    
    [결과3]
         *
        ***
       *****
      *******
     *********
    ***********
    

    나의 답안

    # 문제 1
    for i in range(1, 5):
        print(i * "*")
    
    # 문제 2
    for i in (0, 1):
        for j in range(1, 5):
            print(j * "*")
    
    # 문제 3.1. for문
    for i in range(1, 12, 2):
        print("{0:^11}".format(i * "*"))
    
    # 문제 3.2. while문
    i = 1
    while i <= 11:
      print("{0:^11}".format(i * "*"))
      i += 2
    

    모범 답안

    # -*- coding: utf-8 -*-
    # star.py
    
    # Step 1.1. for문
    for i in range(1, 5):
      print("*" * i)
    
    # Step 1.2. while문
    i = 1
    while i <= 4:
      print("*" * i)
      i += 1
    
    
    # Step 2.1. for문
    for i in range(1, 3):
      for k in range(1, 5):
        print("*" * k)
    
    # Step 2.2. while문
    i, k = 1, 1
    
    while i <= 2:
      while k <= 4:
        print("*" * k)
        k += 1
      i += 1
      k = 1   # 내부 루프를 마치면 외부 루프의 cnt를 하나 늘리고 내부 루프의 cnt 초기화
    
    
    # Step 3.
    i = 5   # 공백의 크기
    k = 1   # 별의 개수
    
    i = 1
    while i >= 0:
      print("{0}{1}".format(" " * i, "*" * (2 * k - 1)))
      i -= 1
      k += 1
    
    profile

    FE Developer 박승훈

    노력하는 자는 즐기는 자를 이길 수 없다