Я пытался решить эту проблему, но иду по кругу. У меня есть два вопроса относительно следующей проблемы кодирования вложенного словаря.
1) Расчет килоджоулей - я хотел вычислить килоджоули каждой диеты, основываясь на значениях из вложенного словаря diets_data. Однако, когда я вручную проверяю ответ, я обнаруживаю, что написанная мной формула не дает мне правильного ответа.
def diet_choose_diet():
diets_data = {
'Normal': {'protein': 32.50, 'carbohydrates': 60.00, 'fat': 40.86},
'Oncology': {'protein': 35.00, 'carbohydrates': 52.50, 'fat': 37.63},
'Cardiology': {'protein': 32.50, 'carbohydrates': 30.00, 'fat': 26.88},
'Diabetes': {'protein': 20.00, 'carbohydrates': 27.50, 'fat': 27.95},
'Kidney': {'protein': 15.00, 'carbohydrates': 55.00, 'fat': 23.65}}
# ****************** Normal Diet *****************************
for diet_name, info in diets_data.items():
if diet_name == 'Normal':
print(diet_name)
for value in info.values():
print("%.2f" % value)
# kilojoules = 4.18 * (4 * protein + 4 * carbohydrates + 9.30 * fat)
kilojoules = 4.18 * (4 * 32.50 + 4 * 60.00 + 9.30 * 40.86) # correct answer = 3134.99
print("%.2f" % kilojoules)
# Incorrect Formula
for pro_carb_fat in info:
normal_kilojoules = 4.18 * (4 * info[pro_carb_fat]) + (4 * info[pro_carb_fat]) + (9.30 * info[pro_carb_fat])
print("%.2f" % normal_kilojoules)
# ****************** Oncology Diet *****************************
for diet_name, info in diets_data.items():
if diet_name == 'Oncology':
print(diet_name)
for value in info.values():
print("%.2f" % value)
# kilojoules = 4.18 * (4 * protein + 4 * carbohydrates + 9.30 * fat)
kilojoules = 4.18 * (4 * 35 + 4 * 52.50 + 9.30 * 37.63) # correct answer =
print("%.2f" % kilojoules)
# Incorrect Formula
for pro_carb_fat in info:
oncology_kilojoules = 4.18 * (4 * info[pro_carb_fat]) + (4 * info[pro_carb_fat]) + (9.30 * info[pro_carb_fat]) # this formula gives me the incorrect answer.
print("%.2f" % oncology_kilojoules)
print(diet_choose_diet())
2) Рефакторинг кода - В приведенном выше коде я дублирую код для каждой диеты. Я попытался поместить это в класс, чтобы убрать. Однако я не получаю желаемый результат (я начал изучать классы несколько недель назад и все еще изучаю концепции). Я прошел через вопросы, размещенные здесь. Может быть, я пропустил посты, которые разъясняют вопросы, которые я хочу уточнить. Если бы вы могли поделиться ссылкой, это будет с благодарностью. Я буду учиться больше. Заранее спасибо!
class DietDisplay:
def __init__(self, diet, protein, carbohydrates, fat):
self.diet = diet
self.protein = protein
self.carbohydrates = carbohydrates
self.fat = fat
self.kilojoules = 0
def getDiet(self):
diets_data = {
'Normal': {'protein': 32.50, 'carbohydrates': 60.00, 'fat': 40.86},
'Oncology': {'protein': 35.00, 'carbohydrates': 52.50, 'fat': 37.63},
'Cardiology': {'protein': 32.50, 'carbohydrates': 30.00, 'fat': 26.88},
'Diabetes': {'protein': 20.00, 'carbohydrates': 27.50, 'fat': 27.95},
'Kidney': {'protein': 15.00, 'carbohydrates': 55.00, 'fat': 23.65}
}
for diet_name, info in diets_data.items():
print(diet_name)
for diet in info:
print(info[pro_carb_fat])
self.kilojoules = 4.18 * (4 * (diet_name[diet]['protein']) + 4 * (diet_name[diet]['carbohydrates']) + 9.30 * (diet_name[diet]['fat']))
return self.kilojoules
if __name__ == "__main__":
d = DietDisplay()
print(d.getDiet('Normal', 34, 45, 36))