무엇을 하는 것인가
같은 코드를 백 번 복사해 붙이는 사람은 없습니다. 반복문은 "이 일을 여러 번 해라"라고 한 번만 적는 방법입니다.
다른 언어의 for는 보통 i = 0; i < 10; i++처럼 숫자를 세는 모양입니다. 파이썬의 for는 다릅니다. for 항목 in 목록:은 목록에서 하나씩 꺼내 항목에 넣고 아래를 실행하기를 끝까지 반복합니다.
그래서 파이썬에서는 리스트든 문자열이든 파일이든, "여러 개가 들어 있는 것"이면 무엇이든 그대로 for에 넣을 수 있습니다. 길이를 세서 인덱스로 접근할 일이 거의 없습니다.
숫자를 세고 싶을 때만 range()를 씁니다. range(5)는 0,1,2,3,4를 만듭니다. 5는 포함되지 않습니다. 시작이 0이고 끝이 빠진다는 두 가지가 초보자가 가장 자주 틀리는 곳입니다.
예제 코드
아래 코드가 위 버튼으로 받는 파일과 같은 내용입니다. 통째로 복사해 실행해 보고, 값을 바꿔 가며 결과가 어떻게 달라지는지 보는 편이 읽기만 하는 것보다 훨씬 빨리 익습니다.
# for 반복문 — 같은 일을 여러 번 시키기
# 파이썬의 for 는 "몇 번 돌아라" 가 아니라 "안에 든 것을 하나씩 꺼내라" 입니다.
명단 = ["김서연", "이준호", "박민지"]
for 이름 in 명단: # 명단에서 하나씩 꺼내 이름에 넣습니다
print("안녕하세요,", 이름, "님")
# 몇 번째인지도 필요하면 enumerate. 1 부터 세려면 두 번째 인자에 1.
for 번호, 이름 in enumerate(명단, 1):
print(번호, "번:", 이름)
# 숫자를 셀 때만 range 를 씁니다.
# range(5) 는 0,1,2,3,4 — 5 는 들어가지 않습니다. 여기서 많이 틀립니다.
for i in range(5):
print("i =", i)
for 단 in range(2, 4): # 2, 3 (4는 빠짐)
for 곱 in range(1, 10):
print(단, "x", 곱, "=", 단 * 곱)
print("---")
# break 는 통째로 그만, continue 는 이번 것만 건너뛰기
for 수 in range(1, 11):
if 수 % 2 == 0:
continue # 짝수는 건너뛴다
if 수 > 7:
break # 7 을 넘으면 아예 그만둔다
print("홀수:", 수) # 1, 3, 5, 7
# 문자열도 "여러 개가 든 것" 이라 그대로 돌릴 수 있습니다.
for 글자 in "파이썬":
print(글자)
기억할 것
for 항목 in 목록:— 목록에서 하나씩 꺼내 항목에 넣습니다.range(5)는 0부터 4까지. 5는 들어가지 않습니다.- 1부터 세고 싶으면
range(1, 6). 끝이 빠지므로 6을 적어야 5까지 나옵니다. - 번호와 값이 둘 다 필요하면
enumerate()를 씁니다. - 중간에 그만두려면
break, 이번 것만 건너뛰려면continue.
자주 묻는 것
range(5) 인데 왜 5 가 안 나오나요
파이썬은 "0부터 시작해서 끝은 빼고"가 기본입니다. range(5)는 다섯 개(0,1,2,3,4)를 만듭니다. 개수는 맞고 마지막 값만 하나 작다고 생각하면 편합니다. 1부터 5까지가 필요하면 range(1, 6)을 쓰세요.
반복하면서 몇 번째인지도 알고 싶습니다
for i, 이름 in enumerate(명단): 처럼 쓰면 i에 0부터 번호가, 이름에 값이 들어옵니다. 1부터 세려면 enumerate(명단, 1)입니다.
while 문과 언제 나눠 쓰나요
몇 번 할지 정해져 있으면 for, 조건이 끝날 때까지면 while입니다. 명단을 훑는 건 for, 사용자가 "그만"이라고 칠 때까지 계속 물어보는 건 while이 맞습니다.
반복 중에 리스트를 지워도 되나요
피하세요. 훑는 도중에 원소를 지우면 건너뛰는 것이 생깁니다. 남길 것만 골라 새 리스트를 만드는 편이 안전합니다.