From 1a1740a5df6030b826d7950b0fe659b98b9f0541 Mon Sep 17 00:00:00 2001 From: Crowdin Bot Date: Fri, 26 Dec 2025 01:34:23 +0000 Subject: [PATCH] New Crowdin translations by GitHub Action --- de-DE/code/starter/main.py | 12 ++++ de-DE/code/starter/project_config.yml | 4 ++ de-DE/images/banner.png | Bin 0 -> 43369 bytes de-DE/mentor.md | 30 ++++++++ de-DE/meta.yml | 20 ++++++ de-DE/resources/dataframe.json | 72 +++++++++++++++++++ de-DE/solutions/main.py | 27 ++++++++ de-DE/step_1.md | 72 +++++++++++++++++++ de-DE/step_2.md | 58 ++++++++++++++++ de-DE/step_3.md | 68 ++++++++++++++++++ de-DE/step_4.md | 54 +++++++++++++++ de-DE/step_5.md | 92 +++++++++++++++++++++++++ es-419/code/starter/main.py | 12 ++++ es-419/code/starter/project_config.yml | 4 ++ es-419/images/banner.png | Bin 0 -> 43369 bytes es-419/mentor.md | 30 ++++++++ es-419/meta.yml | 20 ++++++ es-419/resources/dataframe.json | 72 +++++++++++++++++++ es-419/solutions/main.py | 27 ++++++++ es-419/step_1.md | 72 +++++++++++++++++++ es-419/step_2.md | 58 ++++++++++++++++ es-419/step_3.md | 68 ++++++++++++++++++ es-419/step_4.md | 54 +++++++++++++++ es-419/step_5.md | 92 +++++++++++++++++++++++++ fr-FR/code/starter/main.py | 12 ++++ fr-FR/code/starter/project_config.yml | 4 ++ fr-FR/images/banner.png | Bin 0 -> 43369 bytes fr-FR/mentor.md | 30 ++++++++ fr-FR/meta.yml | 20 ++++++ fr-FR/resources/dataframe.json | 72 +++++++++++++++++++ fr-FR/solutions/main.py | 27 ++++++++ fr-FR/step_1.md | 72 +++++++++++++++++++ fr-FR/step_2.md | 58 ++++++++++++++++ fr-FR/step_3.md | 68 ++++++++++++++++++ fr-FR/step_4.md | 54 +++++++++++++++ fr-FR/step_5.md | 92 +++++++++++++++++++++++++ hi-IN/code/starter/main.py | 12 ++++ hi-IN/code/starter/project_config.yml | 4 ++ hi-IN/images/banner.png | Bin 0 -> 43369 bytes hi-IN/mentor.md | 30 ++++++++ hi-IN/meta.yml | 20 ++++++ hi-IN/resources/dataframe.json | 72 +++++++++++++++++++ hi-IN/solutions/main.py | 27 ++++++++ hi-IN/step_1.md | 72 +++++++++++++++++++ hi-IN/step_2.md | 58 ++++++++++++++++ hi-IN/step_3.md | 68 ++++++++++++++++++ hi-IN/step_4.md | 54 +++++++++++++++ hi-IN/step_5.md | 92 +++++++++++++++++++++++++ it-IT/code/starter/main.py | 12 ++++ it-IT/code/starter/project_config.yml | 4 ++ it-IT/images/banner.png | Bin 0 -> 43369 bytes it-IT/mentor.md | 30 ++++++++ it-IT/meta.yml | 20 ++++++ it-IT/resources/dataframe.json | 72 +++++++++++++++++++ it-IT/solutions/main.py | 27 ++++++++ it-IT/step_1.md | 72 +++++++++++++++++++ it-IT/step_2.md | 58 ++++++++++++++++ it-IT/step_3.md | 68 ++++++++++++++++++ it-IT/step_4.md | 54 +++++++++++++++ it-IT/step_5.md | 92 +++++++++++++++++++++++++ ja-JP/code/starter/main.py | 12 ++++ ja-JP/code/starter/project_config.yml | 4 ++ ja-JP/images/banner.png | Bin 0 -> 43369 bytes ja-JP/mentor.md | 30 ++++++++ ja-JP/meta.yml | 20 ++++++ ja-JP/resources/dataframe.json | 72 +++++++++++++++++++ ja-JP/solutions/main.py | 27 ++++++++ ja-JP/step_1.md | 72 +++++++++++++++++++ ja-JP/step_2.md | 58 ++++++++++++++++ ja-JP/step_3.md | 68 ++++++++++++++++++ ja-JP/step_4.md | 54 +++++++++++++++ ja-JP/step_5.md | 92 +++++++++++++++++++++++++ nl-NL/code/starter/main.py | 12 ++++ nl-NL/code/starter/project_config.yml | 4 ++ nl-NL/images/banner.png | Bin 0 -> 43369 bytes nl-NL/mentor.md | 30 ++++++++ nl-NL/meta.yml | 20 ++++++ nl-NL/resources/dataframe.json | 72 +++++++++++++++++++ nl-NL/solutions/main.py | 27 ++++++++ nl-NL/step_1.md | 72 +++++++++++++++++++ nl-NL/step_2.md | 58 ++++++++++++++++ nl-NL/step_3.md | 68 ++++++++++++++++++ nl-NL/step_4.md | 54 +++++++++++++++ nl-NL/step_5.md | 92 +++++++++++++++++++++++++ pt-BR/code/starter/main.py | 12 ++++ pt-BR/code/starter/project_config.yml | 4 ++ pt-BR/images/banner.png | Bin 0 -> 43369 bytes pt-BR/mentor.md | 30 ++++++++ pt-BR/meta.yml | 20 ++++++ pt-BR/resources/dataframe.json | 72 +++++++++++++++++++ pt-BR/solutions/main.py | 27 ++++++++ pt-BR/step_1.md | 72 +++++++++++++++++++ pt-BR/step_2.md | 58 ++++++++++++++++ pt-BR/step_3.md | 68 ++++++++++++++++++ pt-BR/step_4.md | 54 +++++++++++++++ pt-BR/step_5.md | 92 +++++++++++++++++++++++++ uk-UA/code/starter/main.py | 12 ++++ uk-UA/code/starter/project_config.yml | 4 ++ uk-UA/images/banner.png | Bin 0 -> 43369 bytes uk-UA/mentor.md | 30 ++++++++ uk-UA/meta.yml | 20 ++++++ uk-UA/resources/dataframe.json | 72 +++++++++++++++++++ uk-UA/solutions/main.py | 27 ++++++++ uk-UA/step_1.md | 72 +++++++++++++++++++ uk-UA/step_2.md | 58 ++++++++++++++++ uk-UA/step_3.md | 68 ++++++++++++++++++ uk-UA/step_4.md | 54 +++++++++++++++ uk-UA/step_5.md | 92 +++++++++++++++++++++++++ 108 files changed, 4581 insertions(+) create mode 100644 de-DE/code/starter/main.py create mode 100644 de-DE/code/starter/project_config.yml create mode 100644 de-DE/images/banner.png create mode 100644 de-DE/mentor.md create mode 100644 de-DE/meta.yml create mode 100644 de-DE/resources/dataframe.json create mode 100644 de-DE/solutions/main.py create mode 100644 de-DE/step_1.md create mode 100644 de-DE/step_2.md create mode 100644 de-DE/step_3.md create mode 100644 de-DE/step_4.md create mode 100644 de-DE/step_5.md create mode 100644 es-419/code/starter/main.py create mode 100644 es-419/code/starter/project_config.yml create mode 100644 es-419/images/banner.png create mode 100644 es-419/mentor.md create mode 100644 es-419/meta.yml create mode 100644 es-419/resources/dataframe.json create mode 100644 es-419/solutions/main.py create mode 100644 es-419/step_1.md create mode 100644 es-419/step_2.md create mode 100644 es-419/step_3.md create mode 100644 es-419/step_4.md create mode 100644 es-419/step_5.md create mode 100644 fr-FR/code/starter/main.py create mode 100644 fr-FR/code/starter/project_config.yml create mode 100644 fr-FR/images/banner.png create mode 100644 fr-FR/mentor.md create mode 100644 fr-FR/meta.yml create mode 100644 fr-FR/resources/dataframe.json create mode 100644 fr-FR/solutions/main.py create mode 100644 fr-FR/step_1.md create mode 100644 fr-FR/step_2.md create mode 100644 fr-FR/step_3.md create mode 100644 fr-FR/step_4.md create mode 100644 fr-FR/step_5.md create mode 100644 hi-IN/code/starter/main.py create mode 100644 hi-IN/code/starter/project_config.yml create mode 100644 hi-IN/images/banner.png create mode 100644 hi-IN/mentor.md create mode 100644 hi-IN/meta.yml create mode 100644 hi-IN/resources/dataframe.json create mode 100644 hi-IN/solutions/main.py create mode 100644 hi-IN/step_1.md create mode 100644 hi-IN/step_2.md create mode 100644 hi-IN/step_3.md create mode 100644 hi-IN/step_4.md create mode 100644 hi-IN/step_5.md create mode 100644 it-IT/code/starter/main.py create mode 100644 it-IT/code/starter/project_config.yml create mode 100644 it-IT/images/banner.png create mode 100644 it-IT/mentor.md create mode 100644 it-IT/meta.yml create mode 100644 it-IT/resources/dataframe.json create mode 100644 it-IT/solutions/main.py create mode 100644 it-IT/step_1.md create mode 100644 it-IT/step_2.md create mode 100644 it-IT/step_3.md create mode 100644 it-IT/step_4.md create mode 100644 it-IT/step_5.md create mode 100644 ja-JP/code/starter/main.py create mode 100644 ja-JP/code/starter/project_config.yml create mode 100644 ja-JP/images/banner.png create mode 100644 ja-JP/mentor.md create mode 100644 ja-JP/meta.yml create mode 100644 ja-JP/resources/dataframe.json create mode 100644 ja-JP/solutions/main.py create mode 100644 ja-JP/step_1.md create mode 100644 ja-JP/step_2.md create mode 100644 ja-JP/step_3.md create mode 100644 ja-JP/step_4.md create mode 100644 ja-JP/step_5.md create mode 100644 nl-NL/code/starter/main.py create mode 100644 nl-NL/code/starter/project_config.yml create mode 100644 nl-NL/images/banner.png create mode 100644 nl-NL/mentor.md create mode 100644 nl-NL/meta.yml create mode 100644 nl-NL/resources/dataframe.json create mode 100644 nl-NL/solutions/main.py create mode 100644 nl-NL/step_1.md create mode 100644 nl-NL/step_2.md create mode 100644 nl-NL/step_3.md create mode 100644 nl-NL/step_4.md create mode 100644 nl-NL/step_5.md create mode 100644 pt-BR/code/starter/main.py create mode 100644 pt-BR/code/starter/project_config.yml create mode 100644 pt-BR/images/banner.png create mode 100644 pt-BR/mentor.md create mode 100644 pt-BR/meta.yml create mode 100644 pt-BR/resources/dataframe.json create mode 100644 pt-BR/solutions/main.py create mode 100644 pt-BR/step_1.md create mode 100644 pt-BR/step_2.md create mode 100644 pt-BR/step_3.md create mode 100644 pt-BR/step_4.md create mode 100644 pt-BR/step_5.md create mode 100644 uk-UA/code/starter/main.py create mode 100644 uk-UA/code/starter/project_config.yml create mode 100644 uk-UA/images/banner.png create mode 100644 uk-UA/mentor.md create mode 100644 uk-UA/meta.yml create mode 100644 uk-UA/resources/dataframe.json create mode 100644 uk-UA/solutions/main.py create mode 100644 uk-UA/step_1.md create mode 100644 uk-UA/step_2.md create mode 100644 uk-UA/step_3.md create mode 100644 uk-UA/step_4.md create mode 100644 uk-UA/step_5.md diff --git a/de-DE/code/starter/main.py b/de-DE/code/starter/main.py new file mode 100644 index 0000000..45d5a6a --- /dev/null +++ b/de-DE/code/starter/main.py @@ -0,0 +1,12 @@ +# Gross Groceries recipe card + +# Ingredients and amounts for 1 person + + +# Number of servings + + +# Scaled-up ingredients + + +# Print recipe instructions diff --git a/de-DE/code/starter/project_config.yml b/de-DE/code/starter/project_config.yml new file mode 100644 index 0000000..d184c95 --- /dev/null +++ b/de-DE/code/starter/project_config.yml @@ -0,0 +1,4 @@ +name: "Python Bytes - Gross Groceries" +identifier: "python-bytes-gross-groceries" +type: python +build: true diff --git a/de-DE/images/banner.png b/de-DE/images/banner.png new file mode 100644 index 0000000000000000000000000000000000000000..685e0cfcdba14a01ff649260c3122d52f976b0d7 GIT binary patch literal 43369 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 C!4%N| literal 0 HcmV?d00001 diff --git a/de-DE/mentor.md b/de-DE/mentor.md new file mode 100644 index 0000000..fe5ddcf --- /dev/null +++ b/de-DE/mentor.md @@ -0,0 +1,30 @@ +# Mentor Notes: Gross Groceries + +## Project Overview + +In this project, learners will use Python to help a strange restaurant owner create a revolting recipe card. They’ll start with simple ingredients and build up to printing full recipe instructions using f-strings. By the end, learners will have used variables, strings, numbers, simple arithmetic, and f-strings across multiple steps. + +--- + +## What Learners Will Practise + +- Creating and using variables +- Combining strings and numbers with f-strings +- Performing basic multiplication in code +- Writing multi-line Python programs with clear structure + +--- + +## Teaching Tips + +- Encourage learners to come up with their own disgusting ingredients — the sillier, the better! +- Prompt them to read printed output carefully to understand the effect of their changes. +- Reinforce that f-strings are a powerful way to combine text and values without needing multiple `+` symbols. + +--- + +## Extension Ideas + +- Let learners use `input()` to ask how many people the recipe should serve +- Encourage them to use `\n` to format multi-line recipe cards +- Add even more ingredients or steps to the recipe diff --git a/de-DE/meta.yml b/de-DE/meta.yml new file mode 100644 index 0000000..330e5c4 --- /dev/null +++ b/de-DE/meta.yml @@ -0,0 +1,20 @@ +title: Python bytes - Gross groceries +hero_image: images/banner.png +description: Write a revolting recipe card using variables, f-strings, and maths +meta_title: Learn to code with Gross Groceries | Python Bytes +meta_description: Learn how to use Python f-strings and variables to print a disgusting recipe for an odd restaurant. +version: 1 +listed: true +copyedit: false +last_tested: "2025-04-14" +steps: + - title: step_1 + - title: step_2 + completion: + - engaged + - title: step_3 + - title: step_4 + - title: step_5 + completion: + - internal + - external diff --git a/de-DE/resources/dataframe.json b/de-DE/resources/dataframe.json new file mode 100644 index 0000000..c7460c9 --- /dev/null +++ b/de-DE/resources/dataframe.json @@ -0,0 +1,72 @@ +[ + { + "filename": "meta.yml", + "path": "en\/", + "content": "title: Python bytes - Gross groceries\nhero_image: images\/banner.png\ndescription: Write a revolting recipe card using variables, f-strings, and maths\nmeta_title: Learn to code with Gross Groceries | Python Bytes\nmeta_description: Learn how to use Python f-strings and variables to print a disgusting recipe for an odd restaurant.\nversion: 1\nlisted: false\ncopyedit: false\nlast_tested: \"2025-04-14\"\nsteps:\n - title: step_1\n - title: step_2\n completion:\n - engaged\n - title: step_3\n - title: step_4\n - title: step_5\n completion:\n - internal\n - external\n" + }, + { + "filename": "main.py", + "path": "en\/code\/starter\/", + "content": "# Gross Groceries recipe card\n\n# Ingredients and amounts for 1 person\n\n\n# Number of servings\n\n\n# Scaled-up ingredients\n\n\n# Print recipe instructions\n" + }, + { + "filename": "project_config.yml", + "path": "en\/code\/starter\/", + "content": "name: \"Python Bytes - Gross Groceries\"\nidentifier: \"python-bytes-gross-groceries\"\ntype: python\nbuild: true\n" + }, + { + "filename": "mentor.md", + "path": "en\/", + "content": "# Mentor Notes: Gross Groceries\n\n## Project Overview\n\nIn this project, learners will use Python to help a strange restaurant owner create a revolting recipe card. They’ll start with simple ingredients and build up to printing full recipe instructions using f-strings. By the end, learners will have used variables, strings, numbers, simple arithmetic, and f-strings across multiple steps.\n\n---\n\n## What Learners Will Practise\n\n- Creating and using variables\n- Combining strings and numbers with f-strings\n- Performing basic multiplication in code\n- Writing multi-line Python programs with clear structure\n\n---\n\n## Teaching Tips\n\n- Encourage learners to come up with their own disgusting ingredients — the sillier, the better!\n- Prompt them to read printed output carefully to understand the effect of their changes.\n- Reinforce that f-strings are a powerful way to combine text and values without needing multiple `+` symbols.\n\n---\n\n## Extension Ideas\n\n- Let learners use `input()` to ask how many people the recipe should serve\n- Encourage them to use `\\n` to format multi-line recipe cards\n- Add even more ingredients or steps to the recipe\n" + }, + { + "filename": "step_1.md", + "path": "en\/", + "content": "

Write your first disgusting ingredient<\/h2>\n--- task ---\nAdd a gross ingredient and print it using an f-string\n--- \/task ---\n\n

Start your recipe<\/h2>\n\nThe owner of an odd restaurant has decided to use code to help make their recipes. You're the coder they've hired. 🧑‍💻 \nYour job is to help create the grossest recipe card ever 🤢\n\nLet’s start by adding your first ingredient. But before we write any code, you’ll notice some lines that start with `#` — these are **comments**.\n\nComments are notes in your code that help you (and others!) understand what each part does. Python ignores them when your program runs.\n\nNow try this:\n\n1. Choose a disgusting ingredient like `'maggot mash 🐛'` or `'slug slime 🐌'`.\n2. Decide how much of it you want to use. Let’s say `50` grams.\n3. Use an **f-string** to print the amount and the ingredient.\n\n
\n--- code ---\n---\nlanguage: python\nfilename: main.py\nline_numbers: true\nline_number_start: 3\nline_highlights: 5-6,11\n---\n# Ingredients and amounts for 1 person\n\ningredient_1 = 'maggot mash 🐛'\namount_1 = 50\n# Number of servings\n\n\n# Scaled-up ingredients\nprint(f'{amount_1}g of {ingredient_1}')\n--- \/code ---\n<\/div>\n\n
\n
50g of maggot mash 🐛<\/pre>\n<\/div>\n\n
\n\n### Tip\n\nIf your code prints nothing or shows an error, check that:\n- You used **quotes** around your ingredient name (it's a string!)\n- You’ve spelled the variable names correctly\n- You used the `f` before the string in `print(f'...')`\n\n<\/div>\n\n
\n\n### Debugging\n\n- If Python says there's a `NameError`, you may have a typo in your variable name\n- If you see `{amount_1}` in the output instead of the number, make sure your string starts with `f`\n\n<\/div>\n" + }, + { + "filename": "step_2.md", + "path": "en\/", + "content": "

Feed more people<\/h2>\n--- task ---\nAdd a servings variable and use it to scale up your ingredient\n--- \/task ---\n\n

Make it serve more than one!<\/h2>\n\nRight now, your ingredient amount is for just **one** person. But what if you wanted to feed 3, or even 10 people?\n\nInstead of writing new numbers, you can **multiply** the amount by the number of servings — using maths inside your f-string!\n\nLet’s add a variable called `servings`, and update your print line to use it:\n\n
\n--- code ---\n---\nlanguage: python\nfilename: main.py\nline_numbers: true\nline_number_start: 7\nline_highlights: 8,11\n---\n# Number of servings\nservings = 3\n\n# Scaled-up ingredients\nprint(f'{amount_1 * servings}g of {ingredient_1}')\n--- \/code ---\n<\/div>\n\n
\n
150g of maggot mash 🐛<\/pre>\n<\/div>\n\n
\n\n### Tip\n\nYou can do maths inside an f-string using `{}` — Python works it out before printing the message!\n\n<\/div>\n\n
\n\n### Debugging\n\n- Make sure your variable name is `servings`, not `serving` or `serves`\n- Don’t forget the `*` for multiplication\n\n<\/div>\n" + }, + { + "filename": "step_3.md", + "path": "en\/", + "content": "

Add more ingredients<\/h2>\n--- task ---\nAdd two more gross ingredients and scale them up using f-strings\n--- \/task ---\n\n

Make your recipe extra disgusting<\/h2>\n\nOne ingredient is never enough for a proper disgusting dish! Let's add two more ingredients to your recipe.\n\n1. Add `ingredient_2` and `ingredient_3` — give them gross names like `'sock juice 🧦'` or `'toenail sprinkles 🦶'`.\n2. Add matching `amount_2` and `amount_3` values.\n3. Use f-strings to print out **all three ingredients**, scaled up using your `servings` variable.\n\n
\n--- code ---\n---\nlanguage: python\nfilename: main.py\nline_numbers: true\nline_number_start: 3\nline_highlights: 8-10,11-12,18-19\n---\ningredient_2 = 'sock juice 🧦'\namount_2 = 30\n\ningredient_3 = 'toenail sprinkles 🦶'\namount_3 = 10\n# Number of servings\nservings = 3\n\n# Scaled-up ingredients\nprint(f'{amount_1 * servings}g of {ingredient_1}')\nprint(f'{amount_2 * servings}ml of {ingredient_2}')\nprint(f'{amount_3 * servings}g of {ingredient_3}')\n--- \/code ---\n<\/div>\n\n
\n
150g of maggot mash 🐛\n90ml of sock juice 🧦\n30g of toenail sprinkles 🦶<\/pre>\n<\/div>\n\n
\n\n### Tip\n\nYou can label each ingredient with different units like `g` (grams) or `ml` (millilitres) depending on what it is!\n\n<\/div>\n\n
\n\n### Debugging\n\n- Make sure your variable names match exactly — Python is case-sensitive!\n- Don’t forget to multiply by `servings` inside each f-string\n\n<\/div>\n" + }, + { + "filename": "step_4.md", + "path": "en\/", + "content": "

Start your recipe instructions<\/h2>\n--- task ---\nUse an f-string to describe the number of people and the first ingredient\n--- \/task ---\n\n

Tell the chef what to do<\/h2>\n\nNow it’s time to turn your ingredient list into an actual recipe! 🍲\n\nYour first step will be to describe the number of people being fed and the first ingredient to be added.\n\n
\n--- code ---\n---\nlanguage: python\nfilename: main.py\nline_numbers: true\nline_number_start: 21\nline_highlights: 22-23\n---\n# Print recipe instructions\nprint()\nprint(f'To make this revolting recipe for {servings} people add {amount_1 * servings}g of {ingredient_1} to a large bowl.')\n--- \/code ---\n<\/div>\n\n
\n
To make this revolting recipe for 3 people add 150g of maggot mash 🐛 to a large bowl.<\/pre>\n<\/div>\n\n
\n\n### Tip\n\nYou can do **maths inside an f-string**! \nThis lets you calculate the ingredient amounts and show them inside a sentence without needing extra lines of code.\n\n<\/div>\n\n
\n\n### Debugging\n\n- Make sure you used `* servings` inside the `{}` for the amount\n- Don’t forget the `f` at the start of your string\n\n<\/div>\n" + }, + { + "filename": "step_5.md", + "path": "en\/", + "content": "

Finish your disgusting recipe<\/h2>\n--- task ---\nUse more f-strings to describe how to prepare your ingredients\n--- \/task ---\n\n

Serve it up 🤢<\/h2>\n\nLet’s finish the recipe by printing the rest of the disgusting instructions.\n\nYou’ll describe:\n- What to pour in next\n- How to garnish it with sprinkles\n- How to serve it to your (un)lucky guests!\n\nAdd these final lines to your program:\n\n
\n--- code ---\n---\nlanguage: python\nfilename: main.py\nline_numbers: true\nline_number_start: 21\nline_highlights: 24-27\n---\n# Print recipe instructions\nprint()\nprint(f'To make this revolting recipe for {servings} people add {amount_1 * servings}g of {ingredient_1} to a large bowl.')\nprint()\nprint(f'Pour over {amount_2 * servings}ml of {ingredient_2}.')\nprint()\nprint(f'Sprinkle with {amount_3 * servings}g of {ingredient_3} and serve cold 🧊. Yum!')\n--- \/code ---\n<\/div>\n\n
\n
To make this revolting recipe for 3 people add 150g of maggot mash 🐛 to a large bowl.\n\nPour over 90ml of sock juice 🧦.\n\nSprinkle with 30g of toenail sprinkles 🦶 and serve cold 🧊. Yum!<\/pre>\n<\/div>\n\n
\n\n### Tip\n\nAdding `print()` with nothing in it is a great way to add blank lines in your output. \nYou can combine text, variables, and maths all in the same f-string!\n\n<\/div>\n\n
\n\n### Debugging\n\n- Check that every sentence is inside a `print(f'...')`\n- Watch your brackets and punctuation carefully!\n\n<\/div>\n" + }, + { + "filename": "main.py", + "path": "en\/solutions\/", + "content": "# Gross Groceries recipe card\n\n# Ingredients and amounts for 1 person\n\ningredient_1 = 'maggot mash 🐛'\namount_1 = 50\n\ningredient_2 = 'sock juice 🧦'\namount_2 = 30\n\ningredient_3 = 'toenail sprinkles 🦶'\namount_3 = 10\n# Number of servings\nservings = 3\n\n# Scaled-up ingredients\nprint(f'{amount_1 * servings}g of {ingredient_1}')\nprint(f'{amount_2 * servings}ml of {ingredient_2}')\nprint(f'{amount_3 * servings}g of {ingredient_3}')\n\n# Print recipe instructions\nprint()\nprint(f'To make this revolting recipe for {servings} people add {amount_1 * servings}g of {ingredient_1} to a large bowl.')\nprint()\nprint(f'Pour over {amount_2 * servings}ml of {ingredient_2}.')\nprint()\nprint(f'Sprinkle with {amount_3 * servings}g of {ingredient_3} and serve cold 🧊. Yum!')\n" + }, + { + "filename": "README.md", + "path": "python-bytes-gross-groceries\/", + "content": "# Python bytes - Gross groceries\n\n![A cartoon recipe card with gross ingredients like sock juice and toenail sprinkles](en\/images\/banner.png)\n\nProject description\n\nFind the project online at [projects.raspberrypi.org\/en\/projects\/python-bytes-gross-groceries](https:\/\/projects.raspberrypi.org\/en\/projects\/python-bytes-gross-groceries)\n\n## Resources\nFor project materials and solutions, see [en\/resources](https:\/\/github.com\/raspberrypilearning\/python-bytes-gross-groceries\/tree\/master\/en\/resources) and [en\/solutions](https:\/\/github.com\/raspberrypilearning\/python-bytes-gross-groceries\/tree\/master\/en\/solutions).\n\n## Contributing\nSee [CONTRIBUTING.md](CONTRIBUTING.md)\n\n## Licence\nSee [LICENCE.md](LICENCE.md)\n" + }, + { + "filename": "CONTRIBUTING.md", + "path": "python-bytes-gross-groceries\/", + "content": "# Contributing\n\nAll contributions are assumed to be licensed under the same licence as the source, i.e. [CC BY-SA](http:\/\/creativecommons.org\/licenses\/by-sa\/4.0\/). This licence must remain in all derivatives of this work.\n\n## Issues\n\nIf you find a mistake, bug, or other problem, please [open an issue](https:\/\/github.com\/raspberrypilearning\/python-bytes-gross-groceries\/issues) in this repository.\n\n## Pull requests\n\nAll edits to a resource should be made to the draft branch or to a fork of the repo. These patches can then be submitted as a pull request.\n\nIf you fix a mistake, bug, or problem or have something to contribute, please create a pull request for each modification. Please consider grouping modifications sensibly, e.g. don't bundle typo fixes in the same pull request as code changes, file them separately instead.\n\nPlease note that sometimes things are done for pedagogical reasons so changes which make sense from a software engineering perspective (reducing duplication or making use of more advanced programming language features) may not be suitable to maintain the intended educational value.\n\n## Derivatives\n\nSee [LICENCE.md](LICENCE.md) for content licence. The licence must remain in all derivatives of this work.\n\n## Translation\n\nYou can help us make this project available to more people around the world by translating it. For more information, please go to [rpf.io\/translate](https:\/\/rpf.io\/translate).\n" + }, + { + "filename": "LICENCE.md", + "path": "python-bytes-gross-groceries\/", + "content": "# Licence\n\nUnless otherwise specified, everything in this repository is covered by the following licence:\n\n[![Creative Commons licence](http:\/\/i.creativecommons.org\/l\/by-sa\/4.0\/88x31.png)](http:\/\/creativecommons.org\/licenses\/by-sa\/4.0\/)\n\n**Python bytes - Gross groceries** by the [Raspberry Pi Foundation](http:\/\/www.raspberrypi.org) is licensed under a [Creative Commons Attribution 4.0 International licence](http:\/\/creativecommons.org\/licenses\/by-sa\/4.0\/).\n\nBased on a work at https:\/\/github.com\/raspberrypilearning\/python-bytes-gross-groceries.\n" + }, + { + "filename": "crowdin.yml", + "path": "python-bytes-gross-groceries\/", + "content": "files:\n - source: \/en\/**\/*.*\n translation: \/%locale%\/**\/%original_file_name%\n" + } +] \ No newline at end of file diff --git a/de-DE/solutions/main.py b/de-DE/solutions/main.py new file mode 100644 index 0000000..855cb24 --- /dev/null +++ b/de-DE/solutions/main.py @@ -0,0 +1,27 @@ +# Gross Groceries recipe card + +# Ingredients and amounts for 1 person + +ingredient_1 = 'maggot mash 🐛' +amount_1 = 50 + +ingredient_2 = 'sock juice 🧦' +amount_2 = 30 + +ingredient_3 = 'toenail sprinkles 🦶' +amount_3 = 10 +# Number of servings +servings = 3 + +# Scaled-up ingredients +print(f'{amount_1 * servings}g of {ingredient_1}') +print(f'{amount_2 * servings}ml of {ingredient_2}') +print(f'{amount_3 * servings}g of {ingredient_3}') + +# Print recipe instructions +print() +print(f'To make this revolting recipe for {servings} people add {amount_1 * servings}g of {ingredient_1} to a large bowl.') +print() +print(f'Pour over {amount_2 * servings}ml of {ingredient_2}.') +print() +print(f'Sprinkle with {amount_3 * servings}g of {ingredient_3} and serve cold 🧊. Yum!') diff --git a/de-DE/step_1.md b/de-DE/step_1.md new file mode 100644 index 0000000..ee16b36 --- /dev/null +++ b/de-DE/step_1.md @@ -0,0 +1,72 @@ +

Write your first disgusting ingredient

+ +\--- task --- + +Add a gross ingredient and print it using an f-string. + +\--- /task --- + +

Start your recipe

+ +The owner of an odd restaurant has decided to use code to help make their recipes. You're the coder they've hired. 🧑‍💻 +Your job is to help create the grossest recipe card ever 🤢 + +Let’s start by adding your first ingredient. But before we write any code, you’ll notice some lines that start with `#` — these are **comments**. + +Comments are notes in your code that help you (and others!) understand what each part does. Python ignores them when your program runs. + +Now try this: + +1. Choose a disgusting ingredient like `'maggot mash 🐛'` or `'slug slime 🐌'`. +2. Decide how much of it you want to use. Let’s say `50` grams. +3. Use an **f-string** to print the amount and the ingredient. + +
+--- code --- +--- +language: python +filename: main.py +line_numbers: true +line_number_start: 3 +line_highlights: 5-6,11 +--- + +# Ingredients and amounts for 1 person + +ingredient_1 = 'maggot mash 🐛' +amount_1 = 50 + +# Number of servings + +# Scaled-up ingredients + +print(f'{amount_1}g of {ingredient_1}') + +\--- /code --- + +
+ +
+
50g of maggot mash 🐛
+
+ +
+ +### Tip + +If your code prints nothing or shows an error, check that: + +- You used **quotes** around your ingredient name (it's a string!) +- You’ve spelled the variable names correctly +- You used the `f` before the string in `print(f'...')` + +
+ +
+ +### Debugging + +- If Python says there's a `NameError`, you may have a typo in your variable name +- If you see `{amount_1}` in the output instead of the number, make sure your string starts with `f` + +
diff --git a/de-DE/step_2.md b/de-DE/step_2.md new file mode 100644 index 0000000..349fedb --- /dev/null +++ b/de-DE/step_2.md @@ -0,0 +1,58 @@ +

Feed more people

+ +\--- task --- + +Add a servings variable and use it to scale up your ingredient + +\--- /task --- + +

Make it serve more than one!

+ +Right now, your ingredient amount is for just **one** person. But what if you wanted to feed 3, or even 10 people? + +Instead of writing new numbers, you can **multiply** the amount by the number of servings — using maths inside your f-string! + +Let’s add a variable called `servings`, and update your print line to use it: + +
+--- code --- +--- +language: python +filename: main.py +line_numbers: true +line_number_start: 7 +line_highlights: 8,11 +--- + +# Number of servings + +servings = 3 + +# Scaled-up ingredients + +print(f'{amount_1 \* servings}g of {ingredient_1}') + +\--- /code --- + +
+ +
+
150g of maggot mash 🐛
+
+ +
+ +### Tip + +You can do maths inside an f-string using `{}` — Python works it out before printing the message! + +
+ +
+ +### Debugging + +- Make sure your variable name is `servings`, not `serving` or `serves` +- Don’t forget the `*` for multiplication + +
diff --git a/de-DE/step_3.md b/de-DE/step_3.md new file mode 100644 index 0000000..23e2cc8 --- /dev/null +++ b/de-DE/step_3.md @@ -0,0 +1,68 @@ +

Add more ingredients

+ +\--- task --- + +Add two more gross ingredients and scale them up using f-strings + +\--- /task --- + +

Make your recipe extra disgusting

+ +One ingredient is never enough for a proper disgusting dish! Let's add two more ingredients to your recipe. + +1. Add `ingredient_2` and `ingredient_3` — give them gross names like `'sock juice 🧦'` or `'toenail sprinkles 🦶'`. +2. Add matching `amount_2` and `amount_3` values. +3. Use f-strings to print out **all three ingredients**, scaled up using your `servings` variable. + +
+--- code --- +--- +language: python +filename: main.py +line_numbers: true +line_number_start: 3 +line_highlights: 8-10,11-12,18-19 +--- + +ingredient_2 = 'sock juice 🧦' +amount_2 = 30 + +ingredient_3 = 'toenail sprinkles 🦶' +amount_3 = 10 + +# Number of servings + +servings = 3 + +# Scaled-up ingredients + +print(f'{amount_1 \* servings}g of {ingredient_1}') +print(f'{amount_2 \* servings}ml of {ingredient_2}') +print(f'{amount_3 \* servings}g of {ingredient_3}') + +\--- /code --- + +
+ +
+
150g of maggot mash 🐛
+90ml of sock juice 🧦
+30g of toenail sprinkles 🦶
+
+ +
+ +### Tip + +You can label each ingredient with different units like `g` (grams) or `ml` (millilitres) depending on what it is! + +
+ +
+ +### Debugging + +- Make sure your variable names match exactly — Python is case-sensitive! +- Don’t forget to multiply by `servings` inside each f-string + +
diff --git a/de-DE/step_4.md b/de-DE/step_4.md new file mode 100644 index 0000000..0a3a807 --- /dev/null +++ b/de-DE/step_4.md @@ -0,0 +1,54 @@ +

Start your recipe instructions

+ +\--- task --- + +Use an f-string to describe the number of people and the first ingredient + +\--- /task --- + +

Tell the chef what to do

+ +Now it’s time to turn your ingredient list into an actual recipe! 🍲 + +Your first step will be to describe the number of people being fed and the first ingredient to be added. + +
+--- code --- +--- +language: python +filename: main.py +line_numbers: true +line_number_start: 21 +line_highlights: 22-23 +--- + +# Print recipe instructions + +print() +print(f'To make this revolting recipe for {servings} people add {amount_1 \* servings}g of {ingredient_1} to a large bowl.') + +\--- /code --- + +
+ +
+
To make this revolting recipe for 3 people add 150g of maggot mash 🐛 to a large bowl.
+
+ +
+ +### Tip + +You can do **maths inside an f-string**! +This lets you calculate the ingredient amounts and show them inside a sentence without needing extra lines of code. + +
+ +
+ +### Debugging + +- Make sure you used `* servings` inside the `{}` for the amount +- Don’t forget the `f` at the start of your string + +
diff --git a/de-DE/step_5.md b/de-DE/step_5.md new file mode 100644 index 0000000..c0ad8a3 --- /dev/null +++ b/de-DE/step_5.md @@ -0,0 +1,92 @@ +

Finish your disgusting recipe

+ +\--- task --- + +Use more f-strings to describe how to prepare your ingredients + +\--- /task --- + +

Serve it up 🤢

+ +Let’s finish the recipe by printing the rest of the disgusting instructions. + +You’ll describe: + +- What to pour in next +- How to garnish it with sprinkles +- How to serve it to your (un)lucky guests! + +Add these final lines to your program: + +
+--- code --- +--- +language: python +filename: main.py +line_numbers: true +line_number_start: 21 +line_highlights: 24-27 +--- + +# Print recipe instructions + +print() +print(f'To make this revolting recipe for {servings} people add {amount_1 \* servings}g of {ingredient_1} to a large bowl.') +print() +print(f'Pour over {amount_2 \* servings}ml of {ingredient_2}.') +print() +print(f'Sprinkle with {amount_3 \* servings}g of {ingredient_3} and serve cold 🧊. Yum!') + +\--- /code --- + +
+ +
+
To make this revolting recipe for 3 people add 150g of maggot mash 🐛 to a large bowl.
+
+Pour over 90ml of sock juice 🧦.
+
+Sprinkle with 30g of toenail sprinkles 🦶 and serve cold 🧊. Yum!
+ +
+ +
+ +### Tip + +Adding `print()` with nothing in it is a great way to add blank lines in your output. +You can combine text, variables, and maths all in the same f-string! + +
+ +
+ +### Debugging + +- Check that every sentence is inside a `print(f'...')` +- Watch your brackets and punctuation carefully! + +
+ +
+ +### Feedback + +This is a beta projects, which means it is brand new and not widely available. If you've tested this project on your own or with your club, let us know what you think. + + +Give feedback + +
diff --git a/es-419/code/starter/main.py b/es-419/code/starter/main.py new file mode 100644 index 0000000..45d5a6a --- /dev/null +++ b/es-419/code/starter/main.py @@ -0,0 +1,12 @@ +# Gross Groceries recipe card + +# Ingredients and amounts for 1 person + + +# Number of servings + + +# Scaled-up ingredients + + +# Print recipe instructions diff --git a/es-419/code/starter/project_config.yml b/es-419/code/starter/project_config.yml new file mode 100644 index 0000000..d184c95 --- /dev/null +++ b/es-419/code/starter/project_config.yml @@ -0,0 +1,4 @@ +name: "Python Bytes - Gross Groceries" +identifier: "python-bytes-gross-groceries" +type: python +build: true diff --git a/es-419/images/banner.png b/es-419/images/banner.png new file mode 100644 index 0000000000000000000000000000000000000000..685e0cfcdba14a01ff649260c3122d52f976b0d7 GIT binary patch literal 43369 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 C!4%N| literal 0 HcmV?d00001 diff --git a/es-419/mentor.md b/es-419/mentor.md new file mode 100644 index 0000000..fe5ddcf --- /dev/null +++ b/es-419/mentor.md @@ -0,0 +1,30 @@ +# Mentor Notes: Gross Groceries + +## Project Overview + +In this project, learners will use Python to help a strange restaurant owner create a revolting recipe card. They’ll start with simple ingredients and build up to printing full recipe instructions using f-strings. By the end, learners will have used variables, strings, numbers, simple arithmetic, and f-strings across multiple steps. + +--- + +## What Learners Will Practise + +- Creating and using variables +- Combining strings and numbers with f-strings +- Performing basic multiplication in code +- Writing multi-line Python programs with clear structure + +--- + +## Teaching Tips + +- Encourage learners to come up with their own disgusting ingredients — the sillier, the better! +- Prompt them to read printed output carefully to understand the effect of their changes. +- Reinforce that f-strings are a powerful way to combine text and values without needing multiple `+` symbols. + +--- + +## Extension Ideas + +- Let learners use `input()` to ask how many people the recipe should serve +- Encourage them to use `\n` to format multi-line recipe cards +- Add even more ingredients or steps to the recipe diff --git a/es-419/meta.yml b/es-419/meta.yml new file mode 100644 index 0000000..330e5c4 --- /dev/null +++ b/es-419/meta.yml @@ -0,0 +1,20 @@ +title: Python bytes - Gross groceries +hero_image: images/banner.png +description: Write a revolting recipe card using variables, f-strings, and maths +meta_title: Learn to code with Gross Groceries | Python Bytes +meta_description: Learn how to use Python f-strings and variables to print a disgusting recipe for an odd restaurant. +version: 1 +listed: true +copyedit: false +last_tested: "2025-04-14" +steps: + - title: step_1 + - title: step_2 + completion: + - engaged + - title: step_3 + - title: step_4 + - title: step_5 + completion: + - internal + - external diff --git a/es-419/resources/dataframe.json b/es-419/resources/dataframe.json new file mode 100644 index 0000000..c7460c9 --- /dev/null +++ b/es-419/resources/dataframe.json @@ -0,0 +1,72 @@ +[ + { + "filename": "meta.yml", + "path": "en\/", + "content": "title: Python bytes - Gross groceries\nhero_image: images\/banner.png\ndescription: Write a revolting recipe card using variables, f-strings, and maths\nmeta_title: Learn to code with Gross Groceries | Python Bytes\nmeta_description: Learn how to use Python f-strings and variables to print a disgusting recipe for an odd restaurant.\nversion: 1\nlisted: false\ncopyedit: false\nlast_tested: \"2025-04-14\"\nsteps:\n - title: step_1\n - title: step_2\n completion:\n - engaged\n - title: step_3\n - title: step_4\n - title: step_5\n completion:\n - internal\n - external\n" + }, + { + "filename": "main.py", + "path": "en\/code\/starter\/", + "content": "# Gross Groceries recipe card\n\n# Ingredients and amounts for 1 person\n\n\n# Number of servings\n\n\n# Scaled-up ingredients\n\n\n# Print recipe instructions\n" + }, + { + "filename": "project_config.yml", + "path": "en\/code\/starter\/", + "content": "name: \"Python Bytes - Gross Groceries\"\nidentifier: \"python-bytes-gross-groceries\"\ntype: python\nbuild: true\n" + }, + { + "filename": "mentor.md", + "path": "en\/", + "content": "# Mentor Notes: Gross Groceries\n\n## Project Overview\n\nIn this project, learners will use Python to help a strange restaurant owner create a revolting recipe card. They’ll start with simple ingredients and build up to printing full recipe instructions using f-strings. By the end, learners will have used variables, strings, numbers, simple arithmetic, and f-strings across multiple steps.\n\n---\n\n## What Learners Will Practise\n\n- Creating and using variables\n- Combining strings and numbers with f-strings\n- Performing basic multiplication in code\n- Writing multi-line Python programs with clear structure\n\n---\n\n## Teaching Tips\n\n- Encourage learners to come up with their own disgusting ingredients — the sillier, the better!\n- Prompt them to read printed output carefully to understand the effect of their changes.\n- Reinforce that f-strings are a powerful way to combine text and values without needing multiple `+` symbols.\n\n---\n\n## Extension Ideas\n\n- Let learners use `input()` to ask how many people the recipe should serve\n- Encourage them to use `\\n` to format multi-line recipe cards\n- Add even more ingredients or steps to the recipe\n" + }, + { + "filename": "step_1.md", + "path": "en\/", + "content": "

Write your first disgusting ingredient<\/h2>\n--- task ---\nAdd a gross ingredient and print it using an f-string\n--- \/task ---\n\n

Start your recipe<\/h2>\n\nThe owner of an odd restaurant has decided to use code to help make their recipes. You're the coder they've hired. 🧑‍💻 \nYour job is to help create the grossest recipe card ever 🤢\n\nLet’s start by adding your first ingredient. But before we write any code, you’ll notice some lines that start with `#` — these are **comments**.\n\nComments are notes in your code that help you (and others!) understand what each part does. Python ignores them when your program runs.\n\nNow try this:\n\n1. Choose a disgusting ingredient like `'maggot mash 🐛'` or `'slug slime 🐌'`.\n2. Decide how much of it you want to use. Let’s say `50` grams.\n3. Use an **f-string** to print the amount and the ingredient.\n\n
\n--- code ---\n---\nlanguage: python\nfilename: main.py\nline_numbers: true\nline_number_start: 3\nline_highlights: 5-6,11\n---\n# Ingredients and amounts for 1 person\n\ningredient_1 = 'maggot mash 🐛'\namount_1 = 50\n# Number of servings\n\n\n# Scaled-up ingredients\nprint(f'{amount_1}g of {ingredient_1}')\n--- \/code ---\n<\/div>\n\n
\n
50g of maggot mash 🐛<\/pre>\n<\/div>\n\n
\n\n### Tip\n\nIf your code prints nothing or shows an error, check that:\n- You used **quotes** around your ingredient name (it's a string!)\n- You’ve spelled the variable names correctly\n- You used the `f` before the string in `print(f'...')`\n\n<\/div>\n\n
\n\n### Debugging\n\n- If Python says there's a `NameError`, you may have a typo in your variable name\n- If you see `{amount_1}` in the output instead of the number, make sure your string starts with `f`\n\n<\/div>\n" + }, + { + "filename": "step_2.md", + "path": "en\/", + "content": "

Feed more people<\/h2>\n--- task ---\nAdd a servings variable and use it to scale up your ingredient\n--- \/task ---\n\n

Make it serve more than one!<\/h2>\n\nRight now, your ingredient amount is for just **one** person. But what if you wanted to feed 3, or even 10 people?\n\nInstead of writing new numbers, you can **multiply** the amount by the number of servings — using maths inside your f-string!\n\nLet’s add a variable called `servings`, and update your print line to use it:\n\n
\n--- code ---\n---\nlanguage: python\nfilename: main.py\nline_numbers: true\nline_number_start: 7\nline_highlights: 8,11\n---\n# Number of servings\nservings = 3\n\n# Scaled-up ingredients\nprint(f'{amount_1 * servings}g of {ingredient_1}')\n--- \/code ---\n<\/div>\n\n
\n
150g of maggot mash 🐛<\/pre>\n<\/div>\n\n
\n\n### Tip\n\nYou can do maths inside an f-string using `{}` — Python works it out before printing the message!\n\n<\/div>\n\n
\n\n### Debugging\n\n- Make sure your variable name is `servings`, not `serving` or `serves`\n- Don’t forget the `*` for multiplication\n\n<\/div>\n" + }, + { + "filename": "step_3.md", + "path": "en\/", + "content": "

Add more ingredients<\/h2>\n--- task ---\nAdd two more gross ingredients and scale them up using f-strings\n--- \/task ---\n\n

Make your recipe extra disgusting<\/h2>\n\nOne ingredient is never enough for a proper disgusting dish! Let's add two more ingredients to your recipe.\n\n1. Add `ingredient_2` and `ingredient_3` — give them gross names like `'sock juice 🧦'` or `'toenail sprinkles 🦶'`.\n2. Add matching `amount_2` and `amount_3` values.\n3. Use f-strings to print out **all three ingredients**, scaled up using your `servings` variable.\n\n
\n--- code ---\n---\nlanguage: python\nfilename: main.py\nline_numbers: true\nline_number_start: 3\nline_highlights: 8-10,11-12,18-19\n---\ningredient_2 = 'sock juice 🧦'\namount_2 = 30\n\ningredient_3 = 'toenail sprinkles 🦶'\namount_3 = 10\n# Number of servings\nservings = 3\n\n# Scaled-up ingredients\nprint(f'{amount_1 * servings}g of {ingredient_1}')\nprint(f'{amount_2 * servings}ml of {ingredient_2}')\nprint(f'{amount_3 * servings}g of {ingredient_3}')\n--- \/code ---\n<\/div>\n\n
\n
150g of maggot mash 🐛\n90ml of sock juice 🧦\n30g of toenail sprinkles 🦶<\/pre>\n<\/div>\n\n
\n\n### Tip\n\nYou can label each ingredient with different units like `g` (grams) or `ml` (millilitres) depending on what it is!\n\n<\/div>\n\n
\n\n### Debugging\n\n- Make sure your variable names match exactly — Python is case-sensitive!\n- Don’t forget to multiply by `servings` inside each f-string\n\n<\/div>\n" + }, + { + "filename": "step_4.md", + "path": "en\/", + "content": "

Start your recipe instructions<\/h2>\n--- task ---\nUse an f-string to describe the number of people and the first ingredient\n--- \/task ---\n\n

Tell the chef what to do<\/h2>\n\nNow it’s time to turn your ingredient list into an actual recipe! 🍲\n\nYour first step will be to describe the number of people being fed and the first ingredient to be added.\n\n
\n--- code ---\n---\nlanguage: python\nfilename: main.py\nline_numbers: true\nline_number_start: 21\nline_highlights: 22-23\n---\n# Print recipe instructions\nprint()\nprint(f'To make this revolting recipe for {servings} people add {amount_1 * servings}g of {ingredient_1} to a large bowl.')\n--- \/code ---\n<\/div>\n\n
\n
To make this revolting recipe for 3 people add 150g of maggot mash 🐛 to a large bowl.<\/pre>\n<\/div>\n\n
\n\n### Tip\n\nYou can do **maths inside an f-string**! \nThis lets you calculate the ingredient amounts and show them inside a sentence without needing extra lines of code.\n\n<\/div>\n\n
\n\n### Debugging\n\n- Make sure you used `* servings` inside the `{}` for the amount\n- Don’t forget the `f` at the start of your string\n\n<\/div>\n" + }, + { + "filename": "step_5.md", + "path": "en\/", + "content": "

Finish your disgusting recipe<\/h2>\n--- task ---\nUse more f-strings to describe how to prepare your ingredients\n--- \/task ---\n\n

Serve it up 🤢<\/h2>\n\nLet’s finish the recipe by printing the rest of the disgusting instructions.\n\nYou’ll describe:\n- What to pour in next\n- How to garnish it with sprinkles\n- How to serve it to your (un)lucky guests!\n\nAdd these final lines to your program:\n\n
\n--- code ---\n---\nlanguage: python\nfilename: main.py\nline_numbers: true\nline_number_start: 21\nline_highlights: 24-27\n---\n# Print recipe instructions\nprint()\nprint(f'To make this revolting recipe for {servings} people add {amount_1 * servings}g of {ingredient_1} to a large bowl.')\nprint()\nprint(f'Pour over {amount_2 * servings}ml of {ingredient_2}.')\nprint()\nprint(f'Sprinkle with {amount_3 * servings}g of {ingredient_3} and serve cold 🧊. Yum!')\n--- \/code ---\n<\/div>\n\n
\n
To make this revolting recipe for 3 people add 150g of maggot mash 🐛 to a large bowl.\n\nPour over 90ml of sock juice 🧦.\n\nSprinkle with 30g of toenail sprinkles 🦶 and serve cold 🧊. Yum!<\/pre>\n<\/div>\n\n
\n\n### Tip\n\nAdding `print()` with nothing in it is a great way to add blank lines in your output. \nYou can combine text, variables, and maths all in the same f-string!\n\n<\/div>\n\n
\n\n### Debugging\n\n- Check that every sentence is inside a `print(f'...')`\n- Watch your brackets and punctuation carefully!\n\n<\/div>\n" + }, + { + "filename": "main.py", + "path": "en\/solutions\/", + "content": "# Gross Groceries recipe card\n\n# Ingredients and amounts for 1 person\n\ningredient_1 = 'maggot mash 🐛'\namount_1 = 50\n\ningredient_2 = 'sock juice 🧦'\namount_2 = 30\n\ningredient_3 = 'toenail sprinkles 🦶'\namount_3 = 10\n# Number of servings\nservings = 3\n\n# Scaled-up ingredients\nprint(f'{amount_1 * servings}g of {ingredient_1}')\nprint(f'{amount_2 * servings}ml of {ingredient_2}')\nprint(f'{amount_3 * servings}g of {ingredient_3}')\n\n# Print recipe instructions\nprint()\nprint(f'To make this revolting recipe for {servings} people add {amount_1 * servings}g of {ingredient_1} to a large bowl.')\nprint()\nprint(f'Pour over {amount_2 * servings}ml of {ingredient_2}.')\nprint()\nprint(f'Sprinkle with {amount_3 * servings}g of {ingredient_3} and serve cold 🧊. Yum!')\n" + }, + { + "filename": "README.md", + "path": "python-bytes-gross-groceries\/", + "content": "# Python bytes - Gross groceries\n\n![A cartoon recipe card with gross ingredients like sock juice and toenail sprinkles](en\/images\/banner.png)\n\nProject description\n\nFind the project online at [projects.raspberrypi.org\/en\/projects\/python-bytes-gross-groceries](https:\/\/projects.raspberrypi.org\/en\/projects\/python-bytes-gross-groceries)\n\n## Resources\nFor project materials and solutions, see [en\/resources](https:\/\/github.com\/raspberrypilearning\/python-bytes-gross-groceries\/tree\/master\/en\/resources) and [en\/solutions](https:\/\/github.com\/raspberrypilearning\/python-bytes-gross-groceries\/tree\/master\/en\/solutions).\n\n## Contributing\nSee [CONTRIBUTING.md](CONTRIBUTING.md)\n\n## Licence\nSee [LICENCE.md](LICENCE.md)\n" + }, + { + "filename": "CONTRIBUTING.md", + "path": "python-bytes-gross-groceries\/", + "content": "# Contributing\n\nAll contributions are assumed to be licensed under the same licence as the source, i.e. [CC BY-SA](http:\/\/creativecommons.org\/licenses\/by-sa\/4.0\/). This licence must remain in all derivatives of this work.\n\n## Issues\n\nIf you find a mistake, bug, or other problem, please [open an issue](https:\/\/github.com\/raspberrypilearning\/python-bytes-gross-groceries\/issues) in this repository.\n\n## Pull requests\n\nAll edits to a resource should be made to the draft branch or to a fork of the repo. These patches can then be submitted as a pull request.\n\nIf you fix a mistake, bug, or problem or have something to contribute, please create a pull request for each modification. Please consider grouping modifications sensibly, e.g. don't bundle typo fixes in the same pull request as code changes, file them separately instead.\n\nPlease note that sometimes things are done for pedagogical reasons so changes which make sense from a software engineering perspective (reducing duplication or making use of more advanced programming language features) may not be suitable to maintain the intended educational value.\n\n## Derivatives\n\nSee [LICENCE.md](LICENCE.md) for content licence. The licence must remain in all derivatives of this work.\n\n## Translation\n\nYou can help us make this project available to more people around the world by translating it. For more information, please go to [rpf.io\/translate](https:\/\/rpf.io\/translate).\n" + }, + { + "filename": "LICENCE.md", + "path": "python-bytes-gross-groceries\/", + "content": "# Licence\n\nUnless otherwise specified, everything in this repository is covered by the following licence:\n\n[![Creative Commons licence](http:\/\/i.creativecommons.org\/l\/by-sa\/4.0\/88x31.png)](http:\/\/creativecommons.org\/licenses\/by-sa\/4.0\/)\n\n**Python bytes - Gross groceries** by the [Raspberry Pi Foundation](http:\/\/www.raspberrypi.org) is licensed under a [Creative Commons Attribution 4.0 International licence](http:\/\/creativecommons.org\/licenses\/by-sa\/4.0\/).\n\nBased on a work at https:\/\/github.com\/raspberrypilearning\/python-bytes-gross-groceries.\n" + }, + { + "filename": "crowdin.yml", + "path": "python-bytes-gross-groceries\/", + "content": "files:\n - source: \/en\/**\/*.*\n translation: \/%locale%\/**\/%original_file_name%\n" + } +] \ No newline at end of file diff --git a/es-419/solutions/main.py b/es-419/solutions/main.py new file mode 100644 index 0000000..855cb24 --- /dev/null +++ b/es-419/solutions/main.py @@ -0,0 +1,27 @@ +# Gross Groceries recipe card + +# Ingredients and amounts for 1 person + +ingredient_1 = 'maggot mash 🐛' +amount_1 = 50 + +ingredient_2 = 'sock juice 🧦' +amount_2 = 30 + +ingredient_3 = 'toenail sprinkles 🦶' +amount_3 = 10 +# Number of servings +servings = 3 + +# Scaled-up ingredients +print(f'{amount_1 * servings}g of {ingredient_1}') +print(f'{amount_2 * servings}ml of {ingredient_2}') +print(f'{amount_3 * servings}g of {ingredient_3}') + +# Print recipe instructions +print() +print(f'To make this revolting recipe for {servings} people add {amount_1 * servings}g of {ingredient_1} to a large bowl.') +print() +print(f'Pour over {amount_2 * servings}ml of {ingredient_2}.') +print() +print(f'Sprinkle with {amount_3 * servings}g of {ingredient_3} and serve cold 🧊. Yum!') diff --git a/es-419/step_1.md b/es-419/step_1.md new file mode 100644 index 0000000..129144c --- /dev/null +++ b/es-419/step_1.md @@ -0,0 +1,72 @@ +

Write your first disgusting ingredient

+ +\--- task --- + +Add a gross ingredient and print it using an f-string. + +\--- /task --- + +

Start your recipe

+ +The owner of an odd restaurant has decided to use code to help make their recipes. You're the coder they've hired. 🧑‍💻 +Your job is to help create the grossest recipe card ever 🤢 + +Let’s start by adding your first ingredient. But before we write any code, you’ll notice some lines that start with `#` — these are **comments**. + +Comments are notes in your code that help you (and others!) understand what each part does. Python ignores them when your program runs. + +Now try this: + +1. Choose a disgusting ingredient like `'maggot mash 🐛'` or `'slug slime 🐌'`. +2. Decide how much of it you want to use. Let’s say `50` grams. +3. Use an **f-string** to print the amount and the ingredient. + +
+--- code --- +--- +language: python +filename: main.py +line_numbers: true +line_number_start: 3 +line_highlights: 5-6,11 +--- + +# Ingredients and amounts for 1 person + +ingredient_1 = 'maggot mash 🐛' +amount_1 = 50 + +# Number of servings + +# Scaled-up ingredients + +print(f'{amount_1}g of {ingredient_1}') + +\--- /code --- + +
+ +
+
50g of maggot mash 🐛
+
+ +
+ +### Consejo + +If your code prints nothing or shows an error, check that: + +- You used **quotes** around your ingredient name (it's a string!) +- You’ve spelled the variable names correctly +- You used the `f` before the string in `print(f'...')` + +
+ +
+ +### Depuración + +- If Python says there's a `NameError`, you may have a typo in your variable name +- If you see `{amount_1}` in the output instead of the number, make sure your string starts with `f` + +
diff --git a/es-419/step_2.md b/es-419/step_2.md new file mode 100644 index 0000000..a1482b3 --- /dev/null +++ b/es-419/step_2.md @@ -0,0 +1,58 @@ +

Feed more people

+ +\--- task --- + +Add a servings variable and use it to scale up your ingredient + +\--- /task --- + +

Make it serve more than one!

+ +Right now, your ingredient amount is for just **one** person. But what if you wanted to feed 3, or even 10 people? + +Instead of writing new numbers, you can **multiply** the amount by the number of servings — using maths inside your f-string! + +Let’s add a variable called `servings`, and update your print line to use it: + +
+--- code --- +--- +language: python +filename: main.py +line_numbers: true +line_number_start: 7 +line_highlights: 8,11 +--- + +# Number of servings + +servings = 3 + +# Scaled-up ingredients + +print(f'{amount_1 \* servings}g of {ingredient_1}') + +\--- /code --- + +
+ +
+
150g of maggot mash 🐛
+
+ +
+ +### Consejo + +You can do maths inside an f-string using `{}` — Python works it out before printing the message! + +
+ +
+ +### Depuración + +- Make sure your variable name is `servings`, not `serving` or `serves` +- Don’t forget the `*` for multiplication + +
diff --git a/es-419/step_3.md b/es-419/step_3.md new file mode 100644 index 0000000..5814bbf --- /dev/null +++ b/es-419/step_3.md @@ -0,0 +1,68 @@ +

Add more ingredients

+ +\--- task --- + +Add two more gross ingredients and scale them up using f-strings + +\--- /task --- + +

Make your recipe extra disgusting

+ +One ingredient is never enough for a proper disgusting dish! Let's add two more ingredients to your recipe. + +1. Add `ingredient_2` and `ingredient_3` — give them gross names like `'sock juice 🧦'` or `'toenail sprinkles 🦶'`. +2. Add matching `amount_2` and `amount_3` values. +3. Use f-strings to print out **all three ingredients**, scaled up using your `servings` variable. + +
+--- code --- +--- +language: python +filename: main.py +line_numbers: true +line_number_start: 3 +line_highlights: 8-10,11-12,18-19 +--- + +ingredient_2 = 'sock juice 🧦' +amount_2 = 30 + +ingredient_3 = 'toenail sprinkles 🦶' +amount_3 = 10 + +# Number of servings + +servings = 3 + +# Scaled-up ingredients + +print(f'{amount_1 \* servings}g of {ingredient_1}') +print(f'{amount_2 \* servings}ml of {ingredient_2}') +print(f'{amount_3 \* servings}g of {ingredient_3}') + +\--- /code --- + +
+ +
+
150g of maggot mash 🐛
+90ml of sock juice 🧦
+30g of toenail sprinkles 🦶
+
+ +
+ +### Consejo + +You can label each ingredient with different units like `g` (grams) or `ml` (millilitres) depending on what it is! + +
+ +
+ +### Depuración + +- Make sure your variable names match exactly — Python is case-sensitive! +- Don’t forget to multiply by `servings` inside each f-string + +
diff --git a/es-419/step_4.md b/es-419/step_4.md new file mode 100644 index 0000000..ef27b71 --- /dev/null +++ b/es-419/step_4.md @@ -0,0 +1,54 @@ +

Start your recipe instructions

+ +\--- task --- + +Use an f-string to describe the number of people and the first ingredient + +\--- /task --- + +

Tell the chef what to do

+ +Now it’s time to turn your ingredient list into an actual recipe! 🍲 + +Your first step will be to describe the number of people being fed and the first ingredient to be added. + +
+--- code --- +--- +language: python +filename: main.py +line_numbers: true +line_number_start: 21 +line_highlights: 22-23 +--- + +# Print recipe instructions + +print() +print(f'To make this revolting recipe for {servings} people add {amount_1 \* servings}g of {ingredient_1} to a large bowl.') + +\--- /code --- + +
+ +
+
To make this revolting recipe for 3 people add 150g of maggot mash 🐛 to a large bowl.
+
+ +
+ +### Consejo + +You can do **maths inside an f-string**! +This lets you calculate the ingredient amounts and show them inside a sentence without needing extra lines of code. + +
+ +
+ +### Depuración + +- Make sure you used `* servings` inside the `{}` for the amount +- Don’t forget the `f` at the start of your string + +
diff --git a/es-419/step_5.md b/es-419/step_5.md new file mode 100644 index 0000000..1cbbd21 --- /dev/null +++ b/es-419/step_5.md @@ -0,0 +1,92 @@ +

Finish your disgusting recipe

+ +\--- task --- + +Use more f-strings to describe how to prepare your ingredients + +\--- /task --- + +

Serve it up 🤢

+ +Let’s finish the recipe by printing the rest of the disgusting instructions. + +You’ll describe: + +- What to pour in next +- How to garnish it with sprinkles +- How to serve it to your (un)lucky guests! + +Add these final lines to your program: + +
+--- code --- +--- +language: python +filename: main.py +line_numbers: true +line_number_start: 21 +line_highlights: 24-27 +--- + +# Print recipe instructions + +print() +print(f'To make this revolting recipe for {servings} people add {amount_1 \* servings}g of {ingredient_1} to a large bowl.') +print() +print(f'Pour over {amount_2 \* servings}ml of {ingredient_2}.') +print() +print(f'Sprinkle with {amount_3 \* servings}g of {ingredient_3} and serve cold 🧊. Yum!') + +\--- /code --- + +
+ +
+
To make this revolting recipe for 3 people add 150g of maggot mash 🐛 to a large bowl.
+
+Pour over 90ml of sock juice 🧦.
+
+Sprinkle with 30g of toenail sprinkles 🦶 and serve cold 🧊. Yum!
+ +
+ +
+ +### Consejo + +Adding `print()` with nothing in it is a great way to add blank lines in your output. +You can combine text, variables, and maths all in the same f-string! + +
+ +
+ +### Depuración + +- Check that every sentence is inside a `print(f'...')` +- Watch your brackets and punctuation carefully! + +
+ +
+ +### Comentarios + +This is a beta projects, which means it is brand new and not widely available. If you've tested this project on your own or with your club, let us know what you think. + + +Give feedback + +
diff --git a/fr-FR/code/starter/main.py b/fr-FR/code/starter/main.py new file mode 100644 index 0000000..5c532db --- /dev/null +++ b/fr-FR/code/starter/main.py @@ -0,0 +1,12 @@ +# Fiche de recette Gross Groceries + +# Ingrédients et quantités pour 1 personne + + +# Nombre de portions + + +# Ingrédients en plus grande quantité + + +# Imprimer les instructions de la recette diff --git a/fr-FR/code/starter/project_config.yml b/fr-FR/code/starter/project_config.yml new file mode 100644 index 0000000..d184c95 --- /dev/null +++ b/fr-FR/code/starter/project_config.yml @@ -0,0 +1,4 @@ +name: "Python Bytes - Gross Groceries" +identifier: "python-bytes-gross-groceries" +type: python +build: true diff --git a/fr-FR/images/banner.png b/fr-FR/images/banner.png new file mode 100644 index 0000000000000000000000000000000000000000..685e0cfcdba14a01ff649260c3122d52f976b0d7 GIT binary patch literal 43369 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 C!4%N| literal 0 HcmV?d00001 diff --git a/fr-FR/mentor.md b/fr-FR/mentor.md new file mode 100644 index 0000000..7d95c88 --- /dev/null +++ b/fr-FR/mentor.md @@ -0,0 +1,30 @@ +# Informations pour le/la mentor·e : Gross Groceries + +## Aperçu du projet + +Dans ce projet, les apprenant·e·s utiliseront Python pour aider un restaurateur étrange à créer une fiche de recette dégoûtante. Ils commenceront par des ingrédients simples et progresseront jusqu'à imprimer des instructions de recette complètes en utilisant des f-strings. À la fin de cet apprentissage, les apprenant·e·s auront utilisé des variables, des chaînes de caractères, des nombres, des opérations arithmétiques simples et des f-strings à travers de multiples étapes. + +--- + +## Ce que les apprenant·e·s vont pratiquer + +- Créer et utiliser des variables +- Combiner des chaînes de caractères et des nombres avec des f-strings +- Effectuer une multiplication de base en code +- Écrire des programmes Python multi-lignes avec une structure claire + +--- + +## Conseils pédagogiques + +- Encouragez les apprenant·e·s à inventer leurs propres ingrédients dégoûtants. Plus c'est absurde, mieux c'est ! +- Incitez-les à lire attentivement les résultats imprimés afin de comprendre l'effet de leurs modifications. +- Soulignez que les f-strings sont un moyen puissant de combiner du texte et des valeurs sans avoir besoin de plusieurs symboles `+`. + +--- + +## Idées d'extension + +- Autorisez les apprenant·e·s à utiliser `input()` pour demander combien de personnes la recette est prévue +- Encouragez-les à utiliser `\n` pour formater les fiches de recettes multi-lignes +- Ajoutez encore plus d'ingrédients ou d'étapes à la recette diff --git a/fr-FR/meta.yml b/fr-FR/meta.yml new file mode 100644 index 0000000..1476d06 --- /dev/null +++ b/fr-FR/meta.yml @@ -0,0 +1,20 @@ +title: Python bytes - Gross groceries +hero_image: images/banner.png +description: Crée une fiche de recette dégoûtante en utilisant des variables, des f-strings et des maths +meta_title: Apprendre à coder avec Gross Groceries | Python Bytes +meta_description: Apprends à utiliser les f-strings et les variables Python pour imprimer une recette dégoûtante pour un restaurant étrange. +version: 1 +listed: true +copyedit: false +last_tested: "2025-04-14" +steps: + - title: step_1 + - title: step_2 + completion: + - engaged + - title: step_3 + - title: step_4 + - title: step_5 + completion: + - internal + - external diff --git a/fr-FR/resources/dataframe.json b/fr-FR/resources/dataframe.json new file mode 100644 index 0000000..c7460c9 --- /dev/null +++ b/fr-FR/resources/dataframe.json @@ -0,0 +1,72 @@ +[ + { + "filename": "meta.yml", + "path": "en\/", + "content": "title: Python bytes - Gross groceries\nhero_image: images\/banner.png\ndescription: Write a revolting recipe card using variables, f-strings, and maths\nmeta_title: Learn to code with Gross Groceries | Python Bytes\nmeta_description: Learn how to use Python f-strings and variables to print a disgusting recipe for an odd restaurant.\nversion: 1\nlisted: false\ncopyedit: false\nlast_tested: \"2025-04-14\"\nsteps:\n - title: step_1\n - title: step_2\n completion:\n - engaged\n - title: step_3\n - title: step_4\n - title: step_5\n completion:\n - internal\n - external\n" + }, + { + "filename": "main.py", + "path": "en\/code\/starter\/", + "content": "# Gross Groceries recipe card\n\n# Ingredients and amounts for 1 person\n\n\n# Number of servings\n\n\n# Scaled-up ingredients\n\n\n# Print recipe instructions\n" + }, + { + "filename": "project_config.yml", + "path": "en\/code\/starter\/", + "content": "name: \"Python Bytes - Gross Groceries\"\nidentifier: \"python-bytes-gross-groceries\"\ntype: python\nbuild: true\n" + }, + { + "filename": "mentor.md", + "path": "en\/", + "content": "# Mentor Notes: Gross Groceries\n\n## Project Overview\n\nIn this project, learners will use Python to help a strange restaurant owner create a revolting recipe card. They’ll start with simple ingredients and build up to printing full recipe instructions using f-strings. By the end, learners will have used variables, strings, numbers, simple arithmetic, and f-strings across multiple steps.\n\n---\n\n## What Learners Will Practise\n\n- Creating and using variables\n- Combining strings and numbers with f-strings\n- Performing basic multiplication in code\n- Writing multi-line Python programs with clear structure\n\n---\n\n## Teaching Tips\n\n- Encourage learners to come up with their own disgusting ingredients — the sillier, the better!\n- Prompt them to read printed output carefully to understand the effect of their changes.\n- Reinforce that f-strings are a powerful way to combine text and values without needing multiple `+` symbols.\n\n---\n\n## Extension Ideas\n\n- Let learners use `input()` to ask how many people the recipe should serve\n- Encourage them to use `\\n` to format multi-line recipe cards\n- Add even more ingredients or steps to the recipe\n" + }, + { + "filename": "step_1.md", + "path": "en\/", + "content": "

Write your first disgusting ingredient<\/h2>\n--- task ---\nAdd a gross ingredient and print it using an f-string\n--- \/task ---\n\n

Start your recipe<\/h2>\n\nThe owner of an odd restaurant has decided to use code to help make their recipes. You're the coder they've hired. 🧑‍💻 \nYour job is to help create the grossest recipe card ever 🤢\n\nLet’s start by adding your first ingredient. But before we write any code, you’ll notice some lines that start with `#` — these are **comments**.\n\nComments are notes in your code that help you (and others!) understand what each part does. Python ignores them when your program runs.\n\nNow try this:\n\n1. Choose a disgusting ingredient like `'maggot mash 🐛'` or `'slug slime 🐌'`.\n2. Decide how much of it you want to use. Let’s say `50` grams.\n3. Use an **f-string** to print the amount and the ingredient.\n\n
\n--- code ---\n---\nlanguage: python\nfilename: main.py\nline_numbers: true\nline_number_start: 3\nline_highlights: 5-6,11\n---\n# Ingredients and amounts for 1 person\n\ningredient_1 = 'maggot mash 🐛'\namount_1 = 50\n# Number of servings\n\n\n# Scaled-up ingredients\nprint(f'{amount_1}g of {ingredient_1}')\n--- \/code ---\n<\/div>\n\n
\n
50g of maggot mash 🐛<\/pre>\n<\/div>\n\n
\n\n### Tip\n\nIf your code prints nothing or shows an error, check that:\n- You used **quotes** around your ingredient name (it's a string!)\n- You’ve spelled the variable names correctly\n- You used the `f` before the string in `print(f'...')`\n\n<\/div>\n\n
\n\n### Debugging\n\n- If Python says there's a `NameError`, you may have a typo in your variable name\n- If you see `{amount_1}` in the output instead of the number, make sure your string starts with `f`\n\n<\/div>\n" + }, + { + "filename": "step_2.md", + "path": "en\/", + "content": "

Feed more people<\/h2>\n--- task ---\nAdd a servings variable and use it to scale up your ingredient\n--- \/task ---\n\n

Make it serve more than one!<\/h2>\n\nRight now, your ingredient amount is for just **one** person. But what if you wanted to feed 3, or even 10 people?\n\nInstead of writing new numbers, you can **multiply** the amount by the number of servings — using maths inside your f-string!\n\nLet’s add a variable called `servings`, and update your print line to use it:\n\n
\n--- code ---\n---\nlanguage: python\nfilename: main.py\nline_numbers: true\nline_number_start: 7\nline_highlights: 8,11\n---\n# Number of servings\nservings = 3\n\n# Scaled-up ingredients\nprint(f'{amount_1 * servings}g of {ingredient_1}')\n--- \/code ---\n<\/div>\n\n
\n
150g of maggot mash 🐛<\/pre>\n<\/div>\n\n
\n\n### Tip\n\nYou can do maths inside an f-string using `{}` — Python works it out before printing the message!\n\n<\/div>\n\n
\n\n### Debugging\n\n- Make sure your variable name is `servings`, not `serving` or `serves`\n- Don’t forget the `*` for multiplication\n\n<\/div>\n" + }, + { + "filename": "step_3.md", + "path": "en\/", + "content": "

Add more ingredients<\/h2>\n--- task ---\nAdd two more gross ingredients and scale them up using f-strings\n--- \/task ---\n\n

Make your recipe extra disgusting<\/h2>\n\nOne ingredient is never enough for a proper disgusting dish! Let's add two more ingredients to your recipe.\n\n1. Add `ingredient_2` and `ingredient_3` — give them gross names like `'sock juice 🧦'` or `'toenail sprinkles 🦶'`.\n2. Add matching `amount_2` and `amount_3` values.\n3. Use f-strings to print out **all three ingredients**, scaled up using your `servings` variable.\n\n
\n--- code ---\n---\nlanguage: python\nfilename: main.py\nline_numbers: true\nline_number_start: 3\nline_highlights: 8-10,11-12,18-19\n---\ningredient_2 = 'sock juice 🧦'\namount_2 = 30\n\ningredient_3 = 'toenail sprinkles 🦶'\namount_3 = 10\n# Number of servings\nservings = 3\n\n# Scaled-up ingredients\nprint(f'{amount_1 * servings}g of {ingredient_1}')\nprint(f'{amount_2 * servings}ml of {ingredient_2}')\nprint(f'{amount_3 * servings}g of {ingredient_3}')\n--- \/code ---\n<\/div>\n\n
\n
150g of maggot mash 🐛\n90ml of sock juice 🧦\n30g of toenail sprinkles 🦶<\/pre>\n<\/div>\n\n
\n\n### Tip\n\nYou can label each ingredient with different units like `g` (grams) or `ml` (millilitres) depending on what it is!\n\n<\/div>\n\n
\n\n### Debugging\n\n- Make sure your variable names match exactly — Python is case-sensitive!\n- Don’t forget to multiply by `servings` inside each f-string\n\n<\/div>\n" + }, + { + "filename": "step_4.md", + "path": "en\/", + "content": "

Start your recipe instructions<\/h2>\n--- task ---\nUse an f-string to describe the number of people and the first ingredient\n--- \/task ---\n\n

Tell the chef what to do<\/h2>\n\nNow it’s time to turn your ingredient list into an actual recipe! 🍲\n\nYour first step will be to describe the number of people being fed and the first ingredient to be added.\n\n
\n--- code ---\n---\nlanguage: python\nfilename: main.py\nline_numbers: true\nline_number_start: 21\nline_highlights: 22-23\n---\n# Print recipe instructions\nprint()\nprint(f'To make this revolting recipe for {servings} people add {amount_1 * servings}g of {ingredient_1} to a large bowl.')\n--- \/code ---\n<\/div>\n\n
\n
To make this revolting recipe for 3 people add 150g of maggot mash 🐛 to a large bowl.<\/pre>\n<\/div>\n\n
\n\n### Tip\n\nYou can do **maths inside an f-string**! \nThis lets you calculate the ingredient amounts and show them inside a sentence without needing extra lines of code.\n\n<\/div>\n\n
\n\n### Debugging\n\n- Make sure you used `* servings` inside the `{}` for the amount\n- Don’t forget the `f` at the start of your string\n\n<\/div>\n" + }, + { + "filename": "step_5.md", + "path": "en\/", + "content": "

Finish your disgusting recipe<\/h2>\n--- task ---\nUse more f-strings to describe how to prepare your ingredients\n--- \/task ---\n\n

Serve it up 🤢<\/h2>\n\nLet’s finish the recipe by printing the rest of the disgusting instructions.\n\nYou’ll describe:\n- What to pour in next\n- How to garnish it with sprinkles\n- How to serve it to your (un)lucky guests!\n\nAdd these final lines to your program:\n\n
\n--- code ---\n---\nlanguage: python\nfilename: main.py\nline_numbers: true\nline_number_start: 21\nline_highlights: 24-27\n---\n# Print recipe instructions\nprint()\nprint(f'To make this revolting recipe for {servings} people add {amount_1 * servings}g of {ingredient_1} to a large bowl.')\nprint()\nprint(f'Pour over {amount_2 * servings}ml of {ingredient_2}.')\nprint()\nprint(f'Sprinkle with {amount_3 * servings}g of {ingredient_3} and serve cold 🧊. Yum!')\n--- \/code ---\n<\/div>\n\n
\n
To make this revolting recipe for 3 people add 150g of maggot mash 🐛 to a large bowl.\n\nPour over 90ml of sock juice 🧦.\n\nSprinkle with 30g of toenail sprinkles 🦶 and serve cold 🧊. Yum!<\/pre>\n<\/div>\n\n
\n\n### Tip\n\nAdding `print()` with nothing in it is a great way to add blank lines in your output. \nYou can combine text, variables, and maths all in the same f-string!\n\n<\/div>\n\n
\n\n### Debugging\n\n- Check that every sentence is inside a `print(f'...')`\n- Watch your brackets and punctuation carefully!\n\n<\/div>\n" + }, + { + "filename": "main.py", + "path": "en\/solutions\/", + "content": "# Gross Groceries recipe card\n\n# Ingredients and amounts for 1 person\n\ningredient_1 = 'maggot mash 🐛'\namount_1 = 50\n\ningredient_2 = 'sock juice 🧦'\namount_2 = 30\n\ningredient_3 = 'toenail sprinkles 🦶'\namount_3 = 10\n# Number of servings\nservings = 3\n\n# Scaled-up ingredients\nprint(f'{amount_1 * servings}g of {ingredient_1}')\nprint(f'{amount_2 * servings}ml of {ingredient_2}')\nprint(f'{amount_3 * servings}g of {ingredient_3}')\n\n# Print recipe instructions\nprint()\nprint(f'To make this revolting recipe for {servings} people add {amount_1 * servings}g of {ingredient_1} to a large bowl.')\nprint()\nprint(f'Pour over {amount_2 * servings}ml of {ingredient_2}.')\nprint()\nprint(f'Sprinkle with {amount_3 * servings}g of {ingredient_3} and serve cold 🧊. Yum!')\n" + }, + { + "filename": "README.md", + "path": "python-bytes-gross-groceries\/", + "content": "# Python bytes - Gross groceries\n\n![A cartoon recipe card with gross ingredients like sock juice and toenail sprinkles](en\/images\/banner.png)\n\nProject description\n\nFind the project online at [projects.raspberrypi.org\/en\/projects\/python-bytes-gross-groceries](https:\/\/projects.raspberrypi.org\/en\/projects\/python-bytes-gross-groceries)\n\n## Resources\nFor project materials and solutions, see [en\/resources](https:\/\/github.com\/raspberrypilearning\/python-bytes-gross-groceries\/tree\/master\/en\/resources) and [en\/solutions](https:\/\/github.com\/raspberrypilearning\/python-bytes-gross-groceries\/tree\/master\/en\/solutions).\n\n## Contributing\nSee [CONTRIBUTING.md](CONTRIBUTING.md)\n\n## Licence\nSee [LICENCE.md](LICENCE.md)\n" + }, + { + "filename": "CONTRIBUTING.md", + "path": "python-bytes-gross-groceries\/", + "content": "# Contributing\n\nAll contributions are assumed to be licensed under the same licence as the source, i.e. [CC BY-SA](http:\/\/creativecommons.org\/licenses\/by-sa\/4.0\/). This licence must remain in all derivatives of this work.\n\n## Issues\n\nIf you find a mistake, bug, or other problem, please [open an issue](https:\/\/github.com\/raspberrypilearning\/python-bytes-gross-groceries\/issues) in this repository.\n\n## Pull requests\n\nAll edits to a resource should be made to the draft branch or to a fork of the repo. These patches can then be submitted as a pull request.\n\nIf you fix a mistake, bug, or problem or have something to contribute, please create a pull request for each modification. Please consider grouping modifications sensibly, e.g. don't bundle typo fixes in the same pull request as code changes, file them separately instead.\n\nPlease note that sometimes things are done for pedagogical reasons so changes which make sense from a software engineering perspective (reducing duplication or making use of more advanced programming language features) may not be suitable to maintain the intended educational value.\n\n## Derivatives\n\nSee [LICENCE.md](LICENCE.md) for content licence. The licence must remain in all derivatives of this work.\n\n## Translation\n\nYou can help us make this project available to more people around the world by translating it. For more information, please go to [rpf.io\/translate](https:\/\/rpf.io\/translate).\n" + }, + { + "filename": "LICENCE.md", + "path": "python-bytes-gross-groceries\/", + "content": "# Licence\n\nUnless otherwise specified, everything in this repository is covered by the following licence:\n\n[![Creative Commons licence](http:\/\/i.creativecommons.org\/l\/by-sa\/4.0\/88x31.png)](http:\/\/creativecommons.org\/licenses\/by-sa\/4.0\/)\n\n**Python bytes - Gross groceries** by the [Raspberry Pi Foundation](http:\/\/www.raspberrypi.org) is licensed under a [Creative Commons Attribution 4.0 International licence](http:\/\/creativecommons.org\/licenses\/by-sa\/4.0\/).\n\nBased on a work at https:\/\/github.com\/raspberrypilearning\/python-bytes-gross-groceries.\n" + }, + { + "filename": "crowdin.yml", + "path": "python-bytes-gross-groceries\/", + "content": "files:\n - source: \/en\/**\/*.*\n translation: \/%locale%\/**\/%original_file_name%\n" + } +] \ No newline at end of file diff --git a/fr-FR/solutions/main.py b/fr-FR/solutions/main.py new file mode 100644 index 0000000..8327593 --- /dev/null +++ b/fr-FR/solutions/main.py @@ -0,0 +1,27 @@ +# Fiche de recette Gross Groceries + +# Ingrédients et quantités pour 1 personne + +ingrédient_1 = 'purée d'asticots 🐛' +quantité_1 = 50 + +ingrédient_2 = 'jus de chaussette 🧦' +quantité_2 = 30 + +ingrédient_3 = 'miettes d'ongles de pied 🦶' +quantité_3 = 10 +# Nombre de portions +portions = 3 + +# Ingrédients en plus grande quantité +print(f'{quantité_1 * portions}g de {ingredient_1}') +print(f'{quantité_2 * portions}g de {ingredient_2}') +print(f'{quantité_3 * portions}g de {ingredient_3}') + +# Imprimer les instructions de la recette +print() +print(f'Pour préparer cette recette dégoûtante pour {servings} personnes, ajoutez {quantité_1 * portions} g de {ingredient_1} dans un grand bol.') +print() +print(f'Versez {quantité_2 * portions} ml de {ingredient_2}.') +print() +print(f'Saupoudrez de {quantité_3 * portions} g de {ingredient_3} et servez froid 🧊. Miam !') diff --git a/fr-FR/step_1.md b/fr-FR/step_1.md new file mode 100644 index 0000000..199d7e2 --- /dev/null +++ b/fr-FR/step_1.md @@ -0,0 +1,72 @@ +

Écrire ton premier ingrédient dégoûtant

+ +\--- task --- + +Ajoute un ingrédient dégoûtant et affiche-le à l'aide d'une f-string. + +\--- /task --- + +

Commencer ta recette

+ +Le propriétaire d'un restaurant étrange a décidé d'utiliser du code pour aider à faire leurs recettes. Tu es le/la développeur·se qu'ils ont embauché. 🧑‍💻 +Ta mission : créer la fiche recette la plus dégoûtante de tous les temps 🤢 + +Commençons par ajouter ton premier ingrédient. Mais avant d'écrire n'importe quel code, tu remarqueras quelques lignes qui commencent par `#` — ce sont des **commentaires**. + +Les commentaires sont des notes dans ton code qui t'aident (et aident les autres !) à comprendre le rôle de chaque partie. Python les ignore lors de l'exécution de ton programme. + +Essaie maintenant ceci : + +1. Choisis un ingrédient dégoûtant comme de la « purée d'asticots 🐛 » ou de la « bave de limace 🐌 ». +2. Décide de la quantité que tu souhaites utiliser. Disons 50 grammes. +3. Utilise une **f-string** pour afficher la quantité et l'ingrédient. + +
+--- code --- +--- +language: python +filename: main.py +line_numbers: true +line_number_start: 3 +line_highlights: 5-6,11 +--- + +# Ingrédients et quantités pour 1 personne + +ingrédient_1 = 'purée d'asticots 🐛' +quantité_1 = 50 + +# Nombre de portions + +# Ingrédients en plus grande quantité + +print(f'{amount_1}g de {ingredient_1}') + +\--- /code --- + +
+ +
+
50 g de purée d'asticots 🐛
+
+ +
+ +### Astuce + +Si ton code n'affiche rien ou présente une erreur, vérifie que : + +- Tu as utilisé des **guillemets** autour du nom de ton ingrédient (c'est une chaîne de caractères !) +- Tu as correctement orthographié les noms des variables +- Tu as utilisé le `f` avant la chaîne dans `print(f'...')` + +
+ +
+ +### Débogage + +- Si Python signale une erreur `NameError`, il se peut que tu aies une faute de frappe dans le nom de ta variable +- Si tu vois `{amount_1}` dans le résultat au lieu du nombre, assure-toi que ta chaîne commence par `f` + +
diff --git a/fr-FR/step_2.md b/fr-FR/step_2.md new file mode 100644 index 0000000..7964700 --- /dev/null +++ b/fr-FR/step_2.md @@ -0,0 +1,58 @@ +

Nourrir plus de personnes

+ +\--- task --- + +Ajoute une variable de portions et utilise-la pour adapter la quantité de ton ingrédient + +\--- /task --- + +

Préparer pour plusieurs personnes !

+ +En ce moment, ta quantité d'ingrédients est pour seulement **une** personne. Mais que faire si tu veux nourrir 3, voire 10 personnes ? + +Au lieu d'écrire de nouveaux chiffres, tu peux **multiplier** le montant par le nombre de portions — en utilisant des mathématiques à l'intérieur de ta f-string ! + +Ajoutons une variable appelée `portions`, et mettons à jour ta ligne print pour l'utiliser : + +
+--- code --- +--- +language: python +filename: main.py +line_numbers: true +line_number_start: 7 +line_highlights: 8,11 +--- + +# Nombre de portions + +portions = 3 + +# Ingrédients en plus grande quantité + +print(f'{quantité_1 \* portions}g de {ingredient_1}') + +\--- /code --- + +
+ +
+
150 g de purée d'asticots 🐛
+
+ +
+ +### Astuce + +Tu peux effectuer des calculs mathématiques à l'intérieur d'une f-string en utilisant `{}` — Python les effectue avant d'imprimer le message ! + +
+ +
+ +### Débogage + +- Assure-toi que le nom de ta variable est `portions`, et non `portion` ou `part` +- N'oublie pas l'astérisque (\*) pour la multiplication + +
diff --git a/fr-FR/step_3.md b/fr-FR/step_3.md new file mode 100644 index 0000000..181a875 --- /dev/null +++ b/fr-FR/step_3.md @@ -0,0 +1,68 @@ +

Ajouter plus d'ingrédients

+ +\--- task --- + +Ajoute deux autres ingrédients répugnants et augmente-les en utilisant des f-strings + +\--- /task --- + +

Rendre ta recette plus dégoûtante

+ +Un ingrédient ne suffit jamais pour un plat dégoûtant ! Ajoutons deux ingrédients supplémentaires à ta recette. + +1. Ajoute `ingrédient_2` et `ingrédient_3` — donne-leur des noms dégoûtants comme « jus de chaussette 🧦 » ou « miettes d'ongles d'orteils 🦶 ». +2. Ajoute les valeurs correspondantes `quantité_2` et `quantité_3`. +3. Utilise les f-strings pour afficher **les trois ingrédients**, augmenté à l'aide de ta variable `portions`. + +
+--- code --- +--- +language: python +filename: main.py +line_numbers: true +line_number_start: 3 +line_highlights: 8-10,11-12,18-19 +--- + +ingrédient_2 = 'jus de chaussette 🧦' +quantité_2 = 30 + +ingrédient_3 = 'miettes d'ongles de pied 🦶' +quantité_3 = 10 + +# Nombre de portions + +portions = 3 + +# Ingrédients en plus grande quantité + +print(f'{quantité_1 \* portions} g de {ingredient_1}') +print(f'{quantité_2 \* portions} ml de {ingredient_2}') +print(f'{quantité_3 \* portions} g de {ingredient_3}') + +\--- /code --- + +
+ +
+
150 g de purée d'asticots 🐛
+90 ml de jus de chaussettes 🧦
+30 g de miettes d'ongles de pied 🦶
+
+ +
+ +### Astuce + +Tu peux étiqueter chaque ingrédient avec différentes unités comme `g` (grammes) ou `ml` (millilitres) selon ce que c'est ! + +
+ +
+ +### Débogage + +- Assure-toi que tes noms de variables correspondent exactement — Python est sensible à la casse ! +- N'oublie pas de multiplier par `portions` à l'intérieur de chaque f-string + +
diff --git a/fr-FR/step_4.md b/fr-FR/step_4.md new file mode 100644 index 0000000..06cb2aa --- /dev/null +++ b/fr-FR/step_4.md @@ -0,0 +1,54 @@ +

Commencer tes instructions de recette

+ +\--- task --- + +Utilise une f-string pour décrire le nombre de personnes et le premier ingrédient + +\--- /task --- + +

Dire au chef ce qu'il doit faire

+ +Il est maintenant temps de transformer ta liste d'ingrédients en une véritable recette ! 🍲 + +La première étape consistera à décrire le nombre de personnes à nourrir et le premier ingrédient à ajouter. + +
+--- code --- +--- +language: python +filename: main.py +line_numbers: true +line_number_start: 21 +line_highlights: 22-23 +--- + +# Imprimer les instructions de la recette + +print() +print(f'Pour préparer cette recette dégoûtante pour {servings} personnes, ajoutez {quantité_1 \* portions} g de {ingredient_1} dans un grand bol.') + +\--- /code --- + +
+ +
+
Pour préparer cette recette dégoûtante pour 3 personnes, ajoutez 150 g de purée d'asticots 🐛 dans un grand bol.
+
+ +
+ +### Astuce + +Tu peux faire des **mathématiques à l'intérieur d'une f-string** ! +Cela te permet de calculer les quantités d'ingrédients et de les afficher dans une phrase sans avoir besoin de lignes de code supplémentaires. + +
+ +
+ +### Débogage + +- Assure-toi d'avoir utilisé `* portions` à l'intérieur des `{}` pour la quantité +- N'oublie pas le `f` au début de ta chaîne + +
diff --git a/fr-FR/step_5.md b/fr-FR/step_5.md new file mode 100644 index 0000000..1f6cf30 --- /dev/null +++ b/fr-FR/step_5.md @@ -0,0 +1,92 @@ +

Terminer ta recette dégoûtante

+ +\--- task --- + +Utilise davantage de f-strings pour décrire comment préparer tes ingrédients + +\--- /task --- + +

Servir 🤢

+ +Terminons la recette en imprimant le reste de ces instructions dégoûtantes. + +Tu vas décrire : + +- Ce qu'il faut verser ensuite +- Comment le garnir de miettes +- Comment le servir à tes invités (mal)chanceux ! + +Ajoute ces dernières lignes à ton programme : + +
+--- code --- +--- +language: python +filename: main.py +line_numbers: true +line_number_start: 21 +line_highlights: 24-27 +--- + +# Imprimer les instructions de la recette + +print() +print(f'Pour préparer cette recette dégoûtante pour {servings} personnes, ajoutez {quantité_1 \* portions} g de {ingredient_1} dans un grand bol.') +print() +print(f'Versez {quantité_2 \* portions} ml de {ingredient_2}.') +print() +print(f'Saupoudrez de {quantité_3 \* portions} g de {ingredient_3} et servez froid 🧊. Miam !') + +\--- /code --- + +
+ +
+
Pour préparer cette recette dégoûtante pour 3 personnes, ajoutez 150 g de purée d'asticots 🐛 dans un grand bol.
+
+Versez 90 ml de jus de chaussette 🧦.
+
+Saupoudrez de 30 g de miettes d'ongles de pieds 🦶 et servez froid 🧊. Miam !
+ +
+ +
+ +### Astuce + +Ajoute `print()` sans rien dedans est un excellent moyen d'ajouter des lignes vides à ton résultat. +Tu peux combiner du texte, des variables et des mathématiques dans la même f-string ! + +
+ +
+ +### Débogage + +- Vérifie que chaque phrase est à l'intérieur d'un `print(f'...')` +- Fais attention à tes parenthèses et à ta ponctuation ! + +
+ +
+ +### Avis + +Il s'agit d'un projet bêta, ce qui signifie qu'il est tout nouveau et pas encore largement disponible. Si tu as testé ce projet individuellement ou avec ton club, n'hésite pas à nous faire part de ton avis. + + +Donner ton avis + +
diff --git a/hi-IN/code/starter/main.py b/hi-IN/code/starter/main.py new file mode 100644 index 0000000..45d5a6a --- /dev/null +++ b/hi-IN/code/starter/main.py @@ -0,0 +1,12 @@ +# Gross Groceries recipe card + +# Ingredients and amounts for 1 person + + +# Number of servings + + +# Scaled-up ingredients + + +# Print recipe instructions diff --git a/hi-IN/code/starter/project_config.yml b/hi-IN/code/starter/project_config.yml new file mode 100644 index 0000000..d184c95 --- /dev/null +++ b/hi-IN/code/starter/project_config.yml @@ -0,0 +1,4 @@ +name: "Python Bytes - Gross Groceries" +identifier: "python-bytes-gross-groceries" +type: python +build: true diff --git a/hi-IN/images/banner.png b/hi-IN/images/banner.png new file mode 100644 index 0000000000000000000000000000000000000000..685e0cfcdba14a01ff649260c3122d52f976b0d7 GIT binary patch literal 43369 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 C!4%N| literal 0 HcmV?d00001 diff --git a/hi-IN/mentor.md b/hi-IN/mentor.md new file mode 100644 index 0000000..fe5ddcf --- /dev/null +++ b/hi-IN/mentor.md @@ -0,0 +1,30 @@ +# Mentor Notes: Gross Groceries + +## Project Overview + +In this project, learners will use Python to help a strange restaurant owner create a revolting recipe card. They’ll start with simple ingredients and build up to printing full recipe instructions using f-strings. By the end, learners will have used variables, strings, numbers, simple arithmetic, and f-strings across multiple steps. + +--- + +## What Learners Will Practise + +- Creating and using variables +- Combining strings and numbers with f-strings +- Performing basic multiplication in code +- Writing multi-line Python programs with clear structure + +--- + +## Teaching Tips + +- Encourage learners to come up with their own disgusting ingredients — the sillier, the better! +- Prompt them to read printed output carefully to understand the effect of their changes. +- Reinforce that f-strings are a powerful way to combine text and values without needing multiple `+` symbols. + +--- + +## Extension Ideas + +- Let learners use `input()` to ask how many people the recipe should serve +- Encourage them to use `\n` to format multi-line recipe cards +- Add even more ingredients or steps to the recipe diff --git a/hi-IN/meta.yml b/hi-IN/meta.yml new file mode 100644 index 0000000..330e5c4 --- /dev/null +++ b/hi-IN/meta.yml @@ -0,0 +1,20 @@ +title: Python bytes - Gross groceries +hero_image: images/banner.png +description: Write a revolting recipe card using variables, f-strings, and maths +meta_title: Learn to code with Gross Groceries | Python Bytes +meta_description: Learn how to use Python f-strings and variables to print a disgusting recipe for an odd restaurant. +version: 1 +listed: true +copyedit: false +last_tested: "2025-04-14" +steps: + - title: step_1 + - title: step_2 + completion: + - engaged + - title: step_3 + - title: step_4 + - title: step_5 + completion: + - internal + - external diff --git a/hi-IN/resources/dataframe.json b/hi-IN/resources/dataframe.json new file mode 100644 index 0000000..c7460c9 --- /dev/null +++ b/hi-IN/resources/dataframe.json @@ -0,0 +1,72 @@ +[ + { + "filename": "meta.yml", + "path": "en\/", + "content": "title: Python bytes - Gross groceries\nhero_image: images\/banner.png\ndescription: Write a revolting recipe card using variables, f-strings, and maths\nmeta_title: Learn to code with Gross Groceries | Python Bytes\nmeta_description: Learn how to use Python f-strings and variables to print a disgusting recipe for an odd restaurant.\nversion: 1\nlisted: false\ncopyedit: false\nlast_tested: \"2025-04-14\"\nsteps:\n - title: step_1\n - title: step_2\n completion:\n - engaged\n - title: step_3\n - title: step_4\n - title: step_5\n completion:\n - internal\n - external\n" + }, + { + "filename": "main.py", + "path": "en\/code\/starter\/", + "content": "# Gross Groceries recipe card\n\n# Ingredients and amounts for 1 person\n\n\n# Number of servings\n\n\n# Scaled-up ingredients\n\n\n# Print recipe instructions\n" + }, + { + "filename": "project_config.yml", + "path": "en\/code\/starter\/", + "content": "name: \"Python Bytes - Gross Groceries\"\nidentifier: \"python-bytes-gross-groceries\"\ntype: python\nbuild: true\n" + }, + { + "filename": "mentor.md", + "path": "en\/", + "content": "# Mentor Notes: Gross Groceries\n\n## Project Overview\n\nIn this project, learners will use Python to help a strange restaurant owner create a revolting recipe card. They’ll start with simple ingredients and build up to printing full recipe instructions using f-strings. By the end, learners will have used variables, strings, numbers, simple arithmetic, and f-strings across multiple steps.\n\n---\n\n## What Learners Will Practise\n\n- Creating and using variables\n- Combining strings and numbers with f-strings\n- Performing basic multiplication in code\n- Writing multi-line Python programs with clear structure\n\n---\n\n## Teaching Tips\n\n- Encourage learners to come up with their own disgusting ingredients — the sillier, the better!\n- Prompt them to read printed output carefully to understand the effect of their changes.\n- Reinforce that f-strings are a powerful way to combine text and values without needing multiple `+` symbols.\n\n---\n\n## Extension Ideas\n\n- Let learners use `input()` to ask how many people the recipe should serve\n- Encourage them to use `\\n` to format multi-line recipe cards\n- Add even more ingredients or steps to the recipe\n" + }, + { + "filename": "step_1.md", + "path": "en\/", + "content": "

Write your first disgusting ingredient<\/h2>\n--- task ---\nAdd a gross ingredient and print it using an f-string\n--- \/task ---\n\n

Start your recipe<\/h2>\n\nThe owner of an odd restaurant has decided to use code to help make their recipes. You're the coder they've hired. 🧑‍💻 \nYour job is to help create the grossest recipe card ever 🤢\n\nLet’s start by adding your first ingredient. But before we write any code, you’ll notice some lines that start with `#` — these are **comments**.\n\nComments are notes in your code that help you (and others!) understand what each part does. Python ignores them when your program runs.\n\nNow try this:\n\n1. Choose a disgusting ingredient like `'maggot mash 🐛'` or `'slug slime 🐌'`.\n2. Decide how much of it you want to use. Let’s say `50` grams.\n3. Use an **f-string** to print the amount and the ingredient.\n\n
\n--- code ---\n---\nlanguage: python\nfilename: main.py\nline_numbers: true\nline_number_start: 3\nline_highlights: 5-6,11\n---\n# Ingredients and amounts for 1 person\n\ningredient_1 = 'maggot mash 🐛'\namount_1 = 50\n# Number of servings\n\n\n# Scaled-up ingredients\nprint(f'{amount_1}g of {ingredient_1}')\n--- \/code ---\n<\/div>\n\n
\n
50g of maggot mash 🐛<\/pre>\n<\/div>\n\n
\n\n### Tip\n\nIf your code prints nothing or shows an error, check that:\n- You used **quotes** around your ingredient name (it's a string!)\n- You’ve spelled the variable names correctly\n- You used the `f` before the string in `print(f'...')`\n\n<\/div>\n\n
\n\n### Debugging\n\n- If Python says there's a `NameError`, you may have a typo in your variable name\n- If you see `{amount_1}` in the output instead of the number, make sure your string starts with `f`\n\n<\/div>\n" + }, + { + "filename": "step_2.md", + "path": "en\/", + "content": "

Feed more people<\/h2>\n--- task ---\nAdd a servings variable and use it to scale up your ingredient\n--- \/task ---\n\n

Make it serve more than one!<\/h2>\n\nRight now, your ingredient amount is for just **one** person. But what if you wanted to feed 3, or even 10 people?\n\nInstead of writing new numbers, you can **multiply** the amount by the number of servings — using maths inside your f-string!\n\nLet’s add a variable called `servings`, and update your print line to use it:\n\n
\n--- code ---\n---\nlanguage: python\nfilename: main.py\nline_numbers: true\nline_number_start: 7\nline_highlights: 8,11\n---\n# Number of servings\nservings = 3\n\n# Scaled-up ingredients\nprint(f'{amount_1 * servings}g of {ingredient_1}')\n--- \/code ---\n<\/div>\n\n
\n
150g of maggot mash 🐛<\/pre>\n<\/div>\n\n
\n\n### Tip\n\nYou can do maths inside an f-string using `{}` — Python works it out before printing the message!\n\n<\/div>\n\n
\n\n### Debugging\n\n- Make sure your variable name is `servings`, not `serving` or `serves`\n- Don’t forget the `*` for multiplication\n\n<\/div>\n" + }, + { + "filename": "step_3.md", + "path": "en\/", + "content": "

Add more ingredients<\/h2>\n--- task ---\nAdd two more gross ingredients and scale them up using f-strings\n--- \/task ---\n\n

Make your recipe extra disgusting<\/h2>\n\nOne ingredient is never enough for a proper disgusting dish! Let's add two more ingredients to your recipe.\n\n1. Add `ingredient_2` and `ingredient_3` — give them gross names like `'sock juice 🧦'` or `'toenail sprinkles 🦶'`.\n2. Add matching `amount_2` and `amount_3` values.\n3. Use f-strings to print out **all three ingredients**, scaled up using your `servings` variable.\n\n
\n--- code ---\n---\nlanguage: python\nfilename: main.py\nline_numbers: true\nline_number_start: 3\nline_highlights: 8-10,11-12,18-19\n---\ningredient_2 = 'sock juice 🧦'\namount_2 = 30\n\ningredient_3 = 'toenail sprinkles 🦶'\namount_3 = 10\n# Number of servings\nservings = 3\n\n# Scaled-up ingredients\nprint(f'{amount_1 * servings}g of {ingredient_1}')\nprint(f'{amount_2 * servings}ml of {ingredient_2}')\nprint(f'{amount_3 * servings}g of {ingredient_3}')\n--- \/code ---\n<\/div>\n\n
\n
150g of maggot mash 🐛\n90ml of sock juice 🧦\n30g of toenail sprinkles 🦶<\/pre>\n<\/div>\n\n
\n\n### Tip\n\nYou can label each ingredient with different units like `g` (grams) or `ml` (millilitres) depending on what it is!\n\n<\/div>\n\n
\n\n### Debugging\n\n- Make sure your variable names match exactly — Python is case-sensitive!\n- Don’t forget to multiply by `servings` inside each f-string\n\n<\/div>\n" + }, + { + "filename": "step_4.md", + "path": "en\/", + "content": "

Start your recipe instructions<\/h2>\n--- task ---\nUse an f-string to describe the number of people and the first ingredient\n--- \/task ---\n\n

Tell the chef what to do<\/h2>\n\nNow it’s time to turn your ingredient list into an actual recipe! 🍲\n\nYour first step will be to describe the number of people being fed and the first ingredient to be added.\n\n
\n--- code ---\n---\nlanguage: python\nfilename: main.py\nline_numbers: true\nline_number_start: 21\nline_highlights: 22-23\n---\n# Print recipe instructions\nprint()\nprint(f'To make this revolting recipe for {servings} people add {amount_1 * servings}g of {ingredient_1} to a large bowl.')\n--- \/code ---\n<\/div>\n\n
\n
To make this revolting recipe for 3 people add 150g of maggot mash 🐛 to a large bowl.<\/pre>\n<\/div>\n\n
\n\n### Tip\n\nYou can do **maths inside an f-string**! \nThis lets you calculate the ingredient amounts and show them inside a sentence without needing extra lines of code.\n\n<\/div>\n\n
\n\n### Debugging\n\n- Make sure you used `* servings` inside the `{}` for the amount\n- Don’t forget the `f` at the start of your string\n\n<\/div>\n" + }, + { + "filename": "step_5.md", + "path": "en\/", + "content": "

Finish your disgusting recipe<\/h2>\n--- task ---\nUse more f-strings to describe how to prepare your ingredients\n--- \/task ---\n\n

Serve it up 🤢<\/h2>\n\nLet’s finish the recipe by printing the rest of the disgusting instructions.\n\nYou’ll describe:\n- What to pour in next\n- How to garnish it with sprinkles\n- How to serve it to your (un)lucky guests!\n\nAdd these final lines to your program:\n\n
\n--- code ---\n---\nlanguage: python\nfilename: main.py\nline_numbers: true\nline_number_start: 21\nline_highlights: 24-27\n---\n# Print recipe instructions\nprint()\nprint(f'To make this revolting recipe for {servings} people add {amount_1 * servings}g of {ingredient_1} to a large bowl.')\nprint()\nprint(f'Pour over {amount_2 * servings}ml of {ingredient_2}.')\nprint()\nprint(f'Sprinkle with {amount_3 * servings}g of {ingredient_3} and serve cold 🧊. Yum!')\n--- \/code ---\n<\/div>\n\n
\n
To make this revolting recipe for 3 people add 150g of maggot mash 🐛 to a large bowl.\n\nPour over 90ml of sock juice 🧦.\n\nSprinkle with 30g of toenail sprinkles 🦶 and serve cold 🧊. Yum!<\/pre>\n<\/div>\n\n
\n\n### Tip\n\nAdding `print()` with nothing in it is a great way to add blank lines in your output. \nYou can combine text, variables, and maths all in the same f-string!\n\n<\/div>\n\n
\n\n### Debugging\n\n- Check that every sentence is inside a `print(f'...')`\n- Watch your brackets and punctuation carefully!\n\n<\/div>\n" + }, + { + "filename": "main.py", + "path": "en\/solutions\/", + "content": "# Gross Groceries recipe card\n\n# Ingredients and amounts for 1 person\n\ningredient_1 = 'maggot mash 🐛'\namount_1 = 50\n\ningredient_2 = 'sock juice 🧦'\namount_2 = 30\n\ningredient_3 = 'toenail sprinkles 🦶'\namount_3 = 10\n# Number of servings\nservings = 3\n\n# Scaled-up ingredients\nprint(f'{amount_1 * servings}g of {ingredient_1}')\nprint(f'{amount_2 * servings}ml of {ingredient_2}')\nprint(f'{amount_3 * servings}g of {ingredient_3}')\n\n# Print recipe instructions\nprint()\nprint(f'To make this revolting recipe for {servings} people add {amount_1 * servings}g of {ingredient_1} to a large bowl.')\nprint()\nprint(f'Pour over {amount_2 * servings}ml of {ingredient_2}.')\nprint()\nprint(f'Sprinkle with {amount_3 * servings}g of {ingredient_3} and serve cold 🧊. Yum!')\n" + }, + { + "filename": "README.md", + "path": "python-bytes-gross-groceries\/", + "content": "# Python bytes - Gross groceries\n\n![A cartoon recipe card with gross ingredients like sock juice and toenail sprinkles](en\/images\/banner.png)\n\nProject description\n\nFind the project online at [projects.raspberrypi.org\/en\/projects\/python-bytes-gross-groceries](https:\/\/projects.raspberrypi.org\/en\/projects\/python-bytes-gross-groceries)\n\n## Resources\nFor project materials and solutions, see [en\/resources](https:\/\/github.com\/raspberrypilearning\/python-bytes-gross-groceries\/tree\/master\/en\/resources) and [en\/solutions](https:\/\/github.com\/raspberrypilearning\/python-bytes-gross-groceries\/tree\/master\/en\/solutions).\n\n## Contributing\nSee [CONTRIBUTING.md](CONTRIBUTING.md)\n\n## Licence\nSee [LICENCE.md](LICENCE.md)\n" + }, + { + "filename": "CONTRIBUTING.md", + "path": "python-bytes-gross-groceries\/", + "content": "# Contributing\n\nAll contributions are assumed to be licensed under the same licence as the source, i.e. [CC BY-SA](http:\/\/creativecommons.org\/licenses\/by-sa\/4.0\/). This licence must remain in all derivatives of this work.\n\n## Issues\n\nIf you find a mistake, bug, or other problem, please [open an issue](https:\/\/github.com\/raspberrypilearning\/python-bytes-gross-groceries\/issues) in this repository.\n\n## Pull requests\n\nAll edits to a resource should be made to the draft branch or to a fork of the repo. These patches can then be submitted as a pull request.\n\nIf you fix a mistake, bug, or problem or have something to contribute, please create a pull request for each modification. Please consider grouping modifications sensibly, e.g. don't bundle typo fixes in the same pull request as code changes, file them separately instead.\n\nPlease note that sometimes things are done for pedagogical reasons so changes which make sense from a software engineering perspective (reducing duplication or making use of more advanced programming language features) may not be suitable to maintain the intended educational value.\n\n## Derivatives\n\nSee [LICENCE.md](LICENCE.md) for content licence. The licence must remain in all derivatives of this work.\n\n## Translation\n\nYou can help us make this project available to more people around the world by translating it. For more information, please go to [rpf.io\/translate](https:\/\/rpf.io\/translate).\n" + }, + { + "filename": "LICENCE.md", + "path": "python-bytes-gross-groceries\/", + "content": "# Licence\n\nUnless otherwise specified, everything in this repository is covered by the following licence:\n\n[![Creative Commons licence](http:\/\/i.creativecommons.org\/l\/by-sa\/4.0\/88x31.png)](http:\/\/creativecommons.org\/licenses\/by-sa\/4.0\/)\n\n**Python bytes - Gross groceries** by the [Raspberry Pi Foundation](http:\/\/www.raspberrypi.org) is licensed under a [Creative Commons Attribution 4.0 International licence](http:\/\/creativecommons.org\/licenses\/by-sa\/4.0\/).\n\nBased on a work at https:\/\/github.com\/raspberrypilearning\/python-bytes-gross-groceries.\n" + }, + { + "filename": "crowdin.yml", + "path": "python-bytes-gross-groceries\/", + "content": "files:\n - source: \/en\/**\/*.*\n translation: \/%locale%\/**\/%original_file_name%\n" + } +] \ No newline at end of file diff --git a/hi-IN/solutions/main.py b/hi-IN/solutions/main.py new file mode 100644 index 0000000..4564141 --- /dev/null +++ b/hi-IN/solutions/main.py @@ -0,0 +1,27 @@ +# Gross Groceries recipe card + +# Ingredients and amounts for 1 person + +ingredient_1 = 'maggot mash 🐛' +amount_1 = 50 + +ingredient_2 = 'sock juice 🧦' +amount_2 = 30 + +ingredient_3 = 'toenail sprinkles 🦶' +amount_3 = 10 +# Number of servings +servings = 3 + +# Scaled-up ingredients +print(f'{amount_1 * servings}g of {ingredient_1}') +print(f'{amount_2 * servings}ml of {ingredient_2}') +print(f'{amount_3 * servings}g of {ingredient_3}') + +# Print recipe instructions +print() +print(f'To make this revolting recipe for {servings} people add {amount_1 * servings}g of {ingredient_1} to a large bowl.') +print() +print(f'Pour over {amount_2 * servings}ml of {ingredient_2}.') +print() +print(f'Sprinkle with {amount_3 * servings}g of {ingredient_3} and serve cold 🧊. स्वादिष्ट!') diff --git a/hi-IN/step_1.md b/hi-IN/step_1.md new file mode 100644 index 0000000..ee16b36 --- /dev/null +++ b/hi-IN/step_1.md @@ -0,0 +1,72 @@ +

Write your first disgusting ingredient

+ +\--- task --- + +Add a gross ingredient and print it using an f-string. + +\--- /task --- + +

Start your recipe

+ +The owner of an odd restaurant has decided to use code to help make their recipes. You're the coder they've hired. 🧑‍💻 +Your job is to help create the grossest recipe card ever 🤢 + +Let’s start by adding your first ingredient. But before we write any code, you’ll notice some lines that start with `#` — these are **comments**. + +Comments are notes in your code that help you (and others!) understand what each part does. Python ignores them when your program runs. + +Now try this: + +1. Choose a disgusting ingredient like `'maggot mash 🐛'` or `'slug slime 🐌'`. +2. Decide how much of it you want to use. Let’s say `50` grams. +3. Use an **f-string** to print the amount and the ingredient. + +
+--- code --- +--- +language: python +filename: main.py +line_numbers: true +line_number_start: 3 +line_highlights: 5-6,11 +--- + +# Ingredients and amounts for 1 person + +ingredient_1 = 'maggot mash 🐛' +amount_1 = 50 + +# Number of servings + +# Scaled-up ingredients + +print(f'{amount_1}g of {ingredient_1}') + +\--- /code --- + +
+ +
+
50g of maggot mash 🐛
+
+ +
+ +### Tip + +If your code prints nothing or shows an error, check that: + +- You used **quotes** around your ingredient name (it's a string!) +- You’ve spelled the variable names correctly +- You used the `f` before the string in `print(f'...')` + +
+ +
+ +### Debugging + +- If Python says there's a `NameError`, you may have a typo in your variable name +- If you see `{amount_1}` in the output instead of the number, make sure your string starts with `f` + +
diff --git a/hi-IN/step_2.md b/hi-IN/step_2.md new file mode 100644 index 0000000..349fedb --- /dev/null +++ b/hi-IN/step_2.md @@ -0,0 +1,58 @@ +

Feed more people

+ +\--- task --- + +Add a servings variable and use it to scale up your ingredient + +\--- /task --- + +

Make it serve more than one!

+ +Right now, your ingredient amount is for just **one** person. But what if you wanted to feed 3, or even 10 people? + +Instead of writing new numbers, you can **multiply** the amount by the number of servings — using maths inside your f-string! + +Let’s add a variable called `servings`, and update your print line to use it: + +
+--- code --- +--- +language: python +filename: main.py +line_numbers: true +line_number_start: 7 +line_highlights: 8,11 +--- + +# Number of servings + +servings = 3 + +# Scaled-up ingredients + +print(f'{amount_1 \* servings}g of {ingredient_1}') + +\--- /code --- + +
+ +
+
150g of maggot mash 🐛
+
+ +
+ +### Tip + +You can do maths inside an f-string using `{}` — Python works it out before printing the message! + +
+ +
+ +### Debugging + +- Make sure your variable name is `servings`, not `serving` or `serves` +- Don’t forget the `*` for multiplication + +
diff --git a/hi-IN/step_3.md b/hi-IN/step_3.md new file mode 100644 index 0000000..23e2cc8 --- /dev/null +++ b/hi-IN/step_3.md @@ -0,0 +1,68 @@ +

Add more ingredients

+ +\--- task --- + +Add two more gross ingredients and scale them up using f-strings + +\--- /task --- + +

Make your recipe extra disgusting

+ +One ingredient is never enough for a proper disgusting dish! Let's add two more ingredients to your recipe. + +1. Add `ingredient_2` and `ingredient_3` — give them gross names like `'sock juice 🧦'` or `'toenail sprinkles 🦶'`. +2. Add matching `amount_2` and `amount_3` values. +3. Use f-strings to print out **all three ingredients**, scaled up using your `servings` variable. + +
+--- code --- +--- +language: python +filename: main.py +line_numbers: true +line_number_start: 3 +line_highlights: 8-10,11-12,18-19 +--- + +ingredient_2 = 'sock juice 🧦' +amount_2 = 30 + +ingredient_3 = 'toenail sprinkles 🦶' +amount_3 = 10 + +# Number of servings + +servings = 3 + +# Scaled-up ingredients + +print(f'{amount_1 \* servings}g of {ingredient_1}') +print(f'{amount_2 \* servings}ml of {ingredient_2}') +print(f'{amount_3 \* servings}g of {ingredient_3}') + +\--- /code --- + +
+ +
+
150g of maggot mash 🐛
+90ml of sock juice 🧦
+30g of toenail sprinkles 🦶
+
+ +
+ +### Tip + +You can label each ingredient with different units like `g` (grams) or `ml` (millilitres) depending on what it is! + +
+ +
+ +### Debugging + +- Make sure your variable names match exactly — Python is case-sensitive! +- Don’t forget to multiply by `servings` inside each f-string + +
diff --git a/hi-IN/step_4.md b/hi-IN/step_4.md new file mode 100644 index 0000000..0a3a807 --- /dev/null +++ b/hi-IN/step_4.md @@ -0,0 +1,54 @@ +

Start your recipe instructions

+ +\--- task --- + +Use an f-string to describe the number of people and the first ingredient + +\--- /task --- + +

Tell the chef what to do

+ +Now it’s time to turn your ingredient list into an actual recipe! 🍲 + +Your first step will be to describe the number of people being fed and the first ingredient to be added. + +
+--- code --- +--- +language: python +filename: main.py +line_numbers: true +line_number_start: 21 +line_highlights: 22-23 +--- + +# Print recipe instructions + +print() +print(f'To make this revolting recipe for {servings} people add {amount_1 \* servings}g of {ingredient_1} to a large bowl.') + +\--- /code --- + +
+ +
+
To make this revolting recipe for 3 people add 150g of maggot mash 🐛 to a large bowl.
+
+ +
+ +### Tip + +You can do **maths inside an f-string**! +This lets you calculate the ingredient amounts and show them inside a sentence without needing extra lines of code. + +
+ +
+ +### Debugging + +- Make sure you used `* servings` inside the `{}` for the amount +- Don’t forget the `f` at the start of your string + +
diff --git a/hi-IN/step_5.md b/hi-IN/step_5.md new file mode 100644 index 0000000..667ccb7 --- /dev/null +++ b/hi-IN/step_5.md @@ -0,0 +1,92 @@ +

Finish your disgusting recipe

+ +\--- task --- + +Use more f-strings to describe how to prepare your ingredients + +\--- /task --- + +

Serve it up 🤢

+ +Let’s finish the recipe by printing the rest of the disgusting instructions. + +You’ll describe: + +- What to pour in next +- How to garnish it with sprinkles +- How to serve it to your (un)lucky guests! + +Add these final lines to your program: + +
+--- code --- +--- +language: python +filename: main.py +line_numbers: true +line_number_start: 21 +line_highlights: 24-27 +--- + +# Print recipe instructions + +print() +print(f'To make this revolting recipe for {servings} people add {amount_1 \* servings}g of {ingredient_1} to a large bowl.') +print() +print(f'Pour over {amount_2 \* servings}ml of {ingredient_2}.') +print() +print(f'Sprinkle with {amount_3 \* servings}g of {ingredient_3} and serve cold 🧊. स्वादिष्ट!') + +\--- /code --- + +
+ +
+
To make this revolting recipe for 3 people add 150g of maggot mash 🐛 to a large bowl.
+
+Pour over 90ml of sock juice 🧦.
+
+Sprinkle with 30g of toenail sprinkles 🦶 and serve cold 🧊. Yum!
+ +
+ +
+ +### Tip + +Adding `print()` with nothing in it is a great way to add blank lines in your output. +You can combine text, variables, and maths all in the same f-string! + +
+ +
+ +### Debugging + +- Check that every sentence is inside a `print(f'...')` +- Watch your brackets and punctuation carefully! + +
+ +
+ +### Feedback + +This is a beta projects, which means it is brand new and not widely available. If you've tested this project on your own or with your club, let us know what you think. + + +Give feedback + +
diff --git a/it-IT/code/starter/main.py b/it-IT/code/starter/main.py new file mode 100644 index 0000000..45d5a6a --- /dev/null +++ b/it-IT/code/starter/main.py @@ -0,0 +1,12 @@ +# Gross Groceries recipe card + +# Ingredients and amounts for 1 person + + +# Number of servings + + +# Scaled-up ingredients + + +# Print recipe instructions diff --git a/it-IT/code/starter/project_config.yml b/it-IT/code/starter/project_config.yml new file mode 100644 index 0000000..d184c95 --- /dev/null +++ b/it-IT/code/starter/project_config.yml @@ -0,0 +1,4 @@ +name: "Python Bytes - Gross Groceries" +identifier: "python-bytes-gross-groceries" +type: python +build: true diff --git a/it-IT/images/banner.png b/it-IT/images/banner.png new file mode 100644 index 0000000000000000000000000000000000000000..685e0cfcdba14a01ff649260c3122d52f976b0d7 GIT binary patch literal 43369 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 C!4%N| literal 0 HcmV?d00001 diff --git a/it-IT/mentor.md b/it-IT/mentor.md new file mode 100644 index 0000000..fe5ddcf --- /dev/null +++ b/it-IT/mentor.md @@ -0,0 +1,30 @@ +# Mentor Notes: Gross Groceries + +## Project Overview + +In this project, learners will use Python to help a strange restaurant owner create a revolting recipe card. They’ll start with simple ingredients and build up to printing full recipe instructions using f-strings. By the end, learners will have used variables, strings, numbers, simple arithmetic, and f-strings across multiple steps. + +--- + +## What Learners Will Practise + +- Creating and using variables +- Combining strings and numbers with f-strings +- Performing basic multiplication in code +- Writing multi-line Python programs with clear structure + +--- + +## Teaching Tips + +- Encourage learners to come up with their own disgusting ingredients — the sillier, the better! +- Prompt them to read printed output carefully to understand the effect of their changes. +- Reinforce that f-strings are a powerful way to combine text and values without needing multiple `+` symbols. + +--- + +## Extension Ideas + +- Let learners use `input()` to ask how many people the recipe should serve +- Encourage them to use `\n` to format multi-line recipe cards +- Add even more ingredients or steps to the recipe diff --git a/it-IT/meta.yml b/it-IT/meta.yml new file mode 100644 index 0000000..330e5c4 --- /dev/null +++ b/it-IT/meta.yml @@ -0,0 +1,20 @@ +title: Python bytes - Gross groceries +hero_image: images/banner.png +description: Write a revolting recipe card using variables, f-strings, and maths +meta_title: Learn to code with Gross Groceries | Python Bytes +meta_description: Learn how to use Python f-strings and variables to print a disgusting recipe for an odd restaurant. +version: 1 +listed: true +copyedit: false +last_tested: "2025-04-14" +steps: + - title: step_1 + - title: step_2 + completion: + - engaged + - title: step_3 + - title: step_4 + - title: step_5 + completion: + - internal + - external diff --git a/it-IT/resources/dataframe.json b/it-IT/resources/dataframe.json new file mode 100644 index 0000000..c7460c9 --- /dev/null +++ b/it-IT/resources/dataframe.json @@ -0,0 +1,72 @@ +[ + { + "filename": "meta.yml", + "path": "en\/", + "content": "title: Python bytes - Gross groceries\nhero_image: images\/banner.png\ndescription: Write a revolting recipe card using variables, f-strings, and maths\nmeta_title: Learn to code with Gross Groceries | Python Bytes\nmeta_description: Learn how to use Python f-strings and variables to print a disgusting recipe for an odd restaurant.\nversion: 1\nlisted: false\ncopyedit: false\nlast_tested: \"2025-04-14\"\nsteps:\n - title: step_1\n - title: step_2\n completion:\n - engaged\n - title: step_3\n - title: step_4\n - title: step_5\n completion:\n - internal\n - external\n" + }, + { + "filename": "main.py", + "path": "en\/code\/starter\/", + "content": "# Gross Groceries recipe card\n\n# Ingredients and amounts for 1 person\n\n\n# Number of servings\n\n\n# Scaled-up ingredients\n\n\n# Print recipe instructions\n" + }, + { + "filename": "project_config.yml", + "path": "en\/code\/starter\/", + "content": "name: \"Python Bytes - Gross Groceries\"\nidentifier: \"python-bytes-gross-groceries\"\ntype: python\nbuild: true\n" + }, + { + "filename": "mentor.md", + "path": "en\/", + "content": "# Mentor Notes: Gross Groceries\n\n## Project Overview\n\nIn this project, learners will use Python to help a strange restaurant owner create a revolting recipe card. They’ll start with simple ingredients and build up to printing full recipe instructions using f-strings. By the end, learners will have used variables, strings, numbers, simple arithmetic, and f-strings across multiple steps.\n\n---\n\n## What Learners Will Practise\n\n- Creating and using variables\n- Combining strings and numbers with f-strings\n- Performing basic multiplication in code\n- Writing multi-line Python programs with clear structure\n\n---\n\n## Teaching Tips\n\n- Encourage learners to come up with their own disgusting ingredients — the sillier, the better!\n- Prompt them to read printed output carefully to understand the effect of their changes.\n- Reinforce that f-strings are a powerful way to combine text and values without needing multiple `+` symbols.\n\n---\n\n## Extension Ideas\n\n- Let learners use `input()` to ask how many people the recipe should serve\n- Encourage them to use `\\n` to format multi-line recipe cards\n- Add even more ingredients or steps to the recipe\n" + }, + { + "filename": "step_1.md", + "path": "en\/", + "content": "

Write your first disgusting ingredient<\/h2>\n--- task ---\nAdd a gross ingredient and print it using an f-string\n--- \/task ---\n\n

Start your recipe<\/h2>\n\nThe owner of an odd restaurant has decided to use code to help make their recipes. You're the coder they've hired. 🧑‍💻 \nYour job is to help create the grossest recipe card ever 🤢\n\nLet’s start by adding your first ingredient. But before we write any code, you’ll notice some lines that start with `#` — these are **comments**.\n\nComments are notes in your code that help you (and others!) understand what each part does. Python ignores them when your program runs.\n\nNow try this:\n\n1. Choose a disgusting ingredient like `'maggot mash 🐛'` or `'slug slime 🐌'`.\n2. Decide how much of it you want to use. Let’s say `50` grams.\n3. Use an **f-string** to print the amount and the ingredient.\n\n
\n--- code ---\n---\nlanguage: python\nfilename: main.py\nline_numbers: true\nline_number_start: 3\nline_highlights: 5-6,11\n---\n# Ingredients and amounts for 1 person\n\ningredient_1 = 'maggot mash 🐛'\namount_1 = 50\n# Number of servings\n\n\n# Scaled-up ingredients\nprint(f'{amount_1}g of {ingredient_1}')\n--- \/code ---\n<\/div>\n\n
\n
50g of maggot mash 🐛<\/pre>\n<\/div>\n\n
\n\n### Tip\n\nIf your code prints nothing or shows an error, check that:\n- You used **quotes** around your ingredient name (it's a string!)\n- You’ve spelled the variable names correctly\n- You used the `f` before the string in `print(f'...')`\n\n<\/div>\n\n
\n\n### Debugging\n\n- If Python says there's a `NameError`, you may have a typo in your variable name\n- If you see `{amount_1}` in the output instead of the number, make sure your string starts with `f`\n\n<\/div>\n" + }, + { + "filename": "step_2.md", + "path": "en\/", + "content": "

Feed more people<\/h2>\n--- task ---\nAdd a servings variable and use it to scale up your ingredient\n--- \/task ---\n\n

Make it serve more than one!<\/h2>\n\nRight now, your ingredient amount is for just **one** person. But what if you wanted to feed 3, or even 10 people?\n\nInstead of writing new numbers, you can **multiply** the amount by the number of servings — using maths inside your f-string!\n\nLet’s add a variable called `servings`, and update your print line to use it:\n\n
\n--- code ---\n---\nlanguage: python\nfilename: main.py\nline_numbers: true\nline_number_start: 7\nline_highlights: 8,11\n---\n# Number of servings\nservings = 3\n\n# Scaled-up ingredients\nprint(f'{amount_1 * servings}g of {ingredient_1}')\n--- \/code ---\n<\/div>\n\n
\n
150g of maggot mash 🐛<\/pre>\n<\/div>\n\n
\n\n### Tip\n\nYou can do maths inside an f-string using `{}` — Python works it out before printing the message!\n\n<\/div>\n\n
\n\n### Debugging\n\n- Make sure your variable name is `servings`, not `serving` or `serves`\n- Don’t forget the `*` for multiplication\n\n<\/div>\n" + }, + { + "filename": "step_3.md", + "path": "en\/", + "content": "

Add more ingredients<\/h2>\n--- task ---\nAdd two more gross ingredients and scale them up using f-strings\n--- \/task ---\n\n

Make your recipe extra disgusting<\/h2>\n\nOne ingredient is never enough for a proper disgusting dish! Let's add two more ingredients to your recipe.\n\n1. Add `ingredient_2` and `ingredient_3` — give them gross names like `'sock juice 🧦'` or `'toenail sprinkles 🦶'`.\n2. Add matching `amount_2` and `amount_3` values.\n3. Use f-strings to print out **all three ingredients**, scaled up using your `servings` variable.\n\n
\n--- code ---\n---\nlanguage: python\nfilename: main.py\nline_numbers: true\nline_number_start: 3\nline_highlights: 8-10,11-12,18-19\n---\ningredient_2 = 'sock juice 🧦'\namount_2 = 30\n\ningredient_3 = 'toenail sprinkles 🦶'\namount_3 = 10\n# Number of servings\nservings = 3\n\n# Scaled-up ingredients\nprint(f'{amount_1 * servings}g of {ingredient_1}')\nprint(f'{amount_2 * servings}ml of {ingredient_2}')\nprint(f'{amount_3 * servings}g of {ingredient_3}')\n--- \/code ---\n<\/div>\n\n
\n
150g of maggot mash 🐛\n90ml of sock juice 🧦\n30g of toenail sprinkles 🦶<\/pre>\n<\/div>\n\n
\n\n### Tip\n\nYou can label each ingredient with different units like `g` (grams) or `ml` (millilitres) depending on what it is!\n\n<\/div>\n\n
\n\n### Debugging\n\n- Make sure your variable names match exactly — Python is case-sensitive!\n- Don’t forget to multiply by `servings` inside each f-string\n\n<\/div>\n" + }, + { + "filename": "step_4.md", + "path": "en\/", + "content": "

Start your recipe instructions<\/h2>\n--- task ---\nUse an f-string to describe the number of people and the first ingredient\n--- \/task ---\n\n

Tell the chef what to do<\/h2>\n\nNow it’s time to turn your ingredient list into an actual recipe! 🍲\n\nYour first step will be to describe the number of people being fed and the first ingredient to be added.\n\n
\n--- code ---\n---\nlanguage: python\nfilename: main.py\nline_numbers: true\nline_number_start: 21\nline_highlights: 22-23\n---\n# Print recipe instructions\nprint()\nprint(f'To make this revolting recipe for {servings} people add {amount_1 * servings}g of {ingredient_1} to a large bowl.')\n--- \/code ---\n<\/div>\n\n
\n
To make this revolting recipe for 3 people add 150g of maggot mash 🐛 to a large bowl.<\/pre>\n<\/div>\n\n
\n\n### Tip\n\nYou can do **maths inside an f-string**! \nThis lets you calculate the ingredient amounts and show them inside a sentence without needing extra lines of code.\n\n<\/div>\n\n
\n\n### Debugging\n\n- Make sure you used `* servings` inside the `{}` for the amount\n- Don’t forget the `f` at the start of your string\n\n<\/div>\n" + }, + { + "filename": "step_5.md", + "path": "en\/", + "content": "

Finish your disgusting recipe<\/h2>\n--- task ---\nUse more f-strings to describe how to prepare your ingredients\n--- \/task ---\n\n

Serve it up 🤢<\/h2>\n\nLet’s finish the recipe by printing the rest of the disgusting instructions.\n\nYou’ll describe:\n- What to pour in next\n- How to garnish it with sprinkles\n- How to serve it to your (un)lucky guests!\n\nAdd these final lines to your program:\n\n
\n--- code ---\n---\nlanguage: python\nfilename: main.py\nline_numbers: true\nline_number_start: 21\nline_highlights: 24-27\n---\n# Print recipe instructions\nprint()\nprint(f'To make this revolting recipe for {servings} people add {amount_1 * servings}g of {ingredient_1} to a large bowl.')\nprint()\nprint(f'Pour over {amount_2 * servings}ml of {ingredient_2}.')\nprint()\nprint(f'Sprinkle with {amount_3 * servings}g of {ingredient_3} and serve cold 🧊. Yum!')\n--- \/code ---\n<\/div>\n\n
\n
To make this revolting recipe for 3 people add 150g of maggot mash 🐛 to a large bowl.\n\nPour over 90ml of sock juice 🧦.\n\nSprinkle with 30g of toenail sprinkles 🦶 and serve cold 🧊. Yum!<\/pre>\n<\/div>\n\n
\n\n### Tip\n\nAdding `print()` with nothing in it is a great way to add blank lines in your output. \nYou can combine text, variables, and maths all in the same f-string!\n\n<\/div>\n\n
\n\n### Debugging\n\n- Check that every sentence is inside a `print(f'...')`\n- Watch your brackets and punctuation carefully!\n\n<\/div>\n" + }, + { + "filename": "main.py", + "path": "en\/solutions\/", + "content": "# Gross Groceries recipe card\n\n# Ingredients and amounts for 1 person\n\ningredient_1 = 'maggot mash 🐛'\namount_1 = 50\n\ningredient_2 = 'sock juice 🧦'\namount_2 = 30\n\ningredient_3 = 'toenail sprinkles 🦶'\namount_3 = 10\n# Number of servings\nservings = 3\n\n# Scaled-up ingredients\nprint(f'{amount_1 * servings}g of {ingredient_1}')\nprint(f'{amount_2 * servings}ml of {ingredient_2}')\nprint(f'{amount_3 * servings}g of {ingredient_3}')\n\n# Print recipe instructions\nprint()\nprint(f'To make this revolting recipe for {servings} people add {amount_1 * servings}g of {ingredient_1} to a large bowl.')\nprint()\nprint(f'Pour over {amount_2 * servings}ml of {ingredient_2}.')\nprint()\nprint(f'Sprinkle with {amount_3 * servings}g of {ingredient_3} and serve cold 🧊. Yum!')\n" + }, + { + "filename": "README.md", + "path": "python-bytes-gross-groceries\/", + "content": "# Python bytes - Gross groceries\n\n![A cartoon recipe card with gross ingredients like sock juice and toenail sprinkles](en\/images\/banner.png)\n\nProject description\n\nFind the project online at [projects.raspberrypi.org\/en\/projects\/python-bytes-gross-groceries](https:\/\/projects.raspberrypi.org\/en\/projects\/python-bytes-gross-groceries)\n\n## Resources\nFor project materials and solutions, see [en\/resources](https:\/\/github.com\/raspberrypilearning\/python-bytes-gross-groceries\/tree\/master\/en\/resources) and [en\/solutions](https:\/\/github.com\/raspberrypilearning\/python-bytes-gross-groceries\/tree\/master\/en\/solutions).\n\n## Contributing\nSee [CONTRIBUTING.md](CONTRIBUTING.md)\n\n## Licence\nSee [LICENCE.md](LICENCE.md)\n" + }, + { + "filename": "CONTRIBUTING.md", + "path": "python-bytes-gross-groceries\/", + "content": "# Contributing\n\nAll contributions are assumed to be licensed under the same licence as the source, i.e. [CC BY-SA](http:\/\/creativecommons.org\/licenses\/by-sa\/4.0\/). This licence must remain in all derivatives of this work.\n\n## Issues\n\nIf you find a mistake, bug, or other problem, please [open an issue](https:\/\/github.com\/raspberrypilearning\/python-bytes-gross-groceries\/issues) in this repository.\n\n## Pull requests\n\nAll edits to a resource should be made to the draft branch or to a fork of the repo. These patches can then be submitted as a pull request.\n\nIf you fix a mistake, bug, or problem or have something to contribute, please create a pull request for each modification. Please consider grouping modifications sensibly, e.g. don't bundle typo fixes in the same pull request as code changes, file them separately instead.\n\nPlease note that sometimes things are done for pedagogical reasons so changes which make sense from a software engineering perspective (reducing duplication or making use of more advanced programming language features) may not be suitable to maintain the intended educational value.\n\n## Derivatives\n\nSee [LICENCE.md](LICENCE.md) for content licence. The licence must remain in all derivatives of this work.\n\n## Translation\n\nYou can help us make this project available to more people around the world by translating it. For more information, please go to [rpf.io\/translate](https:\/\/rpf.io\/translate).\n" + }, + { + "filename": "LICENCE.md", + "path": "python-bytes-gross-groceries\/", + "content": "# Licence\n\nUnless otherwise specified, everything in this repository is covered by the following licence:\n\n[![Creative Commons licence](http:\/\/i.creativecommons.org\/l\/by-sa\/4.0\/88x31.png)](http:\/\/creativecommons.org\/licenses\/by-sa\/4.0\/)\n\n**Python bytes - Gross groceries** by the [Raspberry Pi Foundation](http:\/\/www.raspberrypi.org) is licensed under a [Creative Commons Attribution 4.0 International licence](http:\/\/creativecommons.org\/licenses\/by-sa\/4.0\/).\n\nBased on a work at https:\/\/github.com\/raspberrypilearning\/python-bytes-gross-groceries.\n" + }, + { + "filename": "crowdin.yml", + "path": "python-bytes-gross-groceries\/", + "content": "files:\n - source: \/en\/**\/*.*\n translation: \/%locale%\/**\/%original_file_name%\n" + } +] \ No newline at end of file diff --git a/it-IT/solutions/main.py b/it-IT/solutions/main.py new file mode 100644 index 0000000..855cb24 --- /dev/null +++ b/it-IT/solutions/main.py @@ -0,0 +1,27 @@ +# Gross Groceries recipe card + +# Ingredients and amounts for 1 person + +ingredient_1 = 'maggot mash 🐛' +amount_1 = 50 + +ingredient_2 = 'sock juice 🧦' +amount_2 = 30 + +ingredient_3 = 'toenail sprinkles 🦶' +amount_3 = 10 +# Number of servings +servings = 3 + +# Scaled-up ingredients +print(f'{amount_1 * servings}g of {ingredient_1}') +print(f'{amount_2 * servings}ml of {ingredient_2}') +print(f'{amount_3 * servings}g of {ingredient_3}') + +# Print recipe instructions +print() +print(f'To make this revolting recipe for {servings} people add {amount_1 * servings}g of {ingredient_1} to a large bowl.') +print() +print(f'Pour over {amount_2 * servings}ml of {ingredient_2}.') +print() +print(f'Sprinkle with {amount_3 * servings}g of {ingredient_3} and serve cold 🧊. Yum!') diff --git a/it-IT/step_1.md b/it-IT/step_1.md new file mode 100644 index 0000000..ee16b36 --- /dev/null +++ b/it-IT/step_1.md @@ -0,0 +1,72 @@ +

Write your first disgusting ingredient

+ +\--- task --- + +Add a gross ingredient and print it using an f-string. + +\--- /task --- + +

Start your recipe

+ +The owner of an odd restaurant has decided to use code to help make their recipes. You're the coder they've hired. 🧑‍💻 +Your job is to help create the grossest recipe card ever 🤢 + +Let’s start by adding your first ingredient. But before we write any code, you’ll notice some lines that start with `#` — these are **comments**. + +Comments are notes in your code that help you (and others!) understand what each part does. Python ignores them when your program runs. + +Now try this: + +1. Choose a disgusting ingredient like `'maggot mash 🐛'` or `'slug slime 🐌'`. +2. Decide how much of it you want to use. Let’s say `50` grams. +3. Use an **f-string** to print the amount and the ingredient. + +
+--- code --- +--- +language: python +filename: main.py +line_numbers: true +line_number_start: 3 +line_highlights: 5-6,11 +--- + +# Ingredients and amounts for 1 person + +ingredient_1 = 'maggot mash 🐛' +amount_1 = 50 + +# Number of servings + +# Scaled-up ingredients + +print(f'{amount_1}g of {ingredient_1}') + +\--- /code --- + +
+ +
+
50g of maggot mash 🐛
+
+ +
+ +### Tip + +If your code prints nothing or shows an error, check that: + +- You used **quotes** around your ingredient name (it's a string!) +- You’ve spelled the variable names correctly +- You used the `f` before the string in `print(f'...')` + +
+ +
+ +### Debugging + +- If Python says there's a `NameError`, you may have a typo in your variable name +- If you see `{amount_1}` in the output instead of the number, make sure your string starts with `f` + +
diff --git a/it-IT/step_2.md b/it-IT/step_2.md new file mode 100644 index 0000000..349fedb --- /dev/null +++ b/it-IT/step_2.md @@ -0,0 +1,58 @@ +

Feed more people

+ +\--- task --- + +Add a servings variable and use it to scale up your ingredient + +\--- /task --- + +

Make it serve more than one!

+ +Right now, your ingredient amount is for just **one** person. But what if you wanted to feed 3, or even 10 people? + +Instead of writing new numbers, you can **multiply** the amount by the number of servings — using maths inside your f-string! + +Let’s add a variable called `servings`, and update your print line to use it: + +
+--- code --- +--- +language: python +filename: main.py +line_numbers: true +line_number_start: 7 +line_highlights: 8,11 +--- + +# Number of servings + +servings = 3 + +# Scaled-up ingredients + +print(f'{amount_1 \* servings}g of {ingredient_1}') + +\--- /code --- + +
+ +
+
150g of maggot mash 🐛
+
+ +
+ +### Tip + +You can do maths inside an f-string using `{}` — Python works it out before printing the message! + +
+ +
+ +### Debugging + +- Make sure your variable name is `servings`, not `serving` or `serves` +- Don’t forget the `*` for multiplication + +
diff --git a/it-IT/step_3.md b/it-IT/step_3.md new file mode 100644 index 0000000..23e2cc8 --- /dev/null +++ b/it-IT/step_3.md @@ -0,0 +1,68 @@ +

Add more ingredients

+ +\--- task --- + +Add two more gross ingredients and scale them up using f-strings + +\--- /task --- + +

Make your recipe extra disgusting

+ +One ingredient is never enough for a proper disgusting dish! Let's add two more ingredients to your recipe. + +1. Add `ingredient_2` and `ingredient_3` — give them gross names like `'sock juice 🧦'` or `'toenail sprinkles 🦶'`. +2. Add matching `amount_2` and `amount_3` values. +3. Use f-strings to print out **all three ingredients**, scaled up using your `servings` variable. + +
+--- code --- +--- +language: python +filename: main.py +line_numbers: true +line_number_start: 3 +line_highlights: 8-10,11-12,18-19 +--- + +ingredient_2 = 'sock juice 🧦' +amount_2 = 30 + +ingredient_3 = 'toenail sprinkles 🦶' +amount_3 = 10 + +# Number of servings + +servings = 3 + +# Scaled-up ingredients + +print(f'{amount_1 \* servings}g of {ingredient_1}') +print(f'{amount_2 \* servings}ml of {ingredient_2}') +print(f'{amount_3 \* servings}g of {ingredient_3}') + +\--- /code --- + +
+ +
+
150g of maggot mash 🐛
+90ml of sock juice 🧦
+30g of toenail sprinkles 🦶
+
+ +
+ +### Tip + +You can label each ingredient with different units like `g` (grams) or `ml` (millilitres) depending on what it is! + +
+ +
+ +### Debugging + +- Make sure your variable names match exactly — Python is case-sensitive! +- Don’t forget to multiply by `servings` inside each f-string + +
diff --git a/it-IT/step_4.md b/it-IT/step_4.md new file mode 100644 index 0000000..0a3a807 --- /dev/null +++ b/it-IT/step_4.md @@ -0,0 +1,54 @@ +

Start your recipe instructions

+ +\--- task --- + +Use an f-string to describe the number of people and the first ingredient + +\--- /task --- + +

Tell the chef what to do

+ +Now it’s time to turn your ingredient list into an actual recipe! 🍲 + +Your first step will be to describe the number of people being fed and the first ingredient to be added. + +
+--- code --- +--- +language: python +filename: main.py +line_numbers: true +line_number_start: 21 +line_highlights: 22-23 +--- + +# Print recipe instructions + +print() +print(f'To make this revolting recipe for {servings} people add {amount_1 \* servings}g of {ingredient_1} to a large bowl.') + +\--- /code --- + +
+ +
+
To make this revolting recipe for 3 people add 150g of maggot mash 🐛 to a large bowl.
+
+ +
+ +### Tip + +You can do **maths inside an f-string**! +This lets you calculate the ingredient amounts and show them inside a sentence without needing extra lines of code. + +
+ +
+ +### Debugging + +- Make sure you used `* servings` inside the `{}` for the amount +- Don’t forget the `f` at the start of your string + +
diff --git a/it-IT/step_5.md b/it-IT/step_5.md new file mode 100644 index 0000000..c0ad8a3 --- /dev/null +++ b/it-IT/step_5.md @@ -0,0 +1,92 @@ +

Finish your disgusting recipe

+ +\--- task --- + +Use more f-strings to describe how to prepare your ingredients + +\--- /task --- + +

Serve it up 🤢

+ +Let’s finish the recipe by printing the rest of the disgusting instructions. + +You’ll describe: + +- What to pour in next +- How to garnish it with sprinkles +- How to serve it to your (un)lucky guests! + +Add these final lines to your program: + +
+--- code --- +--- +language: python +filename: main.py +line_numbers: true +line_number_start: 21 +line_highlights: 24-27 +--- + +# Print recipe instructions + +print() +print(f'To make this revolting recipe for {servings} people add {amount_1 \* servings}g of {ingredient_1} to a large bowl.') +print() +print(f'Pour over {amount_2 \* servings}ml of {ingredient_2}.') +print() +print(f'Sprinkle with {amount_3 \* servings}g of {ingredient_3} and serve cold 🧊. Yum!') + +\--- /code --- + +
+ +
+
To make this revolting recipe for 3 people add 150g of maggot mash 🐛 to a large bowl.
+
+Pour over 90ml of sock juice 🧦.
+
+Sprinkle with 30g of toenail sprinkles 🦶 and serve cold 🧊. Yum!
+ +
+ +
+ +### Tip + +Adding `print()` with nothing in it is a great way to add blank lines in your output. +You can combine text, variables, and maths all in the same f-string! + +
+ +
+ +### Debugging + +- Check that every sentence is inside a `print(f'...')` +- Watch your brackets and punctuation carefully! + +
+ +
+ +### Feedback + +This is a beta projects, which means it is brand new and not widely available. If you've tested this project on your own or with your club, let us know what you think. + + +Give feedback + +
diff --git a/ja-JP/code/starter/main.py b/ja-JP/code/starter/main.py new file mode 100644 index 0000000..45d5a6a --- /dev/null +++ b/ja-JP/code/starter/main.py @@ -0,0 +1,12 @@ +# Gross Groceries recipe card + +# Ingredients and amounts for 1 person + + +# Number of servings + + +# Scaled-up ingredients + + +# Print recipe instructions diff --git a/ja-JP/code/starter/project_config.yml b/ja-JP/code/starter/project_config.yml new file mode 100644 index 0000000..d184c95 --- /dev/null +++ b/ja-JP/code/starter/project_config.yml @@ -0,0 +1,4 @@ +name: "Python Bytes - Gross Groceries" +identifier: "python-bytes-gross-groceries" +type: python +build: true diff --git a/ja-JP/images/banner.png b/ja-JP/images/banner.png new file mode 100644 index 0000000000000000000000000000000000000000..685e0cfcdba14a01ff649260c3122d52f976b0d7 GIT binary patch literal 43369 zcmYiN1z1&Gv^@^f-QC>{(jeUp(w&EH>5zs)cZYPhv`CkoFbYKt>jBB3a{pb6Mr)oD^C{Ab5qM$4j(HBF9 zF9G+DPzW$k!D18`2r$TIe1Z`F`#n^lX4D|o|Ne>vK1ug~e;%?&fu;C{|Ao6L z*J84O(}~FQXW3&*Z9EM)u|(Kr6*3zXix#Q2^FNOxp@rFuh11c%^7TkGMgTFq1w2>P ztRKsVWkn3j!A2CD6EYwjdMhX#9DD^I$UBwbbf@-n3kFuIpROX|HT)Zl zd?F<{nl0g>HiU&qZW0Oj^OZozKaNG1vV2bw{nuaqZ7>53qsgV7Z~^4BHHNAb<_#Za z7Hw+WY5lo~35Q^mFIA2*RT?;sX}A0oZ+u^NV}s3B`!R{RQ_2s2DHk3=byLd&Q@ZA8{{^O(M4RH{Q~n($j- zK0XFf+fcf*<2FiYKDQ@63Hh0xV$BZK#se5 z;U^{E`>@8q7MCX(t*Xh{xjNh&C*Ck%aa40+cygzKYEMW*XVm~Hl>7SY?dAIhMStO4 zQ=MXkXw=|QSkY)^%=%)f!&gn4)nJ#3Q0@>+1Q>n?6_SfUT*}UtlBGDQI?SvE40y%D z%1vv9q*_f=Q9rQkF(tgON@|8H9hD+O`oBzA4J+V5{|Zr;Vdz2t@klkxIfzFk6DdJ~ zfg+KFoS4i@Vy>FT(f~2D*#uvn5J;YYE({xgdyHWgkaS=rC7Y~f>Asi5gsDrZ-aEOJ zQO50X%>4G(M38jE@WgYao_-#k2D_RQ^tNZAho0SURPsGYtO9zlCd`luT_g?On@E+M zKQ6INJ*8P5q)j}LniR(_)0mmb`tQj)l19!SGM`QePsU0rl4eu_GS1KD#QUe7tFTBN zWT7J~Zh>Tl(P$JaYUM7PCr`5^R@qd{vg=R8FBzWwW7mXIMHV);N3>Lm6!QephGL%T zVTnJfb1=?xNL;?1w}YUNS*$=$26v|ZPB@Zt864OJ^Cu_1RMX>`Pr~74A_ax67ye~5 z!A4mgM)D(^@PY}BMluwau!fIMB!UT?HYA27(#e%R-fJQnNV3ZqREsX0Xo&l>Cu0hNrQ! zSfMFdDS5_2?YW%>=M5b?OU}LiIlkYAOC8o<0`j=c!hl@s##)Q6N=y!?m!7x4n-f1r z#$X)nN>5rB9~d3OAj*abSR~)k;Ba*xJxi}#H>@N8-XPL{!f+u&J(PqA_uM`dOLiw5 zk$tjnz*dFtk+*DB!lTw}e~zWJx8I4`i~DlJy|QJ?#J-{QS>D+8V86gVIaQWQAi?x& zWz8{$9r4j%!TD?9thjF0XTkV~ZKKI)D`?MA;lyn9#28!-QI=qk(67;%|2@gFk6SUBn!BJTI?s zMYWpZYxsxEPv9v+s#(IGF-<3G;SjoC&oSWqv`-k5!d3dg-2dCq9}f=#2Qjmou8*{d z`k{9pjAJ|+M6KwLa4g2vh)WUuy-wNi$U8Yp@e%bnp=|2Fbyu`&{71yUbFtwp41|5j z$#xL_wG}&2g$$nOM{N*DmP)c6laPxBjX6mVW6N2+DmzY@=3v|y#POOQm8E#k)n3Z& zUP-uim>3ps5zh+CpA?%!$KFpQN7t%^BP~NC2q(SrFO-&-sh9#Xw(Ta?_5u>=RRt+o zO^nU+Ew5?LS@LNB&BZZoJujLHoqi`|K;4IrF<7i3_Li$IoNI(bz!s0*^NZvTf?}xq z<17#tQ;XtJ$w7~w=V!bpR9c!FuN!|$2gKKoj5>$y?e|U8XlP1iMCY}N?+5Ru#tuze z!H|FD!(I7KL-7Ya1DC$glQL_W3(P)+XC%q}nhpVM&A#)l@m169^P+Tm92&Ze4NhU@ zy$sA6V3YC+E(czK<%;_|k| zIPj&+$Ab<&$d&EKyarM>-o)g`Gr9a@PLX0Aajcb6w;bHY)X)~A&_whg(Waww;Me+! zmCGH|7az$j+NKdT;iMuC=N3a{s5LqaV$vN=0dJUuG|Xn!#9?5;^1tw&h)kLveUIAR zUF37lB1zKif58B=hI$u$8!-dc0L)03RS~NOYoHWVy5gHv0hQg7wvOA038b%FdO6S) zCW2tHfgw?3njVHn_mt@YCC4`(#W3yh69ATBz0gC(&OCmQ=h zbDAsb#rg(a$t#qnnY3+#L9*~{mS@aS*gJw z6t`%K|6~4z!@mw<|C4&uuhk*;mI(S?nA3Uoq{PY6UgWe4oYau=vG^5A#3l&tv%=Yb ziO`;%-(XP2egBwu3rfp15J{QG&;Y#2$dZnilX2(g=0V~#3!*cS;PmfwUMbDW9Y=>! ztvHS2S+&KUsENKHtU%P$e?85Dk%;Rpzmk)3i&ADuLr(3A6|;Y?L7$a!HGr{_Zc3ei z5`$g}>zj%^k^tSN>*h~8FgAka2_3|KS4pa-kmehtxI)TnQTJ6>+bFR;9=PQ z=tr`0i944;2qE@mob0CUq)%>_=zrJ~0crA{i_>L^vJvC)&F_X|J?-YCc;87u`gwZb zrAtzMeDg*K!v5LtzqIZZ-2zi&;moRxf8nLEe3{x@BdD#K65w-I6P{h+0${?bk2@I<``kYckMfS+8;sVqEqV`oVUQU26TR}GXS&y z**{inzI)EY@m1l-W*317Qfq(}F$vv2SVS_{mS9VQFZd}rQEO6dh{DzbT?YZ}6%?HJ z>wL06jVSpm1?Cu44hHKi>&72Mi-)_B?EH?lV>4l1m!CIW)m+#G{ZD+G{r*+o!nr{u z0nTbm_t5fKoB`IB%-~l_(2}rV_yP)5uMK|OWIP{ZLXJ#Lb?-! zGbD!)4ls5uVUI9EVdV2%ve060hDYL-J%963a_}j*jND zhrS90B9ex?NvujX_GjFs+tCBdl6@Zz7Fc-u4dOg~3Q}y0oKXs%@tn?m4{Fa=l%gK1 ziy!q`k|5}OjPErjDekvlgYBDYMmzn{+M#35mKYhh+@2R-$Rvt_R_w8!jpozi^gMkl zc^5b3DS4SJUOPRh#(mn7#$dvpD6kA*hGMB!ka$f;)>Y5XZP-SGgi6+psumfdLrlMp z9dcAD2+~mm3dIZw>FvnU;|4hxhEXxQJl?#CRrCGggmkyCwZxZVNcO0%nrAujJ!EVq zPske?Tw{RBPqZCJA!?@^{H4wUvXF_?z%ryp96Jt!~c_HO?I3zNT+-YlDo2lsv{^6=(~nsSFrf zXzH0{pHza}ao^+$tkw?E?zjFxCxn!dcu+R0WVdMYF7|0$v}roW;#id@jyZkIu34jx zQ0YOPWyT7#gam>o`4bY}h~?Ugro^1-B{oVcZ1xzQd_PgtAYQOG*0F7qq%I4~(y%Yl z>7hX1VcUKoPMefgbk|amfCq^ zldd#8e%z7*6z8)Mjzj>r zu<~7z$lJSGm5gM&#H>MOWUJ&7%6BWeEiC1$u$%9%GSCU4&04>$c_pm}N##A-mNv>C zCq?c4x%nk!83P1yV$?2+N3jNyne!fBX3ap{2%O5+X#9xl*1k}?%k@2wyrZY{a*2ng zH=i({&m7-L%gJ$I`}POs!rJH3L2hx@xTyLV&<$!EfKPLx< z4K$YZ1Ssk>}geF8lJ$h_f9fdB28JPbA1M z?c4luQlvTGyy@*b8s&-m%4r{nj;}!_1a>^vomk|=y?fJ}Lup|2Ucog4Z;7v!SI!QA z;OMSFzpm`c9<527HnZG6a?72Bv}m$*8V()bIY903WNd$quZmsNM^*lSaV>o1BR=O2 z$l(hx)Sdsh)}1xkxNigNa*eHF*lI9~5JLzc$2u~3jk@=!Xpo}f0C<`t8@!N}ZI4YGq(&;_f9K*h?Df>^Qq>wKz>7 z&HL_q(BcG*M&mZCL?X+2`oqe43ZpF+PNFO^W0P+K%t+1>pIZPus4#1#;Q6(_DsWQ6 zcCC-_E>&9Hat*x3V&~-0DEIv9K(m8Tw<}LV*5ECj*$wd)Icb@y;+iTf5b3F^t)NX5G~;JIu@H!rIR=XJ{m6ABY~lue$cJa*Qd@!sFA~} z&i!)G<28*0gczWpw~>MDOH*da5=L!$A0cbQhUObq^YGaR)9VuPY>n{BR@mZp*v=$xZuKe#jXUP-GeV*2`=g zx2O*Dgf^Mww^6KMS{!8C6DBOqX-OQP_4*GU#)A*PsgSNT_FJC#LtjNfirJPJFPb5V z3}4NH>THrE+6%i+mX5%JboPP5up*3EzCWt-&_%k{ccJjgxO6kC3VsDIaCj13 zP8iN^vNL1R9mrh1j^_MdX49ktPX?or`2SJ=9Qo9c8An;z_pHS;_5b6oxI9(0`)i}b zqtUB82X^4l(wQ0iI;|>{osf}JS-KptLbYzb_xP}oq!-Q?Td0$7;C*LmUq?sxlRJ$q z08RJzT5-i#wV2fJ$DYJR@Gn|!PDbhv)j=Rf1oTus={T#8f0VrGbK?;eb6T(-JJXiZ z_`A7ntR4A2)_k|cZ1%`>dxOdt2)|q*w(1edZjXy;+n7~)&vsY`uK%0@VNFv zOGJvhrqxKNdSXtxA3q~pOx9!cbYu3!RCy8Z(BstYlJe6A#@S{6U!L>x`gN7yYdG;0 zMg((}jGCHt6*Ggcgj*44T;V}#TqSg^Fh%Yuqo9`QVIa~)Ub;vu3)L>wY;M2Xv+vLF z%N1Yi`q(Q7t^O0A8?NU!TKCx?I_WnZp}YxuT6}p;8s#x060%-JXRYNlV9nFMs1)9w zTgfI((qdzGuUtMk$T0HLX%-z{|eG62Y)b8@+BrCe+N1kX*N8fn{4 zXyOopcZHKHGwJ4#Pdt%C*kF32 zx4kIEEsMv(qN`p|p`?+m{eZ1uUhEqST|l~ypEft!l*$@ zTIQPd)#&?A4;UnOlRs+3MTUF(@V#899D7;#Tt z2`@;uE@Utj?X@PExz(ao871hsKQqIS+^Y_rg}SkD=Q2XGuv=Wy042;A(t1G zEgw1b9gr;zaU7VP98OXvn^YHK!{i*Y7@}hV8$COgNWJ6AO8{UNl0@Gn`tTn7Q9Dh_ z3Ba?GrjP!3?71(PQ27|!9qnb-#Nla+Q;XMC%WeYmekkyM@wRS@08?=FeBhyJLe9>G z&(wJjd7@XLvnwGChx;H;A|cy|2E2D&%7p|}np9r5?YTN+2X*L`FpjM+Kq<>RFGuDAH^!Z_Sx0c1MVbaZm*K-7Fm{?5Np= zM`y!eIfw8;{9;|D2_jONm5S=uo7|<0sNLw~Ogn^{=mqIT8A!*j(6YK_gYJqDHDP^_ z*^;Dc*7`~-eogU}JhQ(@46#>TI!?KI&k~MBWY3V*znq`?;%RgKDiJh4F`Aofxhg=t ze@pw?8Tk#l3GlV%tdOM4c}&?niT{4P4I2ek7Xavp*>X@d4!E+cw@O#fa#C1dF$p=IfmMyEjji_)wsro@of<}aD4NQCpM}MCt%{_(x#8H=VjqcZ%^yC+ zy*N8h&oQfZ|Ga7Z9AarSxd{>#sNfCeqUdP?mI=@O!=?kjE>cYb+_6V5Zo}CjAK=!T z<0dV9GIfuk!gI2Y39PXw0ZIocJ)|#=Pb@qw6w6LO;;nzRm!d9A^w+)XpeeK-CxNV5 z8N77!lM9|Em&dHmYN2@|k+hzAoS^T{1PQ>%;{q)A*UB{77Usy9G@q_zA{!}D2B=7m zW(-ZoeZm~zf?uXAL?Mn{3_#E6bBe{4)7GB}?vt|j8VSadYrt>>NdU$8Xys|LG=R&l zqSnE6Nm-{9h!EjP)kn`Q;7-enbP^V4x!MniF|{q32{yJ7C-H)6db$$7TUDctU00$`w+Zu7#m+&}H&E9bpAT z19}#0y7rI=uZse97A`F$`;RvZ1gv^-OT`{*CsDw+XuPq|rdCsgx)K0e>e|EnSCGuq zwgCeLFd8sW0E3&hjzxp@6bk>^qkb*Wu;*mVRoq*Zsb%SiGxKf0I-4)aoL&VZ+S+=Y zBHp>te39XdO=YKl(#yr;N>X`xK?1~{P%u*3c#S)o1lX{R6u)bgSl~=%b%-ED|r@<_w~VJQ zI7NKfSTEcI!v;`Y8n_)!eof;#D@rm&+5cE_ydE(AYMNrp@CcQBiDHh-c@c6uw2Gv+ zd^@8E>go>why+gOKmc)|s(_v@F)a7ztewgTJqjyG7*;j=u@}~}DiuBoEPITiQR=k# zQ2bvQLs!IDnywxK9|3jH>A1nv2EASdRc)R+nq3Ijx|V%Vdw6ydK|e~RYTb*^R8Q#j z`?+C{U=XyEnb)>)CtM8#mjx&GK)6BA2mq>z#<*RCIb#lhDV(txtk%|6Hx4(y2Wh7V zQ81NKNd+@mxldw6)kr6%ZW%?DKvEDvb3iG-9bnS-yK--$3Ls;y4K6b%1jD7jTWj~0 znU;T8dH~s^byQFnN%=)YQq(~)@4gE+4mA#;%~3Mm*pP3$3fC!zJUkUTC1oysY(}34 zSSA4Okoh+I!gG3-v_OiJ{l2Z72p)bsF(XVhB+f(Sv>GD{6-)rMeu+`k$)d$lTuxLV zqh5;ct#yMo2gUv1XCk;gr~i7OmHiw%ltpMty>usRd-@kG zyC@DHDjVvvv2rLFFNLNMyZW(&NGUv-J)~(UzTZ|EMEsP*eD!^pba*Mve(Yy5gnS~n z0gENnI_Hk3S<0NR*UY_Wb~Yxl7*&J`CBE~^u$_uLCF8UiZ4gR@`v+AcblaH*oT&9TZPnSZ)2q<*wP>>ly#CT5|bf9N*mRK>StkrDa^T! z8r(=2*dJuO=j0Y3gK%X25$Yk{8Jg1(qnmhkNRamfaCT>N#+p93wy-rY=||UumSO}3 zeX!JNS&TDqWIet3w#se0_zSyv^knWywU}qw)&@n!#cEqJmo%`}A&Zq3*?yR3@|f~H zO$J-)AbLO#En^;CY36>X#OexhIuJQ=A!U;{*1?`k*wWv3+(lmX{CuozmoEG4>ADhk zTY(>}H7jA6XH2vO&o6moGRFxC)IcT$Q=XpwC0$r0 z+Os=u#x3z>_6Ih>34e*W=6yp|Zf%D0h6&qXuEE2ZR0ev zNQ|YK;`>XJulW;$*NSEfF%Zh=26=XlpL(DpJn>$#bp@mO>VL%IIRDtJH`kWd`BIk< z40MU0_~uts^+NUXcA|#n(^vUUE&x@?LpcrXU`JF>%wVI)cL%=N%4J;?`Tj^K+_chx zB2uVeC@JcYzTvkYc?EMYY!Ejd1>E+b&`j`YH+pJ-ihV;2f&(E3w<4fbmP6bC0V1(M zC+zp&XKJ&9cj_R;mL$9D3uW%P(?ovi6_kY&ISC$E`;g7&f~!c}jNJH4x`tV=^Rk*Y z^~GpXrbwHug`$D!2x&HrP;Z)7rcD~||4J7g*g9#$5i(JbFFNPi(5u6}Cc}Qg^^9R> z!y-zmsusIb*0kN)$D296TfZKBiX|y9lu#v`tq@PTmxL~Fp*Q=O@xK5@UmA4`QW0MY zLaW~&)Y_N(YGm+2S8%m1+(%V0CWNT{kt)y0&q}@hC9MMoe*FR2d0L84)lK@AFRVEu z25A0F3G*!Vf4>FSE-&siI#6efPZh4r#?h6*1D!Y9*PbWOSZE$!2s1{e@E7Js8Uuk! zRpmqH?J&^q@!?XwcmQ~&$=M$%R>(C9qrbym(*p>=hO-PzrwpS&0TiyOqNXyX)(7n9 zc4I!{-tQ8uMR=22u{sFI;@EwozYt8XR_c|~!CLClo?L!L&5nk^%w%9BbT?)jj0PH|Jeei9?RF&{odn^8l=K`ZxJDFf362 z@)r!92&ou<)K?pas&@1LgCmmdVUD)P2gB$Fxgw3(A>CM|x0LoEAPS=c)u4-fh;~Qu z&k)|D2W{k^>$h`6k|W@G{w8p6d;As2qSafz0v^R4Ydd?ZL=OQgLHDR`c57aEeJd|J zZ>TXatR3{}&1;+`Dsgc4s&za&ZCQL8+s49^kaW1S{e%R~efrO4@>|K{3h-Q?X>5;B zIeigMfW&_}ykL?kW2!}FCmdW&NYplzRAfSpi1hGzL(SDl-p?6X1J<6${q&YZR%p&- z!Jg|IHXy{z8g>ewECD__b?SMk?$?5BWvbo?LI7SMxSaOoh$t3P;`HP$h zR@D@p5d_L7i#OjF#o8)q@pQA#Nl4|3DmQifuomG(LIZJS%5dEZvIaCSQ1DnM z=ZQ&H^OO%ZhVt9LnvUrV!vn%s2d<)rBDKVQNLU__w;?3{um0K5ZJMO3|NH!ZN6&q9xbWq`;f`xCS5z*ppvoI)By3>cAH8w0jB_n zl{hnCJi`yayrfyCb}tSs5{f!HU@4vFBI+;OKSBg`to$Mpe7g+)GT0{x-+0{Dvgc3f zj2(~e5ABTBZMfP45!?XDL)qv!!8VYAs0nNp^^)DkCOW)BP6>Nv&~^$z_7Ba^>0pGD zkBd3f_S&7Df{6p)XU$S$H8HjtY(I#Hss*qmB(XSjR48lJ_MMfYFcXVK*&DOH33}a; z7{4tQ6wYo&z!&^(`>R(KHZ@%vfX)y6f{vcC$D$mJx2FyXD*`p zq3b0w+SL1VUW#m&%dx3Lcrm)h=96o^S}fn<`pnJ8H`FZ80adn#9vC9! zX*Pa+ByAd8sy|kKUoZ?f?A*1Z{{+6M$DrB}hk|6$vooE-4i{NJd<8g;YaqhhHbO~= zh-gn+I3`siUbv;%c^^n(d67iSzTHBgy3=@=^@9&u<0Anu?`^5Fx6@15bGHbQ1MMPS zq$^5zPSf4@`#t}Td-`_=cLM+ryBbR|$p1}B*HfU+$>~*G1UgOwx-#T0fhI;F5vEuG zbIJMd6H^^k*OdjO*7hc@w%R1HM3;-Z z{WuZAekoaV0|{~OWw3M2SOXiM*5sraK5vGu7G3?@mf*$O;*#djHv&z}b%uC%>uJ^u zyb43|AMf988Eih{kp(#H5RR#=5*6px^a3b)=)B%$TfDJoZTQWQ5fZ|t8NFHI8)ugb zK>a|l+EzkOGueVB9^hcWN07!{(e+J7Z~#|O{q9YB+b@O}@Vol)1#PyLzdwK!cvkz> zm-;0Qs7i`$yM3eG)Kp-azm)?I3rzDg+3Q9pEfjNeu0f&5KKs6(PJX}(xjMMR3QI;B6ec&^c`QNK# z%HpKz2h$tWIO;02^rU5@Gg;P;!Cy52wC|N=U57O=L(X7odK0{19)P*Kh#z64ZD0an z>n;A(uhY3zr!)eZgQ3r4{}fAP7v!W`@Mk>JCO6&EvCI?SriY`tPCop5J$KL@S)OUX zfhi=Ig$Xi(?pn;FY9On+!TS{0phxm{)%67u;`z^)*FLx5g;Up^&5!rz7q!k`kXIb= zdj1X7^9tvrV%fwnTzcQ`;A1el3a_{Pjq&z+;1iTC6)nrqZ3(Xa-LZ72Ry75{3x8jh zv8fgeII=>{pssID(zHP2!4YV4pqC!8tFtAE)>x z!xZ(vaa+Ykiwxt4L0fp%)Gz}7qtTXn$}P{ntX*&^;v(4r@6)j$2Z!3ty%XNZNQQ`v zWV_iqs0j$!!Mb201im^Gd?8NRK=NC$RPXQq#*n?;4-48ReyU8w{b^ARbXq~FiLSIa zH}WJ$^Dd})58*;blsit70p-_npeumeM=xyduQYTvXU|k#t1(np{nJ*{HV-zaGHHF7 zdkaCwCq<0$p#tuP|K8NFz3g$t&bH6d494%{2y63fy)i-d>*ygym4cVIwR%fT7n~=q zN!O}(y{AVv7?N52L*o#ymm}UtU2xp7$J=(~m&UCEqnsaV^DUDyK-1Hr7`}dJp35&5 z06Zz3sm=fDA^4CniUdDu;_SFn%Uv3%ddxGHEliW#R4GvuP@e)MHrgE-^vJ)Zm;AIjpMM5-e{43fqe`tgxo?vSRS7ko zsbr|q>Rb3el(EnQY-_9H{IL^XHx2ru3ET)=>#GcQBTJJ>Djr5KE7^xMJWXtX(~}*1 zty@Y&qH?;*aLu3pnH>Ufyra54`ft)5X$p)@9m3LIM{yhTjPj(deHQrlt(o5fz@^3M zRXrz&_gftUn?pcHFfr1J43O3MMO={Hd(LZ#oaU+468_S7MjpEu@wniQ_ic>Cq7_t_IK1Qe`|1NJ{owsc^5#x%eYX-TojvE9x4}GA1 zuSCY84W)jL^dcga(A%}bB;<^VP29M7it4Q^C6jI?TG370)7PVFicm|?Th>ss9!hVb zYF$35T8-6G@@$#cYN-Yf(gW5$it)>!Ak@=M@Z2Hdy{+#VP?Zzze&fzcsOBt7)cqex zWDhFFI_sNJ8IL~sDbRE*4&!NYq;6TA7N8rHR_3%Y*HQ z2iH)67M7Se?Rl)=b)pa4ep>GfD6%AuVl7&+%2N;82p^yNE20wHAobDOjQSGMg>@({ zmc>f?qz>Mzwu=gAo_5-1qD523!cbh7jy92sHhItgA%ja36H6(f(?@g-Op50Rn}biq z&P(f-XdgK=&3|Va5x9sdz_iNgL$Aw3s$o`317LnRpEG*L56?MeQhhXBTb<=~+5VQJ z)n(kRF|DTy0jMK!lO!yIpV7;1+6zuJqm7?&D%YsY|8~jk;klk{o=eArx5zi1L}Q|d zqTgl3qN(*lofn`nfOoz;yEyjnlPrggkauWvC->|~AoTDF5wD=?Du00py#Ff-SRTGW zOxuBL67fF^b>ZCk#_vcREmRq?14;6~Os%?5rFv@JK+729(FsAK{~|>C%2-8 zn_OM`M^&qLQ=Z)4U|b#lZ3pycZ{sih_&R*8^l?jsP=2Bd7%Pul_s;gp@A>zR0@y>jm-lH(0Xs6YnFW9^^``+&<2i`kW;XOdFS$gNeLoNhghVk571@LTDmd=^ z3TT+g5yt_KL&`Km?&o!s{0BJ&&fQd;D_BT*0XT?@Th0bmUUSdDmrC?KbKbG#V*xY> zDNB2Z*h*JV|Y?5}TW%36116zHaO#)bph-R|Gc!_MLi zOF5QZ5dg0IJicI(eHO4>v;6w+>>9S4{nzf{(ANVP+dox_v!hyyjzWxh@Izu4zs9K) zVLauRW!y8`92|-qQGTUF?^8Y9yv}Jkx-mq!n#tXRVMqL@`(^WS{sQwuv_Tj+dB~xJ z_@B#!IE5<~+UE0k`Gu)1YRq5`V}%BX$@z08&(Ku5I0-qw)n|fZDg~%lt3%w0!I&H+ z_36X>ciSlm)sU!B>&1qagS+cHRqJX(p*F}e;qFUI9V{>7^p4xV$)c{S(hvk^d}y)X zu_qJTC4XsJM+BlU)}yyh;DOo8E+8*50QVjtjP*My0jmX2tK+xA^3KM2XjH=#TUfky zzKG+i2OppT!1*(OnT!sY7S(XI=r(p4V=1;Tp862&-0%}NjRF+izLTlVKM5@m#J&|K z+hSyV1pMcobUm>AhxXh+Xbo|ezaG9(K$Cn0<$9;VRxy!F*puMd{s?EE$(#}>KobG} zyUD^XOTWGxD@z|s1+!IcZ(qIzprJXg5#JU^b1+XYkr<}BrzEw_Mgi%6#vkObPf z9-Xsuhh|vF)_sshJVn45ODI2o+!;qS%^|o>64(eK6fj3+J-}E>|JwaWOv#MpBpo@s zasjcX6i`a;rhr6VX3VN*s)aLZ3e8R8!^gFvG<0b>gmUL8^6hLog788^{F~6z?8N6# zDA>Y8=BM+zkq&r(1#C4C{$5ib|IT@XBsE4-{2SqR61=_%ROEmKjix(9H1oTL0O6G< z;xd16uIJ&-&?UzmhCEL}n3>ckGr0Hve0(2O$~+y#1;jh~1Dc@3khQR+;Riut&p+BX zAE=rHIdfkiV%)6sG_@?o&1C6)m&HHxKW!Bg|7msq>cCCH z3nxL@w$F0}s$=tnFu4*A29?35PUbclBgabBnT5roQDp|LpFTCVT{pbT(G<|7>F>aj z$1qzNifmYA;;z>Jm_C5<+;r*j+i5YPwGSj(rji?FO*`)_uu6ly`X0^xL((S=Z~Dt* z&_Rb|;M#-t_icBe(^B|;#)~H^N^Ls#ahLYjR|yUhpoOh=6yrzdy}*0xb@2dW4$waW zG~(hhvOhp|X~Vbt$I>GZYS3(Wk^uHF)&%>X@ds$pN_iH8LZ`dv(w5UsK5BhFMk{1Q z;dX25p@WI?B9F^^)tQ8>2OLb@kgawSHl^uJ7>Msaw;A4#p#?$H)~NAS!tZ z1{O%sNJmwxRLXTnIcT#vVTm)AkTl!a z+txqi7FH&3M@6XB8xqmyEx_!I?P6hE-7Cb%fag@d#B589o*tX;gS5-Of@PP3<8Q-UzEb)+~)%s!$f9$l;}% za*OL=6l}f>M0{b}b?0|~Jb0KaEzsd)awI(A4+9i)L<%SlZ3yFM@_UeyKfXfqa}gNg zPoWj`0mL#pZ)B#X?Dhl7Da@xm69O$udroG8A_I?VT6{yqhmN1Gzc-^$7EVxM#L52~ z%a}eA+%a49An*R4 zeV*~#-@xB481T54L;@jWR(vL>_YENdw{`Aj0zmVU2WjPLmWZ0nzMFmmPwtO4tK!dl ze*pXx(8o*x{UlrM!9+@{_x5y%R_*<3sw~QvZYuoYlF^V3t1AM)L+alJz0?8pmvWmr zjpf$}z}X8~{^chEUm~yIra9e-sbi6tE;5(pQ!5_FvFI>SB@;M^&j#OYt3J#l1MS{f z51K~LEV#6dXgSzjA4g_S=e5HS6qNu;Gg+9Cggw`p%PuGUe$VXu$G*dyh?kK0s?p9< z5&#Y!4lx*JM)9ST!?c5A;k=N|8-J3eP11pmoDg9PKX3Fr;^8$f`mQ zB@4)xsR(!s<&DZmRucn-8UT&~70AusS%sq!08kmKDYQ2k9m-T(#Ftu=Uo{s(L-gDR z!3JzCOijHS+O1iC#nFYL$UM>e<5d6)7QijS((fmHr{5^?hV>0}$7@M7&w~ zQx+z@8;bvm?+z*{J3p>!nlHeyW#m4U4&YksUtai<2vRpFRkn%X#3 zwZw`|`zeV;y!JP)-?IZ}!KB=H3WkXkl<3y^l5_?uMn2jT6!f4`e~JE107X2NznG>& zjlf-uM84vnoU%N&044z$y>;}xUNsPkQapiSz&3mEJ`vW9L_VcFRyHp>;Rf2OTm*HM zMuub2Wbt`Zmw7?>KXyOL6SaR9ONDtp`>CiE5E@;2X0BS!du_DY9VpZGD^jBpKFJ8t zsuO5L(0H$3L&DXgQ=OdUGxl6?FAD%mB%`zhZ3Qhfo z@r%E4lzjvPVy5!OB1hHgUM2er{IUb@nqGzf-kqID0vb@~mh`eHpdClfes(-`JQ=Ay zbeXieUrGby{kT&x3PNQokX!*xZ8bqx^)yVQAnadfI<&G3>=2aAjv95%RW)ZSWC$P| z#l^=bOD%4>n2HoBe=z3uffv#F$|l>1;V6qd@_)Smi;;lIHoMt`?k9+@X7-5 z0>iQ8y-Ts*%4T7JnHwUQcj8{U}_l9)70Ul(DpAK;!OMfLFNekb{1YFc(Q&y2^RstPE(i_DM1i_E z#2J_cXx!U%W%TiMspo&PW09f+yozh4mf|ub9Z8=;u1!9&(>4uW0$RK8`txMQWtBpwOPhOibuI5QZp3qai;?vTf;T4EVD$SkI8tL2E?7=RQv-qQxKPhhOYFXf0q%X7G z_6H>TN&P^SjMMCkz`jEYyCh)L97%TS^d=crY{}+v9uYtjrH^(xNdu4vBuO^=!MKI? zL|@!Ss$nOeM%00VwO>5xz>z|ihDe9IYIwj@i8+5GkU;%zVk2$eK&*QD)>>x$dUF33 zS$3e8m&Y0kI1^PROBatU#;eFdFhPi>i1J=8{`4wZaw3k#n2Vf z=6@NCJ03obBd|1Zcbn3Q1ZO=+DI>5z05pjIdMpNmw(n5wC|c3t;Bxy(v@UBHvVRyw z`HN)-`p1wK+dtU~c)Ad#q)z?^~YkwfT|mCGDm6T`|wzdoWI80|Hsu^236U; zZ=iH{cXu~Pcb7<)un8#%NeSt05D<};lH7E6hja;2A|Xgi$636;^FJTXjN>rO==1Cq z_kGn``@8}GNuY!*$9#WI>O4NsuZPZV&aiy*iyJo`Kz|b$))qVaIoAwRc1`hqWK*g^ zw~*^!?qk#O;}jV1aBRi(esJnSNED-&&7nh42ry@QZ)oYU%|@@OwajkRQSuf(Fdi*! z-Owb3V7}W_w)yuC`itJs7CU&LYcmeVgyjsH*(CCrP5^zwzH{0EB&*#K` zeJ6Bs`GCV=)q$%0Wh@bS<;u#}a=hNE8Qe(`^rPEm4vDLGVXn42VTa2~1{R3J|?o2+}Y2LNJp(`>wc|4WRs*P`u!c-w!vjiLPj+O@{l7&Z&yZ zb)2-o0V6f@&u+>%IJ})WwEjOGRAwp67-#8Aimd)~l!%^nApOxL`M^fFw=dEyz(>9i zr6JPlL1gZZ1#AHlN;FIO$2&hMI;#d%8h|tQ5>o9@iJE2}eq1O3LqrXa0Y)54c<_x& z#oZfluw_!}>`klk=JMv^X^y7JUMq;GJtiLqdm2`^!@vL?7c^nA9YLapchC9pH<6P` zvVN&n3c(Ystg91=j!fm`o2tSV*1EZt>&CLy3tzyp+RWZujKk_n0r*qS+lRTe@4@j= z{Ud_<_|I+tzLk^D1Yo462syrK>QytsU5d>U*I}Pe&=rd}9oa*Z&h~;K6a7C;%JI|BP+N4{jT(SSYz?@N!|uutn*09L+KB zltpqPGEYEi&T*2B;AxEvWd&WeF%W3Y&Ss*R0>wJr_EuW0h1Z*J(M{WL5_Wdso_Cnr zyLI<;E^d+Y)7XeKlH|cE&QHKbf3DTc#qn6-HK_WyOJBtk6G3>1;pqjzuwF+a@rwHV zoE};&oh6fG_@-E{ESIv~#%ITOZsD2lt@hGBulpk!X$ZldnRV(S-mAf1I=%boeZ^rUypEt8}H$be<>V{&Z%n}?s>LIYvA_j4? z)MaoS=~EkZZ0jIMGFrnISvD1;Gp0*ViPn~=ty@;`&1KW^DduWO?G@B*V%UF#BGjs1 zG|w0C&&B=+5uo1~pQ8G!KoNL`ou59L1XdvTh(C+*O%sV?_zjC6S=jLkM#O-X9VUsv{J6O06A!(l%LWO$p&bEkCuFO2!5Utxhdi?FcSyE|<;@m;T_jwb;W-9x99 z@_mX`2i%LWDWJ0exuu-0Rvu!Ir%Cf^z6^i*TRl=6fL_H8PIWQeJ0A(SO4dt#9}XOx zVx2kqe?<)D37_w?Bpby?7ri-Mc+<0^R0V#yNl~F6oB>*Y8h*XPNe-7yK*S+$pIJF z0bnf=^!9kHQ0+dT1iOMJd)H|@&j|0EusP$1SCtz&p-i$U(}whO4@ zpEUHVFM3ts&|%zX1n9PQBL<~cNYoR@Wm68kpBrwB)anfaf9xyJl3ck`GJnPZ0cLHQ zm0pns=J^PJHKt^fZL4xOe(zC&9N3xj{%Ao-lbgSw=P1o`t#O+USoOa^6R~?lkw}j* z_QEiLUyL)Ew){yZcVG@tQ0aE5ZntaUHTGJDb;-w-c)Kz^+YItFRDC($=|vjPRWRx) z!#MYQW1k*!PlmK4B8#;TTCJiaJ1=;}sjx4PR?uOFZELTqpC$tp98K8af?;4lEF zZ|#K+iunEI=vca+7K0%&NI5(D<*wAsMcS;2Tz5ZBuB{*od+yxiyjD?CQgTTTXE4G0 zkc>L4h>#WZ9(DC31q=RXHt~^1%6H9H_Hj)uPhZ;-XM=CfKP$7<|2pYiW&ix#T9(t+ z)Wp9s+m!m2FV$nFOnPltLo{g$2PI+<2}7vA+QKB=+T?glN} zn+~kUg}784XTU$P_1(LbczL#nl~@px^CHPKHtc%rN-hiUTa8=qxDhjL1EHJCE2;6j_J8CH@G$qO zAC{aNLl(jBnNzvRVta-6Oy-$r!U< zik6jo{ZLA!$Mto{#Am_l@4}s_SH@Wr5lw#U<{lE|6EU0ln=fSignhHAB-bgY9qN`( zu%E86VZbhroYeXtd9~Yib@aV0V!#f0FykH=YF`j5G;IhxpUO5%OYhVu>1>I6->Fb^ z_cM3Rv7qK`t?zm%pobt^sb-HfN)m7v7pMA(_X?Z znrrGUNEHA3Z^}+p^dK5~rmX@0z2uWb;N#86AH!o2*AbL~GP9&$PTu!{({T0c) zmIt4IGIsRnqo?83kj2QvPGDwC#1rMvC!Wc?A_GeTERLP9zj@Ulz4Za(_EzCQq*}LP z(D(42l+M}tVMDw~`xRol`=j1Pyyv;`D=@v}Z_EcTJ+aT%evYG_EKc6T^^kPYcXjlb z_}rxCZe(UlZAnO~qkv(Tkw1*N?8myhmDgf$UH)-WsWG{hYQKMe!^0<_Qv>f%Ubp#I zcwKR*7;EXz*$QGrWQ5!K;6#X{G%Ur_hKM-TtB>TpO?6qu=8DqWAqY&El+s_)fo z>MrmqkeQ7^(qLcxp=mg$SxP97vMkcffeyoCTe;Vv-n*|B{yT-_;$NXlJ2F`Vk-k;O z5~E(2D#{X37P;8MQD0w<(lo@qj{|ZwT+x&_urml>g={IfK%c$IgP(dOV*4U5pF|w` z+s|fKc+7J+D45qW^+0CzGnstS?lC{DyX%c&q3smEZ_bscfe*9(>dA-CkeW$%mSZcS zEX<)uqQsh+eUFnHf5XIkFW7AJrf#kz7i<{x)&}Cvb{McFj>SEP0JnA+^v=1}Tx+<8 z^QbMC>E1cn^P>BBNz7@@Ik!lc=FEBPi~c(dxeZ74ju)pTM9Tc}*E?17(=dD){~vc; z-?9D8|79;rTjS+kcCtqW&1+-)$Z9N@pXOSwSWB-K>ur$>l%U^L@z$roYLproyXr~s zTn_?E9IX8QHZ8BE#l+lzlO~b&T}1PMTCfB9{LFDUkgw|2u6FJ_bmBMh{s>wqcth@n z+Hj+y-Z1-g|2v+tYvDe&g4$tpJ#Am1_iz8aF#Qv(Sm{^*s zAr*~>P3_@L`QA-$vM3&=uO#MjKuUrydc4AE=zZSX&C27zNyg#mW47|IA#LY&iBSg9 zTosoSIkuDTgkiAmgMIwcgx$E`oJxY(LAbHbhCA-ZkM_j`gKV7~5)x8}DKAdJ#UidOf zRx7G;5iZdvYEvUV=eT0My?1x9bBLnRBlF&JsmLQDs%8Esn^_gZc(3KaL@&&o-ja^v z(_6)F`6NzW5>b&7iTP_Er53dQlzt@mqfrjcx8!Fb3@;mI5TUcpP>7v~|M_-(JHSk} zXpm_!G-SXv;P>Bw{&ALtAHpXN+)0jDT+|r1E+>yvMcbZ&nU=UG+B&=<;}eL~v-_Uz zUcm!Z(TeEQtE0<^L?(sH^Kpg(`tl9l7A*{tf8K{0a92b?PHJ|cwVKRhhz+v*%;rDA zHe-3SY_@n4<@U{=5l<7r?ZXB^!k5Pvtw>s^L~EQ3!NUw|_h$y}T2uD!^}qbu9?7yf zvGoQfc{J>&md|iH>wfVpRE-2S#nlKX4u*k`huS&>n#$?V>`A%8g|kktbwgqE7dLoJ zwub0H?9-BLHGkD4zX=$L4j%d)5|fBzEp za&pLp#anZ|?$2^AX!`z+X84Qq~w)VW$TTLZtR-F^OEO!`RSEUwk3#UXNrN?WI( zETN@td~4X7e|;QHhPieOgLKdsh$&6 ze!Q_AdPR8CY3J_Td!E=H<@*Z$*l`!q%!PTHb%O>I*(e#wESifiALNZ47;K=~8J1b< zfyIe-D#_S&Cm~Mf#VmxAV^~j~HTIrUp6kfL$Bty8>i%Hqk5jCoCvb0JybD?lxuT_g z;2wt&47q}#`}x&!ec^RxB&7JFCRBJ%4-Sktnf=q~O2aY)$-~jhImzdCE#yN=0}V&8#%AUeVI@{0Px?6q$Hk3UX(x3%RPzg}#%exl4N^SymHK{+tqny9Xe%S5h0_-uC$8fZ5*A$)XSlV$|B`5catanSg;U_W z0gOm(c3Y`Wu0}*(dax&V8c3Rb$)g#%n17W=3n{g+lu^B-S~cZr?okAVsA=v zjq%3WKdkdq?RwM?(P~z1n8&SOyA%)aY=8ZO+&Ke55C)^d3Y<|sxu9pG%lK2`TQy5iX4nLo(a+$W-B zs?$mCg*EegOaJ2wW%CQSv@4P-JH9ZrzSns@wGoTC@GUzVL~4_J?|tN&-oN$+g%mb# z9;%X5^9ZqMK>*u~GSNly%azdfeW+2(>-Bi^>PX`f`6nOY-e}V6K715rTOv(5M>wuT zO|&y_L$1H^EB#zD`Z%!c*hpPDD0r+j5;!~V`I|&6*BC&2318qhkGhYc(?gV)b3SR)Z%1&oF#SFlj4Xj zMfHbEyh|Ud0rQ+dCa;P+B!Cxu9>%$?Q$tNKLM1Jkl-anLwca2a87bZ$><8irI*bj^ zL2`Gs%^iE{w4`E*pRR~sF1DjNu?0gj#i;ZGePoknKcvaZ@m}X%wbOW!)&`>(-uw~} zwrXfWC6beHsBd8OLo(t*4P1(aW^OJ&X(j4z-&tn(N&O&iLhDQ<*iZD{R4k~e9Q#z& zXRsI<-2u}bfxL>sene^0N%Aoyhw?{(*ID|~J7HN&QkWq9H<2`QNO)zRXyC+$f)h$= ztbPh37~MG!7Av`4Y~ji*Fwqg!Jx*B>zs7CD09akb(agOJ6)cfY6z8F{it<(JB>E0- zN+_a&D$V2K>}AaBBW9%Kcu^+KYimtq>k(o=&C>ffS6d`PE*SwM+_)zw8jkv^@1^=} z(fgrty!zIkQRJ%lH8)di@ipboIOUAZF4F%Y#6uXi`>RR#8?Q&@q@$hFqxG%Tc&+!Z ziD5)PQ}_31XrW5}KG+*r$^&E{S8h}C3Zdmsg&aWO$vZX%?;V525mc7OPrCJb}-esH;Biq zFfVfU{IRl3@85KpQ@4eAfA3<8f~gi3+?ZO}MW`bNAknRTms4f|N&mX1>PEnL0W!QE zDPodsro~$O^e6|(pm`q^#2AH$TT{0hP*aXW`Zd`W&#p$OPq^hi;j5{Ifbpl}!ep7x zR}C#3=q?T@eIw@9wf1w`M5P43sefDAQG#9^pJ^wJL%Slp0Dgd}5*4nFEU8cw1FdR9 z-y-RX_4Twhih*LAg@t-Mx>35?*3!Tt0_CQ<{Gs^5f=mD2oCcjWd(iA^oDkI;djtCC zkqALq61!k-?Y3DisD7jOQsj%5d~wRg%)C^s*WY4AhPqzOh*6q&R_8cj-jzmQdyNF`e*T(E3_AVeL9IB{x+T zuh>_@qf|kJPSf9#aj6E1`SQ2!z-1PoPYf@a+UP>|LcL(m9q==bMA+xIpU0R}rQa6ylpYL!MW6!TfX)wXer0nzefi!-ArvI7P8q6+D@d7Am%PFtkrjeQs<(8x=JX z`qCtptddl&^8k{e)8OR1hFX|DPS-_FXAwJO@6}UUnSIAS!Z=L%(Z<4B-RC0sNo6j{ zw~ROY67t1tO{S87P%g9scXQuxehK|gg{St)3mN~KBAkhF3z6kmQBQh-(KF|t|9_Be za=DKoEZn-Nx3ziTN*4ui;7jNtBt^3Zh1oALC80uE9D3u&ZtG+N#er=TP%I|OcD(HU zyElAyom7nt-gJAn5hG{qF*N3TYX-cUO@BIE;gprF2YZe&#% zt59cRvb_bHN_uOI48=-9r{N&ocdkZU(S^i`x&l~99uVRl8%KOkj<3+b8%f?>!o~hT{mI7^H2;Tluid4|;^zc9d`Wj{gWblB zc+}WVL`Ng6Fmu(}8Z2g5M>C%<6;~EHlI`i$;bb-Skg`S4;zLGA)Doi|w30a*5l&kE zkTNRB?DKa)KWM;Pw^^GHS3Ac58ikZRUbHQpcgxg^Qp3RXFGp1{ucC&7O(pRbd4NkU z#bZeGq;<^{!@!Kcm;dGRGP?0kXL-`xB^v^3I>BZRM_3+5?xk&CoM>H)rV^z070&6^ z?HvGi{#+qlW%ee-?2cHjBST-1)KJ=|4^N6iAPuCKWXL)rycm(O_pvW_YaTp2Nu^=T% zo?r+N(0j3_(09jg60wiBd+U>iSFXkAGJu;i39PX@%jyCnu2*T;E+6dps;PjmX?2t{v=tOSe=SB4-te;kl~ujG+kkk ztk-w)42uDE;xlHs8re0CQ0NHN+CuH3(ALQs@znJAlgP3)TSB2(^_I_-%lp@Ufb3GN zox`cO>a|z@1!Boq?mfcd5ZC7Hnm4Yd?om?ipmfigKD>JVh>FMhfjM{Ck^J=jk$C#gc1oZ9y4!H!?XP38o)Z)Xy7pvxDwZt zcOpGJr}*|mxJea?CkB=8PS<2bPT=~|1(U5A`Mok*&73@Tkf6?q?pP*m3V17{7o~6tk26trr~qwf#g9?#M*fh+(H1IwVYO z?nWglNt#7P)D{*4hUz^**7Q9PxNu_!YHSXO_Ab?k&`Lx#|j#)2KSaAET#hqz|wyp-l3 zaN&;1TQT8Q}N5{dDh8atVml8v3;U2X3>jLsAi^XRDXWK zCLG!}3bx-xxS%(U4N-G(p_L!pJG~ng?s}LgsCv5J-i3*2qS~%N!~VO(?AIpa_e%(> zmLvc%L_NdR*XZ@^G9&Qo33xk^@_Cq1@6wlQz}s7LQqB9^86bnxvmvP-K(MP1_#7y6 z)}QDatNofQcH6QkqZn?Ul1c>2EKRIf?8sRVaG_(}kkTP8VN_J^4Cp>CR1JrM&LU$d z>G(Ef@!DU~R3s2qKZ|gpYNw#8Yrzi_P*#Q4QlLZ^?-aMdTY0ZwZl^edR%++zM9_wz zLZ6;SLk)GpiLhlf)u@X3+u}75fKt9KK}HOt|8gvGi7i5CmkBtPv13QhJM<)3|0$bl za<5N1F9E++Bii8feETW-T==b~0=wlqyUkT?^pyZbJ4dx97989*_0*~ZprP`MTY2nUND#-iBn z>)$`kr*>AufaJuY8e|ghRU>Zw{hJ+QoG01RibKuqqcNCT?ayaLEVxkdnj#x)W6G?4 zE;%p2JwbzsHH)CZfgPg;RLw|0Su6vy&1NONV1a#JHK~q`z};fp#&MveI(uk-9g)Fa z7|>%jFVvL5F|24aS()BHD)n#eamSg*?CMM3F6f41>z4}@DB4tBcm5xD?>C>4xJP`} zB5VupsSMefkPQkK3KU&fSCGqXb$MRYyZ6qo=Do&AZJ>yX`i;ukX*m*nptlsy2$%jE zkhd>;0nEo%Elx|ECQTndVw#M?@^nomMqY~R&II#LA|-AgBI#QNsD#q%la)E?)bQ5% zu^~4t?{JO$_w)sO3ll48xkys1 zL{z58bm2`=YC6b!x(q`LYli_Y1^qY;Y=bo6bQD8Nk~6a*lh=>u5~-H&kgH<$Q{Zmu zEQt#b#;V(DR$@$~a`iTy+ky@Ekt!3sUS6i5o1?zBBn};`)qVkKA9Ss}s;8?sId9DQ zRBtELt3xa0L>orMcQTlnff&1ayGb9|mY3?E8_-uEX((72@_`W3Jrv9HAkOYbI~sVi z9VChRhKrPaxUujkL#ljMOe_y^dfy=h=P#Y7&?UwbINX|EJQS^s*IG{)0MOB$cz$=~ zI%pty*{Un#)Ony4;Dx52)$sMu2xz6iH`(n_9JfTXZtmH_VA}RHU~xXN>VrSBSwYtq zBeNEp+HfY@)A#Xc>*s4da7D7QRM| zgC9?i6soy}$uBpWV(*N&to8PQnwjx< z%Gh6UBgXWit*5T-1IMTNps#ow-%I6dEyrk+<9nwn`hN&srQMq@K6outZx;{vZpII1Woog3kH~OoFY$`1SMFqwqbqDW>qRh#b=L6&6lTtD1P|sx%{vu7F%Z$5=?| zEQ)%Pjzu*uIzwLvUIuQeKPkC;g;Mxi_i+uLOz|j2DAlahJ?0z)o{ze?Zr+E#z%@hp zJhLHv=Z*OOCk=ipkoIEKb<1_KeZh1{@tSre7csP{LzuaydlsQ^P|bIVsMLt zm>rijF7tP6jRUaAtxZ=&YyYduzh6vAmkU5BXQLxECVLB45E}}v_ce9$zRvv^Xls$m-hIs>%-Y^<*YuyIF#TO7 zLyViY)Zey!M6HrU@s>VzUVjXM0(|rtlnJ?#*`B%{_epo#p+0BX_3N{98qTliZ7e!u z{A0v*yrvurStf3kR|$F{)8jcD8LjcabbDD?YmxQ?6`j$g$2e*=Dfm~$n*0?{mz9k> zuj$I7L|iDP7V$p{uCW3!U$`=-%^p6Tu&5<83*Nb37I*w2UZ;d$!Z3jWgAPP2aL~A) z%LW#xu&4INZIFzYyrPST52B?~Pg%o^els{wPxmehC?d_1YD|1aeZxhy_DI9+`Kmz zYS6J#6oG+_Q_e_qFZT1EcPjpK=c0qfkzwrWG^UM0^`b)gnu}3g_vc+<^R@$05BIt0 z{^lHH>^=`_PuDXc6eii`kyYGnfQP~X6#I0a`1F2S&g$1}U%UUw&);j@2iKysr0SP> z!d{ApdT?f`uwiT@JZZ+vmF|g1R&a#a5$!O z;4)v#H{>dS9rm;INQ1Y;Bt&(WUx4%^Uz%Ft#?Z zh*jy?iBid*hob)C?@KuzUYh_qb9K9ctIf6efa$$UEJnUN8 z*~u<=I8@HA#tW1epszljf47kYZZR5EHUjEH;Rj)%gR8!0XQ-v#<_#kd!GH)L?5u%F zNAgR!P9%Ht8H|uL5MibZqEn$4!C&*8Nmk$K;n6|Z=%&4 zxVcOE{?&3}1?|J+!=H>USss#p?5Eqvse^y+f#xPA=(`TgR5z(g7Ud>OZ~v|?L<8GC z;h~Q*5|T zl-AwCuiyLe^720`aCy28fXuxPOB@kp|0M4e-5q@SM)^XY^djyY zyZ>`%C|*3cf1ws(T$0r3w{Z-0%h$F#ImsF4 zIGz~?xqeA*0}jFHS578BA-vt)P_F33Q7x9g8UM1HRt<+d3go(~*|66YANS-{2P!aPk4JK!?t6I*Z{-<4K?$=O_NEjV7%w9KC<ZMWs@$oSi<*pcM>W5SYoH^I(( z?o$Bar2`CHm3Xyr>w_&o5DM&UKtzGVZ;0WkP>CC*-b;N6aq{(1KwqR#EN-->K7=$o zy=}M2Rt>+|NBTG)^tO#!`fg{YaKrpMk$Zf=nJ^^L8cx=7%l^H0-gZCIPcA@+7#nA#7xLFCV$Y7D84><;V&a!G2Bc^c@oL| z?RLT(qc@rc_Zy>*@&$f6Q|`~a)vC+u3!YXa%`+34O{x&S@&1qW<@(x3wZgbaFL9PN`nDh zA4hZCB8nNCB3K$H5)#46p$Hrr%`58Hx3aypw2`eS@B02HM9`2dFsa}vs(c%(7}HdtGMBh9&H<3|+n zGf>0tIL0BDK}=e)(|EzJfHifB26!>ZVf0c>7BWh>m=z+cn%q#Y%F;?XC$4j-bgyYJ z@WoHB1VjzU+Elv3c#(Fh;NQ>;{oEkQNXvq3oA7~-hvXz+li$IFc1 zuDRdip@T3+3}`2s9fd+NWDJ9AOd-=IYeki5+nl=}Ys80Phy0*PeTsxObb>5isCwvN zq;4L#A$P5j=aQYLj|t%I2T+zqsIcfu3=wW;n=kd@tae}7`9^U$JSba}1(%)HI*iF2 zBH;D^-IEsKmD6OwXVYBV7_rehgbM=DFq%`5F6@^K2`QgfBcAqu%}Bp2o2RS-y`Tul zRI>XpaAmyeUy%&vdTLEZBPLwcey`wZ(IQXu zD!@K2N400}tL#cD2FKABwsUyz2Rl*;kJit%e;DZW3!LniLtXtN5OVO@RB6P6(L-}B z)y8tp7NdNo`DN*Tq0AI3+H6jcm+O&jE_f9LbKS$%DB38*kH#Ri66PFgVlZ)8@hsQT z^*gapO0#7#(7!=sBJTV5{l-A1OmC`*Wz?8CRmDnF#AvSJ`&$Q*rn1;puM;aGQ@U8s zM9zE36GZ3yWP48bhM*->hH=d+nG{3mQV}zF=4mN&Uw?ESNBZm1JI|T$G#o4bSS=)z zvJ)FtyJ@F>IYBKhHj87$%Bk+kzx{p1Z(de=o$5r+ofb#*b6F}_RKM-Ny1d8yavQ%9B1>)KaVK86eu^}zz}H+sbLjgZWP3=2T-mI~u-X&Qxs zMz#TJeCmvVB=%Gl;((-BHEXxOl?=tVv!4!C(i&bTXp3mqyXIiyLh&LQh;aJ1)Suki z{Z8i@vHimFWxgCr!~n05meLS)E750wOD4rGZ7`*^(V@D``i|o1i7xn zjE1kOLE8iRVQWjIVd=c_RUa8bpy#Y#Q;lF?ij01==2aU&Y9rw@hS$ywnNqpfrP6&M zHbG!v13Y|Py6Xv5qpjcpaEeDr0)hS&dh9gTfw-Rlo|&1JrrhQ?s4=F?tAi^1fV-k>O8-kzjBd0-^) z*IYC?@03=sU4o*DLdD|Y6^1}@c&{)Sc8>)QafcM(YfjJnaW(+w&9Jg+2uc_}zqLSZ z9I8B%CGT9cS;Y3Ij_g1f(5N}zcgN^V?M)s3s=WJ*4Pq^)>Lg8u9}14XDh83$pW4FV zsv=KONcd%06rQh!Usl4dZQOzof8?21j zGJ9G%baw2lXNP6iVqPaMyUTrpJ(u{>*-!{JVw$)^^2HLP9M!r%iDI$-As_g*Q}t#I zf2cyT*x~O5uinbP1b-L2!5#(iwSq&9B;wGKv5*xlxCeWL$T9rpmoBzPiv!oTYCtL> zm3>7nihK+@H?wjmQftHE1w!vA%||Q%l8vteB4(S)yff-&o^SHeg@$IMCDS4}$p6 z((a2euqC6+ROgeqb=V@M#1B-M@*fdiObf4tUJh1*D$Nq?a5;pRu4J$+atyU0(DU)H zaL*!Znk>S>wzjZ;)dSVQRE0-Sn)&oc&Fat}t$dZO!cP}IhPCULaSSyP4W0fa=P4)~x~I9^<9r;N>YwkiFqN-l%0`dxEv+c{ z_Qh=93w@^@>k`h@M!fDb2SGU!($u9Q9MwEfBqKjibID8MwGo8KHz)7mS^FR;Ol!00 zA!7TKHK0{E=;iO{i>>LuszcMjo=C{;I5o#JlS;Jub@i#;Y`N%)o1*|dzxj)J$Auej z$oBiIt#a^=cx@QVwNN)?K=Tka(x~zQ?)Jd^(*Jw9PQk3YAT7_1k))7JH4V<85)J%a zpU^e=G1G&{DNar(8xZHqk|QVY zlm@r}McXx6^coxPXNYUf11XrhF>^m|^Vd^pdef>rNNDv5A;#r!RvZthOzSng zSWe>c)*|8ZVRD}*I35^e^?(F@y;jvl)P^COIczqJhubC&BAJ@uYj^@K!p|MrmHpUi z#KLQ&&j>V-s@x$e0K6MoRpQgRA!%e(GkySVpB5mX9vbV`KK~BQjs$2ifI(OZMVg`aDki3Wu3K>qS`uHMznPY5N##S0cPLV^m`$ z83VP#;)Gym0_?!JS1A8JN3H!?OQSI$KOjg_LzdAvhVxY^eiSWx6vf3s`A}yRY`ic{ zdmy1Nzw`aWf)^8&=ci2&?`n;<3#v z_^u%QtX#r2j9$JZN2N>4*}ADw>Hgwc6`xmfC~h~YwDqd=4lL*#AMpj*92Fcyr|+n4 znf$b0m4rhRf^`N0P4yD?Nx5x9ek+{)=0Kbt!SE1bOv&e%8R77HaEYZ}sx=}5_*88z zk>c~dysa5wyl0?@*Fo+WjdQz<*ziM*R;>(cjEESi3XjpJOZ}d5rm zNBlf&Q!Ji#3qCx38fR1u3<#ROoQL%uO5fKYcTU_8>a7K#O)otJg;ahmczI(8BS^jANBOTDNy~;@}b{{-n&H z9(rF)$0(loYoKpx>5c^D1e>noGMAjPo&!j;)PKDm-_!NP*tP>Jxc zg_ppco2s6nN&QYk$XsdE0uqqWAFCLJ>HTj zzZB3_CESXh5pPzn#H-K07IjKTvTOJq_!{90ta28etyfa+4*xzSryj2@*>L$t2}MC?!gy9A_q3e`-A$}w%@4A_ZvVQFy(O6 zn5D$}6{@dQ32*P^S))0U{k2Zvr>#M4t+w>}vu<2@KP_C@yY39)xBC;G`D^6qM;&EFgL5J3)eH4||)01F%I~>se|1b+oE`2)s>F zT)4($@^yoFzggB##4KA|+k8kINpqz`0r5K9oS7FWTLt=dQ+f8`3eOEVHO?SiXKKmG z2Z5|e^HAr=l1?yc?V40(A>mCgiRNXm`h3QG@DZs*B1rBHNYSD*$g=hq8`)hDxDdg2 zR25ew9O|6>$63p%FbDERz~N#=mj+RxO`s#^>%;_pnATiJ4s<{maZ*177p*YcMo&n8 z@Cj|2-Z@O_pF|0!_E4oa{^Yf%s|W^@q0VjEA)i2iNAWQRn=a2Queds4hQB5zSTC}I2c?7Ki;_2^ zhNS=0nBwiLlWC+2f@Z#v39u2c@oP%6VUmQ|RFy$BS&3hdkZHJg&ceAEn6!*B=2iXl ze^~(X>S6P>Ih?Ib*O$mEAXwVeW^U#+%SyWG^LJE-0P|Hmp+gK(R!jzmEvS64%c!9E zEk`z=$-ILY-~i4p2joiV7!H9Xvnwi?O!D1cmsm4J1r#kN9)2qNX;Z$9{l8KG$TEA8 zBEXK=NxW1DzKsVX&Gl4oLz|S4BTBACq{;19Aw)6OD2zjBtds1IDXWk`VjAWvU-! z^NaaU9|`|CWLOxL`Oi=v_r}X-u=tsL3Z=m-bHdB_u(*6OwLAzmRw-1p2{)Een>jGX$VGaM|1a-t{AdW};1Ds& za_8yTb^Vo@%#|KL+g#HEis;|+8DP-Dfd*$T_P}5Bg$GKSRt)4yKMC+~#SzoE_Sb@> zwFBLQA_x%$%8XGdX>8bjRC483g-bR#C?U8TgRWq?9`X^PJRcHJ;--+Pg*zTWBh>Dy zLaMJ4#d1Fr+X<#Y|Iaw5K+@oaWYju&wPKIzfG<92`yd4>3XpwC07&Sw3V~`;{X9z> z-hWKQjru6epDmpPZ|I%F^O(6r$LLqT<5~D8li}h+|f&JSAfmH;6cNxLOvS^BFgnw^=v|qS2C5o2tkExV&CMAvRv4&WQ zn+jw};erjmGFW(`;a8axNwozyh_E?2!s0>^fSv*yJI&=qsx||x3+AQ=Z6Q>IqMFa< z*cpnF)J)g1WjfuPyfR(i_}nPCeqjX`MkMa&wGL#}REs@gnfUSqx2)fMpKw!X)u+c$KVQlfypH118ez?yNTczPf&R|7Mh2h65<3;GRbC27=J%ytO{Pb$EAaEu>PvleBp( zeBq`1uxb)RMz_o41G=x`WULulur^*#{pb(s&97hmYhpL46NU$=)#N#7xxrrR zw)fKWUk5p>n#J?}7^0dNrk@iC4-yfhlG6Bqhcy_zb`_C5fRb&f9gp99U2NW= zc!(z-iDI;$vW@p#dcGVz$%B0t)($+T80te{_YU5bSpN#0Q2IQf{DFfL7aGQh%LeVX zalG>#4vD@3*Jt{Ejxr2FF)Ewozh!(r{?X5@mP7%OceL@x2(i3Tnn4^Y;_Qu%Vk8J( znGR-dlA6qF02VnGh20a^i*7xH^3r(_`69KWM0Bi^0n8ck1bm8jx4VE_0WlHIG6B`A zrr>TLUkD=}L(fAiKgm}(J<3pa+7RQPkJn;i24Rw=kVvKKD ztrv*o3FhJCF3MdaXH>VvQ};eY1&o;3uF!D!8Z&yo{lt$n2Rwa|d;n-rE$Vz%BN# zocD#i!sYW=RUz2?4do2$s6?tyz-x>1qoGT$af_|F>Z_Uwiuq1ap+NxpR&vI!ap2aaRTw81k; z7-=L?g0lBq=*CJNnk)PVVf67p3Xha4c8}oZRvF-`s6yg|=kV!&>PBQuNb|s@o_eZ7G zD|VKkhRjk*yi67|d`E4kjdq%M!Q_LBt45>zh4m;MJdO(7p>w-HR%&;a!eryoAON&f zKr6rPMZ5KmZV{~*Bp-7FYs^8!I1Rbw|EcM#!=n1WuZJFbXe0!N?iK-QM7q0MT0}u4 z1nH1YMGz4YfdPhYkd{WeQ{V#(A>Hrc{XRdQ`HPvk_ndpqUVHDg*FN))sY|eGo#KmZ z;$ur6*g*q1^$OYZmt-CgLOYWlBB$#_iPv_kW=0 zZ6G|7OP;?G%L-4IO%xDY-2}ZCJ_1Uj4w;SYa%xk5N7Dr=O-BdPzf{V%X8+PG{hQ@%)f~VJq;~ z1lXI<{S+kq^71eUBTCiv?fE&|yT@!Z$|1>Q;E}-qTf=@C4Zcp3%)~7NLUxkX>*?G% zELFK!3nIBy5Q%z<`ZVPEq^?s}+Y*6Er=%OQ11mw73pwtVW}hj4V(l>=3SvoBNhe<i`dN=`pDy`&Z~o%LqD`4}a+yAlH$R>{ug+a>G7oDH`}6KI zA%ggaLYc6E z`FMpO(IPFA{r3q)V;v^~^6dptR++M=V?+raKOht&TtElX5$8LV*KV*afG4F?dTvw| z$M~#Xrbk{*0!$DS`s3z)j=1=8fG`BXsK72xKbxcTC z4^%w?lujre?#v^7B(}l_|3D*1_|_(@M;RYzCUv4GDTnDA&OzJhS}fNCYa8{cmF>2^fzUL3;76fwrf>}NF=5NF_V+P9miWJ3a(?i~X%q09 z<{`}Gu<@WbGsm|7W78S>Ckw+8Wk1&6dN@TZ8TWIXS^^xx+$?K55Knen$c0&=Y12O8 z0hBC64}4@9^{M&#S8dk=b+CB)**yKPu^mHFl40dXDlB<*Qt!yVCR&wC-9yR;)$$YE zixqB;K)9%KL4XSQeW>V|9!p%b@414DGOPfs-~eJ}3mJhmfyAUEiw1^>0A-!EMKnud z_d|`LRe?Qvn4-6GlEJTgaBc9o>|QifHcym0?aU5+{=APS!6A? zjN{9-1(rNZn@H$-Q$;l9-B0xTEnayCn2Xmeuu*^y23-g@aiJudl9;k)v|>+0#_Llm zg`c|rhb)*Irn{+yxR~N-{k72JQ_sw%ft6V^Tu)q^l*=&Kig;DE2ngabqGXMsU(!P^ z?oAS}*+8_m>Tf3^|2mujbVMu{y~Z9?rl?MT4Ted91{ig+8%%}YYIzfhWI^)t@nYk{ zEdeZ{Cg$SsrbH}96ioiLJs~CGadEH8nQGz+)7M;B<&U+5HKjbYaw+H;eAC%nyjM1K zHP`8W-bIo96_2UjnH@tBZO3)iICZ9{W7^J+FLdc43JEgvBBK_5VM7ECuDN>XzmC26sYj$5+JEo(f|P1bZIp{uXGa&g(v z@^ln(_6_W4LWq3<9uFWmqg#m=14zj4iBuLrb9DG7h6QLOv$CMt@Xn{(5D z={o+9F(rzY%w!g~Zd1-hx-f-I2l0SgS{&ni3>=;4W&W4bEvzUA@>2tKQ@|P=8$O{lr zFo7}zsC!N0LwnDu)h{D~HrLQenH?A-AK*vFzD}_+TiYRFwn%Nzbo!1y#rtn{Up_um z&e}9HWwa_D-T}ju9U#U69Z3L&lnJO3Ko37sjpKn`Q9OYN2Z`vnWOF4TB;H@pFNe7)D^{dyRa`zYvxOUPV5dfVJ_Z;J=o9OdbekzcRCc=wVPE3&MWk5fv$7KxjI9lO(HZGyxIj#?>UK{31e};K z3S{JTCbqgJtaoy{O;)MR*^X2|Q@t$E2v~kdFbEqDf$HuONLJY0{X_K;m=NIk z<#m8ShYG%L6O*!mDD-M5Z!38rit~M?r^?DH8_6&JxVA`6u$_(wgaxG09Mnp6@thd-#Sj67i2=eY&?dJGI5oj;Q;kHsM36H zI+yNV72~qB6I7m1h1@SzIZHjRxh_RHPZozi!OrxBgDtSDav^Msyj7W7sv8^ z`W@TwbVj>lSUM?x4P8_s!qQ97+`iA~aJ;Z2dDk*lbR@Wd8n8hEPDOQd2cXTR1GJwP z78iGXaeGG^RI}3qc}Zj zu;ck^xwvn?e;jn&aa>-SQ~5MMmzsQG95iKGX?r?jA)^FzSrk;2-G0t*Y=C|UHw^23 zBQfu*3B6}z`0hjhZE+yvoO{zy)btep6>Yh*SavOKf30;(mLeR!b@@gi%*|Q3x$>15 zzz5(4RW6s4$;*q)SnN1KMq4+_I}{z1fk5Q%?C-U2fa7we|5V@%?_CPcZ}4gtgx@{T z9qp?REzyktA@GVT0NSDOr3f)mMjy_nDe7rHxoUR0_tkK94X*h+9%1%-S%%o6#_DlU z{OWyqZJoSvcUFWAYf`GxfLJAQJy40$%anVAA{CN-sTK0-v=5)~&^ zhd1*mD`-qBNb;a)!~`0VwHv)W)CA8RoOxmU=zOC=?*?S9R}bvNvwmQ5KO&^NAv?k6}P z^j|wVFb2cNQ?@_sUj}nC(6N{Fs$*AX?vgwrRpSu)=>H?a0MGQt@0X)IYae>fx$_=S4>EHn4C%a% zao#i|5*PElOdvIf|E6E2QMDumWaP@L0k?(jYkpHNRCfjE%gt}x26%vim2FjhSi8;@ z{x0p9I3`t|FCw#a1=#=XG4Ri)YxV~eDq722l+s$uuIe!%3)4vcaC!N!}(K6)wn9|Smznr}pDQueomv9NkCPeRX2QD;ejb6DxOT%7 z2NBP~UG19}NcV*^`nJ|5n+FHx$~xq{oXKu#|6H&%-Fl4EI*rRq(I^=`7SWGwWbp~M z6y9Sg#6tWD%FobIF*X<>E%vf=Xs_JKHJfd#k<^cLJEKuuUcB8ITa;>CtfL~{zT%q) ziSrl=rWJduf9aB!hGVTiWwa8gUH^OYuJx`JA!dXu_IY*=ORoyJYkx7romaBYPm zWQ^8XKrrIm>0j;n!DNuWzx|nBxV!$2+;^d??d1oll#M_%RtA`S7 z`%4JA4TI*5>{FN0s1OtR;Y_HCvu2d~Jin1O_p$WXpJ)vqLq;K~xeU=WA|=d#`QJhBl3w@I)m#38sk#5=C|P#AgnM-v)MotgV(E(9GDe|^ zlkvkv&179lgF|rhHzv>Ou-m0MY|#8#gO`JY`R_LWV?Avl)1AYf#^Yqn4JyI^*+r)t zi#RH1GLt6Rk|K4R=}$co`glW~aD-3)w$JE0jadRCEf;-T#+z1`pOD5$c`s~*GBsbh zb2i;mA(24exht{8ljSUSO$o;_dfAY{sr<+p!^6Mbb9 z>s0&m3m3IE!xDX5!=iGg`3T}zQ5<8|5eccx6*LMztz1-5MN+7rna9s+hM*xWW>;!o zl^}Wx+i}!i5d*0rO>QrvBI=%SGX`q`p^(GT7j}#lZ!^7%Ph=_NAOE~_ z2P3$R_*x@mx1hx1KY?-(31@j*TqOKvu)F;S5#Hp+iorhFWHnp=;Sg0}@>H2-vYJEG_FCSJbLKPEcZsxP@zq}VeDK#=N2n6UNP|N@Wu-v6>5(cr#_r@l zR{UCF2Bsvdw%A!$`Z3G$FD`B{sm#{a5955AZ7vRJ0<^jfg74PnsA+wF(kL$l>}WV$ z4w+erR-9P7XJ!k^^fb{QjT>l!MR|*oZmXuBDQlpy&0zcN-C-ro6dL%6E9>QFNRlVx_?B~1;9sws$zLD8xMM0BE$6dQsPuYJ@|jDoSMc> z3|gvdK63QuD-#-Ezqg?}L2oSQv9JQ?$4A-1jec%YX2c!=J{a6;+`dN$v8jbpJSMua z+XgyE#IRK58gbB^wwf>=cV@5oUM~b6f;Q8vmsr3*V|=~~P7DB#YgEiWEOMbamA~=) zg|3#a?D^&NY~E&v8zaZpGk$q`na*me`n>mAAMmMx0x45s@zh{O(3=kIoeoa-o4dzR z4+mt7yFZVbp!x821cZ!mE}x9`96Ft#bsuNcGzWpfRea=mcbf7A4HDn%OVGhgd*uz5 z_XS5;?ov=EStO2Nr*6OB?!cPiW!{dAqK8-U>f<-=fx#$ACYxiz`VH0XN(IZSub8v0 zYCo!NCXI)fvdf>03Ga}--$Nt(+H!inyd2@|ik`6R@4m!cjK}l=TXXgOTf2@W73l}^ zx;^XT3RH$08m`=xX^%n&$16`{$3&ZM7HX3Q?MLV48c|1Kofy7|o&AHu?VyIshXXJ* zUgyPl8~CdkfFzp9_PrJ8bC0r4KdF%swKSZHv=O!Jmc6A`+b1jPnUiq*Ss+m2ifDX! z=93>B+$%?)6e{rt7yo0}-)#?Uzl0A5!PuN_!mnHm{!0tAU+B>BZgMvxP)Z}qtYIsf zF#gTXoQQ9C*)N`H=zrF-H#IA81r9j){P;CZh5nwnm038#Xy=zZuGjMXci=4CV^Iu&K$lb$<@E1|Y*d!| zW_8Au!f>q0f;iZq>27}?1JZ5vum?$%VDMr;DPn|~a0Myc`eU=03Yf_Q&EMUF$NT12 zHiujqJM!?E&#4+5F9Vb5fW+9dANd z$=XOeiZLo>Wb=i77QGL{V)J%~Zo_dC0*QXIjKDV~39kNAj4mPOqiu-eu6X+8+26JSMJtWuEPGT%W;W4i4BbmQSw1W%4|*EE z#aCCG4PD5X-c7pcdUU#CNDp88koer`*rlSZA**r)#3W_e=qU%&K7G-svp!Q8u%+RP zXJ%dyx6w=mx0O53{ZR|xY<%ohIE@^MzeMnOSm+yDT6QNaT?mS3bPV62Hg~vcH-~aM zE-L?~2X}Nte%+COGGi^@*hHN&4f5jsvV~iwK%jrfdUAS_&#eb~%Zc}nE*Xy+# zn`MdR;+aZY%1146 zFdY4`%Tz*MX@!4+bOu(4h#5DwScc{!X2`U5I9BlVg4cw%d)ZE9!c`Ye>$DGVtJduf zI7XGG9E^aX-?HPwN&Q^E(}U4o#?}5xQK_EU^!JEDDfvN3=y+D%7D4&A4)6^CTP83t z^ZqdA-O3#+heBg#!I4i1jbqT=QjqMUtggAG zK>x9t;O8B#;RUYL4%?Ib&KyJm3m9W*3LL19<{HZQfE9@Q5UPRhfauuImsXV&aZ+6sq{mx}HjY!;{6e@hnSEeRu(M){+IlC~n8#XBdZJvfX%c(pz=ou!b#pQ4 z+f8%F$n0?#U!ITkb9!TEoB{wWL;f4R_WYy{Xr{Fcep--<$#eX_C(ud{2I)?iTB*O& zyBM7M9S{C*i0PW>u58~)8IR>`DkyFRBk zbQ!%~Zuoc;VZy)r@cuF{RUffc8odp33(X%>;bDJR-~1sW(E&>VMLDA z($b-9yx}Gp8tYah=|2U+{v3&x`e!ulQC@gAx6E^k!)p5rU={I*JVl=|U)e3dRo)R0 z(m62j=wx}7!08$x+$epmEZ2$mf;yDBnEeW#@5@^KvbkQ{D2j&{id1<(cag#gbyDGP zB{x1!$^clF_*Nd0^N8`_C-M^6ul*l*GeP0lmkF}z3p*XG@HhJH?$SoG zNbQhp?>;Lj?Pdyxm7TRuPn9crnX|GwuNZI(5uHbRbt(0`AGKa)=l&6!-Ihy7OE0WU zOVFjPA&5*%#LuO9jh1W7(LUs%ULS8UU&TJfj$Y9q_z)3jVM4J&7MN&1s>h3#9l@0T z$+5d3&iJ%wu769pc{CIjVB23q*;^5EyJ(}FeD%zgG)c@ro)2OuCyA-RBN{$8=Lv(M z9>~fXntDvD>AXHZBdWwnkBXYKiTWO~3dyL&3?=EUh&lg9K=*u;*>Pc#eorAk>scQu z$*2+ma$G>k1`A|81mzF)W^%YL?0;9Hu#(rGy*P#?q_D#CctNnD@Wf~1C3j#FhWSHQ zC_GOJW2BmoB^jSka>2C>Q%=!{BgS(It%evzGFnsDMLCg8rFod!tnwp8xnQ-lh8o;n zu|1G(5f0C@uwhN#j=?ZTa8iF@1g~sOxI>8uLWmm*5AnlXDdp(kCLuxLD)3B%>s7oI zzL5ksUa-WQ$R%}jp9@RUglDOV=1UYiTZ~NbVTL9($cT}Ucw^U)X%9Ybn^<(43v(_= zsuU_m&9}%S^0pFhxb&Y!=56i10rU6-5Li?YkGsy}^CrZIHpKy}q9hkzYk1_*AOVE& zd4X8q2diWz6(N@2!;jG5a2IHV@vIn;r*~=Jq|rQjY*f^IJ5240^#1^q5zL0D3#R73 zn(C%*&&QPW#mk>lQBiUH7qzYPl-E;?+CNm{ZBM~}O6{V)TdY8+NJvQDf|;S57UP-H zo4X-u;JqA>an1StpLK;sMMXK$gZriexcu1M$7~-R71f&pE{Fl7BMmQeFwDVs)=dbI zRYW*-;KPL!0-d@BPh`R+@7M4Cy|)BNOh_iugE_r<`&0;gB+4h8DP16`egKUR4rawk zfTaKM|1UFML~SdXs$=|X@c8L^OtA-l`2F37ZyDq-vYGS=StuajPvxnmVyV1!$o~T! C!4%N| literal 0 HcmV?d00001 diff --git a/ja-JP/mentor.md b/ja-JP/mentor.md new file mode 100644 index 0000000..fe5ddcf --- /dev/null +++ b/ja-JP/mentor.md @@ -0,0 +1,30 @@ +# Mentor Notes: Gross Groceries + +## Project Overview + +In this project, learners will use Python to help a strange restaurant owner create a revolting recipe card. They’ll start with simple ingredients and build up to printing full recipe instructions using f-strings. By the end, learners will have used variables, strings, numbers, simple arithmetic, and f-strings across multiple steps. + +--- + +## What Learners Will Practise + +- Creating and using variables +- Combining strings and numbers with f-strings +- Performing basic multiplication in code +- Writing multi-line Python programs with clear structure + +--- + +## Teaching Tips + +- Encourage learners to come up with their own disgusting ingredients — the sillier, the better! +- Prompt them to read printed output carefully to understand the effect of their changes. +- Reinforce that f-strings are a powerful way to combine text and values without needing multiple `+` symbols. + +--- + +## Extension Ideas + +- Let learners use `input()` to ask how many people the recipe should serve +- Encourage them to use `\n` to format multi-line recipe cards +- Add even more ingredients or steps to the recipe diff --git a/ja-JP/meta.yml b/ja-JP/meta.yml new file mode 100644 index 0000000..330e5c4 --- /dev/null +++ b/ja-JP/meta.yml @@ -0,0 +1,20 @@ +title: Python bytes - Gross groceries +hero_image: images/banner.png +description: Write a revolting recipe card using variables, f-strings, and maths +meta_title: Learn to code with Gross Groceries | Python Bytes +meta_description: Learn how to use Python f-strings and variables to print a disgusting recipe for an odd restaurant. +version: 1 +listed: true +copyedit: false +last_tested: "2025-04-14" +steps: + - title: step_1 + - title: step_2 + completion: + - engaged + - title: step_3 + - title: step_4 + - title: step_5 + completion: + - internal + - external diff --git a/ja-JP/resources/dataframe.json b/ja-JP/resources/dataframe.json new file mode 100644 index 0000000..c7460c9 --- /dev/null +++ b/ja-JP/resources/dataframe.json @@ -0,0 +1,72 @@ +[ + { + "filename": "meta.yml", + "path": "en\/", + "content": "title: Python bytes - Gross groceries\nhero_image: images\/banner.png\ndescription: Write a revolting recipe card using variables, f-strings, and maths\nmeta_title: Learn to code with Gross Groceries | Python Bytes\nmeta_description: Learn how to use Python f-strings and variables to print a disgusting recipe for an odd restaurant.\nversion: 1\nlisted: false\ncopyedit: false\nlast_tested: \"2025-04-14\"\nsteps:\n - title: step_1\n - title: step_2\n completion:\n - engaged\n - title: step_3\n - title: step_4\n - title: step_5\n completion:\n - internal\n - external\n" + }, + { + "filename": "main.py", + "path": "en\/code\/starter\/", + "content": "# Gross Groceries recipe card\n\n# Ingredients and amounts for 1 person\n\n\n# Number of servings\n\n\n# Scaled-up ingredients\n\n\n# Print recipe instructions\n" + }, + { + "filename": "project_config.yml", + "path": "en\/code\/starter\/", + "content": "name: \"Python Bytes - Gross Groceries\"\nidentifier: \"python-bytes-gross-groceries\"\ntype: python\nbuild: true\n" + }, + { + "filename": "mentor.md", + "path": "en\/", + "content": "# Mentor Notes: Gross Groceries\n\n## Project Overview\n\nIn this project, learners will use Python to help a strange restaurant owner create a revolting recipe card. They’ll start with simple ingredients and build up to printing full recipe instructions using f-strings. By the end, learners will have used variables, strings, numbers, simple arithmetic, and f-strings across multiple steps.\n\n---\n\n## What Learners Will Practise\n\n- Creating and using variables\n- Combining strings and numbers with f-strings\n- Performing basic multiplication in code\n- Writing multi-line Python programs with clear structure\n\n---\n\n## Teaching Tips\n\n- Encourage learners to come up with their own disgusting ingredients — the sillier, the better!\n- Prompt them to read printed output carefully to understand the effect of their changes.\n- Reinforce that f-strings are a powerful way to combine text and values without needing multiple `+` symbols.\n\n---\n\n## Extension Ideas\n\n- Let learners use `input()` to ask how many people the recipe should serve\n- Encourage them to use `\\n` to format multi-line recipe cards\n- Add even more ingredients or steps to the recipe\n" + }, + { + "filename": "step_1.md", + "path": "en\/", + "content": "

Write your first disgusting ingredient<\/h2>\n--- task ---\nAdd a gross ingredient and print it using an f-string\n--- \/task ---\n\n

Start your recipe<\/h2>\n\nThe owner of an odd restaurant has decided to use code to help make their recipes. You're the coder they've hired. 🧑‍💻 \nYour job is to help create the grossest recipe card ever 🤢\n\nLet’s start by adding your first ingredient. But before we write any code, you’ll notice some lines that start with `#` — these are **comments**.\n\nComments are notes in your code that help you (and others!) understand what each part does. Python ignores them when your program runs.\n\nNow try this:\n\n1. Choose a disgusting ingredient like `'maggot mash 🐛'` or `'slug slime 🐌'`.\n2. Decide how much of it you want to use. Let’s say `50` grams.\n3. Use an **f-string** to print the amount and the ingredient.\n\n
\n--- code ---\n---\nlanguage: python\nfilename: main.py\nline_numbers: true\nline_number_start: 3\nline_highlights: 5-6,11\n---\n# Ingredients and amounts for 1 person\n\ningredient_1 = 'maggot mash 🐛'\namount_1 = 50\n# Number of servings\n\n\n# Scaled-up ingredients\nprint(f'{amount_1}g of {ingredient_1}')\n--- \/code ---\n<\/div>\n\n
\n
50g of maggot mash 🐛<\/pre>\n<\/div>\n\n
\n\n### Tip\n\nIf your code prints nothing or shows an error, check that:\n- You used **quotes** around your ingredient name (it's a string!)\n- You’ve spelled the variable names correctly\n- You used the `f` before the string in `print(f'...')`\n\n<\/div>\n\n
\n\n### Debugging\n\n- If Python says there's a `NameError`, you may have a typo in your variable name\n- If you see `{amount_1}` in the output instead of the number, make sure your string starts with `f`\n\n<\/div>\n" + }, + { + "filename": "step_2.md", + "path": "en\/", + "content": "

Feed more people<\/h2>\n--- task ---\nAdd a servings variable and use it to scale up your ingredient\n--- \/task ---\n\n

Make it serve more than one!<\/h2>\n\nRight now, your ingredient amount is for just **one** person. But what if you wanted to feed 3, or even 10 people?\n\nInstead of writing new numbers, you can **multiply** the amount by the number of servings — using maths inside your f-string!\n\nLet’s add a variable called `servings`, and update your print line to use it:\n\n
\n--- code ---\n---\nlanguage: python\nfilename: main.py\nline_numbers: true\nline_number_start: 7\nline_highlights: 8,11\n---\n# Number of servings\nservings = 3\n\n# Scaled-up ingredients\nprint(f'{amount_1 * servings}g of {ingredient_1}')\n--- \/code ---\n<\/div>\n\n
\n
150g of maggot mash 🐛<\/pre>\n<\/div>\n\n
\n\n### Tip\n\nYou can do maths inside an f-string using `{}` — Python works it out before printing the message!\n\n<\/div>\n\n
\n\n### Debugging\n\n- Make sure your variable name is `servings`, not `serving` or `serves`\n- Don’t forget the `*` for multiplication\n\n<\/div>\n" + }, + { + "filename": "step_3.md", + "path": "en\/", + "content": "

Add more ingredients<\/h2>\n--- task ---\nAdd two more gross ingredients and scale them up using f-strings\n--- \/task ---\n\n

Make your recipe extra disgusting<\/h2>\n\nOne ingredient is never enough for a proper disgusting dish! Let's add two more ingredients to your recipe.\n\n1. Add `ingredient_2` and `ingredient_3` — give them gross names like `'sock juice 🧦'` or `'toenail sprinkles 🦶'`.\n2. Add matching `amount_2` and `amount_3` values.\n3. Use f-strings to print out **all three ingredients**, scaled up using your `servings` variable.\n\n
\n--- code ---\n---\nlanguage: python\nfilename: main.py\nline_numbers: true\nline_number_start: 3\nline_highlights: 8-10,11-12,18-19\n---\ningredient_2 = 'sock juice 🧦'\namount_2 = 30\n\ningredient_3 = 'toenail sprinkles 🦶'\namount_3 = 10\n# Number of servings\nservings = 3\n\n# Scaled-up ingredients\nprint(f'{amount_1 * servings}g of {ingredient_1}')\nprint(f'{amount_2 * servings}ml of {ingredient_2}')\nprint(f'{amount_3 * servings}g of {ingredient_3}')\n--- \/code ---\n<\/div>\n\n
\n
150g of maggot mash 🐛\n90ml of sock juice 🧦\n30g of toenail sprinkles 🦶<\/pre>\n<\/div>\n\n
\n\n### Tip\n\nYou can label each ingredient with different units like `g` (grams) or `ml` (millilitres) depending on what it is!\n\n<\/div>\n\n
\n\n### Debugging\n\n- Make sure your variable names match exactly — Python is case-sensitive!\n- Don’t forget to multiply by `servings` inside each f-string\n\n<\/div>\n" + }, + { + "filename": "step_4.md", + "path": "en\/", + "content": "

Start your recipe instructions<\/h2>\n--- task ---\nUse an f-string to describe the number of people and the first ingredient\n--- \/task ---\n\n

Tell the chef what to do<\/h2>\n\nNow it’s time to turn your ingredient list into an actual recipe! 🍲\n\nYour first step will be to describe the number of people being fed and the first ingredient to be added.\n\n
\n--- code ---\n---\nlanguage: python\nfilename: main.py\nline_numbers: true\nline_number_start: 21\nline_highlights: 22-23\n---\n# Print recipe instructions\nprint()\nprint(f'To make this revolting recipe for {servings} people add {amount_1 * servings}g of {ingredient_1} to a large bowl.')\n--- \/code ---\n<\/div>\n\n
\n
To make this revolting recipe for 3 people add 150g of maggot mash 🐛 to a large bowl.<\/pre>\n<\/div>\n\n
\n\n### Tip\n\nYou can do **maths inside an f-string**! \nThis lets you calculate the ingredient amounts and show them inside a sentence without needing extra lines of code.\n\n<\/div>\n\n
\n\n### Debugging\n\n- Make sure you used `* servings` inside the `{}` for the amount\n- Don’t forget the `f` at the start of your string\n\n<\/div>\n" + }, + { + "filename": "step_5.md", + "path": "en\/", + "content": "

Finish your disgusting recipe<\/h2>\n--- task ---\nUse more f-strings to describe how to prepare your ingredients\n--- \/task ---\n\n

Serve it up 🤢<\/h2>\n\nLet’s finish the recipe by printing the rest of the disgusting instructions.\n\nYou’ll describe:\n- What to pour in next\n- How to garnish it with sprinkles\n- How to serve it to your (un)lucky guests!\n\nAdd these final lines to your program:\n\n
\n--- code ---\n---\nlanguage: python\nfilename: main.py\nline_numbers: true\nline_number_start: 21\nline_highlights: 24-27\n---\n# Print recipe instructions\nprint()\nprint(f'To make this revolting recipe for {servings} people add {amount_1 * servings}g of {ingredient_1} to a large bowl.')\nprint()\nprint(f'Pour over {amount_2 * servings}ml of {ingredient_2}.')\nprint()\nprint(f'Sprinkle with {amount_3 * servings}g of {ingredient_3} and serve cold 🧊. Yum!')\n--- \/code ---\n<\/div>\n\n
\n
To make this revolting recipe for 3 people add 150g of maggot mash 🐛 to a large bowl.\n\nPour over 90ml of sock juice 🧦.\n\nSprinkle with 30g of toenail sprinkles 🦶 and serve cold 🧊. Yum!<\/pre>\n<\/div>\n\n
\n\n### Tip\n\nAdding `print()` with nothing in it is a great way to add blank lines in your output. \nYou can combine text, variables, and maths all in the same f-string!\n\n<\/div>\n\n
\n\n### Debugging\n\n- Check that every sentence is inside a `print(f'...')`\n- Watch your brackets and punctuation carefully!\n\n<\/div>\n" + }, + { + "filename": "main.py", + "path": "en\/solutions\/", + "content": "# Gross Groceries recipe card\n\n# Ingredients and amounts for 1 person\n\ningredient_1 = 'maggot mash 🐛'\namount_1 = 50\n\ningredient_2 = 'sock juice 🧦'\namount_2 = 30\n\ningredient_3 = 'toenail sprinkles 🦶'\namount_3 = 10\n# Number of servings\nservings = 3\n\n# Scaled-up ingredients\nprint(f'{amount_1 * servings}g of {ingredient_1}')\nprint(f'{amount_2 * servings}ml of {ingredient_2}')\nprint(f'{amount_3 * servings}g of {ingredient_3}')\n\n# Print recipe instructions\nprint()\nprint(f'To make this revolting recipe for {servings} people add {amount_1 * servings}g of {ingredient_1} to a large bowl.')\nprint()\nprint(f'Pour over {amount_2 * servings}ml of {ingredient_2}.')\nprint()\nprint(f'Sprinkle with {amount_3 * servings}g of {ingredient_3} and serve cold 🧊. Yum!')\n" + }, + { + "filename": "README.md", + "path": "python-bytes-gross-groceries\/", + "content": "# Python bytes - Gross groceries\n\n![A cartoon recipe card with gross ingredients like sock juice and toenail sprinkles](en\/images\/banner.png)\n\nProject description\n\nFind the project online at [projects.raspberrypi.org\/en\/projects\/python-bytes-gross-groceries](https:\/\/projects.raspberrypi.org\/en\/projects\/python-bytes-gross-groceries)\n\n## Resources\nFor project materials and solutions, see [en\/resources](https:\/\/github.com\/raspberrypilearning\/python-bytes-gross-groceries\/tree\/master\/en\/resources) and [en\/solutions](https:\/\/github.com\/raspberrypilearning\/python-bytes-gross-groceries\/tree\/master\/en\/solutions).\n\n## Contributing\nSee [CONTRIBUTING.md](CONTRIBUTING.md)\n\n## Licence\nSee [LICENCE.md](LICENCE.md)\n" + }, + { + "filename": "CONTRIBUTING.md", + "path": "python-bytes-gross-groceries\/", + "content": "# Contributing\n\nAll contributions are assumed to be licensed under the same licence as the source, i.e. [CC BY-SA](http:\/\/creativecommons.org\/licenses\/by-sa\/4.0\/). This licence must remain in all derivatives of this work.\n\n## Issues\n\nIf you find a mistake, bug, or other problem, please [open an issue](https:\/\/github.com\/raspberrypilearning\/python-bytes-gross-groceries\/issues) in this repository.\n\n## Pull requests\n\nAll edits to a resource should be made to the draft branch or to a fork of the repo. These patches can then be submitted as a pull request.\n\nIf you fix a mistake, bug, or problem or have something to contribute, please create a pull request for each modification. Please consider grouping modifications sensibly, e.g. don't bundle typo fixes in the same pull request as code changes, file them separately instead.\n\nPlease note that sometimes things are done for pedagogical reasons so changes which make sense from a software engineering perspective (reducing duplication or making use of more advanced programming language features) may not be suitable to maintain the intended educational value.\n\n## Derivatives\n\nSee [LICENCE.md](LICENCE.md) for content licence. The licence must remain in all derivatives of this work.\n\n## Translation\n\nYou can help us make this project available to more people around the world by translating it. For more information, please go to [rpf.io\/translate](https:\/\/rpf.io\/translate).\n" + }, + { + "filename": "LICENCE.md", + "path": "python-bytes-gross-groceries\/", + "content": "# Licence\n\nUnless otherwise specified, everything in this repository is covered by the following licence:\n\n[![Creative Commons licence](http:\/\/i.creativecommons.org\/l\/by-sa\/4.0\/88x31.png)](http:\/\/creativecommons.org\/licenses\/by-sa\/4.0\/)\n\n**Python bytes - Gross groceries** by the [Raspberry Pi Foundation](http:\/\/www.raspberrypi.org) is licensed under a [Creative Commons Attribution 4.0 International licence](http:\/\/creativecommons.org\/licenses\/by-sa\/4.0\/).\n\nBased on a work at https:\/\/github.com\/raspberrypilearning\/python-bytes-gross-groceries.\n" + }, + { + "filename": "crowdin.yml", + "path": "python-bytes-gross-groceries\/", + "content": "files:\n - source: \/en\/**\/*.*\n translation: \/%locale%\/**\/%original_file_name%\n" + } +] \ No newline at end of file diff --git a/ja-JP/solutions/main.py b/ja-JP/solutions/main.py new file mode 100644 index 0000000..855cb24 --- /dev/null +++ b/ja-JP/solutions/main.py @@ -0,0 +1,27 @@ +# Gross Groceries recipe card + +# Ingredients and amounts for 1 person + +ingredient_1 = 'maggot mash 🐛' +amount_1 = 50 + +ingredient_2 = 'sock juice 🧦' +amount_2 = 30 + +ingredient_3 = 'toenail sprinkles 🦶' +amount_3 = 10 +# Number of servings +servings = 3 + +# Scaled-up ingredients +print(f'{amount_1 * servings}g of {ingredient_1}') +print(f'{amount_2 * servings}ml of {ingredient_2}') +print(f'{amount_3 * servings}g of {ingredient_3}') + +# Print recipe instructions +print() +print(f'To make this revolting recipe for {servings} people add {amount_1 * servings}g of {ingredient_1} to a large bowl.') +print() +print(f'Pour over {amount_2 * servings}ml of {ingredient_2}.') +print() +print(f'Sprinkle with {amount_3 * servings}g of {ingredient_3} and serve cold 🧊. Yum!') diff --git a/ja-JP/step_1.md b/ja-JP/step_1.md new file mode 100644 index 0000000..ee16b36 --- /dev/null +++ b/ja-JP/step_1.md @@ -0,0 +1,72 @@ +

Write your first disgusting ingredient

+ +\--- task --- + +Add a gross ingredient and print it using an f-string. + +\--- /task --- + +

Start your recipe

+ +The owner of an odd restaurant has decided to use code to help make their recipes. You're the coder they've hired. 🧑‍💻 +Your job is to help create the grossest recipe card ever 🤢 + +Let’s start by adding your first ingredient. But before we write any code, you’ll notice some lines that start with `#` — these are **comments**. + +Comments are notes in your code that help you (and others!) understand what each part does. Python ignores them when your program runs. + +Now try this: + +1. Choose a disgusting ingredient like `'maggot mash 🐛'` or `'slug slime 🐌'`. +2. Decide how much of it you want to use. Let’s say `50` grams. +3. Use an **f-string** to print the amount and the ingredient. + +
+--- code --- +--- +language: python +filename: main.py +line_numbers: true +line_number_start: 3 +line_highlights: 5-6,11 +--- + +# Ingredients and amounts for 1 person + +ingredient_1 = 'maggot mash 🐛' +amount_1 = 50 + +# Number of servings + +# Scaled-up ingredients + +print(f'{amount_1}g of {ingredient_1}') + +\--- /code --- + +
+ +
+
50g of maggot mash 🐛
+
+ +
+ +### Tip + +If your code prints nothing or shows an error, check that: + +- You used **quotes** around your ingredient name (it's a string!) +- You’ve spelled the variable names correctly +- You used the `f` before the string in `print(f'...')` + +
+ +
+ +### Debugging + +- If Python says there's a `NameError`, you may have a typo in your variable name +- If you see `{amount_1}` in the output instead of the number, make sure your string starts with `f` + +
diff --git a/ja-JP/step_2.md b/ja-JP/step_2.md new file mode 100644 index 0000000..349fedb --- /dev/null +++ b/ja-JP/step_2.md @@ -0,0 +1,58 @@ +

Feed more people

+ +\--- task --- + +Add a servings variable and use it to scale up your ingredient + +\--- /task --- + +

Make it serve more than one!

+ +Right now, your ingredient amount is for just **one** person. But what if you wanted to feed 3, or even 10 people? + +Instead of writing new numbers, you can **multiply** the amount by the number of servings — using maths inside your f-string! + +Let’s add a variable called `servings`, and update your print line to use it: + +
+--- code --- +--- +language: python +filename: main.py +line_numbers: true +line_number_start: 7 +line_highlights: 8,11 +--- + +# Number of servings + +servings = 3 + +# Scaled-up ingredients + +print(f'{amount_1 \* servings}g of {ingredient_1}') + +\--- /code --- + +
+ +
+
150g of maggot mash 🐛
+
+ +
+ +### Tip + +You can do maths inside an f-string using `{}` — Python works it out before printing the message! + +
+ +
+ +### Debugging + +- Make sure your variable name is `servings`, not `serving` or `serves` +- Don’t forget the `*` for multiplication + +
diff --git a/ja-JP/step_3.md b/ja-JP/step_3.md new file mode 100644 index 0000000..23e2cc8 --- /dev/null +++ b/ja-JP/step_3.md @@ -0,0 +1,68 @@ +

Add more ingredients

+ +\--- task --- + +Add two more gross ingredients and scale them up using f-strings + +\--- /task --- + +

Make your recipe extra disgusting

+ +One ingredient is never enough for a proper disgusting dish! Let's add two more ingredients to your recipe. + +1. Add `ingredient_2` and `ingredient_3` — give them gross names like `'sock juice 🧦'` or `'toenail sprinkles 🦶'`. +2. Add matching `amount_2` and `amount_3` values. +3. Use f-strings to print out **all three ingredients**, scaled up using your `servings` variable. + +
+--- code --- +--- +language: python +filename: main.py +line_numbers: true +line_number_start: 3 +line_highlights: 8-10,11-12,18-19 +--- + +ingredient_2 = 'sock juice 🧦' +amount_2 = 30 + +ingredient_3 = 'toenail sprinkles 🦶' +amount_3 = 10 + +# Number of servings + +servings = 3 + +# Scaled-up ingredients + +print(f'{amount_1 \* servings}g of {ingredient_1}') +print(f'{amount_2 \* servings}ml of {ingredient_2}') +print(f'{amount_3 \* servings}g of {ingredient_3}') + +\--- /code --- + +
+ +
+
150g of maggot mash 🐛
+90ml of sock juice 🧦
+30g of toenail sprinkles 🦶
+
+ +
+ +### Tip + +You can label each ingredient with different units like `g` (grams) or `ml` (millilitres) depending on what it is! + +
+ +
+ +### Debugging + +- Make sure your variable names match exactly — Python is case-sensitive! +- Don’t forget to multiply by `servings` inside each f-string + +
diff --git a/ja-JP/step_4.md b/ja-JP/step_4.md new file mode 100644 index 0000000..0a3a807 --- /dev/null +++ b/ja-JP/step_4.md @@ -0,0 +1,54 @@ +

Start your recipe instructions

+ +\--- task --- + +Use an f-string to describe the number of people and the first ingredient + +\--- /task --- + +

Tell the chef what to do

+ +Now it’s time to turn your ingredient list into an actual recipe! 🍲 + +Your first step will be to describe the number of people being fed and the first ingredient to be added. + +
+--- code --- +--- +language: python +filename: main.py +line_numbers: true +line_number_start: 21 +line_highlights: 22-23 +--- + +# Print recipe instructions + +print() +print(f'To make this revolting recipe for {servings} people add {amount_1 \* servings}g of {ingredient_1} to a large bowl.') + +\--- /code --- + +
+ +
+
To make this revolting recipe for 3 people add 150g of maggot mash 🐛 to a large bowl.
+
+ +
+ +### Tip + +You can do **maths inside an f-string**! +This lets you calculate the ingredient amounts and show them inside a sentence without needing extra lines of code. + +
+ +
+ +### Debugging + +- Make sure you used `* servings` inside the `{}` for the amount +- Don’t forget the `f` at the start of your string + +
diff --git a/ja-JP/step_5.md b/ja-JP/step_5.md new file mode 100644 index 0000000..98cffa2 --- /dev/null +++ b/ja-JP/step_5.md @@ -0,0 +1,92 @@ +

Finish your disgusting recipe

+ +\--- task --- + +Use more f-strings to describe how to prepare your ingredients + +\--- /task --- + +

Serve it up 🤢

+ +Let’s finish the recipe by printing the rest of the disgusting instructions. + +You’ll describe: + +- What to pour in next +- How to garnish it with sprinkles +- How to serve it to your (un)lucky guests! + +Add these final lines to your program: + +
+--- code --- +--- +language: python +filename: main.py +line_numbers: true +line_number_start: 21 +line_highlights: 24-27 +--- + +# Print recipe instructions + +print() +print(f'To make this revolting recipe for {servings} people add {amount_1 \* servings}g of {ingredient_1} to a large bowl.') +print() +print(f'Pour over {amount_2 \* servings}ml of {ingredient_2}.') +print() +print(f'Sprinkle with {amount_3 \* servings}g of {ingredient_3} and serve cold 🧊. Yum!') + +\--- /code --- + +
+ +
+
To make this revolting recipe for 3 people add 150g of maggot mash 🐛 to a large bowl.
+
+Pour over 90ml of sock juice 🧦.
+
+Sprinkle with 30g of toenail sprinkles 🦶 and serve cold 🧊. Yum!
+ +
+ +
+ +### Tip + +Adding `print()` with nothing in it is a great way to add blank lines in your output. +You can combine text, variables, and maths all in the same f-string! + +
+ +
+ +### Debugging + +- Check that every sentence is inside a `print(f'...')` +- Watch your brackets and punctuation carefully! + +
+ +
+ +### フィードバック + +This is a beta projects, which means it is brand new and not widely available. If you've tested this project on your own or with your club, let us know what you think. + + +Give feedback + +
diff --git a/nl-NL/code/starter/main.py b/nl-NL/code/starter/main.py new file mode 100644 index 0000000..45d5a6a --- /dev/null +++ b/nl-NL/code/starter/main.py @@ -0,0 +1,12 @@ +# Gross Groceries recipe card + +# Ingredients and amounts for 1 person + + +# Number of servings + + +# Scaled-up ingredients + + +# Print recipe instructions diff --git a/nl-NL/code/starter/project_config.yml b/nl-NL/code/starter/project_config.yml new file mode 100644 index 0000000..d184c95 --- /dev/null +++ b/nl-NL/code/starter/project_config.yml @@ -0,0 +1,4 @@ +name: "Python Bytes - Gross Groceries" +identifier: "python-bytes-gross-groceries" +type: python +build: true diff --git a/nl-NL/images/banner.png b/nl-NL/images/banner.png new file mode 100644 index 0000000000000000000000000000000000000000..685e0cfcdba14a01ff649260c3122d52f976b0d7 GIT binary patch literal 43369 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 C!4%N| literal 0 HcmV?d00001 diff --git a/nl-NL/mentor.md b/nl-NL/mentor.md new file mode 100644 index 0000000..fe5ddcf --- /dev/null +++ b/nl-NL/mentor.md @@ -0,0 +1,30 @@ +# Mentor Notes: Gross Groceries + +## Project Overview + +In this project, learners will use Python to help a strange restaurant owner create a revolting recipe card. They’ll start with simple ingredients and build up to printing full recipe instructions using f-strings. By the end, learners will have used variables, strings, numbers, simple arithmetic, and f-strings across multiple steps. + +--- + +## What Learners Will Practise + +- Creating and using variables +- Combining strings and numbers with f-strings +- Performing basic multiplication in code +- Writing multi-line Python programs with clear structure + +--- + +## Teaching Tips + +- Encourage learners to come up with their own disgusting ingredients — the sillier, the better! +- Prompt them to read printed output carefully to understand the effect of their changes. +- Reinforce that f-strings are a powerful way to combine text and values without needing multiple `+` symbols. + +--- + +## Extension Ideas + +- Let learners use `input()` to ask how many people the recipe should serve +- Encourage them to use `\n` to format multi-line recipe cards +- Add even more ingredients or steps to the recipe diff --git a/nl-NL/meta.yml b/nl-NL/meta.yml new file mode 100644 index 0000000..330e5c4 --- /dev/null +++ b/nl-NL/meta.yml @@ -0,0 +1,20 @@ +title: Python bytes - Gross groceries +hero_image: images/banner.png +description: Write a revolting recipe card using variables, f-strings, and maths +meta_title: Learn to code with Gross Groceries | Python Bytes +meta_description: Learn how to use Python f-strings and variables to print a disgusting recipe for an odd restaurant. +version: 1 +listed: true +copyedit: false +last_tested: "2025-04-14" +steps: + - title: step_1 + - title: step_2 + completion: + - engaged + - title: step_3 + - title: step_4 + - title: step_5 + completion: + - internal + - external diff --git a/nl-NL/resources/dataframe.json b/nl-NL/resources/dataframe.json new file mode 100644 index 0000000..c7460c9 --- /dev/null +++ b/nl-NL/resources/dataframe.json @@ -0,0 +1,72 @@ +[ + { + "filename": "meta.yml", + "path": "en\/", + "content": "title: Python bytes - Gross groceries\nhero_image: images\/banner.png\ndescription: Write a revolting recipe card using variables, f-strings, and maths\nmeta_title: Learn to code with Gross Groceries | Python Bytes\nmeta_description: Learn how to use Python f-strings and variables to print a disgusting recipe for an odd restaurant.\nversion: 1\nlisted: false\ncopyedit: false\nlast_tested: \"2025-04-14\"\nsteps:\n - title: step_1\n - title: step_2\n completion:\n - engaged\n - title: step_3\n - title: step_4\n - title: step_5\n completion:\n - internal\n - external\n" + }, + { + "filename": "main.py", + "path": "en\/code\/starter\/", + "content": "# Gross Groceries recipe card\n\n# Ingredients and amounts for 1 person\n\n\n# Number of servings\n\n\n# Scaled-up ingredients\n\n\n# Print recipe instructions\n" + }, + { + "filename": "project_config.yml", + "path": "en\/code\/starter\/", + "content": "name: \"Python Bytes - Gross Groceries\"\nidentifier: \"python-bytes-gross-groceries\"\ntype: python\nbuild: true\n" + }, + { + "filename": "mentor.md", + "path": "en\/", + "content": "# Mentor Notes: Gross Groceries\n\n## Project Overview\n\nIn this project, learners will use Python to help a strange restaurant owner create a revolting recipe card. They’ll start with simple ingredients and build up to printing full recipe instructions using f-strings. By the end, learners will have used variables, strings, numbers, simple arithmetic, and f-strings across multiple steps.\n\n---\n\n## What Learners Will Practise\n\n- Creating and using variables\n- Combining strings and numbers with f-strings\n- Performing basic multiplication in code\n- Writing multi-line Python programs with clear structure\n\n---\n\n## Teaching Tips\n\n- Encourage learners to come up with their own disgusting ingredients — the sillier, the better!\n- Prompt them to read printed output carefully to understand the effect of their changes.\n- Reinforce that f-strings are a powerful way to combine text and values without needing multiple `+` symbols.\n\n---\n\n## Extension Ideas\n\n- Let learners use `input()` to ask how many people the recipe should serve\n- Encourage them to use `\\n` to format multi-line recipe cards\n- Add even more ingredients or steps to the recipe\n" + }, + { + "filename": "step_1.md", + "path": "en\/", + "content": "

Write your first disgusting ingredient<\/h2>\n--- task ---\nAdd a gross ingredient and print it using an f-string\n--- \/task ---\n\n

Start your recipe<\/h2>\n\nThe owner of an odd restaurant has decided to use code to help make their recipes. You're the coder they've hired. 🧑‍💻 \nYour job is to help create the grossest recipe card ever 🤢\n\nLet’s start by adding your first ingredient. But before we write any code, you’ll notice some lines that start with `#` — these are **comments**.\n\nComments are notes in your code that help you (and others!) understand what each part does. Python ignores them when your program runs.\n\nNow try this:\n\n1. Choose a disgusting ingredient like `'maggot mash 🐛'` or `'slug slime 🐌'`.\n2. Decide how much of it you want to use. Let’s say `50` grams.\n3. Use an **f-string** to print the amount and the ingredient.\n\n
\n--- code ---\n---\nlanguage: python\nfilename: main.py\nline_numbers: true\nline_number_start: 3\nline_highlights: 5-6,11\n---\n# Ingredients and amounts for 1 person\n\ningredient_1 = 'maggot mash 🐛'\namount_1 = 50\n# Number of servings\n\n\n# Scaled-up ingredients\nprint(f'{amount_1}g of {ingredient_1}')\n--- \/code ---\n<\/div>\n\n
\n
50g of maggot mash 🐛<\/pre>\n<\/div>\n\n
\n\n### Tip\n\nIf your code prints nothing or shows an error, check that:\n- You used **quotes** around your ingredient name (it's a string!)\n- You’ve spelled the variable names correctly\n- You used the `f` before the string in `print(f'...')`\n\n<\/div>\n\n
\n\n### Debugging\n\n- If Python says there's a `NameError`, you may have a typo in your variable name\n- If you see `{amount_1}` in the output instead of the number, make sure your string starts with `f`\n\n<\/div>\n" + }, + { + "filename": "step_2.md", + "path": "en\/", + "content": "

Feed more people<\/h2>\n--- task ---\nAdd a servings variable and use it to scale up your ingredient\n--- \/task ---\n\n

Make it serve more than one!<\/h2>\n\nRight now, your ingredient amount is for just **one** person. But what if you wanted to feed 3, or even 10 people?\n\nInstead of writing new numbers, you can **multiply** the amount by the number of servings — using maths inside your f-string!\n\nLet’s add a variable called `servings`, and update your print line to use it:\n\n
\n--- code ---\n---\nlanguage: python\nfilename: main.py\nline_numbers: true\nline_number_start: 7\nline_highlights: 8,11\n---\n# Number of servings\nservings = 3\n\n# Scaled-up ingredients\nprint(f'{amount_1 * servings}g of {ingredient_1}')\n--- \/code ---\n<\/div>\n\n
\n
150g of maggot mash 🐛<\/pre>\n<\/div>\n\n
\n\n### Tip\n\nYou can do maths inside an f-string using `{}` — Python works it out before printing the message!\n\n<\/div>\n\n
\n\n### Debugging\n\n- Make sure your variable name is `servings`, not `serving` or `serves`\n- Don’t forget the `*` for multiplication\n\n<\/div>\n" + }, + { + "filename": "step_3.md", + "path": "en\/", + "content": "

Add more ingredients<\/h2>\n--- task ---\nAdd two more gross ingredients and scale them up using f-strings\n--- \/task ---\n\n

Make your recipe extra disgusting<\/h2>\n\nOne ingredient is never enough for a proper disgusting dish! Let's add two more ingredients to your recipe.\n\n1. Add `ingredient_2` and `ingredient_3` — give them gross names like `'sock juice 🧦'` or `'toenail sprinkles 🦶'`.\n2. Add matching `amount_2` and `amount_3` values.\n3. Use f-strings to print out **all three ingredients**, scaled up using your `servings` variable.\n\n
\n--- code ---\n---\nlanguage: python\nfilename: main.py\nline_numbers: true\nline_number_start: 3\nline_highlights: 8-10,11-12,18-19\n---\ningredient_2 = 'sock juice 🧦'\namount_2 = 30\n\ningredient_3 = 'toenail sprinkles 🦶'\namount_3 = 10\n# Number of servings\nservings = 3\n\n# Scaled-up ingredients\nprint(f'{amount_1 * servings}g of {ingredient_1}')\nprint(f'{amount_2 * servings}ml of {ingredient_2}')\nprint(f'{amount_3 * servings}g of {ingredient_3}')\n--- \/code ---\n<\/div>\n\n
\n
150g of maggot mash 🐛\n90ml of sock juice 🧦\n30g of toenail sprinkles 🦶<\/pre>\n<\/div>\n\n
\n\n### Tip\n\nYou can label each ingredient with different units like `g` (grams) or `ml` (millilitres) depending on what it is!\n\n<\/div>\n\n
\n\n### Debugging\n\n- Make sure your variable names match exactly — Python is case-sensitive!\n- Don’t forget to multiply by `servings` inside each f-string\n\n<\/div>\n" + }, + { + "filename": "step_4.md", + "path": "en\/", + "content": "

Start your recipe instructions<\/h2>\n--- task ---\nUse an f-string to describe the number of people and the first ingredient\n--- \/task ---\n\n

Tell the chef what to do<\/h2>\n\nNow it’s time to turn your ingredient list into an actual recipe! 🍲\n\nYour first step will be to describe the number of people being fed and the first ingredient to be added.\n\n
\n--- code ---\n---\nlanguage: python\nfilename: main.py\nline_numbers: true\nline_number_start: 21\nline_highlights: 22-23\n---\n# Print recipe instructions\nprint()\nprint(f'To make this revolting recipe for {servings} people add {amount_1 * servings}g of {ingredient_1} to a large bowl.')\n--- \/code ---\n<\/div>\n\n
\n
To make this revolting recipe for 3 people add 150g of maggot mash 🐛 to a large bowl.<\/pre>\n<\/div>\n\n
\n\n### Tip\n\nYou can do **maths inside an f-string**! \nThis lets you calculate the ingredient amounts and show them inside a sentence without needing extra lines of code.\n\n<\/div>\n\n
\n\n### Debugging\n\n- Make sure you used `* servings` inside the `{}` for the amount\n- Don’t forget the `f` at the start of your string\n\n<\/div>\n" + }, + { + "filename": "step_5.md", + "path": "en\/", + "content": "

Finish your disgusting recipe<\/h2>\n--- task ---\nUse more f-strings to describe how to prepare your ingredients\n--- \/task ---\n\n

Serve it up 🤢<\/h2>\n\nLet’s finish the recipe by printing the rest of the disgusting instructions.\n\nYou’ll describe:\n- What to pour in next\n- How to garnish it with sprinkles\n- How to serve it to your (un)lucky guests!\n\nAdd these final lines to your program:\n\n
\n--- code ---\n---\nlanguage: python\nfilename: main.py\nline_numbers: true\nline_number_start: 21\nline_highlights: 24-27\n---\n# Print recipe instructions\nprint()\nprint(f'To make this revolting recipe for {servings} people add {amount_1 * servings}g of {ingredient_1} to a large bowl.')\nprint()\nprint(f'Pour over {amount_2 * servings}ml of {ingredient_2}.')\nprint()\nprint(f'Sprinkle with {amount_3 * servings}g of {ingredient_3} and serve cold 🧊. Yum!')\n--- \/code ---\n<\/div>\n\n
\n
To make this revolting recipe for 3 people add 150g of maggot mash 🐛 to a large bowl.\n\nPour over 90ml of sock juice 🧦.\n\nSprinkle with 30g of toenail sprinkles 🦶 and serve cold 🧊. Yum!<\/pre>\n<\/div>\n\n
\n\n### Tip\n\nAdding `print()` with nothing in it is a great way to add blank lines in your output. \nYou can combine text, variables, and maths all in the same f-string!\n\n<\/div>\n\n
\n\n### Debugging\n\n- Check that every sentence is inside a `print(f'...')`\n- Watch your brackets and punctuation carefully!\n\n<\/div>\n" + }, + { + "filename": "main.py", + "path": "en\/solutions\/", + "content": "# Gross Groceries recipe card\n\n# Ingredients and amounts for 1 person\n\ningredient_1 = 'maggot mash 🐛'\namount_1 = 50\n\ningredient_2 = 'sock juice 🧦'\namount_2 = 30\n\ningredient_3 = 'toenail sprinkles 🦶'\namount_3 = 10\n# Number of servings\nservings = 3\n\n# Scaled-up ingredients\nprint(f'{amount_1 * servings}g of {ingredient_1}')\nprint(f'{amount_2 * servings}ml of {ingredient_2}')\nprint(f'{amount_3 * servings}g of {ingredient_3}')\n\n# Print recipe instructions\nprint()\nprint(f'To make this revolting recipe for {servings} people add {amount_1 * servings}g of {ingredient_1} to a large bowl.')\nprint()\nprint(f'Pour over {amount_2 * servings}ml of {ingredient_2}.')\nprint()\nprint(f'Sprinkle with {amount_3 * servings}g of {ingredient_3} and serve cold 🧊. Yum!')\n" + }, + { + "filename": "README.md", + "path": "python-bytes-gross-groceries\/", + "content": "# Python bytes - Gross groceries\n\n![A cartoon recipe card with gross ingredients like sock juice and toenail sprinkles](en\/images\/banner.png)\n\nProject description\n\nFind the project online at [projects.raspberrypi.org\/en\/projects\/python-bytes-gross-groceries](https:\/\/projects.raspberrypi.org\/en\/projects\/python-bytes-gross-groceries)\n\n## Resources\nFor project materials and solutions, see [en\/resources](https:\/\/github.com\/raspberrypilearning\/python-bytes-gross-groceries\/tree\/master\/en\/resources) and [en\/solutions](https:\/\/github.com\/raspberrypilearning\/python-bytes-gross-groceries\/tree\/master\/en\/solutions).\n\n## Contributing\nSee [CONTRIBUTING.md](CONTRIBUTING.md)\n\n## Licence\nSee [LICENCE.md](LICENCE.md)\n" + }, + { + "filename": "CONTRIBUTING.md", + "path": "python-bytes-gross-groceries\/", + "content": "# Contributing\n\nAll contributions are assumed to be licensed under the same licence as the source, i.e. [CC BY-SA](http:\/\/creativecommons.org\/licenses\/by-sa\/4.0\/). This licence must remain in all derivatives of this work.\n\n## Issues\n\nIf you find a mistake, bug, or other problem, please [open an issue](https:\/\/github.com\/raspberrypilearning\/python-bytes-gross-groceries\/issues) in this repository.\n\n## Pull requests\n\nAll edits to a resource should be made to the draft branch or to a fork of the repo. These patches can then be submitted as a pull request.\n\nIf you fix a mistake, bug, or problem or have something to contribute, please create a pull request for each modification. Please consider grouping modifications sensibly, e.g. don't bundle typo fixes in the same pull request as code changes, file them separately instead.\n\nPlease note that sometimes things are done for pedagogical reasons so changes which make sense from a software engineering perspective (reducing duplication or making use of more advanced programming language features) may not be suitable to maintain the intended educational value.\n\n## Derivatives\n\nSee [LICENCE.md](LICENCE.md) for content licence. The licence must remain in all derivatives of this work.\n\n## Translation\n\nYou can help us make this project available to more people around the world by translating it. For more information, please go to [rpf.io\/translate](https:\/\/rpf.io\/translate).\n" + }, + { + "filename": "LICENCE.md", + "path": "python-bytes-gross-groceries\/", + "content": "# Licence\n\nUnless otherwise specified, everything in this repository is covered by the following licence:\n\n[![Creative Commons licence](http:\/\/i.creativecommons.org\/l\/by-sa\/4.0\/88x31.png)](http:\/\/creativecommons.org\/licenses\/by-sa\/4.0\/)\n\n**Python bytes - Gross groceries** by the [Raspberry Pi Foundation](http:\/\/www.raspberrypi.org) is licensed under a [Creative Commons Attribution 4.0 International licence](http:\/\/creativecommons.org\/licenses\/by-sa\/4.0\/).\n\nBased on a work at https:\/\/github.com\/raspberrypilearning\/python-bytes-gross-groceries.\n" + }, + { + "filename": "crowdin.yml", + "path": "python-bytes-gross-groceries\/", + "content": "files:\n - source: \/en\/**\/*.*\n translation: \/%locale%\/**\/%original_file_name%\n" + } +] \ No newline at end of file diff --git a/nl-NL/solutions/main.py b/nl-NL/solutions/main.py new file mode 100644 index 0000000..855cb24 --- /dev/null +++ b/nl-NL/solutions/main.py @@ -0,0 +1,27 @@ +# Gross Groceries recipe card + +# Ingredients and amounts for 1 person + +ingredient_1 = 'maggot mash 🐛' +amount_1 = 50 + +ingredient_2 = 'sock juice 🧦' +amount_2 = 30 + +ingredient_3 = 'toenail sprinkles 🦶' +amount_3 = 10 +# Number of servings +servings = 3 + +# Scaled-up ingredients +print(f'{amount_1 * servings}g of {ingredient_1}') +print(f'{amount_2 * servings}ml of {ingredient_2}') +print(f'{amount_3 * servings}g of {ingredient_3}') + +# Print recipe instructions +print() +print(f'To make this revolting recipe for {servings} people add {amount_1 * servings}g of {ingredient_1} to a large bowl.') +print() +print(f'Pour over {amount_2 * servings}ml of {ingredient_2}.') +print() +print(f'Sprinkle with {amount_3 * servings}g of {ingredient_3} and serve cold 🧊. Yum!') diff --git a/nl-NL/step_1.md b/nl-NL/step_1.md new file mode 100644 index 0000000..1f2980d --- /dev/null +++ b/nl-NL/step_1.md @@ -0,0 +1,72 @@ +

Write your first disgusting ingredient

+ +\--- task --- + +Add a gross ingredient and print it using an f-string. + +\--- /task --- + +

Start your recipe

+ +The owner of an odd restaurant has decided to use code to help make their recipes. You're the coder they've hired. 🧑‍💻 +Your job is to help create the grossest recipe card ever 🤢 + +Let’s start by adding your first ingredient. But before we write any code, you’ll notice some lines that start with `#` — these are **comments**. + +Comments are notes in your code that help you (and others!) understand what each part does. Python ignores them when your program runs. + +Now try this: + +1. Choose a disgusting ingredient like `'maggot mash 🐛'` or `'slug slime 🐌'`. +2. Decide how much of it you want to use. Let’s say `50` grams. +3. Use an **f-string** to print the amount and the ingredient. + +
+--- code --- +--- +language: python +filename: main.py +line_numbers: true +line_number_start: 3 +line_highlights: 5-6,11 +--- + +# Ingredients and amounts for 1 person + +ingredient_1 = 'maggot mash 🐛' +amount_1 = 50 + +# Number of servings + +# Scaled-up ingredients + +print(f'{amount_1}g of {ingredient_1}') + +\--- /code --- + +
+ +
+
50g of maggot mash 🐛
+
+ +
+ +### Tip + +If your code prints nothing or shows an error, check that: + +- You used **quotes** around your ingredient name (it's a string!) +- You’ve spelled the variable names correctly +- You used the `f` before the string in `print(f'...')` + +
+ +
+ +### Foutopsporing + +- If Python says there's a `NameError`, you may have a typo in your variable name +- If you see `{amount_1}` in the output instead of the number, make sure your string starts with `f` + +
diff --git a/nl-NL/step_2.md b/nl-NL/step_2.md new file mode 100644 index 0000000..d7c116b --- /dev/null +++ b/nl-NL/step_2.md @@ -0,0 +1,58 @@ +

Feed more people

+ +\--- task --- + +Add a servings variable and use it to scale up your ingredient + +\--- /task --- + +

Make it serve more than one!

+ +Right now, your ingredient amount is for just **one** person. But what if you wanted to feed 3, or even 10 people? + +Instead of writing new numbers, you can **multiply** the amount by the number of servings — using maths inside your f-string! + +Let’s add a variable called `servings`, and update your print line to use it: + +
+--- code --- +--- +language: python +filename: main.py +line_numbers: true +line_number_start: 7 +line_highlights: 8,11 +--- + +# Number of servings + +servings = 3 + +# Scaled-up ingredients + +print(f'{amount_1 \* servings}g of {ingredient_1}') + +\--- /code --- + +
+ +
+
150g of maggot mash 🐛
+
+ +
+ +### Tip + +You can do maths inside an f-string using `{}` — Python works it out before printing the message! + +
+ +
+ +### Foutopsporing + +- Make sure your variable name is `servings`, not `serving` or `serves` +- Don’t forget the `*` for multiplication + +
diff --git a/nl-NL/step_3.md b/nl-NL/step_3.md new file mode 100644 index 0000000..871eb96 --- /dev/null +++ b/nl-NL/step_3.md @@ -0,0 +1,68 @@ +

Add more ingredients

+ +\--- task --- + +Add two more gross ingredients and scale them up using f-strings + +\--- /task --- + +

Make your recipe extra disgusting

+ +One ingredient is never enough for a proper disgusting dish! Let's add two more ingredients to your recipe. + +1. Add `ingredient_2` and `ingredient_3` — give them gross names like `'sock juice 🧦'` or `'toenail sprinkles 🦶'`. +2. Add matching `amount_2` and `amount_3` values. +3. Use f-strings to print out **all three ingredients**, scaled up using your `servings` variable. + +
+--- code --- +--- +language: python +filename: main.py +line_numbers: true +line_number_start: 3 +line_highlights: 8-10,11-12,18-19 +--- + +ingredient_2 = 'sock juice 🧦' +amount_2 = 30 + +ingredient_3 = 'toenail sprinkles 🦶' +amount_3 = 10 + +# Number of servings + +servings = 3 + +# Scaled-up ingredients + +print(f'{amount_1 \* servings}g of {ingredient_1}') +print(f'{amount_2 \* servings}ml of {ingredient_2}') +print(f'{amount_3 \* servings}g of {ingredient_3}') + +\--- /code --- + +
+ +
+
150g of maggot mash 🐛
+90ml of sock juice 🧦
+30g of toenail sprinkles 🦶
+
+ +
+ +### Tip + +You can label each ingredient with different units like `g` (grams) or `ml` (millilitres) depending on what it is! + +
+ +
+ +### Foutopsporing + +- Make sure your variable names match exactly — Python is case-sensitive! +- Don’t forget to multiply by `servings` inside each f-string + +
diff --git a/nl-NL/step_4.md b/nl-NL/step_4.md new file mode 100644 index 0000000..ba577e9 --- /dev/null +++ b/nl-NL/step_4.md @@ -0,0 +1,54 @@ +

Start your recipe instructions

+ +\--- task --- + +Use an f-string to describe the number of people and the first ingredient + +\--- /task --- + +

Tell the chef what to do

+ +Now it’s time to turn your ingredient list into an actual recipe! 🍲 + +Your first step will be to describe the number of people being fed and the first ingredient to be added. + +
+--- code --- +--- +language: python +filename: main.py +line_numbers: true +line_number_start: 21 +line_highlights: 22-23 +--- + +# Print recipe instructions + +print() +print(f'To make this revolting recipe for {servings} people add {amount_1 \* servings}g of {ingredient_1} to a large bowl.') + +\--- /code --- + +
+ +
+
To make this revolting recipe for 3 people add 150g of maggot mash 🐛 to a large bowl.
+
+ +
+ +### Tip + +You can do **maths inside an f-string**! +This lets you calculate the ingredient amounts and show them inside a sentence without needing extra lines of code. + +
+ +
+ +### Foutopsporing + +- Make sure you used `* servings` inside the `{}` for the amount +- Don’t forget the `f` at the start of your string + +
diff --git a/nl-NL/step_5.md b/nl-NL/step_5.md new file mode 100644 index 0000000..00b59d4 --- /dev/null +++ b/nl-NL/step_5.md @@ -0,0 +1,92 @@ +

Finish your disgusting recipe

+ +\--- task --- + +Use more f-strings to describe how to prepare your ingredients + +\--- /task --- + +

Serve it up 🤢

+ +Let’s finish the recipe by printing the rest of the disgusting instructions. + +You’ll describe: + +- What to pour in next +- How to garnish it with sprinkles +- How to serve it to your (un)lucky guests! + +Add these final lines to your program: + +
+--- code --- +--- +language: python +filename: main.py +line_numbers: true +line_number_start: 21 +line_highlights: 24-27 +--- + +# Print recipe instructions + +print() +print(f'To make this revolting recipe for {servings} people add {amount_1 \* servings}g of {ingredient_1} to a large bowl.') +print() +print(f'Pour over {amount_2 \* servings}ml of {ingredient_2}.') +print() +print(f'Sprinkle with {amount_3 \* servings}g of {ingredient_3} and serve cold 🧊. Yum!') + +\--- /code --- + +
+ +
+
To make this revolting recipe for 3 people add 150g of maggot mash 🐛 to a large bowl.
+
+Pour over 90ml of sock juice 🧦.
+
+Sprinkle with 30g of toenail sprinkles 🦶 and serve cold 🧊. Yum!
+ +
+ +
+ +### Tip + +Adding `print()` with nothing in it is a great way to add blank lines in your output. +You can combine text, variables, and maths all in the same f-string! + +
+ +
+ +### Foutopsporing + +- Check that every sentence is inside a `print(f'...')` +- Watch your brackets and punctuation carefully! + +
+ +
+ +### Terugkoppeling + +This is a beta projects, which means it is brand new and not widely available. If you've tested this project on your own or with your club, let us know what you think. + + +Give feedback + +
diff --git a/pt-BR/code/starter/main.py b/pt-BR/code/starter/main.py new file mode 100644 index 0000000..45d5a6a --- /dev/null +++ b/pt-BR/code/starter/main.py @@ -0,0 +1,12 @@ +# Gross Groceries recipe card + +# Ingredients and amounts for 1 person + + +# Number of servings + + +# Scaled-up ingredients + + +# Print recipe instructions diff --git a/pt-BR/code/starter/project_config.yml b/pt-BR/code/starter/project_config.yml new file mode 100644 index 0000000..d184c95 --- /dev/null +++ b/pt-BR/code/starter/project_config.yml @@ -0,0 +1,4 @@ +name: "Python Bytes - Gross Groceries" +identifier: "python-bytes-gross-groceries" +type: python +build: true diff --git a/pt-BR/images/banner.png b/pt-BR/images/banner.png new file mode 100644 index 0000000000000000000000000000000000000000..685e0cfcdba14a01ff649260c3122d52f976b0d7 GIT binary patch literal 43369 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 C!4%N| literal 0 HcmV?d00001 diff --git a/pt-BR/mentor.md b/pt-BR/mentor.md new file mode 100644 index 0000000..fe5ddcf --- /dev/null +++ b/pt-BR/mentor.md @@ -0,0 +1,30 @@ +# Mentor Notes: Gross Groceries + +## Project Overview + +In this project, learners will use Python to help a strange restaurant owner create a revolting recipe card. They’ll start with simple ingredients and build up to printing full recipe instructions using f-strings. By the end, learners will have used variables, strings, numbers, simple arithmetic, and f-strings across multiple steps. + +--- + +## What Learners Will Practise + +- Creating and using variables +- Combining strings and numbers with f-strings +- Performing basic multiplication in code +- Writing multi-line Python programs with clear structure + +--- + +## Teaching Tips + +- Encourage learners to come up with their own disgusting ingredients — the sillier, the better! +- Prompt them to read printed output carefully to understand the effect of their changes. +- Reinforce that f-strings are a powerful way to combine text and values without needing multiple `+` symbols. + +--- + +## Extension Ideas + +- Let learners use `input()` to ask how many people the recipe should serve +- Encourage them to use `\n` to format multi-line recipe cards +- Add even more ingredients or steps to the recipe diff --git a/pt-BR/meta.yml b/pt-BR/meta.yml new file mode 100644 index 0000000..330e5c4 --- /dev/null +++ b/pt-BR/meta.yml @@ -0,0 +1,20 @@ +title: Python bytes - Gross groceries +hero_image: images/banner.png +description: Write a revolting recipe card using variables, f-strings, and maths +meta_title: Learn to code with Gross Groceries | Python Bytes +meta_description: Learn how to use Python f-strings and variables to print a disgusting recipe for an odd restaurant. +version: 1 +listed: true +copyedit: false +last_tested: "2025-04-14" +steps: + - title: step_1 + - title: step_2 + completion: + - engaged + - title: step_3 + - title: step_4 + - title: step_5 + completion: + - internal + - external diff --git a/pt-BR/resources/dataframe.json b/pt-BR/resources/dataframe.json new file mode 100644 index 0000000..c7460c9 --- /dev/null +++ b/pt-BR/resources/dataframe.json @@ -0,0 +1,72 @@ +[ + { + "filename": "meta.yml", + "path": "en\/", + "content": "title: Python bytes - Gross groceries\nhero_image: images\/banner.png\ndescription: Write a revolting recipe card using variables, f-strings, and maths\nmeta_title: Learn to code with Gross Groceries | Python Bytes\nmeta_description: Learn how to use Python f-strings and variables to print a disgusting recipe for an odd restaurant.\nversion: 1\nlisted: false\ncopyedit: false\nlast_tested: \"2025-04-14\"\nsteps:\n - title: step_1\n - title: step_2\n completion:\n - engaged\n - title: step_3\n - title: step_4\n - title: step_5\n completion:\n - internal\n - external\n" + }, + { + "filename": "main.py", + "path": "en\/code\/starter\/", + "content": "# Gross Groceries recipe card\n\n# Ingredients and amounts for 1 person\n\n\n# Number of servings\n\n\n# Scaled-up ingredients\n\n\n# Print recipe instructions\n" + }, + { + "filename": "project_config.yml", + "path": "en\/code\/starter\/", + "content": "name: \"Python Bytes - Gross Groceries\"\nidentifier: \"python-bytes-gross-groceries\"\ntype: python\nbuild: true\n" + }, + { + "filename": "mentor.md", + "path": "en\/", + "content": "# Mentor Notes: Gross Groceries\n\n## Project Overview\n\nIn this project, learners will use Python to help a strange restaurant owner create a revolting recipe card. They’ll start with simple ingredients and build up to printing full recipe instructions using f-strings. By the end, learners will have used variables, strings, numbers, simple arithmetic, and f-strings across multiple steps.\n\n---\n\n## What Learners Will Practise\n\n- Creating and using variables\n- Combining strings and numbers with f-strings\n- Performing basic multiplication in code\n- Writing multi-line Python programs with clear structure\n\n---\n\n## Teaching Tips\n\n- Encourage learners to come up with their own disgusting ingredients — the sillier, the better!\n- Prompt them to read printed output carefully to understand the effect of their changes.\n- Reinforce that f-strings are a powerful way to combine text and values without needing multiple `+` symbols.\n\n---\n\n## Extension Ideas\n\n- Let learners use `input()` to ask how many people the recipe should serve\n- Encourage them to use `\\n` to format multi-line recipe cards\n- Add even more ingredients or steps to the recipe\n" + }, + { + "filename": "step_1.md", + "path": "en\/", + "content": "

Write your first disgusting ingredient<\/h2>\n--- task ---\nAdd a gross ingredient and print it using an f-string\n--- \/task ---\n\n

Start your recipe<\/h2>\n\nThe owner of an odd restaurant has decided to use code to help make their recipes. You're the coder they've hired. 🧑‍💻 \nYour job is to help create the grossest recipe card ever 🤢\n\nLet’s start by adding your first ingredient. But before we write any code, you’ll notice some lines that start with `#` — these are **comments**.\n\nComments are notes in your code that help you (and others!) understand what each part does. Python ignores them when your program runs.\n\nNow try this:\n\n1. Choose a disgusting ingredient like `'maggot mash 🐛'` or `'slug slime 🐌'`.\n2. Decide how much of it you want to use. Let’s say `50` grams.\n3. Use an **f-string** to print the amount and the ingredient.\n\n
\n--- code ---\n---\nlanguage: python\nfilename: main.py\nline_numbers: true\nline_number_start: 3\nline_highlights: 5-6,11\n---\n# Ingredients and amounts for 1 person\n\ningredient_1 = 'maggot mash 🐛'\namount_1 = 50\n# Number of servings\n\n\n# Scaled-up ingredients\nprint(f'{amount_1}g of {ingredient_1}')\n--- \/code ---\n<\/div>\n\n
\n
50g of maggot mash 🐛<\/pre>\n<\/div>\n\n
\n\n### Tip\n\nIf your code prints nothing or shows an error, check that:\n- You used **quotes** around your ingredient name (it's a string!)\n- You’ve spelled the variable names correctly\n- You used the `f` before the string in `print(f'...')`\n\n<\/div>\n\n
\n\n### Debugging\n\n- If Python says there's a `NameError`, you may have a typo in your variable name\n- If you see `{amount_1}` in the output instead of the number, make sure your string starts with `f`\n\n<\/div>\n" + }, + { + "filename": "step_2.md", + "path": "en\/", + "content": "

Feed more people<\/h2>\n--- task ---\nAdd a servings variable and use it to scale up your ingredient\n--- \/task ---\n\n

Make it serve more than one!<\/h2>\n\nRight now, your ingredient amount is for just **one** person. But what if you wanted to feed 3, or even 10 people?\n\nInstead of writing new numbers, you can **multiply** the amount by the number of servings — using maths inside your f-string!\n\nLet’s add a variable called `servings`, and update your print line to use it:\n\n
\n--- code ---\n---\nlanguage: python\nfilename: main.py\nline_numbers: true\nline_number_start: 7\nline_highlights: 8,11\n---\n# Number of servings\nservings = 3\n\n# Scaled-up ingredients\nprint(f'{amount_1 * servings}g of {ingredient_1}')\n--- \/code ---\n<\/div>\n\n
\n
150g of maggot mash 🐛<\/pre>\n<\/div>\n\n
\n\n### Tip\n\nYou can do maths inside an f-string using `{}` — Python works it out before printing the message!\n\n<\/div>\n\n
\n\n### Debugging\n\n- Make sure your variable name is `servings`, not `serving` or `serves`\n- Don’t forget the `*` for multiplication\n\n<\/div>\n" + }, + { + "filename": "step_3.md", + "path": "en\/", + "content": "

Add more ingredients<\/h2>\n--- task ---\nAdd two more gross ingredients and scale them up using f-strings\n--- \/task ---\n\n

Make your recipe extra disgusting<\/h2>\n\nOne ingredient is never enough for a proper disgusting dish! Let's add two more ingredients to your recipe.\n\n1. Add `ingredient_2` and `ingredient_3` — give them gross names like `'sock juice 🧦'` or `'toenail sprinkles 🦶'`.\n2. Add matching `amount_2` and `amount_3` values.\n3. Use f-strings to print out **all three ingredients**, scaled up using your `servings` variable.\n\n
\n--- code ---\n---\nlanguage: python\nfilename: main.py\nline_numbers: true\nline_number_start: 3\nline_highlights: 8-10,11-12,18-19\n---\ningredient_2 = 'sock juice 🧦'\namount_2 = 30\n\ningredient_3 = 'toenail sprinkles 🦶'\namount_3 = 10\n# Number of servings\nservings = 3\n\n# Scaled-up ingredients\nprint(f'{amount_1 * servings}g of {ingredient_1}')\nprint(f'{amount_2 * servings}ml of {ingredient_2}')\nprint(f'{amount_3 * servings}g of {ingredient_3}')\n--- \/code ---\n<\/div>\n\n
\n
150g of maggot mash 🐛\n90ml of sock juice 🧦\n30g of toenail sprinkles 🦶<\/pre>\n<\/div>\n\n
\n\n### Tip\n\nYou can label each ingredient with different units like `g` (grams) or `ml` (millilitres) depending on what it is!\n\n<\/div>\n\n
\n\n### Debugging\n\n- Make sure your variable names match exactly — Python is case-sensitive!\n- Don’t forget to multiply by `servings` inside each f-string\n\n<\/div>\n" + }, + { + "filename": "step_4.md", + "path": "en\/", + "content": "

Start your recipe instructions<\/h2>\n--- task ---\nUse an f-string to describe the number of people and the first ingredient\n--- \/task ---\n\n

Tell the chef what to do<\/h2>\n\nNow it’s time to turn your ingredient list into an actual recipe! 🍲\n\nYour first step will be to describe the number of people being fed and the first ingredient to be added.\n\n
\n--- code ---\n---\nlanguage: python\nfilename: main.py\nline_numbers: true\nline_number_start: 21\nline_highlights: 22-23\n---\n# Print recipe instructions\nprint()\nprint(f'To make this revolting recipe for {servings} people add {amount_1 * servings}g of {ingredient_1} to a large bowl.')\n--- \/code ---\n<\/div>\n\n
\n
To make this revolting recipe for 3 people add 150g of maggot mash 🐛 to a large bowl.<\/pre>\n<\/div>\n\n
\n\n### Tip\n\nYou can do **maths inside an f-string**! \nThis lets you calculate the ingredient amounts and show them inside a sentence without needing extra lines of code.\n\n<\/div>\n\n
\n\n### Debugging\n\n- Make sure you used `* servings` inside the `{}` for the amount\n- Don’t forget the `f` at the start of your string\n\n<\/div>\n" + }, + { + "filename": "step_5.md", + "path": "en\/", + "content": "

Finish your disgusting recipe<\/h2>\n--- task ---\nUse more f-strings to describe how to prepare your ingredients\n--- \/task ---\n\n

Serve it up 🤢<\/h2>\n\nLet’s finish the recipe by printing the rest of the disgusting instructions.\n\nYou’ll describe:\n- What to pour in next\n- How to garnish it with sprinkles\n- How to serve it to your (un)lucky guests!\n\nAdd these final lines to your program:\n\n
\n--- code ---\n---\nlanguage: python\nfilename: main.py\nline_numbers: true\nline_number_start: 21\nline_highlights: 24-27\n---\n# Print recipe instructions\nprint()\nprint(f'To make this revolting recipe for {servings} people add {amount_1 * servings}g of {ingredient_1} to a large bowl.')\nprint()\nprint(f'Pour over {amount_2 * servings}ml of {ingredient_2}.')\nprint()\nprint(f'Sprinkle with {amount_3 * servings}g of {ingredient_3} and serve cold 🧊. Yum!')\n--- \/code ---\n<\/div>\n\n
\n
To make this revolting recipe for 3 people add 150g of maggot mash 🐛 to a large bowl.\n\nPour over 90ml of sock juice 🧦.\n\nSprinkle with 30g of toenail sprinkles 🦶 and serve cold 🧊. Yum!<\/pre>\n<\/div>\n\n
\n\n### Tip\n\nAdding `print()` with nothing in it is a great way to add blank lines in your output. \nYou can combine text, variables, and maths all in the same f-string!\n\n<\/div>\n\n
\n\n### Debugging\n\n- Check that every sentence is inside a `print(f'...')`\n- Watch your brackets and punctuation carefully!\n\n<\/div>\n" + }, + { + "filename": "main.py", + "path": "en\/solutions\/", + "content": "# Gross Groceries recipe card\n\n# Ingredients and amounts for 1 person\n\ningredient_1 = 'maggot mash 🐛'\namount_1 = 50\n\ningredient_2 = 'sock juice 🧦'\namount_2 = 30\n\ningredient_3 = 'toenail sprinkles 🦶'\namount_3 = 10\n# Number of servings\nservings = 3\n\n# Scaled-up ingredients\nprint(f'{amount_1 * servings}g of {ingredient_1}')\nprint(f'{amount_2 * servings}ml of {ingredient_2}')\nprint(f'{amount_3 * servings}g of {ingredient_3}')\n\n# Print recipe instructions\nprint()\nprint(f'To make this revolting recipe for {servings} people add {amount_1 * servings}g of {ingredient_1} to a large bowl.')\nprint()\nprint(f'Pour over {amount_2 * servings}ml of {ingredient_2}.')\nprint()\nprint(f'Sprinkle with {amount_3 * servings}g of {ingredient_3} and serve cold 🧊. Yum!')\n" + }, + { + "filename": "README.md", + "path": "python-bytes-gross-groceries\/", + "content": "# Python bytes - Gross groceries\n\n![A cartoon recipe card with gross ingredients like sock juice and toenail sprinkles](en\/images\/banner.png)\n\nProject description\n\nFind the project online at [projects.raspberrypi.org\/en\/projects\/python-bytes-gross-groceries](https:\/\/projects.raspberrypi.org\/en\/projects\/python-bytes-gross-groceries)\n\n## Resources\nFor project materials and solutions, see [en\/resources](https:\/\/github.com\/raspberrypilearning\/python-bytes-gross-groceries\/tree\/master\/en\/resources) and [en\/solutions](https:\/\/github.com\/raspberrypilearning\/python-bytes-gross-groceries\/tree\/master\/en\/solutions).\n\n## Contributing\nSee [CONTRIBUTING.md](CONTRIBUTING.md)\n\n## Licence\nSee [LICENCE.md](LICENCE.md)\n" + }, + { + "filename": "CONTRIBUTING.md", + "path": "python-bytes-gross-groceries\/", + "content": "# Contributing\n\nAll contributions are assumed to be licensed under the same licence as the source, i.e. [CC BY-SA](http:\/\/creativecommons.org\/licenses\/by-sa\/4.0\/). This licence must remain in all derivatives of this work.\n\n## Issues\n\nIf you find a mistake, bug, or other problem, please [open an issue](https:\/\/github.com\/raspberrypilearning\/python-bytes-gross-groceries\/issues) in this repository.\n\n## Pull requests\n\nAll edits to a resource should be made to the draft branch or to a fork of the repo. These patches can then be submitted as a pull request.\n\nIf you fix a mistake, bug, or problem or have something to contribute, please create a pull request for each modification. Please consider grouping modifications sensibly, e.g. don't bundle typo fixes in the same pull request as code changes, file them separately instead.\n\nPlease note that sometimes things are done for pedagogical reasons so changes which make sense from a software engineering perspective (reducing duplication or making use of more advanced programming language features) may not be suitable to maintain the intended educational value.\n\n## Derivatives\n\nSee [LICENCE.md](LICENCE.md) for content licence. The licence must remain in all derivatives of this work.\n\n## Translation\n\nYou can help us make this project available to more people around the world by translating it. For more information, please go to [rpf.io\/translate](https:\/\/rpf.io\/translate).\n" + }, + { + "filename": "LICENCE.md", + "path": "python-bytes-gross-groceries\/", + "content": "# Licence\n\nUnless otherwise specified, everything in this repository is covered by the following licence:\n\n[![Creative Commons licence](http:\/\/i.creativecommons.org\/l\/by-sa\/4.0\/88x31.png)](http:\/\/creativecommons.org\/licenses\/by-sa\/4.0\/)\n\n**Python bytes - Gross groceries** by the [Raspberry Pi Foundation](http:\/\/www.raspberrypi.org) is licensed under a [Creative Commons Attribution 4.0 International licence](http:\/\/creativecommons.org\/licenses\/by-sa\/4.0\/).\n\nBased on a work at https:\/\/github.com\/raspberrypilearning\/python-bytes-gross-groceries.\n" + }, + { + "filename": "crowdin.yml", + "path": "python-bytes-gross-groceries\/", + "content": "files:\n - source: \/en\/**\/*.*\n translation: \/%locale%\/**\/%original_file_name%\n" + } +] \ No newline at end of file diff --git a/pt-BR/solutions/main.py b/pt-BR/solutions/main.py new file mode 100644 index 0000000..855cb24 --- /dev/null +++ b/pt-BR/solutions/main.py @@ -0,0 +1,27 @@ +# Gross Groceries recipe card + +# Ingredients and amounts for 1 person + +ingredient_1 = 'maggot mash 🐛' +amount_1 = 50 + +ingredient_2 = 'sock juice 🧦' +amount_2 = 30 + +ingredient_3 = 'toenail sprinkles 🦶' +amount_3 = 10 +# Number of servings +servings = 3 + +# Scaled-up ingredients +print(f'{amount_1 * servings}g of {ingredient_1}') +print(f'{amount_2 * servings}ml of {ingredient_2}') +print(f'{amount_3 * servings}g of {ingredient_3}') + +# Print recipe instructions +print() +print(f'To make this revolting recipe for {servings} people add {amount_1 * servings}g of {ingredient_1} to a large bowl.') +print() +print(f'Pour over {amount_2 * servings}ml of {ingredient_2}.') +print() +print(f'Sprinkle with {amount_3 * servings}g of {ingredient_3} and serve cold 🧊. Yum!') diff --git a/pt-BR/step_1.md b/pt-BR/step_1.md new file mode 100644 index 0000000..ee16b36 --- /dev/null +++ b/pt-BR/step_1.md @@ -0,0 +1,72 @@ +

Write your first disgusting ingredient

+ +\--- task --- + +Add a gross ingredient and print it using an f-string. + +\--- /task --- + +

Start your recipe

+ +The owner of an odd restaurant has decided to use code to help make their recipes. You're the coder they've hired. 🧑‍💻 +Your job is to help create the grossest recipe card ever 🤢 + +Let’s start by adding your first ingredient. But before we write any code, you’ll notice some lines that start with `#` — these are **comments**. + +Comments are notes in your code that help you (and others!) understand what each part does. Python ignores them when your program runs. + +Now try this: + +1. Choose a disgusting ingredient like `'maggot mash 🐛'` or `'slug slime 🐌'`. +2. Decide how much of it you want to use. Let’s say `50` grams. +3. Use an **f-string** to print the amount and the ingredient. + +
+--- code --- +--- +language: python +filename: main.py +line_numbers: true +line_number_start: 3 +line_highlights: 5-6,11 +--- + +# Ingredients and amounts for 1 person + +ingredient_1 = 'maggot mash 🐛' +amount_1 = 50 + +# Number of servings + +# Scaled-up ingredients + +print(f'{amount_1}g of {ingredient_1}') + +\--- /code --- + +
+ +
+
50g of maggot mash 🐛
+
+ +
+ +### Tip + +If your code prints nothing or shows an error, check that: + +- You used **quotes** around your ingredient name (it's a string!) +- You’ve spelled the variable names correctly +- You used the `f` before the string in `print(f'...')` + +
+ +
+ +### Debugging + +- If Python says there's a `NameError`, you may have a typo in your variable name +- If you see `{amount_1}` in the output instead of the number, make sure your string starts with `f` + +
diff --git a/pt-BR/step_2.md b/pt-BR/step_2.md new file mode 100644 index 0000000..349fedb --- /dev/null +++ b/pt-BR/step_2.md @@ -0,0 +1,58 @@ +

Feed more people

+ +\--- task --- + +Add a servings variable and use it to scale up your ingredient + +\--- /task --- + +

Make it serve more than one!

+ +Right now, your ingredient amount is for just **one** person. But what if you wanted to feed 3, or even 10 people? + +Instead of writing new numbers, you can **multiply** the amount by the number of servings — using maths inside your f-string! + +Let’s add a variable called `servings`, and update your print line to use it: + +
+--- code --- +--- +language: python +filename: main.py +line_numbers: true +line_number_start: 7 +line_highlights: 8,11 +--- + +# Number of servings + +servings = 3 + +# Scaled-up ingredients + +print(f'{amount_1 \* servings}g of {ingredient_1}') + +\--- /code --- + +
+ +
+
150g of maggot mash 🐛
+
+ +
+ +### Tip + +You can do maths inside an f-string using `{}` — Python works it out before printing the message! + +
+ +
+ +### Debugging + +- Make sure your variable name is `servings`, not `serving` or `serves` +- Don’t forget the `*` for multiplication + +
diff --git a/pt-BR/step_3.md b/pt-BR/step_3.md new file mode 100644 index 0000000..23e2cc8 --- /dev/null +++ b/pt-BR/step_3.md @@ -0,0 +1,68 @@ +

Add more ingredients

+ +\--- task --- + +Add two more gross ingredients and scale them up using f-strings + +\--- /task --- + +

Make your recipe extra disgusting

+ +One ingredient is never enough for a proper disgusting dish! Let's add two more ingredients to your recipe. + +1. Add `ingredient_2` and `ingredient_3` — give them gross names like `'sock juice 🧦'` or `'toenail sprinkles 🦶'`. +2. Add matching `amount_2` and `amount_3` values. +3. Use f-strings to print out **all three ingredients**, scaled up using your `servings` variable. + +
+--- code --- +--- +language: python +filename: main.py +line_numbers: true +line_number_start: 3 +line_highlights: 8-10,11-12,18-19 +--- + +ingredient_2 = 'sock juice 🧦' +amount_2 = 30 + +ingredient_3 = 'toenail sprinkles 🦶' +amount_3 = 10 + +# Number of servings + +servings = 3 + +# Scaled-up ingredients + +print(f'{amount_1 \* servings}g of {ingredient_1}') +print(f'{amount_2 \* servings}ml of {ingredient_2}') +print(f'{amount_3 \* servings}g of {ingredient_3}') + +\--- /code --- + +
+ +
+
150g of maggot mash 🐛
+90ml of sock juice 🧦
+30g of toenail sprinkles 🦶
+
+ +
+ +### Tip + +You can label each ingredient with different units like `g` (grams) or `ml` (millilitres) depending on what it is! + +
+ +
+ +### Debugging + +- Make sure your variable names match exactly — Python is case-sensitive! +- Don’t forget to multiply by `servings` inside each f-string + +
diff --git a/pt-BR/step_4.md b/pt-BR/step_4.md new file mode 100644 index 0000000..0a3a807 --- /dev/null +++ b/pt-BR/step_4.md @@ -0,0 +1,54 @@ +

Start your recipe instructions

+ +\--- task --- + +Use an f-string to describe the number of people and the first ingredient + +\--- /task --- + +

Tell the chef what to do

+ +Now it’s time to turn your ingredient list into an actual recipe! 🍲 + +Your first step will be to describe the number of people being fed and the first ingredient to be added. + +
+--- code --- +--- +language: python +filename: main.py +line_numbers: true +line_number_start: 21 +line_highlights: 22-23 +--- + +# Print recipe instructions + +print() +print(f'To make this revolting recipe for {servings} people add {amount_1 \* servings}g of {ingredient_1} to a large bowl.') + +\--- /code --- + +
+ +
+
To make this revolting recipe for 3 people add 150g of maggot mash 🐛 to a large bowl.
+
+ +
+ +### Tip + +You can do **maths inside an f-string**! +This lets you calculate the ingredient amounts and show them inside a sentence without needing extra lines of code. + +
+ +
+ +### Debugging + +- Make sure you used `* servings` inside the `{}` for the amount +- Don’t forget the `f` at the start of your string + +
diff --git a/pt-BR/step_5.md b/pt-BR/step_5.md new file mode 100644 index 0000000..3c52d9a --- /dev/null +++ b/pt-BR/step_5.md @@ -0,0 +1,92 @@ +

Finish your disgusting recipe

+ +\--- task --- + +Use more f-strings to describe how to prepare your ingredients + +\--- /task --- + +

Serve it up 🤢

+ +Let’s finish the recipe by printing the rest of the disgusting instructions. + +You’ll describe: + +- What to pour in next +- How to garnish it with sprinkles +- How to serve it to your (un)lucky guests! + +Add these final lines to your program: + +
+--- code --- +--- +language: python +filename: main.py +line_numbers: true +line_number_start: 21 +line_highlights: 24-27 +--- + +# Print recipe instructions + +print() +print(f'To make this revolting recipe for {servings} people add {amount_1 \* servings}g of {ingredient_1} to a large bowl.') +print() +print(f'Pour over {amount_2 \* servings}ml of {ingredient_2}.') +print() +print(f'Sprinkle with {amount_3 \* servings}g of {ingredient_3} and serve cold 🧊. Yum!') + +\--- /code --- + +
+ +
+
To make this revolting recipe for 3 people add 150g of maggot mash 🐛 to a large bowl.
+
+Pour over 90ml of sock juice 🧦.
+
+Sprinkle with 30g of toenail sprinkles 🦶 and serve cold 🧊. Yum!
+ +
+ +
+ +### Tip + +Adding `print()` with nothing in it is a great way to add blank lines in your output. +You can combine text, variables, and maths all in the same f-string! + +
+ +
+ +### Debugging + +- Check that every sentence is inside a `print(f'...')` +- Watch your brackets and punctuation carefully! + +
+ +
+ +### Comentários + +This is a beta projects, which means it is brand new and not widely available. If you've tested this project on your own or with your club, let us know what you think. + + +Give feedback + +
diff --git a/uk-UA/code/starter/main.py b/uk-UA/code/starter/main.py new file mode 100644 index 0000000..45d5a6a --- /dev/null +++ b/uk-UA/code/starter/main.py @@ -0,0 +1,12 @@ +# Gross Groceries recipe card + +# Ingredients and amounts for 1 person + + +# Number of servings + + +# Scaled-up ingredients + + +# Print recipe instructions diff --git a/uk-UA/code/starter/project_config.yml b/uk-UA/code/starter/project_config.yml new file mode 100644 index 0000000..d184c95 --- /dev/null +++ b/uk-UA/code/starter/project_config.yml @@ -0,0 +1,4 @@ +name: "Python Bytes - Gross Groceries" +identifier: "python-bytes-gross-groceries" +type: python +build: true diff --git a/uk-UA/images/banner.png b/uk-UA/images/banner.png new file mode 100644 index 0000000000000000000000000000000000000000..685e0cfcdba14a01ff649260c3122d52f976b0d7 GIT binary patch literal 43369 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 C!4%N| literal 0 HcmV?d00001 diff --git a/uk-UA/mentor.md b/uk-UA/mentor.md new file mode 100644 index 0000000..fe5ddcf --- /dev/null +++ b/uk-UA/mentor.md @@ -0,0 +1,30 @@ +# Mentor Notes: Gross Groceries + +## Project Overview + +In this project, learners will use Python to help a strange restaurant owner create a revolting recipe card. They’ll start with simple ingredients and build up to printing full recipe instructions using f-strings. By the end, learners will have used variables, strings, numbers, simple arithmetic, and f-strings across multiple steps. + +--- + +## What Learners Will Practise + +- Creating and using variables +- Combining strings and numbers with f-strings +- Performing basic multiplication in code +- Writing multi-line Python programs with clear structure + +--- + +## Teaching Tips + +- Encourage learners to come up with their own disgusting ingredients — the sillier, the better! +- Prompt them to read printed output carefully to understand the effect of their changes. +- Reinforce that f-strings are a powerful way to combine text and values without needing multiple `+` symbols. + +--- + +## Extension Ideas + +- Let learners use `input()` to ask how many people the recipe should serve +- Encourage them to use `\n` to format multi-line recipe cards +- Add even more ingredients or steps to the recipe diff --git a/uk-UA/meta.yml b/uk-UA/meta.yml new file mode 100644 index 0000000..330e5c4 --- /dev/null +++ b/uk-UA/meta.yml @@ -0,0 +1,20 @@ +title: Python bytes - Gross groceries +hero_image: images/banner.png +description: Write a revolting recipe card using variables, f-strings, and maths +meta_title: Learn to code with Gross Groceries | Python Bytes +meta_description: Learn how to use Python f-strings and variables to print a disgusting recipe for an odd restaurant. +version: 1 +listed: true +copyedit: false +last_tested: "2025-04-14" +steps: + - title: step_1 + - title: step_2 + completion: + - engaged + - title: step_3 + - title: step_4 + - title: step_5 + completion: + - internal + - external diff --git a/uk-UA/resources/dataframe.json b/uk-UA/resources/dataframe.json new file mode 100644 index 0000000..c7460c9 --- /dev/null +++ b/uk-UA/resources/dataframe.json @@ -0,0 +1,72 @@ +[ + { + "filename": "meta.yml", + "path": "en\/", + "content": "title: Python bytes - Gross groceries\nhero_image: images\/banner.png\ndescription: Write a revolting recipe card using variables, f-strings, and maths\nmeta_title: Learn to code with Gross Groceries | Python Bytes\nmeta_description: Learn how to use Python f-strings and variables to print a disgusting recipe for an odd restaurant.\nversion: 1\nlisted: false\ncopyedit: false\nlast_tested: \"2025-04-14\"\nsteps:\n - title: step_1\n - title: step_2\n completion:\n - engaged\n - title: step_3\n - title: step_4\n - title: step_5\n completion:\n - internal\n - external\n" + }, + { + "filename": "main.py", + "path": "en\/code\/starter\/", + "content": "# Gross Groceries recipe card\n\n# Ingredients and amounts for 1 person\n\n\n# Number of servings\n\n\n# Scaled-up ingredients\n\n\n# Print recipe instructions\n" + }, + { + "filename": "project_config.yml", + "path": "en\/code\/starter\/", + "content": "name: \"Python Bytes - Gross Groceries\"\nidentifier: \"python-bytes-gross-groceries\"\ntype: python\nbuild: true\n" + }, + { + "filename": "mentor.md", + "path": "en\/", + "content": "# Mentor Notes: Gross Groceries\n\n## Project Overview\n\nIn this project, learners will use Python to help a strange restaurant owner create a revolting recipe card. They’ll start with simple ingredients and build up to printing full recipe instructions using f-strings. By the end, learners will have used variables, strings, numbers, simple arithmetic, and f-strings across multiple steps.\n\n---\n\n## What Learners Will Practise\n\n- Creating and using variables\n- Combining strings and numbers with f-strings\n- Performing basic multiplication in code\n- Writing multi-line Python programs with clear structure\n\n---\n\n## Teaching Tips\n\n- Encourage learners to come up with their own disgusting ingredients — the sillier, the better!\n- Prompt them to read printed output carefully to understand the effect of their changes.\n- Reinforce that f-strings are a powerful way to combine text and values without needing multiple `+` symbols.\n\n---\n\n## Extension Ideas\n\n- Let learners use `input()` to ask how many people the recipe should serve\n- Encourage them to use `\\n` to format multi-line recipe cards\n- Add even more ingredients or steps to the recipe\n" + }, + { + "filename": "step_1.md", + "path": "en\/", + "content": "

Write your first disgusting ingredient<\/h2>\n--- task ---\nAdd a gross ingredient and print it using an f-string\n--- \/task ---\n\n

Start your recipe<\/h2>\n\nThe owner of an odd restaurant has decided to use code to help make their recipes. You're the coder they've hired. 🧑‍💻 \nYour job is to help create the grossest recipe card ever 🤢\n\nLet’s start by adding your first ingredient. But before we write any code, you’ll notice some lines that start with `#` — these are **comments**.\n\nComments are notes in your code that help you (and others!) understand what each part does. Python ignores them when your program runs.\n\nNow try this:\n\n1. Choose a disgusting ingredient like `'maggot mash 🐛'` or `'slug slime 🐌'`.\n2. Decide how much of it you want to use. Let’s say `50` grams.\n3. Use an **f-string** to print the amount and the ingredient.\n\n
\n--- code ---\n---\nlanguage: python\nfilename: main.py\nline_numbers: true\nline_number_start: 3\nline_highlights: 5-6,11\n---\n# Ingredients and amounts for 1 person\n\ningredient_1 = 'maggot mash 🐛'\namount_1 = 50\n# Number of servings\n\n\n# Scaled-up ingredients\nprint(f'{amount_1}g of {ingredient_1}')\n--- \/code ---\n<\/div>\n\n
\n
50g of maggot mash 🐛<\/pre>\n<\/div>\n\n
\n\n### Tip\n\nIf your code prints nothing or shows an error, check that:\n- You used **quotes** around your ingredient name (it's a string!)\n- You’ve spelled the variable names correctly\n- You used the `f` before the string in `print(f'...')`\n\n<\/div>\n\n
\n\n### Debugging\n\n- If Python says there's a `NameError`, you may have a typo in your variable name\n- If you see `{amount_1}` in the output instead of the number, make sure your string starts with `f`\n\n<\/div>\n" + }, + { + "filename": "step_2.md", + "path": "en\/", + "content": "

Feed more people<\/h2>\n--- task ---\nAdd a servings variable and use it to scale up your ingredient\n--- \/task ---\n\n

Make it serve more than one!<\/h2>\n\nRight now, your ingredient amount is for just **one** person. But what if you wanted to feed 3, or even 10 people?\n\nInstead of writing new numbers, you can **multiply** the amount by the number of servings — using maths inside your f-string!\n\nLet’s add a variable called `servings`, and update your print line to use it:\n\n
\n--- code ---\n---\nlanguage: python\nfilename: main.py\nline_numbers: true\nline_number_start: 7\nline_highlights: 8,11\n---\n# Number of servings\nservings = 3\n\n# Scaled-up ingredients\nprint(f'{amount_1 * servings}g of {ingredient_1}')\n--- \/code ---\n<\/div>\n\n
\n
150g of maggot mash 🐛<\/pre>\n<\/div>\n\n
\n\n### Tip\n\nYou can do maths inside an f-string using `{}` — Python works it out before printing the message!\n\n<\/div>\n\n
\n\n### Debugging\n\n- Make sure your variable name is `servings`, not `serving` or `serves`\n- Don’t forget the `*` for multiplication\n\n<\/div>\n" + }, + { + "filename": "step_3.md", + "path": "en\/", + "content": "

Add more ingredients<\/h2>\n--- task ---\nAdd two more gross ingredients and scale them up using f-strings\n--- \/task ---\n\n

Make your recipe extra disgusting<\/h2>\n\nOne ingredient is never enough for a proper disgusting dish! Let's add two more ingredients to your recipe.\n\n1. Add `ingredient_2` and `ingredient_3` — give them gross names like `'sock juice 🧦'` or `'toenail sprinkles 🦶'`.\n2. Add matching `amount_2` and `amount_3` values.\n3. Use f-strings to print out **all three ingredients**, scaled up using your `servings` variable.\n\n
\n--- code ---\n---\nlanguage: python\nfilename: main.py\nline_numbers: true\nline_number_start: 3\nline_highlights: 8-10,11-12,18-19\n---\ningredient_2 = 'sock juice 🧦'\namount_2 = 30\n\ningredient_3 = 'toenail sprinkles 🦶'\namount_3 = 10\n# Number of servings\nservings = 3\n\n# Scaled-up ingredients\nprint(f'{amount_1 * servings}g of {ingredient_1}')\nprint(f'{amount_2 * servings}ml of {ingredient_2}')\nprint(f'{amount_3 * servings}g of {ingredient_3}')\n--- \/code ---\n<\/div>\n\n
\n
150g of maggot mash 🐛\n90ml of sock juice 🧦\n30g of toenail sprinkles 🦶<\/pre>\n<\/div>\n\n
\n\n### Tip\n\nYou can label each ingredient with different units like `g` (grams) or `ml` (millilitres) depending on what it is!\n\n<\/div>\n\n
\n\n### Debugging\n\n- Make sure your variable names match exactly — Python is case-sensitive!\n- Don’t forget to multiply by `servings` inside each f-string\n\n<\/div>\n" + }, + { + "filename": "step_4.md", + "path": "en\/", + "content": "

Start your recipe instructions<\/h2>\n--- task ---\nUse an f-string to describe the number of people and the first ingredient\n--- \/task ---\n\n

Tell the chef what to do<\/h2>\n\nNow it’s time to turn your ingredient list into an actual recipe! 🍲\n\nYour first step will be to describe the number of people being fed and the first ingredient to be added.\n\n
\n--- code ---\n---\nlanguage: python\nfilename: main.py\nline_numbers: true\nline_number_start: 21\nline_highlights: 22-23\n---\n# Print recipe instructions\nprint()\nprint(f'To make this revolting recipe for {servings} people add {amount_1 * servings}g of {ingredient_1} to a large bowl.')\n--- \/code ---\n<\/div>\n\n
\n
To make this revolting recipe for 3 people add 150g of maggot mash 🐛 to a large bowl.<\/pre>\n<\/div>\n\n
\n\n### Tip\n\nYou can do **maths inside an f-string**! \nThis lets you calculate the ingredient amounts and show them inside a sentence without needing extra lines of code.\n\n<\/div>\n\n
\n\n### Debugging\n\n- Make sure you used `* servings` inside the `{}` for the amount\n- Don’t forget the `f` at the start of your string\n\n<\/div>\n" + }, + { + "filename": "step_5.md", + "path": "en\/", + "content": "

Finish your disgusting recipe<\/h2>\n--- task ---\nUse more f-strings to describe how to prepare your ingredients\n--- \/task ---\n\n

Serve it up 🤢<\/h2>\n\nLet’s finish the recipe by printing the rest of the disgusting instructions.\n\nYou’ll describe:\n- What to pour in next\n- How to garnish it with sprinkles\n- How to serve it to your (un)lucky guests!\n\nAdd these final lines to your program:\n\n
\n--- code ---\n---\nlanguage: python\nfilename: main.py\nline_numbers: true\nline_number_start: 21\nline_highlights: 24-27\n---\n# Print recipe instructions\nprint()\nprint(f'To make this revolting recipe for {servings} people add {amount_1 * servings}g of {ingredient_1} to a large bowl.')\nprint()\nprint(f'Pour over {amount_2 * servings}ml of {ingredient_2}.')\nprint()\nprint(f'Sprinkle with {amount_3 * servings}g of {ingredient_3} and serve cold 🧊. Yum!')\n--- \/code ---\n<\/div>\n\n
\n
To make this revolting recipe for 3 people add 150g of maggot mash 🐛 to a large bowl.\n\nPour over 90ml of sock juice 🧦.\n\nSprinkle with 30g of toenail sprinkles 🦶 and serve cold 🧊. Yum!<\/pre>\n<\/div>\n\n
\n\n### Tip\n\nAdding `print()` with nothing in it is a great way to add blank lines in your output. \nYou can combine text, variables, and maths all in the same f-string!\n\n<\/div>\n\n
\n\n### Debugging\n\n- Check that every sentence is inside a `print(f'...')`\n- Watch your brackets and punctuation carefully!\n\n<\/div>\n" + }, + { + "filename": "main.py", + "path": "en\/solutions\/", + "content": "# Gross Groceries recipe card\n\n# Ingredients and amounts for 1 person\n\ningredient_1 = 'maggot mash 🐛'\namount_1 = 50\n\ningredient_2 = 'sock juice 🧦'\namount_2 = 30\n\ningredient_3 = 'toenail sprinkles 🦶'\namount_3 = 10\n# Number of servings\nservings = 3\n\n# Scaled-up ingredients\nprint(f'{amount_1 * servings}g of {ingredient_1}')\nprint(f'{amount_2 * servings}ml of {ingredient_2}')\nprint(f'{amount_3 * servings}g of {ingredient_3}')\n\n# Print recipe instructions\nprint()\nprint(f'To make this revolting recipe for {servings} people add {amount_1 * servings}g of {ingredient_1} to a large bowl.')\nprint()\nprint(f'Pour over {amount_2 * servings}ml of {ingredient_2}.')\nprint()\nprint(f'Sprinkle with {amount_3 * servings}g of {ingredient_3} and serve cold 🧊. Yum!')\n" + }, + { + "filename": "README.md", + "path": "python-bytes-gross-groceries\/", + "content": "# Python bytes - Gross groceries\n\n![A cartoon recipe card with gross ingredients like sock juice and toenail sprinkles](en\/images\/banner.png)\n\nProject description\n\nFind the project online at [projects.raspberrypi.org\/en\/projects\/python-bytes-gross-groceries](https:\/\/projects.raspberrypi.org\/en\/projects\/python-bytes-gross-groceries)\n\n## Resources\nFor project materials and solutions, see [en\/resources](https:\/\/github.com\/raspberrypilearning\/python-bytes-gross-groceries\/tree\/master\/en\/resources) and [en\/solutions](https:\/\/github.com\/raspberrypilearning\/python-bytes-gross-groceries\/tree\/master\/en\/solutions).\n\n## Contributing\nSee [CONTRIBUTING.md](CONTRIBUTING.md)\n\n## Licence\nSee [LICENCE.md](LICENCE.md)\n" + }, + { + "filename": "CONTRIBUTING.md", + "path": "python-bytes-gross-groceries\/", + "content": "# Contributing\n\nAll contributions are assumed to be licensed under the same licence as the source, i.e. [CC BY-SA](http:\/\/creativecommons.org\/licenses\/by-sa\/4.0\/). This licence must remain in all derivatives of this work.\n\n## Issues\n\nIf you find a mistake, bug, or other problem, please [open an issue](https:\/\/github.com\/raspberrypilearning\/python-bytes-gross-groceries\/issues) in this repository.\n\n## Pull requests\n\nAll edits to a resource should be made to the draft branch or to a fork of the repo. These patches can then be submitted as a pull request.\n\nIf you fix a mistake, bug, or problem or have something to contribute, please create a pull request for each modification. Please consider grouping modifications sensibly, e.g. don't bundle typo fixes in the same pull request as code changes, file them separately instead.\n\nPlease note that sometimes things are done for pedagogical reasons so changes which make sense from a software engineering perspective (reducing duplication or making use of more advanced programming language features) may not be suitable to maintain the intended educational value.\n\n## Derivatives\n\nSee [LICENCE.md](LICENCE.md) for content licence. The licence must remain in all derivatives of this work.\n\n## Translation\n\nYou can help us make this project available to more people around the world by translating it. For more information, please go to [rpf.io\/translate](https:\/\/rpf.io\/translate).\n" + }, + { + "filename": "LICENCE.md", + "path": "python-bytes-gross-groceries\/", + "content": "# Licence\n\nUnless otherwise specified, everything in this repository is covered by the following licence:\n\n[![Creative Commons licence](http:\/\/i.creativecommons.org\/l\/by-sa\/4.0\/88x31.png)](http:\/\/creativecommons.org\/licenses\/by-sa\/4.0\/)\n\n**Python bytes - Gross groceries** by the [Raspberry Pi Foundation](http:\/\/www.raspberrypi.org) is licensed under a [Creative Commons Attribution 4.0 International licence](http:\/\/creativecommons.org\/licenses\/by-sa\/4.0\/).\n\nBased on a work at https:\/\/github.com\/raspberrypilearning\/python-bytes-gross-groceries.\n" + }, + { + "filename": "crowdin.yml", + "path": "python-bytes-gross-groceries\/", + "content": "files:\n - source: \/en\/**\/*.*\n translation: \/%locale%\/**\/%original_file_name%\n" + } +] \ No newline at end of file diff --git a/uk-UA/solutions/main.py b/uk-UA/solutions/main.py new file mode 100644 index 0000000..855cb24 --- /dev/null +++ b/uk-UA/solutions/main.py @@ -0,0 +1,27 @@ +# Gross Groceries recipe card + +# Ingredients and amounts for 1 person + +ingredient_1 = 'maggot mash 🐛' +amount_1 = 50 + +ingredient_2 = 'sock juice 🧦' +amount_2 = 30 + +ingredient_3 = 'toenail sprinkles 🦶' +amount_3 = 10 +# Number of servings +servings = 3 + +# Scaled-up ingredients +print(f'{amount_1 * servings}g of {ingredient_1}') +print(f'{amount_2 * servings}ml of {ingredient_2}') +print(f'{amount_3 * servings}g of {ingredient_3}') + +# Print recipe instructions +print() +print(f'To make this revolting recipe for {servings} people add {amount_1 * servings}g of {ingredient_1} to a large bowl.') +print() +print(f'Pour over {amount_2 * servings}ml of {ingredient_2}.') +print() +print(f'Sprinkle with {amount_3 * servings}g of {ingredient_3} and serve cold 🧊. Yum!') diff --git a/uk-UA/step_1.md b/uk-UA/step_1.md new file mode 100644 index 0000000..11effed --- /dev/null +++ b/uk-UA/step_1.md @@ -0,0 +1,72 @@ +

Write your first disgusting ingredient

+ +\--- task --- + +Add a gross ingredient and print it using an f-string. + +\--- /task --- + +

Start your recipe

+ +The owner of an odd restaurant has decided to use code to help make their recipes. You're the coder they've hired. 🧑‍💻 +Your job is to help create the grossest recipe card ever 🤢 + +Let’s start by adding your first ingredient. But before we write any code, you’ll notice some lines that start with `#` — these are **comments**. + +Comments are notes in your code that help you (and others!) understand what each part does. Python ignores them when your program runs. + +Now try this: + +1. Choose a disgusting ingredient like `'maggot mash 🐛'` or `'slug slime 🐌'`. +2. Decide how much of it you want to use. Let’s say `50` grams. +3. Use an **f-string** to print the amount and the ingredient. + +
+--- code --- +--- +language: python +filename: main.py +line_numbers: true +line_number_start: 3 +line_highlights: 5-6,11 +--- + +# Ingredients and amounts for 1 person + +ingredient_1 = 'maggot mash 🐛' +amount_1 = 50 + +# Number of servings + +# Scaled-up ingredients + +print(f'{amount_1}g of {ingredient_1}') + +\--- /code --- + +
+ +
+
50g of maggot mash 🐛
+
+ +
+ +### Порада + +If your code prints nothing or shows an error, check that: + +- You used **quotes** around your ingredient name (it's a string!) +- You’ve spelled the variable names correctly +- You used the `f` before the string in `print(f'...')` + +
+ +
+ +### Налагодження + +- If Python says there's a `NameError`, you may have a typo in your variable name +- If you see `{amount_1}` in the output instead of the number, make sure your string starts with `f` + +
diff --git a/uk-UA/step_2.md b/uk-UA/step_2.md new file mode 100644 index 0000000..6dabe9c --- /dev/null +++ b/uk-UA/step_2.md @@ -0,0 +1,58 @@ +

Feed more people

+ +\--- task --- + +Add a servings variable and use it to scale up your ingredient + +\--- /task --- + +

Make it serve more than one!

+ +Right now, your ingredient amount is for just **one** person. But what if you wanted to feed 3, or even 10 people? + +Instead of writing new numbers, you can **multiply** the amount by the number of servings — using maths inside your f-string! + +Let’s add a variable called `servings`, and update your print line to use it: + +
+--- code --- +--- +language: python +filename: main.py +line_numbers: true +line_number_start: 7 +line_highlights: 8,11 +--- + +# Number of servings + +servings = 3 + +# Scaled-up ingredients + +print(f'{amount_1 \* servings}g of {ingredient_1}') + +\--- /code --- + +
+ +
+
150g of maggot mash 🐛
+
+ +
+ +### Порада + +You can do maths inside an f-string using `{}` — Python works it out before printing the message! + +
+ +
+ +### Налагодження + +- Make sure your variable name is `servings`, not `serving` or `serves` +- Don’t forget the `*` for multiplication + +
diff --git a/uk-UA/step_3.md b/uk-UA/step_3.md new file mode 100644 index 0000000..3262a93 --- /dev/null +++ b/uk-UA/step_3.md @@ -0,0 +1,68 @@ +

Add more ingredients

+ +\--- task --- + +Add two more gross ingredients and scale them up using f-strings + +\--- /task --- + +

Make your recipe extra disgusting

+ +One ingredient is never enough for a proper disgusting dish! Let's add two more ingredients to your recipe. + +1. Add `ingredient_2` and `ingredient_3` — give them gross names like `'sock juice 🧦'` or `'toenail sprinkles 🦶'`. +2. Add matching `amount_2` and `amount_3` values. +3. Use f-strings to print out **all three ingredients**, scaled up using your `servings` variable. + +
+--- code --- +--- +language: python +filename: main.py +line_numbers: true +line_number_start: 3 +line_highlights: 8-10,11-12,18-19 +--- + +ingredient_2 = 'sock juice 🧦' +amount_2 = 30 + +ingredient_3 = 'toenail sprinkles 🦶' +amount_3 = 10 + +# Number of servings + +servings = 3 + +# Scaled-up ingredients + +print(f'{amount_1 \* servings}g of {ingredient_1}') +print(f'{amount_2 \* servings}ml of {ingredient_2}') +print(f'{amount_3 \* servings}g of {ingredient_3}') + +\--- /code --- + +
+ +
+
150g of maggot mash 🐛
+90ml of sock juice 🧦
+30g of toenail sprinkles 🦶
+
+ +
+ +### Порада + +You can label each ingredient with different units like `g` (grams) or `ml` (millilitres) depending on what it is! + +
+ +
+ +### Налагодження + +- Make sure your variable names match exactly — Python is case-sensitive! +- Don’t forget to multiply by `servings` inside each f-string + +
diff --git a/uk-UA/step_4.md b/uk-UA/step_4.md new file mode 100644 index 0000000..a62999c --- /dev/null +++ b/uk-UA/step_4.md @@ -0,0 +1,54 @@ +

Start your recipe instructions

+ +\--- task --- + +Use an f-string to describe the number of people and the first ingredient + +\--- /task --- + +

Tell the chef what to do

+ +Now it’s time to turn your ingredient list into an actual recipe! 🍲 + +Your first step will be to describe the number of people being fed and the first ingredient to be added. + +
+--- code --- +--- +language: python +filename: main.py +line_numbers: true +line_number_start: 21 +line_highlights: 22-23 +--- + +# Print recipe instructions + +print() +print(f'To make this revolting recipe for {servings} people add {amount_1 \* servings}g of {ingredient_1} to a large bowl.') + +\--- /code --- + +
+ +
+
To make this revolting recipe for 3 people add 150g of maggot mash 🐛 to a large bowl.
+
+ +
+ +### Порада + +You can do **maths inside an f-string**! +This lets you calculate the ingredient amounts and show them inside a sentence without needing extra lines of code. + +
+ +
+ +### Налагодження + +- Make sure you used `* servings` inside the `{}` for the amount +- Don’t forget the `f` at the start of your string + +
diff --git a/uk-UA/step_5.md b/uk-UA/step_5.md new file mode 100644 index 0000000..c434308 --- /dev/null +++ b/uk-UA/step_5.md @@ -0,0 +1,92 @@ +

Finish your disgusting recipe

+ +\--- task --- + +Use more f-strings to describe how to prepare your ingredients + +\--- /task --- + +

Serve it up 🤢

+ +Let’s finish the recipe by printing the rest of the disgusting instructions. + +You’ll describe: + +- What to pour in next +- How to garnish it with sprinkles +- How to serve it to your (un)lucky guests! + +Add these final lines to your program: + +
+--- code --- +--- +language: python +filename: main.py +line_numbers: true +line_number_start: 21 +line_highlights: 24-27 +--- + +# Print recipe instructions + +print() +print(f'To make this revolting recipe for {servings} people add {amount_1 \* servings}g of {ingredient_1} to a large bowl.') +print() +print(f'Pour over {amount_2 \* servings}ml of {ingredient_2}.') +print() +print(f'Sprinkle with {amount_3 \* servings}g of {ingredient_3} and serve cold 🧊. Yum!') + +\--- /code --- + +
+ +
+
To make this revolting recipe for 3 people add 150g of maggot mash 🐛 to a large bowl.
+
+Pour over 90ml of sock juice 🧦.
+
+Sprinkle with 30g of toenail sprinkles 🦶 and serve cold 🧊. Yum!
+ +
+ +
+ +### Порада + +Adding `print()` with nothing in it is a great way to add blank lines in your output. +You can combine text, variables, and maths all in the same f-string! + +
+ +
+ +### Налагодження + +- Check that every sentence is inside a `print(f'...')` +- Watch your brackets and punctuation carefully! + +
+ +
+ +### Feedback + +This is a beta projects, which means it is brand new and not widely available. If you've tested this project on your own or with your club, let us know what you think. + + +Give feedback + +