01-09) 반복문

slow_starter·2025년 5월 22일
0

모두의연구소-DS4기

목록 보기
9/30
post-thumbnail

01. While문

  • 특정 조건을 만족할 때까지 반복하는 제어문
  • 조건을 제대로 설정하지 않으면, 무한 루프에 빠질 수 있음
## while문의 가장 기초적인 예시
idx = 1 # 처음 idx를 1에서 시작
while idx <= 10 : # idx가 10이 될 때까지
	print(idx) # idx 값을 출력
    idx += 1 # idx값을 하나씩 증가시키면서 할당..
# 위와 같이 하면 1,2,... 10까지 출력됨
  • break : while문 조건을 만족하지 않으면 강제로 빠져나감
  • continue : while문 조건을 만족하지 않으면

그러면 1~100 까지의 자연수 중에서, 2의 배수와 3의 배수가 아닌 숫자만 출력하는 반복문을 만들어 보자.

# break문으로 만들게 된다면?
a = 1 # 일단 a=1 부터 시작
while a <= 100 # 100까지 체크
    a += 1 # a에 1보다 더 큰 값 할당하고
    if (a % 2 == 0) or (a % 3 == 0): # 2나 3의 배수라면
        break # break! while문 깨고 나오기
    print(a)
# continue 문으로 만든다면?
a = 1
while a <= 100:
    if (a % 2 == 0) or (a % 3 == 0):
        a += 1 # 조건을 만족하면 a를 증가시킨 후,
        continue # 다음 루프로 넘어감 (출력 생략)
    print(a)
    a += 1 # 조건을 만족하지 않으면 출력
    # 주의! 이걸 빼먹으면 무한 루프 발생

02. for문

  • for문의 구조는 아래와 같음
# for문의 구조 (pseudo-code, 작동하는 코드X)
for 변수 in collection :
    수행할 문장
  • 지난 게시글의 '점수구간별 학점 부여'하는 예시를 for문으로 바꿔서 더욱 간결하게 표현 가능함.
# 지난 포스팅에서 if-elif-else 통해 A+부터 F까지 학점 부여한 코드
raw_score = 85 
if raw_score >= 97:
	print(f'원점수는 {raw_score}이고, 학점은 A+ 입니다.')
elif raw_score >= 94:
	print(f'원점수는 {raw_score}이고, 학점은 A0 입니다.')
elif raw_score >= 90:
	print(f'원점수는 {raw_score}이고, 학점은 A- 입니다.')
elif raw_score >= 87:
	print(f'원점수는 {raw_score}이고, 학점은 B+ 입니다.')
elif raw_score >= 84:
	print(f'원점수는 {raw_score}이고, 학점은 B0 입니다.')
elif raw_score >= 80:
	print(f'원점수는 {raw_score}이고, 학점은 B- 입니다.')
elif raw_score >= 77:
	print(f'원점수는 {raw_score}이고, 학점은 C+ 입니다.')
elif raw_score >= 74:
	print(f'원점수는 {raw_score}이고, 학점은 C0 입니다.')
elif raw_score >= 70:
	print(f'원점수는 {raw_score}이고, 학점은 C- 입니다.')
elif raw_score >= 60:
	print(f'원점수는 {raw_score}이고, 학점은 D+ 입니다.')
else:
	print(f'원점수는 {raw_score}이고, 학점은 F 입니다.')
raw_score = 85
grades = {
    97: 'A+',
    94: 'A0',
    90: 'A-',
    87: 'B+',
    84: 'B0',
    80: 'B-',
    77: 'C+',
    74: 'C0',
    70: 'C-',
    60: 'D+'
}
# dict.items()는 정렬된 순서가 보장되지 않음
# sorted(grades.items())만 쓰면 → 점수 낮은 것부터 오름차순 정렬
# reverse = True 옵션 통해, 
for cutoff, grade in sorted(grades.items(), reverse=True):
    if raw_score >= cutoff:
        print(f'원점수는 {raw_score}이고, 학점은 {grade}입니다.)
        break
else:
    print(f'원점수는 {raw_score}이고, 학점은 F 입니다.')
  • 그런데 여러 사람의 점수를 입력받아서, 학점을 출력하려면 어떻게 해야할까? 다음 게시글에서 다룰 '함수'를 통해 다뤄보겠음.

  • for문에서는 range() 함수도 같이 활용이 됨

    • range(시작, 끝값+1, 증가 값) 형태로 활용
    • 증가값만 생략하거나, 시작/증가 값 다 생략하는 것도 가능
    • 증가 값에 음수를 넣어 역순으로 처리하는 것도 가능
profile
2025화이팅!

0개의 댓글