ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 카카오클라우드 - 클라우드 개발자 교육 3주차 후기
    bootcamp 2025. 11. 28. 15:47

    #12일차
    파이썬 기초를 시작하며 문자열, 변수 같은 가장 기본적인 요소들을 다뤘다. 자료형의 종류를 이해하고, 파이썬 I/O로 입력과 출력을 처리하는 방법을 배웠다. 특히 파이썬이 동적 타입을 사용한다는 점과 기본 문법 구조를 익힌 것이 이후 학습의 기반이 되었다.

     

    #13일차
    딕셔너리와 리스트 자료형을 학습했다. 리스트는 순서가 있는 데이터 집합이고, 딕셔너리는 key-value 형태로 구조화된 데이터를 표현하는 방식이라는 점을 배웠다. 이를 활용해 간단한 문제를 해결하는 과제도 진행하며 자료 구조를 다루는 감각을 익혔다.

     

     

     

    #14일차
    튜플 자료형과 for문 반복문을 익히고, 리스트 컴프리헨션으로 반복과 조건을 간결하게 표현하는 방법을 배웠다. 또한 루틴과 함수의 차이를 배우며, 함수가 코드의 재사용성을 높여주고 가독성을 향상시키는 중요한 구성 요소라는 점을 이해했다. 지역변수와 전역변수의 차이, 함수 선언 위치의 필요성, 그리고 람다 함수 같은 파이썬의 간단한 함수 표현식도 함께 학습했다. 파일 I/O에서는 파일을 읽고 쓰는 실제 과정을 경험했다.

    마방진 알고리즘을 구현해보았다.

    python 
    #맨밑 가운데에 1넣고
    #왼쪽 아래로
    #만약 없으면 첫줄로
    #똑같이 왼쪽아래로
    #쭉 가다 없으면
    #다음줄 맨 오른쪽
    #값이 있을때 열 맨위로
    # list = 홀수
    # next - 왼쪽 아래
    # if 행의 최대값 초과 - 0으로 초기화
    # 열의 최솟값 최대값
    # --검증 --
    # 각 행 더한값 같음. 각 열 더한값 같음. 대각선 더한값 같음.
    
    def verify_magic(matrix):
        n = len(matrix)
    
        # 각 행의 합 계산
        row_sums = []
        for row in matrix:
            row_sum = sum(row)
            row_sums.append(row_sum)
            print(f"가로 더한 값: {row_sum}")
    
        # 각 열의 합 계산
        col_sums = []
        for col_idx in range(n):
            col_sum = sum(matrix[row_idx][col_idx] for row_idx in range(n))
            col_sums.append(col_sum)
            print(f"세로 더한 값: {col_sum}")
    
        # 대각선의 합 계산 (왼쪽 위 -> 오른쪽 아래)
        diag1_sum = sum(matrix[i][i] for i in range(n))
        print(f"대각선(왼쪽 위 -> 오른쪽 아래 ) 더한 값: {diag1_sum}")
    
        # 대각선의 합 계산 (오른쪽 위 -> 왼쪽 아래)
        diag2_sum = sum(matrix[i][n-1-i] for i in range(n))
        print(f"대각선(오른쪽 위 -> 왼쪽 아래) 더한 값: {diag2_sum}")
    
        # 모든 합이 같은지 검증
        all_sums = row_sums + col_sums + [diag1_sum, diag2_sum]
        if len(set(all_sums)) == 1:
            print("ok.")
            return True
        else:
            print("fail.")
            return False
    
    
    def create_magic(n):
        matrix = [[0 for _ in range(n)] for _ in range(n)]
        # 시작 위치 맨 밑 행, 가운데 열
        row = n - 1 # 마지막 행 인덱스 len(matrix) - 1    len(matrix) == n
        col = n // 2 # 중간 열 인덱스 (len(matrix[]) - 1 ) // 2
    
        for num in range(1, n * n + 1):    #iterating
            matrix[row][col] = num
    
            # 왼쪽 아래로
            next_row = (row + 1) % n # 아래로 가다가 범위 초과하면 0으로
            next_col = (col - 1) % n # 왼쪽으로 가다가 범위 초과하면 n-1로
    
            # 배열에 이미 있으면
            if matrix[next_row][next_col] != 0:
                #왼쪽 아래 대신 현재 위치의 바로 위로 이동
                next_row = (row - 1) % n #현재 행에서 위로 한 칸
                next_col = col # 열 안바뀜
    
            row = next_row
            col = next_col
    
        return matrix
     
    def print_magic(matrix):
        n = len(matrix)
    
        max_num = n * n
        width = len(str(max_num)) + 1
    
        print("\n" + "=" * (width * n + n + 1))
        for row in matrix:
            print("|", end="")
            for num in row:
                print(f"{num:>{width}}", end=" ")
            print("|")
        print("=" * (width * n + n + 1))
    
    
    if __name__ == "__main__":
        while True:
            n = int(input("마방진의 크기를 입력하세요 (홀수): "))
            if n % 2 == 1:
                break
            print("홀수를 입력해주세요!")
    
        magic = create_magic(n)
    
        print(f"\n{n}x{n} 마방진:")
    
        print_magic(magic)
    
        verify_magic(magic)

     

    #15일차

    그동안 배운 문법을 종합해 카페 주문관리 시스템을 구현하기 시작했다. 입력 받은 메뉴를 리스트나 딕셔너리에 저장하고, 조건문과 반복문을 통해 주문 흐름을 제어하는 등 배운 내용을 실습 프로젝트로 연결하는 과정이 큰 도움이 되었다.

    #16일차

    카페 주문관리 시스템을 완성하며 프로그램 흐름을 설계하는 방법을 자연스럽게 익혔다. 단순히 문법을 따라치는 수준을 넘어서, 직접 기능을 만들고 구조를 고민해보는 경험을 할 수 있었다. 실습을 통해 파이썬 기본기가 실제로 어떻게 조합되어 하나의 프로그램이 되는지 체감했다.

    #cafe.py (main)
    
    import sys
    import os
    
    sys.path.insert(0, os.path.join(os.path.dirname(__file__), '..', '251128'))
    
    from lib import Menu
    from order import Order
    from sales import Sales
    
    print("=== 카페 관리 시스템 ===")
    
    menu = Menu()
    order = Order()
    sales = Sales()
    
    while True :
        selectid = input('\n작업을 선택하세요(m : 메뉴관리, o : 주문관리, s : 매출조회, x : 종료) : ')
    
        if selectid == 'm' :
            while True:
                selectactionid = input("\n메뉴 작업을 선택하세요(c : 메뉴추가, r : 메뉴표시, u : 메뉴수정, d : 메뉴삭제, x : 이전) : ")
                if selectactionid == 'c' :
                    menu.writefile()
                elif selectactionid == 'r' :
                    menu_list = menu.readfile()
                    if menu_list:
                        print("\n=== 메뉴 목록 ===")
                        for idx in range(len(menu_list)):
                            print(f"{idx}. {menu_list[idx]}")
                    else:
                        print("메뉴가 없습니다.")
                elif selectactionid == 'u' :
                    menu.updatefile()
                elif selectactionid == 'd' :
                    menu.deletefile()
                elif selectactionid == 'x' :
                    break
                else:
                    print("잘못된 입력입니다.")
    
        elif selectid == 'o' :
            while True:
                selectactionid = input("\n주문 작업을 선택하세요(c : 주문등록, r : 주문내역, d : 주문취소, x : 이전) : ")
                if selectactionid == 'c' :
                    order.create_order()
                elif selectactionid == 'r' :
                    order.view_orders()
                elif selectactionid == 'd' :
                    order.cancel_order()
                elif selectactionid == 'x' :
                    break
                else:
                    print("잘못된 입력입니다.")
    
        elif selectid == 's' :
            while True:
                selectactionid = input("\n매출 작업을 선택하세요(d : 일별매출, m : 메뉴별매출, t : 총매출, x : 이전) : ")
                if selectactionid == 'd' :
                    sales.daily_sales()
                elif selectactionid == 'm' :
                    sales.menu_sales()
                elif selectactionid == 't' :
                    sales.total_sales()
                elif selectactionid == 'x' :
                    break
                else:
                    print("잘못된 입력입니다.")
    
        elif selectid == 'x' :
            print("프로그램을 종료합니다.")
            exit()
    
        else:
            print("잘못된 입력입니다.")
    #lib.py
    
    class Menu:
        def __init__(self, menu_file='./menu.txt'):
            self.menu_file = menu_file
    
        def writefile(self):
            """메뉴 추가"""
            with open(self.menu_file, 'a') as file:
                print("file pwd " + file.name)
                while True:
                    menu = input('menu :')
                    price = input('price :')
                    if not menu:
                        break
                    file.write(f"{menu},{price}\n")
    
        def readfile(self):
            """메뉴 목록 읽기"""
            try:
                with open(self.menu_file, 'r') as file:
                    print("file pwd " + file.name)
                    filelist = []
                    while True:
                        line = file.readline()
                        if not line:
                            break
                        filelist.append(line.strip())
                return filelist
            except FileNotFoundError:
                return []
    
        def updatefile(self):
            """메뉴 수정"""
            menu_list = self.readfile()
            if not menu_list:
                print("메뉴가 없습니다.")
                return
    
            for idx in range(len(menu_list)):
                print(f"{idx}. {menu_list[idx]}")
    
            try:
                fileid = int(input('수정할 메뉴 번호를 입력하세요 :'))
                if 0 <= fileid < len(menu_list):
                    new_menu = input('새 메뉴 이름 :')
                    new_price = input('새 가격 :')
                    menu_list[fileid] = f"{new_menu},{new_price}"
    
                    with open(self.menu_file, 'w') as file:
                        for menu in menu_list:
                            file.write(f"{menu}\n")
                    print("수정 완료!")
                else:
                    print("잘못된 번호입니다.")
            except ValueError:
                print("숫자를 입력하세요.")
    
        def deletefile(self):
            """메뉴 삭제"""
            menu_list = self.readfile()
            if not menu_list:
                print("메뉴가 없습니다.")
                return
    
            for idx in range(len(menu_list)):
                print(f"{idx}. {menu_list[idx]}")
    
            try:
                fileid = int(input('삭제할 메뉴 번호를 입력하세요 :'))
                if 0 <= fileid < len(menu_list):
                    deleted = menu_list.pop(fileid)
                    with open(self.menu_file, 'w') as file:
                        for menu in menu_list:
                            file.write(f"{menu}\n")
                    print(f"'{deleted}' 삭제 완료!")
                else:
                    print("잘못된 번호입니다.")
            except ValueError:
                print("숫자를 입력하세요.")
    #order.py
    
    import sys
    import os
    from datetime import datetime
    
    sys.path.insert(0, os.path.join(os.path.dirname(__file__), '..', '251126'))
    
    from lib import Menu
    
    
    class Order:
        def __init__(self, order_file='./order.txt', menu_file='./menu.txt'):
            self.order_file = order_file
            self.menu_file = menu_file
    
        def create_order(self):
            """주문 등록"""
            menu = Menu(self.menu_file)
            menu_list = menu.readfile()
    
            if not menu_list:
                print("메뉴가 없습니다. 먼저 메뉴를 등록하세요.")
                return
    
            print("\n=== 메뉴 목록 ===")
            for idx in range(len(menu_list)):
                print(f"{idx}. {menu_list[idx]}")
    
            try:
                menu_idx = int(input('\n주문할 메뉴 번호를 입력하세요: '))
                if 0 <= menu_idx < len(menu_list):
                    quantity = int(input('수량을 입력하세요: '))
                    if quantity <= 0:
                        print("수량은 1 이상이어야 합니다.")
                        return
    
                    mobile = input('휴대폰 번호를 입력하세요: ')
    
                    menu_item = menu_list[menu_idx].split(',')
                    menu_name = menu_item[0]
                    price = int(menu_item[1])
                    total_price = price * quantity
    
                    timestamp = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
    
                    with open(self.order_file, 'a') as file:
                        file.write(f"{menu_name},{quantity},{total_price},{mobile},{timestamp}\n")
    
                    print(f"\n주문이 등록되었습니다!")
                    print(f"메뉴명: {menu_name}")
                    print(f"수량: {quantity}")
                    print(f"총액: {total_price}원")
                    print(f"휴대폰: {mobile}")
                    print(f"주문시각: {timestamp}")
                else:
                    print("잘못된 번호입니다.")
            except ValueError:
                print("올바른 숫자를 입력하세요.")
            except Exception as e:
                print(f"주문 중 오류가 발생했습니다: {e}")
    
        def view_orders(self):
            """주문 내역 조회"""
            try:
                with open(self.order_file, 'r') as file:
                    orders = file.readlines()
    
                if not orders:
                    print("주문 내역이 없습니다.")
                    return
    
                print("\n=== 주문 내역 ===")
                for idx, order in enumerate(orders):
                    order_info = order.strip().split(',')
                    menu_name = order_info[0]
                    quantity = order_info[1]
                    total_price = order_info[2]
                    mobile = order_info[3]
                    timestamp = order_info[4]
                    print(f"{idx}. 메뉴명: {menu_name}, 수량: {quantity}, 총액: {total_price}원, 휴대폰: {mobile}, 주문시각: {timestamp}")
            except FileNotFoundError:
                print("주문 내역이 없습니다.")
            except Exception as e:
                print(f"조회 중 오류가 발생했습니다: {e}")
    
        def cancel_order(self):
            """주문 취소"""
            try:
                with open(self.order_file, 'r') as file:
                    orders = file.readlines()
    
                if not orders:
                    print("주문 내역이 없습니다.")
                    return
    
                print("\n=== 주문 내역 ===")
                for idx, order in enumerate(orders):
                    order_info = order.strip().split(',')
                    menu_name = order_info[0]
                    quantity = order_info[1]
                    total_price = order_info[2]
                    mobile = order_info[3]
                    timestamp = order_info[4]
                    print(f"{idx}. 메뉴명: {menu_name}, 수량: {quantity}, 총액: {total_price}원, 휴대폰: {mobile}, 주문시각: {timestamp}")
    
                order_idx = int(input('\n취소할 주문 번호를 입력하세요: '))
                if 0 <= order_idx < len(orders):
                    cancelled = orders.pop(order_idx)
                    with open(self.order_file, 'w') as file:
                        file.writelines(orders)
                    print(f"주문이 취소되었습니다.")
                else:
                    print("잘못된 번호입니다.")
            except FileNotFoundError:
                print("주문 내역이 없습니다.")
            except ValueError:
                print("올바른 숫자를 입력하세요.")
            except Exception as e:
                print(f"취소 중 오류가 발생했습니다: {e}")

     

    # sales.py
    
    class Sales:
        def __init__(self, order_file='./order.txt'):
            self.order_file = order_file
    
        def daily_sales(self):
            """일별 매출 조회"""
            try:
                with open(self.order_file, 'r') as file:
                    orders = file.readlines()
    
                if not orders:
                    print("매출 데이터가 없습니다.")
                    return
    
                sales_by_date = {}
                for order in orders:
                    order_info = order.strip().split(',')
                    timestamp = order_info[4]
                    date = timestamp.split(' ')[0]
                    total_price = int(order_info[2])
    
                    if date in sales_by_date:
                        sales_by_date[date] += total_price
                    else:
                        sales_by_date[date] = total_price
    
                print("\n=== 일별 매출 ===")
                for date, total in sorted(sales_by_date.items()):
                    print(f"{date}: {total}원")
            except FileNotFoundError:
                print("매출 데이터가 없습니다.")
            except Exception as e:
                print(f"조회 중 오류가 발생했습니다: {e}")
    
        def menu_sales(self):
            """메뉴별 매출 조회"""
            try:
                with open(self.order_file, 'r') as file:
                    orders = file.readlines()
    
                if not orders:
                    print("매출 데이터가 없습니다.")
                    return
    
                sales_by_menu = {}
                for order in orders:
                    order_info = order.strip().split(',')
                    menu_name = order_info[0]
                    quantity = int(order_info[1])
                    total_price = int(order_info[2])
    
                    if menu_name in sales_by_menu:
                        sales_by_menu[menu_name]['quantity'] += quantity
                        sales_by_menu[menu_name]['total'] += total_price
                    else:
                        sales_by_menu[menu_name] = {'quantity': quantity, 'total': total_price}
    
                print("\n=== 메뉴별 매출 ===")
                for menu_name, data in sorted(sales_by_menu.items()):
                    print(f"{menu_name}: {data['quantity']}개 판매, 총 {data['total']}원")
            except FileNotFoundError:
                print("매출 데이터가 없습니다.")
            except Exception as e:
                print(f"조회 중 오류가 발생했습니다: {e}")
    
        def total_sales(self):
            """총 매출 조회"""
            try:
                with open(self.order_file, 'r') as file:
                    orders = file.readlines()
    
                if not orders:
                    print("매출 데이터가 없습니다.")
                    return
    
                total = 0
                for order in orders:
                    order_info = order.strip().split(',')
                    total_price = int(order_info[2])
                    total += total_price
    
                print(f"\n=== 총 매출 ===")
                print(f"총 매출: {total}원")
                print(f"총 주문 건수: {len(orders)}건")
            except FileNotFoundError:
                print("매출 데이터가 없습니다.")
            except Exception as e:
                print(f"조회 중 오류가 발생했습니다: {e}")

     

     

     


    —————————————————————————— 
    본 후기는 [카카오엔터프라이즈x스나이퍼팩토리] 카카오클라우드로 배우는 AIaaS 마스터 클래스 3기(B-log) 리뷰로 작성 되었습니다.

Designed by Tistory.