본문 바로가기
파이썬/기초 학습

Day 5: 반복문(while,for) 추가 학습

by CBROJIN 2025. 7. 30.

1) 학습 요약표

학습 내용 설명
while 반복문 조건이 참(True)인 동안 코드 블록을 계속 실행
for 반복문 리스트, 문자열, 딕셔너리 등 순회 가능한(iterable) 자료형을 하나씩 꺼내 반복 실행
range() 함수 숫자 범위를 생성 (시작값, 끝값, 간격)
중첩 반복문 반복문 안에서 또 다른 반복문 실행
딕셔너리 순회 keys(), values(), items()로 키와 값 접근 가능
print()의 end 옵션 출력 시 줄바꿈 대신 원하는 구분자(공백, 콤마 등) 사용
 

2) 이론 학습

1. while 반복문

개념:

  • 조건식이 True일 때만 코드 블록을 계속 실행하며, 조건이 False가 되면 종료.
  • 반복 횟수가 정해지지 않았을 때 유용.
  • 무한 루프를 피하려면 카운터 증가나 break 사용 필요.

예제 1: 서버 5대 점검

server_count = 0
while server_count < 5:
    server_count += 1
    print(f"서버 {server_count} 점검 완료")

 

출력 예시:

서버 1 점검 완료
서버 2 점검 완료
서버 3 점검 완료
서버 4 점검 완료
서버 5 점검 완료

 

예제 2: 1부터 20까지 합 구하기

num = 1
total = 0
while num <= 20:
    total += num
    num += 1
print(f"1부터 20까지의 합: {total}")

 

출력 예시:

1부터 20까지의 합: 210

 

예제 3: 10부터 50까지 5의 배수 리스트

multiples = []
num = 10
while num <= 50:
    multiples.append(num)
    num += 5
print(multiples)

 

출력 예시:

[10, 15, 20, 25, 30, 35, 40, 45, 50]

 

 

2. for 반복문

개념:

  • iterable 객체(리스트, 문자열, 튜플, 딕셔너리 등)에서 요소를 하나씩 꺼내 반복.
  • range()와 함께 사용해 범위 기반 반복 구현 가능.
  • 루프 변수는 반복 종료 후 메모리에서 해제됨.

예제 : 포트 번호 출력

for port in range(1000, 1005):
    print(f"포트 {port} 체크")

 

출력 예시:

포트 1000 체크
포트 1001 체크
포트 1002 체크
포트 1003 체크
포트 1004 체크
 

3. 중첩 반복문

개념:

  • 2중 반복문으로 2차원 리스트, 장비-포트 조합 등 처리 가능.
  • 바깥 루프 1회당 안쪽 루프가 전체를 반복.

예제 : 2개 스위치, 각 3개 포트 조합

for sw in ["SW1", "SW2"]:
    for port in range(1, 4):
        print(f"{sw}-포트{port}")

 

출력 예시:

SW1-포트1
SW1-포트2
SW1-포트3
SW2-포트1
SW2-포트2
SW2-포트3
 

4. 컬렉션 순회 (리스트, 문자열, 딕셔너리, 튜플 언패킹)

컬렉션 자료형(리스트, 문자열, 딕셔너리, 튜플)을 순회할 때 다양한 방식과 메서드를 활용할 수 있습니다.

 

예제 : 리스트 인덱스로 순회 (len() 활용)

  • 개념: range(len())로 리스트 인덱스를 생성해 요소에 접근.
nums = [1, 3, 5, 7]
for i in range(len(nums)):
    print(f"인덱스 {i}: {nums[i]}")

 

출력 예시:

인덱스 0: 1
인덱스 1: 3
인덱스 2: 5
인덱스 3: 7

 

예제 : 문자열 문자 출력 (end 옵션 사용)

  • 개념: 문자열은 반복 가능한 객체. end=' '로 줄바꿈 대신 공백 출력.
msg = "Python"
for ch in msg:
    print(ch, end=' ')

 

출력 예시:

P y t h o n

 

예제 : 딕셔너리 순회 (keys, values, items)

  • 개념: 딕셔너리는 3가지 방식으로 순회 가능.
fruits = {"apple": "red", "banana": "yellow", "grape": "purple"}
# 키만 순회
for key in fruits.keys():
    print(f"과일: {key}")
# 값만 순회
for value in fruits.values():
    print(f"색상: {value}")
# 키와 값 함께 순회
for key, value in fruits.items():
    print(f"{key}는 {value}색")

 

출력 예시:

과일: apple
과일: banana
과일: grape
색상: red
색상: yellow
색상: purple
apple는 red색
banana는 yellow색
grape는 purple색

 

예제 : 다중 변수 언패킹 (리스트, 튜플)

  • 개념: 리스트나 튜플의 요소를 여러 변수에 한 번에 할당.
nums1 = [[1,2,3],[4,5,6],[7,8,9]]
for a,b,c in nums1:
    print(a,b,c)
nums2 = [(1,2),(3,4)]
for x,y in nums2:
    print(x,y)

 

출력 예시:

1 2 3
4 5 6
7 8 9
1 2
3 4

 

3) 종합 실습 문제 (5개)

문제 1: 1부터 100까지 3의 배수를 리스트에 저장하고 출력

  • while문을 사용해 1부터 100까지 숫자를 반복합니다.
  • 각 숫자가 3으로 나눠떨어지는지 검사하여, 나눠떨어지면 리스트에 추가합니다.
  • 반복이 끝나면 리스트 전체를 출력합니다.

 

문제 2: 사용자 입력 숫자까지 짝수 합 계산

  • 사용자로부터 양의 정수를 입력받습니다.
  • while문으로 1부터 해당 숫자까지 반복하며 짝수인지 검사합니다.
  • 짝수인 값만 합산하여 마지막에 총합을 출력합니다.

 

문제 3: Router와 포트 조합 출력

  • for문 중첩을 사용합니다.
  • 바깥 for문은 ["Router1","Router2"] 리스트를 순회합니다.
  • 안쪽 for문은 range(1,4)를 사용해 각 라우터의 포트 번호를 생성하고 조합 문자열을 출력합니다.

 

문제 4: IP 리스트 순회 확인 출력

  • ['10.0.0.1','10.0.0.2','10.0.0.3'] 리스트를 for문으로 순회합니다.
  • 각 IP 주소에 대해 "IP <주소> 확인 완료" 형태로 출력합니다.

 

문제 5: Active 상태만 출력

  • {"DB1":"Active","DB2":"Inactive","DB3":"Active"} 딕셔너리를 순회합니다.
  • for문으로 key와 value를 가져오고, value가 "Active"인 경우에만 해당 서버 이름과 상태를 출력합니다.