본문 바로가기

파이썬

[ 코랩과 파이썬 ] 7. python 반복문 for 문, 한 줄 for 문과 if 문

반응형

반복문에는 for 문과 while 문이 있고 이를 사용하면 같은 계산을 반복하거나 중복된 명령문을 간략히 구현할 수 있다.  두 구문의 차이는 반복할 횟수를 정확히 알고 있느냐 없느냐에서 발생한다. for 문은 몇 번 실행해야 하는지 정해져 있거나 list 등 컨테이너 자료처럼 객체의 개수(length)가 유한할 때 사용한다. 그래서 for 문을 유한 반복만이라고도 한다.

while 문은 몇 번 실행해야 할지 정확히 모르지만, 조건에 맞는 값이 존재하는 한 반복을 계속하게 된다. 해당 조건이 없거나 맞지 않다면 while 문은 무한 반복(루프)을 하게 되고 while True를 이용해 일부러 무한 반복을 만들기도 한다. 

 

먼저 for 문 분터 살펴보도록 하자.

 

1) 단일 for 문

 

for 문은 정해진 수만큼 유한 반복하는 명령문이다. 같은 계산을 10번 반복하거나 리스트(list) 등에 포함된 객체들을 첫 번째부터 하나씩 뽑아서 연산을 수행한다. 

for 문의 구문형식은 아래와 같다. 카운터 변수(for 다음)는 반복 대상(in 다음)에서 하나를 뽑는다는 의미로 임의의 변수를 설정한다. 일반적으로 반복 대상은 복수로 카운터 변수는 단수를 설정하면 직관적으로 이해하기가 쉽다. 예를 들어 numbers = (1, 2, 3)에서 1부터 차례로 빼고자 한다면 임의의 카운터 변수 number를 만들고 for number in numbers: 로 만들면 된다. 

 

for 카운터 변수 in 반복 대상(숫자열, 문자열, 리스트, 튜플, 문자열, 딕셔너리) :
<실행 명령문>

 


(1) 원하는 개수만큼 숫자를 이용한 반복문

 

은행을 방문해서 대기표를 뽑는다고 가정하면 대기표는 1부터 순서대로 출력하게 된다. 대기 번호 1~10까지 출력해 보자. 연속된 숫자를 생성하는 함수는 range(시작, 끝)를 사용한다. 이때 시작은 이상이고 끝은 미만이다. 따라서 range(1, 11)는 1부터 10까지의 연속된 숫자를 생성한다. 그리고 출력문(print)을 쓰는 방법은 표준 입출력 부분에서 자세히 다루도록 하자.

 

for num in range(1, 11):            # 1부터 11 미만의 값을 생성해 1부터 차례로 뽑음.
  push = input("on:")               # push 버튼 입력값을 받음: on 이면 버튼 클릭
  if push == "on":
    print(f"대기 번호 : {num}")))     # on을 기재할 때마다 대기 번호: 1, 대기 번호: 2.... 를 출력

 

 

(2) 문자열을 이용한 반복문

 

문자열은 알파벳 하나(한글에서는 한 자)가 한자리를 차지하기 때문에 for 문을 쓰면  알파벳 순서별로 뽑아오게 된다. for 문을 이용해 문자열을 역순으로 바꿔보자, 리스트 자료의 순서를 바꾸는 메서드는 reverse()이다. 하지만 문자열 순서를 바꾸는 메서드가 없기 때문에 for 문을 이용해 바꿔야 한다. 

 

words = "python is interesting"
reverse = ""                     # 역으로 바꾼 문자 저장 변수

for word in words:               # words에서 문자 'p'부터 차례로 가져옴
  reverse = word + reverse       # 지금 불러온 것 + 이전에 불러온 것을 붙임(역순이 됨): gnitseretni si noht

 

 

(3) 컨테이너 자료를 이용한 반복문

 

리스트, 튜플, 집합과 같은 컨테이너 자료에 for 문을 이용하면 객체들을 순서별로 하나씩 가져오게 된다. 월드컵 교체 선수를 ‘손흥민’, ‘이강인’, ‘조규성’ 순으로 투입했다고 하자.

 

players = ["손흥민", "이강인", "조규성"]
for player in players :          # '손흥민'부터 차례로 가져옴.
    print(f"{player} 선수가 교체 투입되었습니다.")

 

디션너리 자료의 경우에는 키(keys)와 값(values)으로 이루져 있기 때문에 이들을 차례로 불러올 수 있다. items() 메서드를 이용해 두 가지를 불러와서 사용하고자 하는 값을 반복하면 된다.

 

