반복문
반복문이란 특정 조건이 참인 경우에 동일한 명령어를 여러 번 실행하는 문장을 의미합니다. 같은 문자열을 여러 번 반복하거나 변수에 1씩 더해서 계속 출력해야 하는 경우 반복문이 도움을 줄 수 있습니다.
for-in문
for문은 정해진 횟수만큼을 반복하는 구조입니다. 사용 형식은 아래와 같습니다. 여기서 시퀀스란 (다음 포스팅에서 다룰) 리스트
처럼 요소들을 가지고 있는 객체를 의미합니다.
for 변수이름 in 시퀀스:
#반복 실행할 문장
print("블라블라") #이때 같은 공백크기만큼 들여쓰기가 되어야 함.
여기 하나의 리스트 객체 persons 가 있습니다. 이 안에 속한 요소들 하나씩을 꺼내와서 출력하는 for문을 작성해봤습니다.
persons = ['subin', 'sobin', 'binbin'] #리스트 선언
for name in persons:
print(name+' ') #1
print(name, end=" ") #2
# 1 결과 - print()문은 출력 후 자동으로 줄바꿈을 시켜준다.
subin
sobin
binbin
# 2 결과 - end값으로 요소들 사이에 공백을 줄 수 있다. 이때 요소들은 한 줄로 출력된다.
subin sobin binbin
for-in range()문
range()는 for문의 반복 횟수를 임의로 제어하기 위해 사용하는 함수로 시퀀스 자리에 들어가면 됩니다. 형식은 다음과 같이 사용할 수 있습니다.
range([시작시점,] 종료시점 [, 간격크기]) #시작시점과 간격 크기는 생략 가능
#예1
for x in range(10):
... #횟수로 10번 실행됨.
#예2
for x in range(0, 10):
... #횟수로는 10번, 인덱스 값으로 사용한다면 0부터 9까지 실행됨.
#예3
for x in range(0, 10, 2):
... #0부터 시작하여 2번씩 띄운다는 의미로, 횟수로는 5번 실행됨.
여기서 주의할 점!
for-in-range()문을 사용할 때 반복 횟수는 종료 시점 - 시작시점
임을 기억해주세요.
위 코드에서 예2
를 보면 10-0
으로 총 10번이 실행됩니다.
저는 시작시점과 종료시점이 같은 경우에는 딱 한번 실행되지 않을까? 헷갈린 적이 있습니다. 예를 들어 for x in range(1, 1)
의 경우 1번째부터 시작이 되니 반복 횟수는 한번이지 않을까? ~땡땡땡!!~
이 경우 for문 블록 안에 단 한 번도 들어가지 않습니다. 종료 시점 - 시작시점
공식을 적용한다면 1 - 1
즉 횟수는 0번!
저처럼 실수하시는 분들이 계실까, 그리고 제가 보기 위해! 공식을 적어보았습니다.
while문
조건문이 참일 경우에 해당 블록에 싸인 반복 문장들이 실행되며, 무한 루프
를 돌지 않기 위해서는 제어문이 필요합니다. while문의 반복을 끝내는 쉽고 일반적인 방법은
break문
사용하기- 조건문에 쓰인 특정 변수값을 증감하여
조건문이 False가 되도록
하기 와 같이 두가지 입니다.
무한 루프란, 조건문이 늘 True여서 while문이 끝나지 않는 것을 의미합니다.
break문과 continue문
- break : 반복문을 끝내기 위해서 사용하는 키워드로서, 가장 가깝게 위치하는 블록의 반복문을 종료시킨다.
- continue : 현재 실행되고 있는 반복을 멈추고 다음 반복으로 넘어가 계속 반복문이 계속 진행된다. 반복문을 아예 빠져나가는 break와 차이가 있다.
문자열도 시퀀스 자료형!
앞선 포스팅에서 문자열도 배열 형식(리스트 형식)으로 저장되어 인덱싱이 가능하다고 했습니다. 따라서 for문의 시퀀스에 리스트를 넣는 것처럼 시퀀스 자리에 문자열도 넣는 것이 가능합니다.
다음 코드는 입력받은 문자열의 모음과 자음의 개수를 체크하여 출력하는 예제입니다.
original = input('문자열을 입력하시오: ')
word = original.lower() #모든 문자열을 소문자로 변경
vowels = 0 #모음 개수
consonants = 0 #자음 개수
#문자열이 유효한지 체크
if len(original) > 0 and original.isalpha():
#isalpah() :문자인지 아닌지에 따라 True/False 반환
for char in word:
if char in 'aeiou':
#문자열'aeiou' 안에 char가 포함되어 있으면 True, 아니면 False
vowels = vowels + 1
else:
consonants = consonants + 1
print("모음의 개수: ", vowels)
print("자음의 개수: ", consonants)