반복문
같은 코드를 여러번 반복하고 싶을 때가 있다. 반복문이 있기 때문에 하나하나 코드를 적을 필요가 없다.
반복문은 동일한 작업을 여러번 실행하기 위해 사용하는 제어 구조이다.
while
while 조건:
# 조건이 참인 동안 실행될 코드
while 반복문은 조건이 참인 동안은 계속 반복하는 구조이다. 조건이 거짓이 되면 반복을 멈춘다.
반복 출력
i = 1 # 적절하게 초기화
while i <= 5: # 여기서 조건이 거짓임을 판별하는 순간 빠져나옴
print("Hello Python")
i += 1 # i = i + 1
while 조건문에 사용되는 변수는 while 이전에 초기화가 되어야 한다.
조건은 "i가 5보다 작거나 같다"이다. 조건이 참인 동안에는 반복하지만 원하는 만큼 반복한 후 조건을 거짓으로 만들어서 반복문을 멈춰야 한다. 이때 대입 연산자 i += 1 를 적절하게 사용해야 한다.
# 1부터 10까지의 총합
i = 1
sum = 0
while i <= 10:
sum += i
# 0 += 1 -> 1
# 1 += 2 -> 3
# 3 += 3 -> 6
# 6 += 4 -> 10
# 10 += 5 -> 15
# 15 += 6 -> 21
# 21 += 7 -> 28
# 28 += 8 -> 36
# 36 += 9 -> 45
# 45 += 10 -> 55
# i가 11, sum이 55
i += 1
print(f'1부터 10까지의 합: {sum}')
while의 동작 설명이다. 이해가 되길 바란다.
무한루프
i = 1
while i <= 5:
print('Hello Python') # 무한루프
위 코드를 실행하면 Hello Python을 무한하게 출력한다.
조건이 거짓이 되어야 반복을 멈추는데 위 코드에선 i = 1로 변하지 않는다.
i를 1씩 증가시켜 주거나 5보다 커지는 순간을 만들면 무한루프는 멈출 것이다.
while True:
print('Hello python')
위 코드와 같은 결과를 가진다. 무한루프는 에러가 아니다. 적절하게 아니 어쩌면 프로그램을 만드는데 꼭 필요한 기법이라고 할 수 있다.
구구단
# 원하는 구구단을 입력받아 해당 단의 구구단을 출력
dan = int(input('원하는 단을 입력하세요 '))
print(f'{dan} 단')
i = 1
while i <= 9:
print(f'{dan} * {i} = {dan * i}')
i += 1
반복문을 배운다면 구구단을 피할 수 없다.
반복문을 공부할 땐 인내가 필요하다. 한 번의 반복마다 코드가 어떻게 흐르는지 꼼꼼하게 생각해보면 금방 익숙해질 것이다.
for
for 요소 in 시퀀스:
# 요소에 대한 작업 수행
for는 while과 다르게 시퀀스와 함께 사용한다. 시퀀스란 리스트, 튜플, 문자열 등을 말한다.
for는 보통 지정된 범위가 있거나 반복할 요소들이 정해져 있는 경우 사용한다.
list와 for
list1 = [10, 20, 30, 40]
for li in list1:
print(li)
list를 for와 함께 사용할 수 있다.
l1에는 list1의 0번 인덱스부터 마지막 인덱스까지 순서대로 반복하며 저장된다. li 출력을 통해 어떤 반복이 되는지 알 수 있다.
range() 함수
range([start], stop, [step])
# []는 생략가능
range() 함수는 순차적인 정수 시퀀스를 생성하는 데 사용되는 파이썬 내장 함수이다. 주로 for문과 함께 사용되며, 일정한 범위 내에서 반복 작업을 수행할 때 사용된다. range() 함수의 결과로 생성되는 순차적인 정수 시퀀스는 실제로 메모리에 저장되지 않고 필요할 때마다 생성되므로, 큰 범위의 반복문에도 효율적으로 사용할 수 있다.
range()
num = range(0, 10, 1)
print(num)
range() 함수의 반환값은 range 객체이다. 실제로 정수 시퀀스를 저장하는 것이 아니고 범위 정보만 가지고 있는다. 이 정수 범위에 대한 정보를 가진 객체를 통해 여러 결과를 만들 수 있다.
for i in num: # 메모리에 남는다.
print(i, end=' ')
for i in range(0, 10, 1): # 메모리에 남지 않는다.
print(i, end=' ')
range() 함수를 직접 사용하지 않고 변수를 거쳐 사용하게 되면 메모리에 남게 된다.
enumerate
enumerate() 함수는 반복문을 사용할 때 인덱스와 값을 함께 가져오기 위해 사용되는 내장 함수이다.
주로 for 문과 함께 사용된다.
(인덱스, 값)의 튜플을 반환하는 이터레이터(Iterator)를 생성한다.
enumerate()
li1 = [10, 20, 30, 40, 50]
for e in enumerate(li1):
print(e)
언패킹
li1 = [10, 20, 30, 40, 50]
for i, v in enumerate(li1):
print(f'index: {i}, value: {v}')
인덱스와 값을 튜플 형태로 받을수도 있고 언패킹을 통해 변수에 각각 저장할 수 있다.
zip() 함수
zip() 함수는 여러 개의 반복 가능한 객체를 병렬적으로 묶어주는 내장 함수이다.
각 객체로부터 요소를 순서대로 하나씩 가져와 튜플로 묶어주는 이터레이터를 반환한다.
여러 개의 리스트나 튜플을 병렬적으로 처리할 때 사용한다.
zip()
li1 = [10, 20, 30]
li2 = ['apple', 'banana', 'orange']
for i in range(len(li1)): # 인덱스를 얻을 수 있다.
print(li1[i], li2[i]) # 크기가 다르면 인덱스 에러가 날 수 있다.
# 좋은 코드가 아니다.
# zip() 함수를 사용해보자.
두 컬렉션 객체를 하나의 객체로 묶는 방법은 여러가지이다. 위는 객체화가 아닌 병렬로 출력하는 코드이다.
len() 함수를 사용하여 인덱스를 얻을 수 있다.
li1 = [10, 20, 30, 40]
li2 = ['apple', 'banana', 'orange']
# 크기가 작은 쪽에 맞춰서 동작함.
for l1, l2 in zip(li1, li2):
print(l1, l2)
# print((1i, l2)) # 튜플로 묶어줌
for l in zip(li1, li2): # 알아서 튜플로 묶어줌
print(l)
range() 함수를 통해 직접 크기만큼 반복하는 대신 zip() 함수를 사용하면,
각각의 객체의 같은 인덱스 끼리 순서대로 묶을 수 있다.(튜플로)
위의 두가지는 튜플을 언패킹 하는 것과 튜플 그대로 출력하는 경우이다.
각각의 리스트 크기가 다르다면 가장 크기가 작은 쪽에 맞춰서 동작한다. 초과되는 인덱스 값들은 버려진다.
문자열 & zip()
for n, A, a in zip('12345', 'ABCDE', 'abcde'):
print((n, A, a))
문자열도 가능하다.
중첩 반복문
말 그대로 두 개 이상의 반복문이 중첩된 경우이다.
for 외부_변수 in 외부_시퀀스:
for 내부_변수 in 내부_시퀀스:
# 내부 반복문 코드
# 외부 반복문 코드
파이썬은 들여쓰기를 기준으로 블럭처리가 되기 때문에 주의한다.
중첩 for
for i in range(1, 4):
print(f'i: {i}')
for j in range(1, 4):
print(f' j: {j}')
결과와 같이 다차원의 데이터를 처리하거나 복잡한 작업을 수행하는 데에 사용된다.
5 x 5 정렬된 닭다리
for i in range(5):
for j in range(5):
print('🍗', end=' ')
print()
* 중첩 반복문을 공부할 때 꼭 한번쯤은 풀어보는 예제가 있다.
기존 예제는 '*' 일명 별찍기를 하지만 닭다리로 구현해보았다.
닭다리찍기
for i in range(5):
for j in range(5 - i):
print('🍗', end=' ')
print()
for i in range(6):
for j in range(i):
print('🍗', end=' ')
print()
응용예제
구구단 for
for i in range(1, 10):
for j in range(2, 10):
print(f'{j} * {i} = {i*j}', end='\t')
print()
구구단 while
i = 1
while i <= 9:
j = 2
while j <= 9:
print(f'{j} * {i} = {j * i}', end='\t')
j += 1
i += 1
print()
구구단 다른 형태
# for 문
for i in range(2, 10):
print(f'{i} 단')
for j in range(1, 10):
print(f'{i} * {j} = {i * j}')
print()
...
'파이썬 > 기본' 카테고리의 다른 글
[파이썬] 랜덤 모듈 (0) | 2023.09.11 |
---|---|
[파이썬] 컬렉션과 반복 (0) | 2023.09.11 |
[파이썬][응용]음악 추천 프로그램 - if 제어문 공부 (1) | 2023.09.06 |
[파이썬] 조건문 (0) | 2023.09.06 |
[파이썬] 연산자 (0) | 2023.09.05 |
댓글