[파이썬] 매우매우 기본적인 제품 관리 프로그램(+ pandas 라이브러리)
공부/코딩

[파이썬] 매우매우 기본적인 제품 관리 프로그램(+ pandas 라이브러리)

안녕. 나다.

오늘은 지인의 부탁으로 오랜만에 파이썬 코딩을 진행해보았다.

 

목표했던 프로그램은 다음과 같다

 

1. 제품명, 제품수량, 제품생산일을 입력 받아서

2. 메모리에 저장하고

3. 이 데이터들을 출력 및 검색하는

 

프로그램이다.

 

입 벌려 코드 들어간다!

 

1. 매우 기초적인 코드


#!python

menu = "1. 입력 \n2. 출력 \n3. 검색 \n4. 종료"   # 메인메뉴 문장을 menu 변수에 저장
info = []                                       # 정보가 담길 list 선언

while True : # 무한반복
    print(menu) # 메인메뉴 문장 출력
    number = input ("메뉴를 선택하세요.:")   # number 변수에 데이터 입력


    if number == '1' :                            # 메인메뉴에서 누른 번호가 1 일 경우
        conti = 'y'                             # 밑의 while 문을 작동 시키기 위한 초기값
        while conti == 'y' :                    # conti 변수가 y 일 경우
            value = {}                          # 제품에 대한 정보가 담길 딕셔너리 선언
            value['name'] = input ("제품명:")   # name 에 제품명 입력
            value['quantity'] = input ("수량:") # quantity 에 수량 입력
            value['date'] = input ("생산일(예:1990-01-01):") # date 에 일자 입력
            conti = input ("계속 입력하시겠습니까?(y/n)") # conti 의 값 입력
            info.append(value)                  #info 에 value 값 추가

            if conti == 'n' :                   # conti 가 n 일 경우
                break
    

    if number == '2' :                            # 메인메뉴에서 누른 번호가 2 일 경우
        print ("-----------------------------------------------") 
        print ("     제품명          수량          생산일     ")
        print ("-----------------------------------------------") # 메뉴 출력
        i = 0                                   # 아래에서 쓰일 반복문을 위한 변수 선언
        while i < len(info) :                   # i가 info의 요소 개수보다 작을 때까지
            print('     ' + info[i]['name'], end = '           ') # info 의 i 번째 요소의 딕셔너리의 name 에 대한 value 값 출력
            print(info[i]['quantity'], end = '          ') # info 의 i 번째 요소의 딕셔너리의 quantity 에 대한 value 값 출력
            print(info[i]['date'])              # info 의 i 번째 요소의 딕셔너리의 date 에 대한 value 값 출력
            i = i + 1                           # 반복문 진행 시 마지막에 i가 1씩 증가


    if number == '3' :                            # 메인메뉴에서 누른 번호가 3 일 경우
        find = input ("검색할 제품명을 입력 하세요 :") # 검색할 제품명 입력
        names = []                              # 제품명 검색을 위한 리스트 선언
        i = 0                                   # 아래에서 쓰일 반복문을 위한 변수 선언
        while i < len(info) :                   # i가 info의 요소 개수보다 작을 때까지
            names.append (info[i]['name'])      # names 리스트에 제품명들을 모두 입력
            if find in names :                  # names 리스트에 찾는 제품명이 있을 경우, 제품에 대한 정보 출력
                print ("-----------------------------------------------")
                print ("     제품명          수량          생산일     ")
                print ("-----------------------------------------------")
                print('     ' + info[i]['name'], end = '           ')
                print(info[i]['quantity'], end = '          ')
                print(info[i]['date'])
                break
            i = i + 1

                    
    if number == '4' :                            # 메인메뉴에서 누른 번호가 4일 경우
        really = input("프로그램을 종료 하시겠습니까(y/n)?")
        if really == 'y' :                        # y 를 입력할 경우 프로그램 종료, n일 경우 메인메뉴
            break                                   

출력값

지인이 그렇게 욕심을 부리지 않아서, 디테일한 부분은 구현하지 않았다.

 

예를 들면,

1) y/n 을 답으로 요구하는데 다른 문자를 입력할 경우에 대한 조건문

  - 이건 노가다의 영역이라고 생각해서 하지 않았다.

 

2) 제품명, 수량, 생산일 등을 라이브러리를 이용하여 표현해서 더 깔끔하고 flexible(?)한 코드

  - 코딩의 핵심, 정수이자 최종 목표

 

2. MSG를 약간 친 코드


#!python
import pandas

menu = "1. 입력 \n2. 출력 \n3. 검색 \n4. 종료"
info = []                                      

while True :
    print(menu)
    number = input ("메뉴를 선택하세요.:") 

    if number == '1' :                          
        conti = 'y'
        while conti == 'y' :                     
            value = {}                          
            value['name'] = input ("제품명:")   
            value['quantity'] = input ("수량:") 
            value['date'] = input ("생산일(예:1990-01-01):") 
            conti = input ("계속 입력하시겠습니까?(y/n)") 
            info.append(value)                  

            if conti == 'n' :
                data = pandas.DataFrame(info) // info에 들어있는 데이터를 DataFrame 형식으로 data 변수에 입력
                break
    

    if number == '2' :                            
        print(data.to_markdown())


    if number == '3' :                            
        find = input ("검색할 제품명을 입력 하세요 :")
        data_search = data[data['name'] == find] // data 들 중 name 이 find(제품명)과 같은 데이터 추출
        print(data_search.to_markdown())

                    
    if number == '4' :                         
        really = input("프로그램을 종료 하시겠습니까(y/n)?")
        if really == 'y' :                        
            break                                   

코드의 양이 훨씬 많이 줄었다.

 

pandas.DataFrame 은 데이터를 DataFrame의 형식(2차원)으로 바꾸어 주는 것이고,

.to_markdown() 은 데이터를 markdown 에서 사용하는 표로 출력해주는 것이다.

 

pandas는 데이터 조작이나 분석을 위해 정~말 많이 쓰이는 라이브러리인데,

나중에 파이썬에 대해 집중적으로 포스팅 할 일이 있으면 해보겠다.

 

출력값

 

이런 식으로 데이터를 저장하여 가공하면, 나중에 이용하기도 더 편하다.

 

3. 후기


오랜만에 파이썬을 만져서 그런가

설렜다.

 

헤헤;;

 

다시 공부를 시작해야하나?

전에 만든 카카오톡 자동 발송 스크립트 포스팅이나 해볼까?