Здравствуйте! Подскажите, пожалуйста, как реализовать меню в виде класса (должен производиться ввод данных, которые сейчас являются переменными weight ,height, age, gender, Kf, mission, а также пользователь должен вводить номер пункта меню от 0 до 6 )? Необходимо, чтобы в программе были только классы (без внешних переменных и функций). Ввод данных и выбор пункта меню не обязательно должны находиться в одном классе, можно в разных, если так будет целесообразнее. Полный код программы прикрепляю. В данном виде она выдаёт ошибку: rKKal() missing 1 required positional argument: 'age' при выборе 1 пунка меню.
Надеюсь на понимание (я только учусь) и помощь в виде развёрнутого ответа. Благодарю.
Надеюсь на понимание (я только учусь) и помощь в виде развёрнутого ответа. Благодарю.
Python:
weight = 48
height = 170
age = 20
gender = "Ж"
Kf = 1.2
mission = 1
class Nutrition:
"""класс питание"""
def __init__(self):
pass
# рекомендованное количество ккал для потребления человеком за день
def rKKal(self, gender, Kf, weight, height, age):
kkal = 0
if (gender == "М"):
kkal = Kf * (66.5 + 13.75 * weight + 5.003 * height - 6.775 * age)
elif (gender == "Ж"):
kkal = Kf * (665.1 + 9.563 * weight + 1.85 * height - 4.676 * age)
else:
print("неправильно введён пол")
return kkal
# расчет нормы нутриентов (жбу) в зависимости от цели
def norNutr(self, REK_K, mission):
REK_g, REK_b, REK_u = 0, 0, 0
if (mission == 1):
# набор массы
REK_g = round(REK_K * 0.30 / 9, 2)
REK_b = round(REK_K * 0.35 / 4, 2)
REK_u = round(REK_K * 0.55 / 4, 2)
elif (mission == 2):
# сброс веса
REK_g = round(REK_K * 0.10 / 9, 2)
REK_b = round(REK_K * 0.30 / 4, 2)
REK_u = round(REK_K * 0.60 / 4, 2)
elif (mission == 3):
# поддержание веса
REK_g = round(REK_K * 0.30 / 9, 2)
REK_b = round(REK_K * 0.30 / 4, 2)
REK_u = round(REK_K * 0.40 / 4, 2)
else:
print(" неправельно введён номер цели ")
return [REK_g, REK_b, REK_u]
# подсчет суммы калорий
def summ_kkal(self):
obj = list()
k1 = list()
s = 0
N = int(input("введите кол-во продуктов: "))
for p in range(N):
# name = input("название продукта : ")
# g = float(input("жиры = "))
# b = float(input("белки = "))
# u = float(input("углеводы = "))
# k = float(input("калории = "))
obj.append(Product())
k1.append(obj[p].k)
for elem in k1:
s = s + elem
print("Сумма калорий = ", s)
# print("K_m :")
# print(k1)
return s
# рекомендованное кол-во нутриентов и калорий в день
def rek(self):
k1 = Nutrition.rKKal(gender, Kf, weight, height, age)
g1, b1, u1 = Nutrition.norNutr(k1, mission)
# print(g1, b1, u1)
print("рекомендованное кол-во ккал в день = " + str(k1) + " гр.")
print("рекомендованное кол-во белков в день = " + str(g1) + " гр.")
print("рекомендованное кол-во жиров в день = " + str(b1) + " гр.")
print("рекомендованное кол-во углеводов в день = " + str(u1) + " гр.")
# оптимальное распределение калорий между завтраком, обедом, ужином и перекусом
def optimal_KK(self, REK_K):
okz = round(REK_K * 0.25, 2)
oko = round(REK_K * 0.4, 2)
oku = round(REK_K * 0.2, 2)
okp = round(REK_K * 0.15, 2)
return [okz, oko, oku, okp]
class Product:
"""класс продукт"""
def __init__(self):
name = input("введите название продукта: ")
g = int(input("введите кол-во жиров: "))
b = int(input("введите кол-во белков: "))
u = int(input("введите кол-во углеводов: "))
k = int(input("введите кол-во калорий: "))
self.name = name
self.g = g
self.b = b
self.u = u
self.k = k
# вычисление кол-ва ккал и жбу на фактический вес продукта
def converter(self):
weight = float(input("вес продукта: "))
gg = Product.g * (weight / 100)
bb = Product.b * (weight / 100)
uu = Product.u * (weight / 100)
kk = Product.k * (weight / 100)
# print("вес продукта в граммах = ", weight)
print("кол-во жиров в " + str(weight) + " гр. продукта = ", round(gg, 2))
print("кол-во белков в " + str(weight) + " гр. продукта= ", round(bb, 2))
print("кол-во углеводов в " + str(weight) + " гр. продукта = ", round(uu, 2))
print("кол-во калорий в " + str(weight) + " гр.продукта = ", round(kk, 2))
class Breakfast(Nutrition):
""" класс завтрак """
# проверка кол-ва ккал на оптимальность для завтрака
def optimal_Z(self, s):
optimal = Breakfast.optimal_KK(Breakfast.rKKal(gender, Kf, weight, height, age))
# оптимальное кол-во ккал на завтрак
optimal_KZ = optimal[0]
if (optimal_KZ - 20 < s < optimal_KZ + 20):
print("оптимальное кол-во калорий на завтрак")
elif (optimal_KZ - 20 > s):
print("кол-во калорий НЕ оптимально для завтрака: необходимо увеличить калорийность завтрака")
elif (s > optimal_KZ + 20):
print("кол-во калорий НЕ оптимально для завтрака: необходимо уменьшить калорийность завтрака")
#определение оптимальности кол-ва ккал для завтрака из нескольких продуктов
def Zz_optimal(self):
Breakfast.optimal_Z(Breakfast.summ_kkal())
class Lunch(Nutrition):
""" класс обед """
# проверка кол-ва ккал на оптимальность для обеда
def optimal_O(self, s):
optimal = Lunch.optimal_KK(Lunch.rKKal(gender, Kf, weight, height, age))
# оптимальное кол-во ккал на обед
optimal_KO = optimal[1]
if (optimal_KO - 50 < s < optimal_KO + 50):
print("оптимальное кол-во калорий на обед")
elif (optimal_KO - 50 > s):
print("кол-во калорий НЕ оптимально для обеда: необходимо увеличить калорийность обеда")
elif (s > optimal_KO + 50):
print("кол-во калорий НЕ оптимально для обеда: необходимо уменьшить калорийность обеда")
# определение оптимальности кол-ва ккал для обеда из нескольких продуктов
def Oo_optimal(self):
Lunch.optimal_O(Lunch.summ_kkal())
class Dinner(Nutrition):
""" класс ужин """
# проверка кол-ва ккал на оптимальность для ужина
def optimal_U(self, s):
optimal = Dinner.optimal_KK(Dinner.rKKal(gender, Kf, weight, height, age))
# оптимальное кол-во ккал на ужин
optimal_KU = optimal[2]
if (optimal_KU - 40 < s < optimal_KU + 40):
print("оптимальное кол-во калорий на ужин")
elif (optimal_KU - 40 > s):
print("кол-во калорий НЕ оптимально для ужина: необходимо увеличить калорийность ужина")
elif (s > optimal_KU + 40):
print("кол-во калорий НЕ оптимально для ужина: необходимо уменьшить калорийность ужина")
def Uu_optimal(self):
Dinner.optimal_U(Dinner.summ_kkal())
class Snack(Nutrition):
""" класс перекус """
# проверка кол-ва ккал на оптимальность для перекуса
def optimal_P(self, s):
optimal = Snack.optimal_KK(Snack.rKKal(gender, Kf, weight, height, age))
# оптимальное кол-во ккал в перекус
optimal_KP = optimal[3]
if (optimal_KP - 10 < s < optimal_KP + 10):
print("оптимальное кол-во калорий для перекуса")
elif (optimal_KP - 50 > s):
print("кол-во калорий НЕ оптимально для перекуса: необходимо увеличить калорийность перекуса")
elif (s > optimal_KP + 50):
print("кол-во калорий НЕ оптимально для перекуса: необходимо уменьшить калорийность перекуса")
def Pp_optimal(self):
Snack.optimal_P(Snack.summ_kkal())
class Menu(Product, Breakfast, Lunch, Dinner, Snack):
""" класс меню """
def PrintMenu(self):
print("_______________________М Е Н Ю_______________________")
print(" 1 - узнать реокмендованное кол-во ЖБУ и ккал в день")
print(" 2 - проверка калорийности завтрака на оптимальность ")
print(" 3 - проверка калорийности обеда на оптимальность ")
print(" 4 - проверка калорийности ужина на оптимальность ")
print(" 5 - проверка калорийности перекуса на оптимальность ")
print(" 6 - расчет ЖБУ и ккал на фактический вес продукта ")
print(" 0 - ВЫХОД ")
print()
while (True):
enter = int(input("введите номер пункта меню : "))
if enter == 1:
print()
Menu.rek()
print()
elif enter == 2:
print()
Menu.Zz_optimal()
print()
elif enter == 3:
print()
#Menu = Menu()
Menu.Oo_optimal()
print()
elif enter == 4:
print()
#Menu = Menu()
Menu.Uu_optimal()
print()
elif enter == 5:
print()
#Menu = Menu()
Menu.Pp_optimal()
print()
elif enter == 6:
print()
#Menu = Menu()
Menu.converter()
print()
elif enter == 0:
exit()
Menu = Menu()
Menu.PrintMenu()
Последнее редактирование: