같은 작업을 여러 번 반복하여 실행하기 위해 반복(iteration)문이 필요하다.
반복문에는 for문과 while문이 있다.
for문은 정해진 횟수만큼 동작을 반복할 때 사용한다. 다음과 같은 구조를 가진다.
시퀀스에 항목이 남아있으면 다음 항목을, 그렇지 않다면 for 반복문을 빠져나온다. 다음 예시를 보면 어떤 방식으로 작동하는지 알 수 있다.
for name in ["사과", "수박", "자두", "포도" ]:
print("제 이름은 " + name + "입니다.")
제 이름은 사과입니다.
제 이름은 수박입니다.
제 이름은 자두입니다.
제 이름은 포도입니다.
for문에 있는 name과 같은 변수를 루프 변수라 한다. 변수 이름은 원하는 대로 설정할 수 있다. 루프 몸체는 들여쓰기해야 한다.
정수 리스트에서 정수를 출력하는 것 또한 동일한 방식으로 작성한다.
for x in [5, 4, 3, 2, 1]:
print(x)
5
4
3
2
1
for문이 실행되면 리스트에서 정수를 하나씩 꺼내 변수 x에 할당하고, 몸체에 있는 명령문을 실행한다.
이 때, 리스트를 직접 만들지 않고 range() 함수를 이용하여 반복문을 구성할 수 있다.
이 함수를 이용하면 원하는 구간의 정수를 생성할 수 있다.
예를 들어 range(10)
은 0부터 9까지의 정수를 연속으로 반환한다. range(3, 10)
과 같이 범위를 설정할 수도 있다. 이 함수는 3부터 9까지의 정수를 반환한다. step을 설정할 수도 있는데, 예를 들어 range(0, 10, 2)
는 0부터 9까지 2씩 건너뛰면서 반환한다. 즉 0, 2, 4, 6, 8을 반환한다.
정리하면 range 함수는 다음과 같은 형식이 가능하다.
range(stop)
range(start, stop)
range(start, stop, step)
//stop 이전까지만 반환, 기재되어있지 않은 경우 start는 0, step은 1로 간주됨
👉🏻ranege() 함수가 반환하는 것은 연속적인 정수를 생성하는 제너레이터 객체이다. 리스트를 생성하지 않는다. 리스트로 생성하고 싶은 경우, list(range(10))
과 같이 range 함수가 반환하는 객체를 받아 list로 변환해주면 된다.
다음을 참고하자.
print(range(10))
print(list(range(10)))
range(0, 10)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
문자열 또한 시퀀스가 될 수 있다. 다음 예시와 같이 사용할 수 있다.
for c in "abcdefg":
print(c , end = " ")
a b c d e f g
👉🏻print 함수의 두 번 째 인자로 전달된 end = " "의 의미는 c를 출력한 후에 개행을 하지 말고 따옴표 안의 값, 공백을 출력하라는 의미이다. 따라서 줄이 바뀌지 않고 한 줄에 출력되었다.
while문은 조건을 정해놓고 반복을 할 때 사용한다. 구조는 다음과 같다.
반복문에서 입력할 데이터의 개수가 정해져있지 않거나 데이터가 너무 많아 개수를 알기 어려운 상황에서는 데이터의 끝에 끝임을 알리는 특수한 데이터를 놓을 수 있는데, 이를 보초값이라 한다. 예를 들어 프로그램을 종료하려면 음수를 입력하거나 0을 입력하도록 할 수 있다.
반복문도 조건문처럼 중첩할 수 있다. 다음 예시와 같이 활용한다.
예시 코드의 end = ""
는 개행을 하지 않기 위해, print("")
는 개행을 위해 삽입되었다.
문자열도 시퀀스이므로, 반복문을 통해 쉽게 처리할 수 있다.
문자열을 입력받아 모음을 제거하는 코드는 다음과 같이 작성할 수 있다.
Python Tutor라는 도구를 이용하면 파이썬 코드의 실행을 그림으로 시각화하여 볼 수 있다.
사이트 주소 : https://pythontutor.com/