안녕. 나다.
오늘은 지인의 부탁으로 오랜만에 파이썬 코딩을 진행해보았다.
목표했던 프로그램은 다음과 같다
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. 후기
오랜만에 파이썬을 만져서 그런가
설렜다.
헤헤;;
다시 공부를 시작해야하나?
전에 만든 카카오톡 자동 발송 스크립트 포스팅이나 해볼까?