Last active
May 21, 2024 21:12
-
-
Save madig/6ff3b78c53f095d4d1114f67fc845a6d to your computer and use it in GitHub Desktop.
Calorie counting
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| { | |
| "cells": [ | |
| { | |
| "cell_type": "code", | |
| "execution_count": 43, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "from dataclasses import dataclass\n", | |
| "\n", | |
| "# Configure Jupyter to display the assigned value after an assignment\n", | |
| "%config InteractiveShell.ast_node_interactivity='last_expr_or_assign'" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 44, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "@dataclass\n", | |
| "class Food:\n", | |
| " \"\"\"Something that can be eaten.\n", | |
| "\n", | |
| " Units are per 100g or 100ml.\n", | |
| " \"\"\"\n", | |
| "\n", | |
| " carbs: int\n", | |
| " fats: int\n", | |
| " proteins: int\n", | |
| "\n", | |
| " @property\n", | |
| " def kcal(self):\n", | |
| " return round(self.carbs * 4 + self.fats * 9 + self.proteins * 4)\n", | |
| "\n", | |
| " def __repr__(self):\n", | |
| " return f\"Food(carbs={round(self.carbs)}, fats={round(self.fats)}, proteins={round(self.proteins)}) -> {self.kcal} kcal\"\n", | |
| "\n", | |
| " def __mul__(self, other):\n", | |
| " assert isinstance(other, (int, float))\n", | |
| " return Food(\n", | |
| " self.carbs * other,\n", | |
| " self.fats * other,\n", | |
| " self.proteins * other,\n", | |
| " )\n", | |
| "\n", | |
| " def __add__(self, other):\n", | |
| " assert isinstance(other, Food)\n", | |
| " return Food(\n", | |
| " self.carbs + other.carbs,\n", | |
| " self.fats + other.fats,\n", | |
| " self.proteins + other.proteins,\n", | |
| " )" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 45, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "def reduce_rice_g_to_compensate_for_kcal(rice: Food, other_kcal: int) -> int:\n", | |
| " return round(other_kcal / rice.calories * 100)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 46, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "Food(carbs=7, fats=4, proteins=1) -> 71 kcal" | |
| ] | |
| }, | |
| "execution_count": 46, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "sweet_potato = Food(20.7, 0.15, 2.0)\n", | |
| "yasmin_rice = Food(85, 1.1, 6.4)\n", | |
| "ms_pitta = Food(24.7, 1.3, 6)\n", | |
| "\n", | |
| "banana = Food(23, 0.3, 1.2)\n", | |
| "banana_skinless = Food(20.3, 0.1, 1.2)\n", | |
| "blueberries = Food(14.5, 0.3, 0.7)\n", | |
| "conference_pear = Food(10, 0.1, 0.3)\n", | |
| "kiwi = Food(6.2, 0.7, 0.6)\n", | |
| "lidl_conference_pear = Food(10.9, 0.1, 0.3)\n", | |
| "lidl_red_apple = Food(11.5, 0.5, 0.5)\n", | |
| "morrisons_market_st_large_orange_200g = Food(16.4, 0.4, 1.6)\n", | |
| "orange = Food(11.8, 0.1, 1.2)\n", | |
| "# orange_peeled = Food(8.2, 0.2, 0.8)\n", | |
| "pineapple = Food(13, 0.1, 0.5)\n", | |
| "pink_lady_apple = Food(12, 0.5, 0.6)\n", | |
| "strawberries = Food(7.7, 0.3, 0.7)\n", | |
| "red_grapes = Food(17, 0.1, 0.6)\n", | |
| "green_grapes = Food(15.2, 0.2, 0.7)\n", | |
| "\n", | |
| "salted_butter = Food(0.6, 82.2, 0.6)\n", | |
| "skimmed_milk = Food(4.8, 1.7, 3.6)\n", | |
| "whole_milk = Food(4.8, 3.6, 3.6)\n", | |
| "yoguhrt = Food(6.4, 1.8, 4.3)\n", | |
| "fage_5p_yogurt = Food(3, 5, 9)\n", | |
| "ms_organic_hummous = Food(8.8, 12.2, 6.5)\n", | |
| "pure_nature_greek_yoghurt = Food(4.6, 10, 4)\n", | |
| "\n", | |
| "cashew = Food(20, 48, 21)\n", | |
| "oatmeal = Food(59, 8, 13)\n", | |
| "mc_dougalls_self_raising_flour = Food(67.9, 1.4, 9.9)\n", | |
| "sainsburys_baking_powder = Food(1.6, 0, 0) * 20\n", | |
| "sainsburys_golden_caster_cane_sugar = Food(100, 0, 0)\n", | |
| "\n", | |
| "lidl_beef_10p = Food(0, 9.4, 19.8)\n", | |
| "morrisons_beef_12p = Food(0, 11.8, 20.9)\n", | |
| "morrisons_beef_15p = Food(0.2, 15.6, 18.6)\n", | |
| "sainsburys_beef_12p = Food(0, 11.8, 25)\n", | |
| "chicken_breast = Food(0, 1.5, 30)\n", | |
| "sainsbury_scottish_salmon_fillets = Food(1.2, 17.3, 22.3)\n", | |
| "morrison_large_egg = Food(0, 5.4, 7.5)\n", | |
| "lean_beef_casserole_steak = Food(0.8, 4.3, 33.9)\n", | |
| "tesco_salmon_pieces = Food(0, 13.1, 19.4)\n", | |
| "tesco_beef_15p = Food(0, 14.5, 19.7)\n", | |
| "medium_egg = Food(0.3, 4.7, 6.8)\n", | |
| "casserole_steak = Food(0.8, 4.3, 33.9)\n", | |
| "sainsburys_ranch_steak = Food(0, 5.1, 22.5)\n", | |
| "\n", | |
| "spinach = Food(0.2, 0.7, 3.2)\n", | |
| "chantenay_carrots = Food(6, 0.5, 0.5)\n", | |
| "carrot = Food(9.6, 0.2, 0.9)\n", | |
| "zucchini = Food(2.3, 0.2, 1.3)\n", | |
| "sweet_pepper = Food(4.1, 0.2, 0.8)\n", | |
| "frozen_mixed_veg = Food(5, 0.6, 2.1)\n", | |
| "celery = Food(1.4, 0.1, 0.5)\n", | |
| "peas = Food(11.2, 0.7, 5.5)\n", | |
| "\n", | |
| "bulk_dextrose = Food(91, 0, 0)\n", | |
| "bulk_dextrose_serving = bulk_dextrose * 0.25\n", | |
| "myprotein_whey_powder = Food(6, 7.6, 72)\n", | |
| "myprotein_whey_powder_serving = myprotein_whey_powder * 0.25\n", | |
| "pbn_serving = Food(2.3, 1.8, 23)\n", | |
| "philippines_whey_serving = Food(4, 1, 24)\n", | |
| "serious_gainz_serving = Food(77.7, 4.7, 26.4)\n", | |
| "\n", | |
| "kitkat_2fingers = Food(12.4, 5.1, 1.4)\n", | |
| "schokobons_piece = Food(3, 2.1, 0.5)\n", | |
| "kinder_chocolate_piece = Food(6.7, 4.4, 1.1)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 47, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "name": "stdout", | |
| "output_type": "stream", | |
| "text": [ | |
| "Breakfast: Food(carbs=120, fats=21, proteins=23) -> 760 kcal\n", | |
| "Lunch: Food(carbs=161, fats=42, proteins=61) -> 1264 kcal\n", | |
| "Shake: Food(carbs=48, fats=4, proteins=9) -> 266 kcal\n", | |
| "Dinner: Food(carbs=161, fats=42, proteins=61) -> 1264 kcal\n", | |
| "Snacks: Food(carbs=21, fats=0, proteins=2) -> 95 kcal\n" | |
| ] | |
| }, | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "Food(carbs=513, fats=108, proteins=157) -> 3649 kcal" | |
| ] | |
| }, | |
| "execution_count": 47, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "# Beef day\n", | |
| "\n", | |
| "breakfast = (\n", | |
| " banana_skinless * 1.2 + oatmeal * 1.3 + pure_nature_greek_yoghurt + blueberries * 1\n", | |
| ")\n", | |
| "\n", | |
| "lunch = (\n", | |
| " morrisons_beef_15p * 2.5\n", | |
| " + sweet_potato * 1\n", | |
| " + yasmin_rice * 1.5\n", | |
| " + spinach * 0.5\n", | |
| " + sweet_pepper * 0.75\n", | |
| " + carrot * 1\n", | |
| " # + salted_butter * 0.025\n", | |
| ")\n", | |
| "\n", | |
| "shake = blueberries + banana_skinless * 1.2 + skimmed_milk * 2\n", | |
| "\n", | |
| "dinner = (\n", | |
| " morrisons_beef_15p * 2.5\n", | |
| " + sweet_potato * 1\n", | |
| " + yasmin_rice * 1.5\n", | |
| " + spinach * 0.5\n", | |
| " + sweet_pepper * 0.75\n", | |
| " + carrot * 1\n", | |
| " # + salted_butter * 0.025\n", | |
| ")\n", | |
| "\n", | |
| "snacks = (\n", | |
| " orange * 1.8\n", | |
| " # + medium_egg * 2\n", | |
| " # + kiwi * 1\n", | |
| " # + green_grapes * 0.5\n", | |
| " # + kiwi * 1.1\n", | |
| " # + tesco_salmon_pieces * 1\n", | |
| " # + sweet_potato * 0.2\n", | |
| " # + Food(3.4, 1.7, 1.9) *2# Prawn Tempura\n", | |
| " # + banana\n", | |
| " # + kinder_chocolate_piece\n", | |
| " # + conference_pear\n", | |
| " # + schokobons_piece * 2\n", | |
| " # + morrisons_market_st_large_orange_200g * 1\n", | |
| " # + ms_pitta\n", | |
| " # + kitkat_2fingers\n", | |
| " # + strawberries * 1.4\n", | |
| " # + conference_pear\n", | |
| " # + bulk_dextrose_serving\n", | |
| " # + pineapple * 0.4\n", | |
| ")\n", | |
| "\n", | |
| "print(\"Breakfast:\", breakfast)\n", | |
| "print(\"Lunch: \", lunch)\n", | |
| "print(\"Shake: \", shake)\n", | |
| "print(\"Dinner: \", dinner)\n", | |
| "print(\"Snacks: \", snacks)\n", | |
| "breakfast + lunch + shake + dinner + snacks" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 48, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "Food(carbs=0, fats=26, proteins=115) -> 693 kcal" | |
| ] | |
| }, | |
| "execution_count": 48, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "sainsburys_ranch_steak * 2.55 * 2" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 49, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "Food(carbs=476, fats=85, proteins=196) -> 3449 kcal" | |
| ] | |
| }, | |
| "execution_count": 49, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "# Salmon day\n", | |
| "\n", | |
| "(\n", | |
| " # Breakfast\n", | |
| " (banana + oatmeal * 1.2 + whole_milk * 2 + blueberries * 1)\n", | |
| " # Lunch\n", | |
| " + (\n", | |
| " tesco_salmon_pieces * 2.2\n", | |
| " + sweet_potato * 1.0\n", | |
| " + yasmin_rice * 1.5\n", | |
| " + spinach * 0.5\n", | |
| " + salted_butter * 0.035\n", | |
| " )\n", | |
| " # Shake\n", | |
| " + (blueberries + pbn_serving + whole_milk * 2)\n", | |
| " # Dinner\n", | |
| " + (\n", | |
| " lean_beef_casserole_steak * 2\n", | |
| " + sweet_potato * 1.0\n", | |
| " + yasmin_rice * 1.5\n", | |
| " + spinach * 0.5\n", | |
| " + chantenay_carrots * 1.07\n", | |
| " + sweet_pepper * 0.5\n", | |
| " + salted_butter * 0.035\n", | |
| " )\n", | |
| " # Snacks\n", | |
| " + lidl_red_apple * 0.5\n", | |
| " + kitkat_2fingers\n", | |
| " + kinder_chocolate_piece\n", | |
| ")" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 50, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "Food(carbs=23, fats=10, proteins=10) -> 221 kcal" | |
| ] | |
| }, | |
| "execution_count": 50, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "# Pancakes\n", | |
| "\n", | |
| "pancakes = (\n", | |
| " mc_dougalls_self_raising_flour * 2\n", | |
| " + whole_milk * 2.05\n", | |
| " + morrison_large_egg * 3\n", | |
| " + salted_butter * 0.3\n", | |
| " + sainsburys_baking_powder * 0.075\n", | |
| " + sainsburys_golden_caster_cane_sugar * 0.15\n", | |
| " + morrison_large_egg * 3\n", | |
| ")\n", | |
| "\n", | |
| "one_pan_pancake = pancakes * (1 / 7)" | |
| ] | |
| } | |
| ], | |
| "metadata": { | |
| "kernelspec": { | |
| "display_name": ".venv", | |
| "language": "python", | |
| "name": "python3" | |
| }, | |
| "language_info": { | |
| "codemirror_mode": { | |
| "name": "ipython", | |
| "version": 3 | |
| }, | |
| "file_extension": ".py", | |
| "mimetype": "text/x-python", | |
| "name": "python", | |
| "nbconvert_exporter": "python", | |
| "pygments_lexer": "ipython3", | |
| "version": "3.12.3" | |
| } | |
| }, | |
| "nbformat": 4, | |
| "nbformat_minor": 2 | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment