250718 [ Day 10 ] - Python (7)

TaeHyun·2025년 7월 18일

TIL

목록 보기
10/183

시작하며

오늘은 어제 배운 for문에 이어 range 자료형까지 배웠다. range를 활용한 복잡한 for문 알고리즘 문제를 풀다 보니 약간의 뇌정지가 왔지만, 원리를 이해하고 나니까 조금씩 풀이법이 보여 재미있었다.

먼저 for문에서 딕셔너리를 활용하는 방법부터 시작하였다.

  • 딕셔너리를 이용한 반복
person = {
    "name" : "taehyun",
    "age" : "27",
    "job" : "student"
}

# 기본적인 활용

for key in person:
    print(key, person[key])
# name taehyun
# age 27
# job student

# value만 가져오기

for value in person.values():
    print(value)
# taehyun
# 27
# student

# item 가져오기 (언패킹 가능)

for key, value in person.items():
    print(key, value)
# name taehyun
# age 27
# job student

이후에는 range 함수에 대해 배웠다.

range ( )

  • range 함수 : 지정된 법위의 정수 시퀀스를 생성하는 내장 함수 (시퀀스 자료형)
    • 주로 for문과 함께 사용되어 반복 횟수를 제어

활용 방법

  • range(start, end, step) 이러한 구조를 이루고 있으며, start와 step을 생략하여 end 값만으로 사용하기도 함
print(list(range(1, 5)))
# [1, 2, 3, 4]

for i in range(1, 5):
    print(i)
for i in [1,2,3,4]:
    print(i)
# 1
# 2
# 3
# 4

for i in range(5):
    print(i)
# 0
# 1
# 2
# 3
# 4

for i in range(5):
    print("안녕하세요")
# 안녕하세요
# 안녕하세요
# 안녕하세요
# 안녕하세요
# 안녕하세요

  • step 값을 지정하는 경우
for i in range(0, 6, 2):
    print(i)
# 0
# 2
# 4

# 역순 반복
for i in range(5, 0, -1):
    print(i)
# 5
# 4
# 3
# 2
# 1

range 자료형이 for문에서 어떻게 작동하는지 이해한 뒤, 반복을 제어할 수 있는 루프 제어문에 대해 배웠다.


루프 제어문

  • 루프 제어문은 특정 조건 하에서만 작동하도록 구현
  • break : 반복을 즉시 중단
for i in range(10):
    if i == 5:
        break   
    print(i)

print("반복문 종료")
# 0
# 1
# 2
# 3
# 4
# 반복문 종료
  • continue : 현재 반복을 넘어감
for i in range(5):
    if i == 2:
        continue   
    print(i)

print("반복문 종료")
# 0
# 1
# 3
# 4
# 반복문 종료
  • pass : 반복문의 코드가 완성되지 않았을 경우 pass를 사용하여 넘어갈 수 있음
    • pass 없이 넘어가면 에러 발생
for i in range(10):
    pass

for - else 구문

for i in range(5):
    print(i)
else:
    print("반복종료")
# 0
# 1
# 2
# 3
# 4
# 반복종료
  • for문에서 break가 실행될 경우 else가 실행되지 않음

다음으로는 오늘 상당히 머리를 아프게 만든 중첩 for문에 대해 공부했다.

중첩 for문

  • 하나의 for문 안에 다른 for문이 들어있는 구조
  • 중첩에 따라 2중 for문 3중for문 등으로 부름
# 이중 for문
for i in range(4):
    for j in range(5):
        print("😀", end=" ")
    print()
# 😀 😀 😀 😀 😀 
# 😀 😀 😀 😀 😀 
# 😀 😀 😀 😀 😀 
# 😀 😀 😀 😀 😀 
  • 중첩 for문에서 변수를 i, j로 나누어 지정해야 활용 가능
for i in range(4):
    for j in range(4):
        print(f"{i},{j}", end=" ")
    print()
# 0,0 0,1 0,2 0,3 
# 1,0 1,1 1,2 1,3 
# 2,0 2,1 2,2 2,3 
# 3,0 3,1 3,2 3,3 

중첩 for문 실습 문제

  • 구구단 만들기
    for i in range(2,10):
        print(f"[ {i}단 ]")
        for j in range(1,10):
            print(f"{i} x {j} = {i * j}")
        print()
    # [ 2단 ]
    # 2 x 1 = 2
    # 2 x 2 = 4
    # 2 x 3 = 6
    # 2 x 4 = 8
    # 2 x 5 = 10
    # 2 x 6 = 12
    # 2 x 7 = 14
    # 2 x 8 = 16
    # 2 x 9 = 18
  • 별찍기 (왼쪽 정렬)
    num = int(input("수를 입력해주세요 :"))
    
    for i in range(1, num+1):
        for j in range(i):
            print("*", end=" ")
        print()
    # * 
    # * * 
    # * * * 
    # * * * * 
    # * * * * * 
  • 별찍기 (오른쪽 정렬)
    num = int(input("수를 입력해주세요 :"))
    
    for i in range(1, num + 1):
        for j in range(num - i):
            print(" ", end=" ")
        for j in range(i):
            print("*", end=" ")
        print()
    #         * 
    #       * * 
    #     * * * 
    #   * * * * 
    # * * * * * 
  • 별찍기 (가운데 정렬)
    num = int(input("수를 입력해주세요 :"))
    
    for i in range(1, num + 1):
        for j in range(num - i):
            print(" ", end=" ")
        for j in range(2 * i - 1):
            print("*", end=" ")
        print()
    #         * 
    #       * * * 
    #     * * * * * 
    #   * * * * * * * 
    # * * * * * * * * * 

중첩 for문이 어떤 순서와 원리로 작동하는지 머리로는 이해되었지만, 이 원리를 응용해 알고리즘을 해결하는 것은 또 다른 문제인 것 같다...

마지막으로는 리스트 컴프리헨션에 대해 배웠다.

리스트 컴프리헨션 (List Comprehension)

  • for문을 리스트에 한줄로 축약하여 새 리스트를 생성하는 문법
  • [ 표현식(리스트의 원소) for 변수 in 반복대상 if 조건 ] 으로 구성되어 있음
  • 표현식 : 값을 유도하는 식
# for문
squares = []
for x in range(1,6):
    squares.append(x ** 2)
print(squares)

# 리스트 컴프리헨션
squares_2 = [x ** 2 for x in range(1,6)]
print(squares_2)
# [1, 4, 9, 16, 25]
# [1, 4, 9, 16, 25]
  • 중첩 for문 또한 사용가능
colors = ["red", "blue"]
fruits = ["사과", "수박"]

pairs = [(color, fruit) for color in colors for fruit in fruits]
print(pairs)
# [('red', '사과'), ('red', '수박'), ('blue', '사과'), ('blue', '수박')]
  • 간단한 코드는 한 줄로 표현 가능하여 간결하고 가독성 좋음
  • 중첩이 깊거나 조건이 많아지면 오히려 가독성 저하 및 디버깅을 추적하기 어려움

마치며

반복문 관련 문제를 더 많이 풀어봐야 할 것 같다.
아직 이터러블의 활용도 연습을 많이 못했는데, 갈 길이 너무 멀게만 느껴진다..
주말간 복습을 열심히 해야겠다.

NOTION

MY NOTION (Python. For)

profile
Hello I'm TaeHyunAn, Currently Studying Data Analysis

0개의 댓글