프로그램 개발

[프로그램 개발] 저녁 메뉴 추천

곽가누 2023. 3. 6. 05:10

Python으로 저녁 메뉴 추천 프로그램을 만들어보았습니다.

‘2020 한국인 영양소 섭취기준’에 따르면, 20대 여성의 에너지섭취량은 낮고, 50·60대 남성의 에너지 섭취량은 높은 것으로 조사되었습니다. 이에 따라, 아침과 점심으로 섭취한 식단을 반영하여 저녁식사를 한다면, 영양소에 있어 보완이 될 듯 싶었습니다. 아직 열량(kcal)에 대해서만 반영이 되어있습니다.

 

활동정도를 알려주는 PA계수는 다음과 같습니다.

활동정도 기준 남성 여성
비활동적 일상생활에 필요한 활동 1.0 1.0
저활동적 일상활동 +30-60분 꾸준한 운동 1.11 1.12
활동적 일상활동 + 60분 이상 꾸준한 운동 1.25 1.27
매우활동적 일상활동 + 60분 이상 꾸준한 운동 + 60분 이상 격렬한 운동 1.48 1.45

코드와 설명은 다음과 같습니다.

#들어가기 앞서
#1. pandas, openpyxl, xlrd를 설치합니다. 
#2. 공공데이터포털에서 식품영양성분DB.xlsx파일을 다운받습니다.
######################################################################

#3. 영양성분 가공 과정입니다.
import pandas as pd


#'d:/Users/gykwa/Desktop/파이선/식품영양성분DB.xlsx' 
# 이 부분은 식품영양성분DB를 저장한 같은 파일로 바꿔주셔야 합니다.  
df1=pd.read_excel('d:/Users/gykwa/Desktop/파이선/식품영양성분DB.xlsx',engine='openpyxl',usecols = "F,P")

temporaryList = df1.values.tolist()


#4. 리스트를 딕셔너리로 변환합니다
noproblem = {}
for i in range(len(temporaryList)):
    name= temporaryList[i][0]
    kcal = temporaryList[i][1]

    if kcal=='-':
        kcal = 0
        noproblem[name]=kcal
    else:
        noproblem[name]=float(kcal)


############################################################################################################
#5. 메인 코드입니다.
gainweight = {'순대국밥': 500, '마라탕': 2000}
looseweight = {'사과':70}
diabetic = {'제로콜라':5}
hyperthyroidism ={}
hypothyroidism = {}
problemList = [noproblem, gainweight, looseweight, diabetic, hyperthyroidism, hypothyroidism ]




givenBase = input("이름,성별(남/여)를 ,로 순서대로 구분지어 입력해주세요 : ").split(',')
givenData = input("나이:20세 이상,체중(kg),키(m)를 ,로 순서대로 구분지어 입력해주세요 : ").split(',')

givenPA = input("PA계수를 입력해 주세요 : ")

breakfast = input("아침으로 먹은 메뉴를 ,로 구분지어 입력해주세요 :").split(",")
lunch = input("점심으로 먹은 메뉴를 ,로 구분지어 입력해주세요 :").split(",")
whatIAteToday = breakfast + lunch

givenProblem = input("가지고 있는 본인의 증상을 입력해주세요(없으면 noproblem으로 입력해주세요.) :")

print("-----------------결과-----------------")
if float(givenData[0])< 19:
    print("성인에 대해서만 프로그램이 작동합니다.")
else :
    if givenBase[1] == "남":
        needEnergy = 662 - 9.53*float(givenData[0])+ float(givenPA[0])*(15.91*float(givenData[1])+539.6*float(givenData[2]))
    if givenBase[1] == "여":
        
        needEnergy = 354 - 6.91*float(givenData[0])+ float(givenPA[0])*(15.91*float(givenData[1])+539.6*float(givenData[2]))

print("당신의 하루 에너지 필요량은 "+ str(needEnergy) + "입니다.")

leftIntake = 0
def recommendedDinnerIntake(noproblem, whatIAteToday):
    total = 0
    for i in noproblem:
        for j in whatIAteToday:
            if i == j:
                total += noproblem[i]
    leftIntake = needEnergy - total
    return leftIntake
leftIntake = recommendedDinnerIntake(noproblem, whatIAteToday)
print("당신의 권장저녁섭취량은"+ str(recommendedDinnerIntake(noproblem, whatIAteToday))+"입니다.")

# 6. random 모듈로 메뉴를 권장저녁섭취량에 맞추어 임의추출합니다. 
from random import sample



def recommendedDinnerMenu1(noproblem, leftIntake): #noproblem 변환 필요
    box = []
    box2= []
    for i in noproblem: #noproblem 변환 필요
        if noproblem[i]< leftIntake:
            box.append(i)
            box.append(noproblem[i])
            box2.append(box)
            box = []
        
            

    return box2
box2 = recommendedDinnerMenu1(noproblem, leftIntake)
print("추천하는 한 종류의 저녁 메뉴는 다음과 같습니다:"+ str(sample(box2,3)))

def recommendedDinnerMenu2(noproblem,leftIntake):
    box = []
    box2= []
    box3= []
    for i in noproblem:
        for j in noproblem:
            if i==j:
                continue

            else:
                if noproblem[i]+noproblem[j]<leftIntake:
                    box.append(i)
                    box.append(noproblem[i])
                    box.append(j)
                    box.append(noproblem[j])
                    box2.append(box)
                    box = []
        
            

    return box2
box2 = recommendedDinnerMenu2(noproblem, leftIntake)
print("추천하는 두 종류의 저녁 메뉴는 다음과 같습니다:"+ str(sample(box2,3)))

dinner (1).py
0.00MB
식품영양성분DB.xlsx
3.05MB

구동되는 모습