players = {1: "손흥민", 2: "이강인", 3: "조규성"}
for k, v in players.items() :                 # k(keys)와 v(values) 값을 하나씩 불러
    print(f"{v} 선수가 교체 투입되었습니다.")  # values(선수들 이름)를 하나씩 프린트

 

 

 

2) 중복 for 문(이중 for 문)

 

중복 for 문은 for 문 안에 다시 for 문을 쓰는 경우이다. 이러한 이중 for 문은 서로 다른 두 수를 반복할 때 사용한다. 두 수를 반복하는 가장 대표적인 예제는 구구단을 중복 for 문을 이용해 작성해 보자. 먼저 for 문을 이용해 1을 뽑아오고, 다음 for 문을 이용해 1~9를 뽑아와서 곱한다. 다음 2를 뽑아오고 다시 1~9까지 뽑아서 곱하는 것을 반복하게 된다.

 

for i in range(1, 10):          # 곱하기 앞자리 
  for j in range(1, 10):        # 곱하기 뒷자리
    print(f'{i} X {j} = {i*j}') # 1 X 1 = 1, 1 X 2 = 2  ...... 형식으로 출력

 

 

3) 한 줄 for 문

 

for 문을 한 줄로 만들어 반복을 작성하면 처리 속도가 매우 빨라지고 코드 역시 단순화된다. 하지만 한 줄 for 문은 결과를 리스트로 저장해야만 사용할 수 있다. 구문 형식은 아래와 같다.

 

[실행문 for 카운터 변수 in 반복 대상 ]


다음의 [1, 2, 3, 4, 5]에 100씩 더하기, 영어 소문자 [’apple’, ‘graph’, ‘pear’]를 대문자로 바꾸기, 글자 수를 세어서 리스트로 만들기를 수행해 보자.

 

nums = [1, 2, 3, 4, 5]
num_100 = [num + 100 for num in nums]         # 100 더하기: [101, 102, 103, 104, 105]

fruits = ('apple', 'graph', 'pear')           # 튜플 데이터 반복하기
FRUITS = [fruit.upper() for fruit in fruits]  # 대문자로: ['APPLE', 'GRAPH', 'PEAR']
fruit_num = [len(fruit) for fruit in fruits]  # 글자수: [5, 5, 4]

 

 

한 줄 for 문과 if 조건문 연결

 

if 문 역시 한 줄로 조건문을 작성할 수 있다는 것을 이전 if 문 블로그에서 확인하였다. for 문 역시 한 줄로 작성할 수 있으므로 for 문과 if 문을 붙여서 함께 사용할 수 있다. 이 역시 한 줄 for 문이어서 리스트 자료 유형으로 저장한다. 

 

[ 실행문 for 카운터 변수 in 반복 대상 if 조건]

 

# 홀 수를 찾아서 10 곱하기 리스트로 만들기 : for 문 안에 if 문 사용 
list_1 = [1, 2, 3, 4, 5, 7, 8, 9, 10]
list_a = []

for li in list_1:
  if li%2 == 1:       # 2로 나눈 나머지가 1인 수(홀수)
    list_a.append(li*10) # 홀수를 차례로 리스트에 넣기: [10, 30, 50, 70, 90]


# 홀 수를 찾아서 10 곱하기 리스트로 만들기 : 한 줄 for 문과 if 문 사용 
list_1 = [1, 2, 3, 4, 5, 7, 8, 9, 10]
list_a = [li*10 for li in list_1 if li%2==1]

 

 

for 문과 if, elif, else가 모두 있을 경우

 

조건문 if가 여러 개인 for 문의 경우 반복문 for 구문을 맨 뒤로 배치하고 그 앞에 한 줄 조건문을 만들면 된다. 성적 점수가 담겨 있는 리스트를 학점 리스트로 바꾸어 보자.

 

[ 실행문1 if 조건1 else 실행문2 if 조건2 else 실행문3 for 카운터 변수 in 반복 대상]

 

# 여러 줄로 for 문과 중복 if 문 사용
list_1 = [50, 70, 80, 65, 75, 85, 90, 100, 30, 73]
list_re = []

for li in list_1:
  if li < 60:
    list_re.append("F")
  elif li < 70:
    list_re.append("D")
  elif li < 80:
    list_re.append("C")
  elif li < 90:
    list_re.append("B")
  else:
    list_re.append('A')



# 한 줄로 for 문과 중복 if 문 사용
list_1 = [50, 70, 80, 65, 75, 85, 90, 100, 30, 73]
list_re = []

list_re = ["F" if li < 60 else "D" if li < 70 else "C" if li < 80  else "B" if li < 90 else "A" for li in list_1]
반응형