반복문 - if , while
반복문이란?
동일한 작업을 여러 번 실행하기 위해 사용되는 제어 구조입니다. 주로 for 문과 while 문이 사용되며, 각각의 반복문은 다른 상황에 적합한 방식으로 사용됩니다.
while 반복문
while문의 기본 구조
while 조건문: # 조건문의 결과가 True인 경우, 결과가 False가 될 때 까지, 수행할 문장들을 반복하여 실행한다.
수행할_문장1
수행할_문장2
수행할_문장3
...
예시 )
i = 1
while i <= 5: # 아래 문장을 5번 실행
print('Hello Python')
i += 1
>>
Hello Python
Hello Python
Hello Python
Hello Python
Hello Python
예시2 )
# 1부터 10까지의 총합
i = 1
sum = 0
while i <= 10:
sum += i # sum = sum + i
i += 1
print(sum)
>> 55
※ while 반복문의 주의사항
무한루프 : 만약 조건이 항상 True일 경우, 반복문이 무한하게 실행된다. 의도적으로 무한루프를 사용하는 경우가 아니라면, 조건을 잘 설정해야 한다.
조건 변경 : while문의 실행되는 동안, 조건이 변경되어야 while문이 종료되는 경우가 있다. 그럴 경우, 무한 루프에 빠질 수 있으니 주의해야 한다.
변수의 적절한 초기화 : 특정 조건의 변수가 while 반복문을 실행하는 동안, 값이 변경 될 수 있어, 수행할 문장 중간중간 적절한 초기화가 필요하다.
for 반복문
for 문은 시퀀스(리스트, 튜플, 문자열 등)의 각 항목에 대해 반복 작업을 수행하는 반복문입니다. for 문은 주로 "지정된 범위 내에서 반복"할 때 사용됩니다. for문은 반복할 요소들이 미리 정해져 있는 경우에 사용하기 유용합니다.
for문의 기본 구조
for 요소 in 시퀀스:
# 시퀀스 요소 갯수만큼 반복할 문장
#
요소: 반복할 시퀀스의 각 항목이 for 문의 실행 도중에 할당되는 변수입니다.
시퀀스: 반복할 데이터의 컬렉션(리스트, 튜플, 문자열 등)을 지정합니다. 이외의 다른 자료형(숫자, 불린 등)에는 사용할 수 없습니다.
작업: 각 요소에 대해 수행할 작업을 표현합니다.
예시 )
list1 = [10, 20, 30, 40]
for li in list1:
print(li)
>>
10
20
30
40
반복문에서 자주 사용하는 함수
range()
설정한 정수의 범위를 지정할 수 있다.
range(start, stop, step)
# start는 생략이 가능하며, 기본값은 1 이다.
# step은 생략이 가능하며, 기본값은 0 이다.
예시 )
for i in num:
print(i, end=' ')
>>
1 2 3 4 5 6 7 8 9 10
enumerate()
인덱스와 해당 값을 가져올 수 있다.
enumerate(iterable, 시작값)
예시 )
li1 = [10, 20, 30, 40, 50]
# 시작값은 실제 인덱스 번호가 아닌, 사용자가 지정하는 시작값에 따라, 순서가 지정된다.
li1 = [10, 20, 30, 40, 50]
for e in enumerate(li1, 1):
print(e)
>>
(1, 10)
(2, 20)
(3, 30)
(4, 40)
(5, 50)
zip()
여러 개의 반복 가능한(iterable) 객체를 병렬적으로 묶어주는 내장 함수입니다. 각 객체로부터 순서대로 하나의 요소씩 가져와 튜플로 묶어주는 이터레이터를 반환합니다. 주로 여러 개의 리스트나 튜플을 병렬적으로 처리하고자 할 때 사용됩니다.
zip(iterable1, iterable2, ...)
예시 )
li1 = [10, 20, 30]
li2 = ['apple', 'banana', 'orange']
for i in range(0, 3):
print(li1[i], li2[i])
>>
10 apple
20 banana
30 orange
li1 = [10, 20, 30, 40] # 인덱스가 차이가 나도 오류 없이 실행
li2 = ['apple', 'banana', 'orange']
for l1, l2 in zip(li1, li2):
print(l1, l2)
>>
10 apple
20 banana
30 orange
li1 = [10, 20, 30]
li2 = ['apple', 'banana', 'orange']
# 변수가 하나일 시, 튜플로 묶어서 반환
for li in zip(li1, li2):
print(li)
>>
(10, 'apple')
(20, 'banana')
(30, 'orange')
# 변수를 지정할 수 있다.
for n, A, a in zip('12345', 'ABCDE', 'abcde'):
print(n, A, a)
>>
1 A a
2 B b
3 C c
4 D d
5 E e
※ 중첩 반복문
하나의 반복문에 다른 반복문이 중첩된 구조이며, 여러 조건의 작업을 수행할 수 있다.
for 외부변수 in 외부시퀀스:
for 내부변수 in 내부시퀀스:
내부 반복문 코드
외부 반복문 코드
예시 )
for i in range(1, 4):
print(f'🍔 i:{i}')
for j in range(1, 4):
print(f'🍟 j:{j}')
>>
🍔 i:1
🍟 j:1
🍟 j:2
🍟 j:3
🍔 i:2
🍟 j:1
🍟 j:2
🍟 j:3
🍔 i:3
🍟 j:1
🍟 j:2
🍟 j:3
중첩 반복문 활용 문제
'🎃'를 이용하여 아래와 같은 모형을 만들어보자
🎃 🎃 🎃 🎃 🎃
🎃 🎃 🎃 🎃 🎃
🎃 🎃 🎃 🎃 🎃
🎃 🎃 🎃 🎃 🎃
🎃 🎃 🎃 🎃 🎃
# 풀이
for i in range(5):
for j in range(5):
print('🎃', end=' ')
print()
🎃 🎃 🎃 🎃 🎃
🎃 🎃 🎃 🎃
🎃 🎃 🎃
🎃 🎃
🎃
# 풀이
for i in range(5):
for j in range(5-(i)): # range(i, 5)
print(('🎃'), end=' ')
print()
🎃
🎃 🎃
🎃 🎃 🎃
🎃 🎃 🎃 🎃
🎃 🎃 🎃 🎃 🎃
# 풀이
for i in range(5):
for j in range(i+1):
print(('🎃'), end=' ')
print()
2단 부터 9단까지 구구단을 출력하기
# for문을 사용한 풀이
for i in range(2, 10):
print(f'{i}단')
for j in range(1, 10):
print(f'{i}X{j}={i*j}')
print()
# while문을 사용한 풀이
i = 2
while i <= 9:
print(f'{i}단')
while j <= 9:
print(f'{i}x{j}={i*j}', end="\n")
j += 1
i += 1
j = 1
print()