우와한 개발자

[Python] 반복문 - for와 while / break와 continue / 반복 실행 상태(progress bar : tqdm 패키지)

by 우와한개발자

1. for 

1) 기본 문법

for 변수 in 나열가능한자료:
	반복 실행할 문장
else:
	반복문이 중간에 끊기지 않고 끝까지 수행되었을 때 실행할 문장

 

2) 특징 

  • 변수는 여러 개가 될 수 있음
  • 나열 가능한 자료는 리스트, 튜플, 딕셔너리, 셋 등이 될 수 있음
  • else 구문은 선택사항 : break로 중간에 반복문이 멈추지 않았을 때 마지막에 1번 수행.
  • 반복문에 아무것도 없으면 에러 발생하기 떄문에 실행할 코드가 없는 경우 pass 를 넣어 아무것도 실행하지 않음을 명시해야함
# 구구단
for dan in range(2, 10):
    for i in range(1, 10):
        print(dan, "x", i, "=", dan * i)

 

3) 루프 변수 스코프

  • 자바와 달리 루프 변수가 반복문 종료 후에도 살아있음
  • 파이썬의 for문은 별도의 스코프를 생성하지 않기 때문에 루프 변수는 현재 스코프에 그대로 남음
  • 루프 변수가 남아있어 의도치 않게 재사용되거나 덮어써질 수 있으니 주의
for i in range(5):
    pass

print(i)  #  4 → 마지막 값이 남아있음

 

2. while

  • else 구문은 선택사앙 : break로 중간에 반복문이 멈추지 않았을 때 마지막에 1번 수행.
while 조건문:
	조건이 참일 동안 반복 실행할 문장
else: 
	반복문이 break 없이 정상 종료됐을 때 실행할 문장
# 구구단
i = 1
while i <= 9:
    print("3 x", i, "=", 3 * i)
    i += 1

 

⚠️ range()
- 연속된 정수의 범위를 만들어주는 함수
- range객체 반환
형식 설명 예시
range(to) 0부터 to-1까지 range(5) → 0,1,2,3,4
range(from, to) from부터 to-1까지 range(2, 5) → 2,3,4
range(from, to, by) from부터 to-1까지 만큼 증가/감소 range(1, 10, 2) → 1,3,5,7,9
print(list(range(1, 11, 2))) #[1, 3, 5, 7, 9]​

 

 

3. break와 continue

1) break

  • 반복문 내에서 break만나면 반복문 탈출

2) continue

  • 반복문 내에서 continue 이후의 문장을 실행하지 않고 건너 뜀

 

label과 as 키워드
- 레이블을 통해 반복문을 식별하는 기능으로 파이썬에서는 구현해놓지 않음

 

4. 반복문 실행상태 표시

  • 반복문이 얼마나 진행되었는지 진행상태를 시각적으로 보여줄 수 있음

1) print()의 end='\r' 활용

  • end='\r'은 줄바꿈 대신 커서를 맨앞으로 돌려 출력을 덮어씀
  • 이를 활용해 같은 줄에 진행상태를 계속 갱신할 수 있음
import time

progress = ''
percent = 0
num = 100

for i in range(1, num+1):
    percent = (i / num) * 100
    progress = int(percent / 2) * '#'
    time.sleep(0.1) # 0.1초씩 지연해서 보여줌
    print(f'{percent:5.1f}%[{progress:<50s}] {i}', end='\r')

 

 

2) tqdm 패키지 활용

  • 파이썬의 진행 바(Progress Bar) 라이브러리
  • 반복문이 얼마나 진행됐는지 시각적으로 표시해주는 패키지
  • 기본 내장 패키지가 아니므로 별도 설치 필요
pip install tqdm
from tqdm import tqdm
import time

for i in tqdm(range(100)):
    time.sleep(0.1)
    
# 100%|██████████| 100/100 [00:10<00:00,  9.98it/s]
표시 요소 설명
100% 진행률
██████████ 진행 바
100/100 현재 / 전체
00:10 경과 시간
00:00 예상 남은 시간
9.98it/s 초당 처리 속도

 

(1) 자주 사용하는 옵션

# 설명 추가
for i in tqdm(range(100), desc="학습 중"):
    time.sleep(0.1)
# 학습 중: 100%|██████████| 100/100 [00:10<00:00]

# 전체 개수 직접 지정
for i in tqdm(range(100), total=100):
    time.sleep(0.1)

# 진행 바 없이 텍스트만
for i in tqdm(range(100), bar_format='{l_bar}{r_bar}'):
    time.sleep(0.1)

 

 

(2) 머신러닝/딥러닝에서 자주 쓰는 패턴

from tqdm import tqdm

epochs = 10
for epoch in tqdm(range(epochs), desc="Epoch"):
    # 학습 코드
    pass

 

블로그의 정보

우와한개발자 님의 블로그

우와한개발자

활동하기