pythonlings 0.3.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- pythonlings/__init__.py +0 -0
- pythonlings/__main__.py +4 -0
- pythonlings/app.py +84 -0
- pythonlings/cli.py +318 -0
- pythonlings/core/__init__.py +0 -0
- pythonlings/core/curriculum.py +106 -0
- pythonlings/core/docs.py +68 -0
- pythonlings/core/exercise.py +33 -0
- pythonlings/core/manifest.py +110 -0
- pythonlings/core/reset.py +43 -0
- pythonlings/core/runner.py +114 -0
- pythonlings/core/solutions.py +17 -0
- pythonlings/core/state.py +86 -0
- pythonlings/curriculum/checks/async/async1.py +4 -0
- pythonlings/curriculum/checks/async/async10.py +4 -0
- pythonlings/curriculum/checks/async/async2.py +4 -0
- pythonlings/curriculum/checks/async/async3.py +4 -0
- pythonlings/curriculum/checks/async/async4.py +4 -0
- pythonlings/curriculum/checks/async/async5.py +4 -0
- pythonlings/curriculum/checks/async/async6.py +4 -0
- pythonlings/curriculum/checks/async/async7.py +4 -0
- pythonlings/curriculum/checks/async/async8.py +2 -0
- pythonlings/curriculum/checks/async/async9.py +4 -0
- pythonlings/curriculum/checks/classes/classes1.py +3 -0
- pythonlings/curriculum/checks/classes/classes10.py +5 -0
- pythonlings/curriculum/checks/classes/classes11.py +5 -0
- pythonlings/curriculum/checks/classes/classes12.py +16 -0
- pythonlings/curriculum/checks/classes/classes2.py +3 -0
- pythonlings/curriculum/checks/classes/classes3.py +4 -0
- pythonlings/curriculum/checks/classes/classes4.py +4 -0
- pythonlings/curriculum/checks/classes/classes5.py +5 -0
- pythonlings/curriculum/checks/classes/classes6.py +4 -0
- pythonlings/curriculum/checks/classes/classes7.py +3 -0
- pythonlings/curriculum/checks/classes/classes8.py +3 -0
- pythonlings/curriculum/checks/classes/classes9.py +4 -0
- pythonlings/curriculum/checks/collections/collections1.py +4 -0
- pythonlings/curriculum/checks/collections/collections10.py +15 -0
- pythonlings/curriculum/checks/collections/collections2.py +4 -0
- pythonlings/curriculum/checks/collections/collections3.py +5 -0
- pythonlings/curriculum/checks/collections/collections4.py +4 -0
- pythonlings/curriculum/checks/collections/collections5.py +5 -0
- pythonlings/curriculum/checks/collections/collections6.py +6 -0
- pythonlings/curriculum/checks/collections/collections7.py +4 -0
- pythonlings/curriculum/checks/collections/collections8.py +5 -0
- pythonlings/curriculum/checks/collections/collections9.py +9 -0
- pythonlings/curriculum/checks/comprehensions/comprehensions1.py +3 -0
- pythonlings/curriculum/checks/comprehensions/comprehensions10.py +5 -0
- pythonlings/curriculum/checks/comprehensions/comprehensions2.py +3 -0
- pythonlings/curriculum/checks/comprehensions/comprehensions3.py +3 -0
- pythonlings/curriculum/checks/comprehensions/comprehensions4.py +6 -0
- pythonlings/curriculum/checks/comprehensions/comprehensions5.py +3 -0
- pythonlings/curriculum/checks/comprehensions/comprehensions6.py +3 -0
- pythonlings/curriculum/checks/comprehensions/comprehensions7.py +4 -0
- pythonlings/curriculum/checks/comprehensions/comprehensions8.py +5 -0
- pythonlings/curriculum/checks/comprehensions/comprehensions9.py +3 -0
- pythonlings/curriculum/checks/conditionals/conditionals1.py +2 -0
- pythonlings/curriculum/checks/conditionals/conditionals10.py +10 -0
- pythonlings/curriculum/checks/conditionals/conditionals2.py +5 -0
- pythonlings/curriculum/checks/conditionals/conditionals3.py +9 -0
- pythonlings/curriculum/checks/conditionals/conditionals4.py +7 -0
- pythonlings/curriculum/checks/conditionals/conditionals5.py +9 -0
- pythonlings/curriculum/checks/conditionals/conditionals6.py +7 -0
- pythonlings/curriculum/checks/conditionals/conditionals7.py +7 -0
- pythonlings/curriculum/checks/conditionals/conditionals8.py +9 -0
- pythonlings/curriculum/checks/conditionals/conditionals9.py +7 -0
- pythonlings/curriculum/checks/context_managers/context_managers1.py +15 -0
- pythonlings/curriculum/checks/context_managers/context_managers2.py +10 -0
- pythonlings/curriculum/checks/context_managers/context_managers3.py +2 -0
- pythonlings/curriculum/checks/context_managers/context_managers4.py +3 -0
- pythonlings/curriculum/checks/context_managers/context_managers5.py +5 -0
- pythonlings/curriculum/checks/context_managers/context_managers6.py +4 -0
- pythonlings/curriculum/checks/context_managers/context_managers7.py +16 -0
- pythonlings/curriculum/checks/context_managers/context_managers8.py +15 -0
- pythonlings/curriculum/checks/dataclasses/dataclasses1.py +3 -0
- pythonlings/curriculum/checks/dataclasses/dataclasses2.py +5 -0
- pythonlings/curriculum/checks/dataclasses/dataclasses3.py +4 -0
- pythonlings/curriculum/checks/dataclasses/dataclasses4.py +3 -0
- pythonlings/curriculum/checks/dataclasses/dataclasses5.py +9 -0
- pythonlings/curriculum/checks/dataclasses/dataclasses6.py +6 -0
- pythonlings/curriculum/checks/dataclasses/dataclasses7.py +6 -0
- pythonlings/curriculum/checks/dataclasses/dataclasses8.py +5 -0
- pythonlings/curriculum/checks/datetime/datetime1.py +4 -0
- pythonlings/curriculum/checks/datetime/datetime2.py +4 -0
- pythonlings/curriculum/checks/datetime/datetime3.py +6 -0
- pythonlings/curriculum/checks/datetime/datetime4.py +2 -0
- pythonlings/curriculum/checks/datetime/datetime5.py +2 -0
- pythonlings/curriculum/checks/datetime/datetime6.py +2 -0
- pythonlings/curriculum/checks/datetime/datetime7.py +2 -0
- pythonlings/curriculum/checks/datetime/datetime8.py +5 -0
- pythonlings/curriculum/checks/decorators/decorators1.py +8 -0
- pythonlings/curriculum/checks/decorators/decorators10.py +12 -0
- pythonlings/curriculum/checks/decorators/decorators2.py +5 -0
- pythonlings/curriculum/checks/decorators/decorators3.py +4 -0
- pythonlings/curriculum/checks/decorators/decorators4.py +7 -0
- pythonlings/curriculum/checks/decorators/decorators5.py +5 -0
- pythonlings/curriculum/checks/decorators/decorators6.py +8 -0
- pythonlings/curriculum/checks/decorators/decorators7.py +12 -0
- pythonlings/curriculum/checks/decorators/decorators8.py +20 -0
- pythonlings/curriculum/checks/decorators/decorators9.py +4 -0
- pythonlings/curriculum/checks/dictionaries/dictionaries1.py +3 -0
- pythonlings/curriculum/checks/dictionaries/dictionaries10.py +5 -0
- pythonlings/curriculum/checks/dictionaries/dictionaries2.py +2 -0
- pythonlings/curriculum/checks/dictionaries/dictionaries3.py +5 -0
- pythonlings/curriculum/checks/dictionaries/dictionaries4.py +5 -0
- pythonlings/curriculum/checks/dictionaries/dictionaries5.py +11 -0
- pythonlings/curriculum/checks/dictionaries/dictionaries6.py +4 -0
- pythonlings/curriculum/checks/dictionaries/dictionaries7.py +5 -0
- pythonlings/curriculum/checks/dictionaries/dictionaries8.py +4 -0
- pythonlings/curriculum/checks/dictionaries/dictionaries9.py +4 -0
- pythonlings/curriculum/checks/enums/enums1.py +4 -0
- pythonlings/curriculum/checks/enums/enums2.py +3 -0
- pythonlings/curriculum/checks/enums/enums3.py +3 -0
- pythonlings/curriculum/checks/enums/enums4.py +2 -0
- pythonlings/curriculum/checks/enums/enums5.py +4 -0
- pythonlings/curriculum/checks/enums/enums6.py +3 -0
- pythonlings/curriculum/checks/exceptions/exceptions1.py +4 -0
- pythonlings/curriculum/checks/exceptions/exceptions10.py +39 -0
- pythonlings/curriculum/checks/exceptions/exceptions2.py +5 -0
- pythonlings/curriculum/checks/exceptions/exceptions3.py +8 -0
- pythonlings/curriculum/checks/exceptions/exceptions4.py +5 -0
- pythonlings/curriculum/checks/exceptions/exceptions5.py +10 -0
- pythonlings/curriculum/checks/exceptions/exceptions6.py +17 -0
- pythonlings/curriculum/checks/exceptions/exceptions7.py +15 -0
- pythonlings/curriculum/checks/exceptions/exceptions8.py +6 -0
- pythonlings/curriculum/checks/exceptions/exceptions9.py +16 -0
- pythonlings/curriculum/checks/file_io/file_io1.py +15 -0
- pythonlings/curriculum/checks/file_io/file_io10.py +16 -0
- pythonlings/curriculum/checks/file_io/file_io2.py +10 -0
- pythonlings/curriculum/checks/file_io/file_io3.py +15 -0
- pythonlings/curriculum/checks/file_io/file_io4.py +14 -0
- pythonlings/curriculum/checks/file_io/file_io5.py +15 -0
- pythonlings/curriculum/checks/file_io/file_io6.py +10 -0
- pythonlings/curriculum/checks/file_io/file_io7.py +15 -0
- pythonlings/curriculum/checks/file_io/file_io8.py +12 -0
- pythonlings/curriculum/checks/file_io/file_io9.py +10 -0
- pythonlings/curriculum/checks/functional/functional1.py +4 -0
- pythonlings/curriculum/checks/functional/functional10.py +7 -0
- pythonlings/curriculum/checks/functional/functional2.py +5 -0
- pythonlings/curriculum/checks/functional/functional3.py +3 -0
- pythonlings/curriculum/checks/functional/functional4.py +4 -0
- pythonlings/curriculum/checks/functional/functional5.py +6 -0
- pythonlings/curriculum/checks/functional/functional6.py +8 -0
- pythonlings/curriculum/checks/functional/functional7.py +8 -0
- pythonlings/curriculum/checks/functional/functional8.py +7 -0
- pythonlings/curriculum/checks/functional/functional9.py +8 -0
- pythonlings/curriculum/checks/functions/functions1.py +9 -0
- pythonlings/curriculum/checks/functions/functions10.py +12 -0
- pythonlings/curriculum/checks/functions/functions2.py +4 -0
- pythonlings/curriculum/checks/functions/functions3.py +6 -0
- pythonlings/curriculum/checks/functions/functions4.py +6 -0
- pythonlings/curriculum/checks/functions/functions5.py +6 -0
- pythonlings/curriculum/checks/functions/functions6.py +8 -0
- pythonlings/curriculum/checks/functions/functions7.py +7 -0
- pythonlings/curriculum/checks/functions/functions8.py +6 -0
- pythonlings/curriculum/checks/functions/functions9.py +7 -0
- pythonlings/curriculum/checks/generators/generators1.py +4 -0
- pythonlings/curriculum/checks/generators/generators10.py +7 -0
- pythonlings/curriculum/checks/generators/generators2.py +3 -0
- pythonlings/curriculum/checks/generators/generators3.py +4 -0
- pythonlings/curriculum/checks/generators/generators4.py +9 -0
- pythonlings/curriculum/checks/generators/generators5.py +10 -0
- pythonlings/curriculum/checks/generators/generators6.py +8 -0
- pythonlings/curriculum/checks/generators/generators7.py +11 -0
- pythonlings/curriculum/checks/generators/generators8.py +8 -0
- pythonlings/curriculum/checks/generators/generators9.py +13 -0
- pythonlings/curriculum/checks/itertools/itertools1.py +2 -0
- pythonlings/curriculum/checks/itertools/itertools2.py +2 -0
- pythonlings/curriculum/checks/itertools/itertools3.py +2 -0
- pythonlings/curriculum/checks/itertools/itertools4.py +2 -0
- pythonlings/curriculum/checks/itertools/itertools5.py +2 -0
- pythonlings/curriculum/checks/itertools/itertools6.py +2 -0
- pythonlings/curriculum/checks/itertools/itertools7.py +2 -0
- pythonlings/curriculum/checks/itertools/itertools8.py +3 -0
- pythonlings/curriculum/checks/json/json1.py +3 -0
- pythonlings/curriculum/checks/json/json2.py +2 -0
- pythonlings/curriculum/checks/json/json3.py +2 -0
- pythonlings/curriculum/checks/json/json4.py +2 -0
- pythonlings/curriculum/checks/json/json5.py +2 -0
- pythonlings/curriculum/checks/json/json6.py +2 -0
- pythonlings/curriculum/checks/json/json7.py +3 -0
- pythonlings/curriculum/checks/json/json8.py +4 -0
- pythonlings/curriculum/checks/lists/lists1.py +2 -0
- pythonlings/curriculum/checks/lists/lists10.py +5 -0
- pythonlings/curriculum/checks/lists/lists2.py +3 -0
- pythonlings/curriculum/checks/lists/lists3.py +4 -0
- pythonlings/curriculum/checks/lists/lists4.py +3 -0
- pythonlings/curriculum/checks/lists/lists5.py +4 -0
- pythonlings/curriculum/checks/lists/lists6.py +3 -0
- pythonlings/curriculum/checks/lists/lists7.py +4 -0
- pythonlings/curriculum/checks/lists/lists8.py +7 -0
- pythonlings/curriculum/checks/lists/lists9.py +4 -0
- pythonlings/curriculum/checks/loops/loops1.py +2 -0
- pythonlings/curriculum/checks/loops/loops10.py +6 -0
- pythonlings/curriculum/checks/loops/loops2.py +2 -0
- pythonlings/curriculum/checks/loops/loops3.py +2 -0
- pythonlings/curriculum/checks/loops/loops4.py +3 -0
- pythonlings/curriculum/checks/loops/loops5.py +2 -0
- pythonlings/curriculum/checks/loops/loops6.py +2 -0
- pythonlings/curriculum/checks/loops/loops7.py +2 -0
- pythonlings/curriculum/checks/loops/loops8.py +2 -0
- pythonlings/curriculum/checks/loops/loops9.py +3 -0
- pythonlings/curriculum/checks/modules/modules1.py +2 -0
- pythonlings/curriculum/checks/modules/modules2.py +2 -0
- pythonlings/curriculum/checks/modules/modules3.py +5 -0
- pythonlings/curriculum/checks/modules/modules4.py +8 -0
- pythonlings/curriculum/checks/modules/modules5.py +7 -0
- pythonlings/curriculum/checks/modules/modules6.py +4 -0
- pythonlings/curriculum/checks/modules/modules7.py +4 -0
- pythonlings/curriculum/checks/modules/modules8.py +15 -0
- pythonlings/curriculum/checks/oop_advanced/oop_advanced1.py +4 -0
- pythonlings/curriculum/checks/oop_advanced/oop_advanced10.py +3 -0
- pythonlings/curriculum/checks/oop_advanced/oop_advanced11.py +3 -0
- pythonlings/curriculum/checks/oop_advanced/oop_advanced12.py +4 -0
- pythonlings/curriculum/checks/oop_advanced/oop_advanced2.py +4 -0
- pythonlings/curriculum/checks/oop_advanced/oop_advanced3.py +3 -0
- pythonlings/curriculum/checks/oop_advanced/oop_advanced4.py +3 -0
- pythonlings/curriculum/checks/oop_advanced/oop_advanced5.py +3 -0
- pythonlings/curriculum/checks/oop_advanced/oop_advanced6.py +2 -0
- pythonlings/curriculum/checks/oop_advanced/oop_advanced7.py +3 -0
- pythonlings/curriculum/checks/oop_advanced/oop_advanced8.py +3 -0
- pythonlings/curriculum/checks/oop_advanced/oop_advanced9.py +4 -0
- pythonlings/curriculum/checks/pathlib/pathlib1.py +5 -0
- pythonlings/curriculum/checks/pathlib/pathlib2.py +4 -0
- pythonlings/curriculum/checks/pathlib/pathlib3.py +6 -0
- pythonlings/curriculum/checks/pathlib/pathlib4.py +4 -0
- pythonlings/curriculum/checks/pathlib/pathlib5.py +4 -0
- pythonlings/curriculum/checks/pathlib/pathlib6.py +5 -0
- pythonlings/curriculum/checks/recursion/recursion1.py +5 -0
- pythonlings/curriculum/checks/recursion/recursion2.py +5 -0
- pythonlings/curriculum/checks/recursion/recursion3.py +6 -0
- pythonlings/curriculum/checks/recursion/recursion4.py +6 -0
- pythonlings/curriculum/checks/recursion/recursion5.py +7 -0
- pythonlings/curriculum/checks/recursion/recursion6.py +7 -0
- pythonlings/curriculum/checks/recursion/recursion7.py +7 -0
- pythonlings/curriculum/checks/recursion/recursion8.py +15 -0
- pythonlings/curriculum/checks/regex/regex1.py +3 -0
- pythonlings/curriculum/checks/regex/regex10.py +17 -0
- pythonlings/curriculum/checks/regex/regex2.py +3 -0
- pythonlings/curriculum/checks/regex/regex3.py +2 -0
- pythonlings/curriculum/checks/regex/regex4.py +4 -0
- pythonlings/curriculum/checks/regex/regex5.py +4 -0
- pythonlings/curriculum/checks/regex/regex6.py +6 -0
- pythonlings/curriculum/checks/regex/regex7.py +5 -0
- pythonlings/curriculum/checks/regex/regex8.py +6 -0
- pythonlings/curriculum/checks/regex/regex9.py +8 -0
- pythonlings/curriculum/checks/sets/sets1.py +3 -0
- pythonlings/curriculum/checks/sets/sets10.py +15 -0
- pythonlings/curriculum/checks/sets/sets2.py +5 -0
- pythonlings/curriculum/checks/sets/sets3.py +5 -0
- pythonlings/curriculum/checks/sets/sets4.py +3 -0
- pythonlings/curriculum/checks/sets/sets5.py +3 -0
- pythonlings/curriculum/checks/sets/sets6.py +3 -0
- pythonlings/curriculum/checks/sets/sets7.py +5 -0
- pythonlings/curriculum/checks/sets/sets8.py +5 -0
- pythonlings/curriculum/checks/sets/sets9.py +3 -0
- pythonlings/curriculum/checks/strings/strings1.py +3 -0
- pythonlings/curriculum/checks/strings/strings10.py +5 -0
- pythonlings/curriculum/checks/strings/strings2.py +3 -0
- pythonlings/curriculum/checks/strings/strings3.py +3 -0
- pythonlings/curriculum/checks/strings/strings4.py +2 -0
- pythonlings/curriculum/checks/strings/strings5.py +4 -0
- pythonlings/curriculum/checks/strings/strings6.py +3 -0
- pythonlings/curriculum/checks/strings/strings7.py +3 -0
- pythonlings/curriculum/checks/strings/strings8.py +3 -0
- pythonlings/curriculum/checks/strings/strings9.py +3 -0
- pythonlings/curriculum/checks/testing/testing1.py +2 -0
- pythonlings/curriculum/checks/testing/testing10.py +9 -0
- pythonlings/curriculum/checks/testing/testing11.py +7 -0
- pythonlings/curriculum/checks/testing/testing12.py +19 -0
- pythonlings/curriculum/checks/testing/testing2.py +2 -0
- pythonlings/curriculum/checks/testing/testing3.py +12 -0
- pythonlings/curriculum/checks/testing/testing4.py +6 -0
- pythonlings/curriculum/checks/testing/testing5.py +6 -0
- pythonlings/curriculum/checks/testing/testing6.py +14 -0
- pythonlings/curriculum/checks/testing/testing7.py +14 -0
- pythonlings/curriculum/checks/testing/testing8.py +27 -0
- pythonlings/curriculum/checks/testing/testing9.py +14 -0
- pythonlings/curriculum/checks/tuples/tuples1.py +3 -0
- pythonlings/curriculum/checks/tuples/tuples10.py +6 -0
- pythonlings/curriculum/checks/tuples/tuples2.py +3 -0
- pythonlings/curriculum/checks/tuples/tuples3.py +4 -0
- pythonlings/curriculum/checks/tuples/tuples4.py +3 -0
- pythonlings/curriculum/checks/tuples/tuples5.py +4 -0
- pythonlings/curriculum/checks/tuples/tuples6.py +5 -0
- pythonlings/curriculum/checks/tuples/tuples7.py +3 -0
- pythonlings/curriculum/checks/tuples/tuples8.py +4 -0
- pythonlings/curriculum/checks/tuples/tuples9.py +5 -0
- pythonlings/curriculum/checks/type_hints/type_hints1.py +3 -0
- pythonlings/curriculum/checks/type_hints/type_hints2.py +5 -0
- pythonlings/curriculum/checks/type_hints/type_hints3.py +5 -0
- pythonlings/curriculum/checks/type_hints/type_hints4.py +5 -0
- pythonlings/curriculum/checks/type_hints/type_hints5.py +6 -0
- pythonlings/curriculum/checks/type_hints/type_hints6.py +7 -0
- pythonlings/curriculum/checks/type_hints/type_hints7.py +9 -0
- pythonlings/curriculum/checks/type_hints/type_hints8.py +9 -0
- pythonlings/curriculum/checks/variables/variables1.py +7 -0
- pythonlings/curriculum/checks/variables/variables10.py +4 -0
- pythonlings/curriculum/checks/variables/variables2.py +19 -0
- pythonlings/curriculum/checks/variables/variables3.py +4 -0
- pythonlings/curriculum/checks/variables/variables4.py +2 -0
- pythonlings/curriculum/checks/variables/variables5.py +2 -0
- pythonlings/curriculum/checks/variables/variables6.py +4 -0
- pythonlings/curriculum/checks/variables/variables7.py +3 -0
- pythonlings/curriculum/checks/variables/variables8.py +4 -0
- pythonlings/curriculum/checks/variables/variables9.py +3 -0
- pythonlings/curriculum/exercises/async/async1.py +7 -0
- pythonlings/curriculum/exercises/async/async10.py +14 -0
- pythonlings/curriculum/exercises/async/async2.py +10 -0
- pythonlings/curriculum/exercises/async/async3.py +10 -0
- pythonlings/curriculum/exercises/async/async4.py +15 -0
- pythonlings/curriculum/exercises/async/async5.py +13 -0
- pythonlings/curriculum/exercises/async/async6.py +14 -0
- pythonlings/curriculum/exercises/async/async7.py +13 -0
- pythonlings/curriculum/exercises/async/async8.py +11 -0
- pythonlings/curriculum/exercises/async/async9.py +13 -0
- pythonlings/curriculum/exercises/classes/classes1.py +13 -0
- pythonlings/curriculum/exercises/classes/classes10.py +22 -0
- pythonlings/curriculum/exercises/classes/classes11.py +24 -0
- pythonlings/curriculum/exercises/classes/classes12.py +33 -0
- pythonlings/curriculum/exercises/classes/classes2.py +13 -0
- pythonlings/curriculum/exercises/classes/classes3.py +13 -0
- pythonlings/curriculum/exercises/classes/classes4.py +16 -0
- pythonlings/curriculum/exercises/classes/classes5.py +18 -0
- pythonlings/curriculum/exercises/classes/classes6.py +15 -0
- pythonlings/curriculum/exercises/classes/classes7.py +18 -0
- pythonlings/curriculum/exercises/classes/classes8.py +14 -0
- pythonlings/curriculum/exercises/classes/classes9.py +18 -0
- pythonlings/curriculum/exercises/collections/collections1.py +11 -0
- pythonlings/curriculum/exercises/collections/collections10.py +37 -0
- pythonlings/curriculum/exercises/collections/collections2.py +18 -0
- pythonlings/curriculum/exercises/collections/collections3.py +17 -0
- pythonlings/curriculum/exercises/collections/collections4.py +26 -0
- pythonlings/curriculum/exercises/collections/collections5.py +14 -0
- pythonlings/curriculum/exercises/collections/collections6.py +18 -0
- pythonlings/curriculum/exercises/collections/collections7.py +20 -0
- pythonlings/curriculum/exercises/collections/collections8.py +23 -0
- pythonlings/curriculum/exercises/collections/collections9.py +21 -0
- pythonlings/curriculum/exercises/comprehensions/comprehensions1.py +10 -0
- pythonlings/curriculum/exercises/comprehensions/comprehensions10.py +15 -0
- pythonlings/curriculum/exercises/comprehensions/comprehensions2.py +12 -0
- pythonlings/curriculum/exercises/comprehensions/comprehensions3.py +12 -0
- pythonlings/curriculum/exercises/comprehensions/comprehensions4.py +14 -0
- pythonlings/curriculum/exercises/comprehensions/comprehensions5.py +12 -0
- pythonlings/curriculum/exercises/comprehensions/comprehensions6.py +12 -0
- pythonlings/curriculum/exercises/comprehensions/comprehensions7.py +12 -0
- pythonlings/curriculum/exercises/comprehensions/comprehensions8.py +15 -0
- pythonlings/curriculum/exercises/comprehensions/comprehensions9.py +13 -0
- pythonlings/curriculum/exercises/conditionals/conditionals1.py +15 -0
- pythonlings/curriculum/exercises/conditionals/conditionals10.py +18 -0
- pythonlings/curriculum/exercises/conditionals/conditionals2.py +13 -0
- pythonlings/curriculum/exercises/conditionals/conditionals3.py +18 -0
- pythonlings/curriculum/exercises/conditionals/conditionals4.py +20 -0
- pythonlings/curriculum/exercises/conditionals/conditionals5.py +17 -0
- pythonlings/curriculum/exercises/conditionals/conditionals6.py +15 -0
- pythonlings/curriculum/exercises/conditionals/conditionals7.py +18 -0
- pythonlings/curriculum/exercises/conditionals/conditionals8.py +20 -0
- pythonlings/curriculum/exercises/conditionals/conditionals9.py +12 -0
- pythonlings/curriculum/exercises/context_managers/context_managers1.py +18 -0
- pythonlings/curriculum/exercises/context_managers/context_managers2.py +19 -0
- pythonlings/curriculum/exercises/context_managers/context_managers3.py +24 -0
- pythonlings/curriculum/exercises/context_managers/context_managers4.py +30 -0
- pythonlings/curriculum/exercises/context_managers/context_managers5.py +30 -0
- pythonlings/curriculum/exercises/context_managers/context_managers6.py +26 -0
- pythonlings/curriculum/exercises/context_managers/context_managers7.py +30 -0
- pythonlings/curriculum/exercises/context_managers/context_managers8.py +45 -0
- pythonlings/curriculum/exercises/dataclasses/dataclasses1.py +14 -0
- pythonlings/curriculum/exercises/dataclasses/dataclasses2.py +23 -0
- pythonlings/curriculum/exercises/dataclasses/dataclasses3.py +21 -0
- pythonlings/curriculum/exercises/dataclasses/dataclasses4.py +25 -0
- pythonlings/curriculum/exercises/dataclasses/dataclasses5.py +25 -0
- pythonlings/curriculum/exercises/dataclasses/dataclasses6.py +21 -0
- pythonlings/curriculum/exercises/dataclasses/dataclasses7.py +27 -0
- pythonlings/curriculum/exercises/dataclasses/dataclasses8.py +30 -0
- pythonlings/curriculum/exercises/datetime/datetime1.py +8 -0
- pythonlings/curriculum/exercises/datetime/datetime2.py +9 -0
- pythonlings/curriculum/exercises/datetime/datetime3.py +9 -0
- pythonlings/curriculum/exercises/datetime/datetime4.py +9 -0
- pythonlings/curriculum/exercises/datetime/datetime5.py +10 -0
- pythonlings/curriculum/exercises/datetime/datetime6.py +10 -0
- pythonlings/curriculum/exercises/datetime/datetime7.py +10 -0
- pythonlings/curriculum/exercises/datetime/datetime8.py +11 -0
- pythonlings/curriculum/exercises/decorators/decorators1.py +19 -0
- pythonlings/curriculum/exercises/decorators/decorators10.py +32 -0
- pythonlings/curriculum/exercises/decorators/decorators2.py +22 -0
- pythonlings/curriculum/exercises/decorators/decorators3.py +18 -0
- pythonlings/curriculum/exercises/decorators/decorators4.py +24 -0
- pythonlings/curriculum/exercises/decorators/decorators5.py +25 -0
- pythonlings/curriculum/exercises/decorators/decorators6.py +19 -0
- pythonlings/curriculum/exercises/decorators/decorators7.py +25 -0
- pythonlings/curriculum/exercises/decorators/decorators8.py +25 -0
- pythonlings/curriculum/exercises/decorators/decorators9.py +26 -0
- pythonlings/curriculum/exercises/dictionaries/dictionaries1.py +6 -0
- pythonlings/curriculum/exercises/dictionaries/dictionaries10.py +17 -0
- pythonlings/curriculum/exercises/dictionaries/dictionaries2.py +9 -0
- pythonlings/curriculum/exercises/dictionaries/dictionaries3.py +16 -0
- pythonlings/curriculum/exercises/dictionaries/dictionaries4.py +15 -0
- pythonlings/curriculum/exercises/dictionaries/dictionaries5.py +15 -0
- pythonlings/curriculum/exercises/dictionaries/dictionaries6.py +18 -0
- pythonlings/curriculum/exercises/dictionaries/dictionaries7.py +17 -0
- pythonlings/curriculum/exercises/dictionaries/dictionaries8.py +17 -0
- pythonlings/curriculum/exercises/dictionaries/dictionaries9.py +25 -0
- pythonlings/curriculum/exercises/enums/enums1.py +12 -0
- pythonlings/curriculum/exercises/enums/enums2.py +11 -0
- pythonlings/curriculum/exercises/enums/enums3.py +14 -0
- pythonlings/curriculum/exercises/enums/enums4.py +13 -0
- pythonlings/curriculum/exercises/enums/enums5.py +14 -0
- pythonlings/curriculum/exercises/enums/enums6.py +15 -0
- pythonlings/curriculum/exercises/exceptions/exceptions1.py +15 -0
- pythonlings/curriculum/exercises/exceptions/exceptions10.py +19 -0
- pythonlings/curriculum/exercises/exceptions/exceptions2.py +12 -0
- pythonlings/curriculum/exercises/exceptions/exceptions3.py +13 -0
- pythonlings/curriculum/exercises/exceptions/exceptions4.py +17 -0
- pythonlings/curriculum/exercises/exceptions/exceptions5.py +20 -0
- pythonlings/curriculum/exercises/exceptions/exceptions6.py +13 -0
- pythonlings/curriculum/exercises/exceptions/exceptions7.py +15 -0
- pythonlings/curriculum/exercises/exceptions/exceptions8.py +17 -0
- pythonlings/curriculum/exercises/exceptions/exceptions9.py +20 -0
- pythonlings/curriculum/exercises/file_io/file_io1.py +18 -0
- pythonlings/curriculum/exercises/file_io/file_io10.py +25 -0
- pythonlings/curriculum/exercises/file_io/file_io2.py +16 -0
- pythonlings/curriculum/exercises/file_io/file_io3.py +18 -0
- pythonlings/curriculum/exercises/file_io/file_io4.py +21 -0
- pythonlings/curriculum/exercises/file_io/file_io5.py +19 -0
- pythonlings/curriculum/exercises/file_io/file_io6.py +22 -0
- pythonlings/curriculum/exercises/file_io/file_io7.py +20 -0
- pythonlings/curriculum/exercises/file_io/file_io8.py +18 -0
- pythonlings/curriculum/exercises/file_io/file_io9.py +19 -0
- pythonlings/curriculum/exercises/functional/functional1.py +7 -0
- pythonlings/curriculum/exercises/functional/functional10.py +19 -0
- pythonlings/curriculum/exercises/functional/functional2.py +8 -0
- pythonlings/curriculum/exercises/functional/functional3.py +11 -0
- pythonlings/curriculum/exercises/functional/functional4.py +11 -0
- pythonlings/curriculum/exercises/functional/functional5.py +11 -0
- pythonlings/curriculum/exercises/functional/functional6.py +14 -0
- pythonlings/curriculum/exercises/functional/functional7.py +12 -0
- pythonlings/curriculum/exercises/functional/functional8.py +13 -0
- pythonlings/curriculum/exercises/functional/functional9.py +15 -0
- pythonlings/curriculum/exercises/functions/functions1.py +8 -0
- pythonlings/curriculum/exercises/functions/functions10.py +19 -0
- pythonlings/curriculum/exercises/functions/functions2.py +9 -0
- pythonlings/curriculum/exercises/functions/functions3.py +8 -0
- pythonlings/curriculum/exercises/functions/functions4.py +8 -0
- pythonlings/curriculum/exercises/functions/functions5.py +11 -0
- pythonlings/curriculum/exercises/functions/functions6.py +16 -0
- pythonlings/curriculum/exercises/functions/functions7.py +11 -0
- pythonlings/curriculum/exercises/functions/functions8.py +10 -0
- pythonlings/curriculum/exercises/functions/functions9.py +16 -0
- pythonlings/curriculum/exercises/generators/generators1.py +13 -0
- pythonlings/curriculum/exercises/generators/generators10.py +16 -0
- pythonlings/curriculum/exercises/generators/generators2.py +17 -0
- pythonlings/curriculum/exercises/generators/generators3.py +19 -0
- pythonlings/curriculum/exercises/generators/generators4.py +12 -0
- pythonlings/curriculum/exercises/generators/generators5.py +24 -0
- pythonlings/curriculum/exercises/generators/generators6.py +20 -0
- pythonlings/curriculum/exercises/generators/generators7.py +14 -0
- pythonlings/curriculum/exercises/generators/generators8.py +17 -0
- pythonlings/curriculum/exercises/generators/generators9.py +26 -0
- pythonlings/curriculum/exercises/itertools/itertools1.py +10 -0
- pythonlings/curriculum/exercises/itertools/itertools2.py +8 -0
- pythonlings/curriculum/exercises/itertools/itertools3.py +10 -0
- pythonlings/curriculum/exercises/itertools/itertools4.py +12 -0
- pythonlings/curriculum/exercises/itertools/itertools5.py +9 -0
- pythonlings/curriculum/exercises/itertools/itertools6.py +9 -0
- pythonlings/curriculum/exercises/itertools/itertools7.py +10 -0
- pythonlings/curriculum/exercises/itertools/itertools8.py +18 -0
- pythonlings/curriculum/exercises/json/json1.py +10 -0
- pythonlings/curriculum/exercises/json/json2.py +9 -0
- pythonlings/curriculum/exercises/json/json3.py +10 -0
- pythonlings/curriculum/exercises/json/json4.py +13 -0
- pythonlings/curriculum/exercises/json/json5.py +9 -0
- pythonlings/curriculum/exercises/json/json6.py +10 -0
- pythonlings/curriculum/exercises/json/json7.py +10 -0
- pythonlings/curriculum/exercises/json/json8.py +12 -0
- pythonlings/curriculum/exercises/lists/lists1.py +7 -0
- pythonlings/curriculum/exercises/lists/lists10.py +28 -0
- pythonlings/curriculum/exercises/lists/lists2.py +13 -0
- pythonlings/curriculum/exercises/lists/lists3.py +16 -0
- pythonlings/curriculum/exercises/lists/lists4.py +16 -0
- pythonlings/curriculum/exercises/lists/lists5.py +16 -0
- pythonlings/curriculum/exercises/lists/lists6.py +15 -0
- pythonlings/curriculum/exercises/lists/lists7.py +13 -0
- pythonlings/curriculum/exercises/lists/lists8.py +15 -0
- pythonlings/curriculum/exercises/lists/lists9.py +19 -0
- pythonlings/curriculum/exercises/loops/loops1.py +8 -0
- pythonlings/curriculum/exercises/loops/loops10.py +22 -0
- pythonlings/curriculum/exercises/loops/loops2.py +10 -0
- pythonlings/curriculum/exercises/loops/loops3.py +10 -0
- pythonlings/curriculum/exercises/loops/loops4.py +12 -0
- pythonlings/curriculum/exercises/loops/loops5.py +13 -0
- pythonlings/curriculum/exercises/loops/loops6.py +10 -0
- pythonlings/curriculum/exercises/loops/loops7.py +13 -0
- pythonlings/curriculum/exercises/loops/loops8.py +11 -0
- pythonlings/curriculum/exercises/loops/loops9.py +11 -0
- pythonlings/curriculum/exercises/modules/modules1.py +10 -0
- pythonlings/curriculum/exercises/modules/modules2.py +10 -0
- pythonlings/curriculum/exercises/modules/modules3.py +13 -0
- pythonlings/curriculum/exercises/modules/modules4.py +18 -0
- pythonlings/curriculum/exercises/modules/modules5.py +17 -0
- pythonlings/curriculum/exercises/modules/modules6.py +12 -0
- pythonlings/curriculum/exercises/modules/modules7.py +16 -0
- pythonlings/curriculum/exercises/modules/modules8.py +23 -0
- pythonlings/curriculum/exercises/oop_advanced/oop_advanced1.py +11 -0
- pythonlings/curriculum/exercises/oop_advanced/oop_advanced10.py +18 -0
- pythonlings/curriculum/exercises/oop_advanced/oop_advanced11.py +13 -0
- pythonlings/curriculum/exercises/oop_advanced/oop_advanced12.py +12 -0
- pythonlings/curriculum/exercises/oop_advanced/oop_advanced2.py +13 -0
- pythonlings/curriculum/exercises/oop_advanced/oop_advanced3.py +22 -0
- pythonlings/curriculum/exercises/oop_advanced/oop_advanced4.py +12 -0
- pythonlings/curriculum/exercises/oop_advanced/oop_advanced5.py +11 -0
- pythonlings/curriculum/exercises/oop_advanced/oop_advanced6.py +12 -0
- pythonlings/curriculum/exercises/oop_advanced/oop_advanced7.py +14 -0
- pythonlings/curriculum/exercises/oop_advanced/oop_advanced8.py +14 -0
- pythonlings/curriculum/exercises/oop_advanced/oop_advanced9.py +9 -0
- pythonlings/curriculum/exercises/pathlib/pathlib1.py +9 -0
- pythonlings/curriculum/exercises/pathlib/pathlib2.py +9 -0
- pythonlings/curriculum/exercises/pathlib/pathlib3.py +11 -0
- pythonlings/curriculum/exercises/pathlib/pathlib4.py +9 -0
- pythonlings/curriculum/exercises/pathlib/pathlib5.py +9 -0
- pythonlings/curriculum/exercises/pathlib/pathlib6.py +10 -0
- pythonlings/curriculum/exercises/recursion/recursion1.py +12 -0
- pythonlings/curriculum/exercises/recursion/recursion2.py +12 -0
- pythonlings/curriculum/exercises/recursion/recursion3.py +12 -0
- pythonlings/curriculum/exercises/recursion/recursion4.py +12 -0
- pythonlings/curriculum/exercises/recursion/recursion5.py +14 -0
- pythonlings/curriculum/exercises/recursion/recursion6.py +13 -0
- pythonlings/curriculum/exercises/recursion/recursion7.py +20 -0
- pythonlings/curriculum/exercises/recursion/recursion8.py +27 -0
- pythonlings/curriculum/exercises/regex/regex1.py +16 -0
- pythonlings/curriculum/exercises/regex/regex10.py +31 -0
- pythonlings/curriculum/exercises/regex/regex2.py +16 -0
- pythonlings/curriculum/exercises/regex/regex3.py +16 -0
- pythonlings/curriculum/exercises/regex/regex4.py +19 -0
- pythonlings/curriculum/exercises/regex/regex5.py +19 -0
- pythonlings/curriculum/exercises/regex/regex6.py +23 -0
- pythonlings/curriculum/exercises/regex/regex7.py +24 -0
- pythonlings/curriculum/exercises/regex/regex8.py +19 -0
- pythonlings/curriculum/exercises/regex/regex9.py +22 -0
- pythonlings/curriculum/exercises/sets/sets1.py +6 -0
- pythonlings/curriculum/exercises/sets/sets10.py +21 -0
- pythonlings/curriculum/exercises/sets/sets2.py +12 -0
- pythonlings/curriculum/exercises/sets/sets3.py +15 -0
- pythonlings/curriculum/exercises/sets/sets4.py +14 -0
- pythonlings/curriculum/exercises/sets/sets5.py +14 -0
- pythonlings/curriculum/exercises/sets/sets6.py +14 -0
- pythonlings/curriculum/exercises/sets/sets7.py +16 -0
- pythonlings/curriculum/exercises/sets/sets8.py +16 -0
- pythonlings/curriculum/exercises/sets/sets9.py +15 -0
- pythonlings/curriculum/exercises/strings/strings1.py +6 -0
- pythonlings/curriculum/exercises/strings/strings10.py +11 -0
- pythonlings/curriculum/exercises/strings/strings2.py +9 -0
- pythonlings/curriculum/exercises/strings/strings3.py +9 -0
- pythonlings/curriculum/exercises/strings/strings4.py +8 -0
- pythonlings/curriculum/exercises/strings/strings5.py +10 -0
- pythonlings/curriculum/exercises/strings/strings6.py +10 -0
- pythonlings/curriculum/exercises/strings/strings7.py +10 -0
- pythonlings/curriculum/exercises/strings/strings8.py +9 -0
- pythonlings/curriculum/exercises/strings/strings9.py +10 -0
- pythonlings/curriculum/exercises/testing/testing1.py +16 -0
- pythonlings/curriculum/exercises/testing/testing10.py +21 -0
- pythonlings/curriculum/exercises/testing/testing11.py +27 -0
- pythonlings/curriculum/exercises/testing/testing12.py +51 -0
- pythonlings/curriculum/exercises/testing/testing2.py +15 -0
- pythonlings/curriculum/exercises/testing/testing3.py +19 -0
- pythonlings/curriculum/exercises/testing/testing4.py +19 -0
- pythonlings/curriculum/exercises/testing/testing5.py +18 -0
- pythonlings/curriculum/exercises/testing/testing6.py +27 -0
- pythonlings/curriculum/exercises/testing/testing7.py +27 -0
- pythonlings/curriculum/exercises/testing/testing8.py +29 -0
- pythonlings/curriculum/exercises/testing/testing9.py +30 -0
- pythonlings/curriculum/exercises/tuples/tuples1.py +7 -0
- pythonlings/curriculum/exercises/tuples/tuples10.py +26 -0
- pythonlings/curriculum/exercises/tuples/tuples2.py +11 -0
- pythonlings/curriculum/exercises/tuples/tuples3.py +9 -0
- pythonlings/curriculum/exercises/tuples/tuples4.py +8 -0
- pythonlings/curriculum/exercises/tuples/tuples5.py +12 -0
- pythonlings/curriculum/exercises/tuples/tuples6.py +15 -0
- pythonlings/curriculum/exercises/tuples/tuples7.py +14 -0
- pythonlings/curriculum/exercises/tuples/tuples8.py +13 -0
- pythonlings/curriculum/exercises/tuples/tuples9.py +18 -0
- pythonlings/curriculum/exercises/type_hints/type_hints1.py +9 -0
- pythonlings/curriculum/exercises/type_hints/type_hints2.py +13 -0
- pythonlings/curriculum/exercises/type_hints/type_hints3.py +13 -0
- pythonlings/curriculum/exercises/type_hints/type_hints4.py +21 -0
- pythonlings/curriculum/exercises/type_hints/type_hints5.py +15 -0
- pythonlings/curriculum/exercises/type_hints/type_hints6.py +16 -0
- pythonlings/curriculum/exercises/type_hints/type_hints7.py +19 -0
- pythonlings/curriculum/exercises/type_hints/type_hints8.py +27 -0
- pythonlings/curriculum/exercises/variables/variables1.py +10 -0
- pythonlings/curriculum/exercises/variables/variables10.py +14 -0
- pythonlings/curriculum/exercises/variables/variables2.py +11 -0
- pythonlings/curriculum/exercises/variables/variables3.py +11 -0
- pythonlings/curriculum/exercises/variables/variables4.py +9 -0
- pythonlings/curriculum/exercises/variables/variables5.py +11 -0
- pythonlings/curriculum/exercises/variables/variables6.py +9 -0
- pythonlings/curriculum/exercises/variables/variables7.py +10 -0
- pythonlings/curriculum/exercises/variables/variables8.py +12 -0
- pythonlings/curriculum/exercises/variables/variables9.py +10 -0
- pythonlings/curriculum/info.toml +1755 -0
- pythonlings/curriculum/solutions/.keep +1 -0
- pythonlings/curriculum/solutions/_answers.py +1654 -0
- pythonlings/curriculum/solutions/async1.py +2 -0
- pythonlings/curriculum/solutions/async10.py +2 -0
- pythonlings/curriculum/solutions/async2.py +2 -0
- pythonlings/curriculum/solutions/async3.py +2 -0
- pythonlings/curriculum/solutions/async4.py +2 -0
- pythonlings/curriculum/solutions/async5.py +2 -0
- pythonlings/curriculum/solutions/async6.py +2 -0
- pythonlings/curriculum/solutions/async7.py +2 -0
- pythonlings/curriculum/solutions/async8.py +2 -0
- pythonlings/curriculum/solutions/async9.py +2 -0
- pythonlings/curriculum/solutions/classes1.py +2 -0
- pythonlings/curriculum/solutions/classes10.py +2 -0
- pythonlings/curriculum/solutions/classes11.py +2 -0
- pythonlings/curriculum/solutions/classes12.py +2 -0
- pythonlings/curriculum/solutions/classes2.py +2 -0
- pythonlings/curriculum/solutions/classes3.py +2 -0
- pythonlings/curriculum/solutions/classes4.py +2 -0
- pythonlings/curriculum/solutions/classes5.py +2 -0
- pythonlings/curriculum/solutions/classes6.py +2 -0
- pythonlings/curriculum/solutions/classes7.py +2 -0
- pythonlings/curriculum/solutions/classes8.py +2 -0
- pythonlings/curriculum/solutions/classes9.py +2 -0
- pythonlings/curriculum/solutions/collections1.py +2 -0
- pythonlings/curriculum/solutions/collections10.py +2 -0
- pythonlings/curriculum/solutions/collections2.py +2 -0
- pythonlings/curriculum/solutions/collections3.py +2 -0
- pythonlings/curriculum/solutions/collections4.py +2 -0
- pythonlings/curriculum/solutions/collections5.py +2 -0
- pythonlings/curriculum/solutions/collections6.py +2 -0
- pythonlings/curriculum/solutions/collections7.py +2 -0
- pythonlings/curriculum/solutions/collections8.py +2 -0
- pythonlings/curriculum/solutions/collections9.py +2 -0
- pythonlings/curriculum/solutions/comprehensions1.py +2 -0
- pythonlings/curriculum/solutions/comprehensions10.py +2 -0
- pythonlings/curriculum/solutions/comprehensions2.py +2 -0
- pythonlings/curriculum/solutions/comprehensions3.py +2 -0
- pythonlings/curriculum/solutions/comprehensions4.py +2 -0
- pythonlings/curriculum/solutions/comprehensions5.py +2 -0
- pythonlings/curriculum/solutions/comprehensions6.py +2 -0
- pythonlings/curriculum/solutions/comprehensions7.py +2 -0
- pythonlings/curriculum/solutions/comprehensions8.py +2 -0
- pythonlings/curriculum/solutions/comprehensions9.py +2 -0
- pythonlings/curriculum/solutions/conditionals1.py +2 -0
- pythonlings/curriculum/solutions/conditionals10.py +2 -0
- pythonlings/curriculum/solutions/conditionals2.py +2 -0
- pythonlings/curriculum/solutions/conditionals3.py +2 -0
- pythonlings/curriculum/solutions/conditionals4.py +2 -0
- pythonlings/curriculum/solutions/conditionals5.py +2 -0
- pythonlings/curriculum/solutions/conditionals6.py +2 -0
- pythonlings/curriculum/solutions/conditionals7.py +2 -0
- pythonlings/curriculum/solutions/conditionals8.py +2 -0
- pythonlings/curriculum/solutions/conditionals9.py +2 -0
- pythonlings/curriculum/solutions/context_managers1.py +2 -0
- pythonlings/curriculum/solutions/context_managers2.py +2 -0
- pythonlings/curriculum/solutions/context_managers3.py +2 -0
- pythonlings/curriculum/solutions/context_managers4.py +2 -0
- pythonlings/curriculum/solutions/context_managers5.py +2 -0
- pythonlings/curriculum/solutions/context_managers6.py +2 -0
- pythonlings/curriculum/solutions/context_managers7.py +2 -0
- pythonlings/curriculum/solutions/context_managers8.py +2 -0
- pythonlings/curriculum/solutions/dataclasses1.py +2 -0
- pythonlings/curriculum/solutions/dataclasses2.py +2 -0
- pythonlings/curriculum/solutions/dataclasses3.py +2 -0
- pythonlings/curriculum/solutions/dataclasses4.py +2 -0
- pythonlings/curriculum/solutions/dataclasses5.py +2 -0
- pythonlings/curriculum/solutions/dataclasses6.py +2 -0
- pythonlings/curriculum/solutions/dataclasses7.py +2 -0
- pythonlings/curriculum/solutions/dataclasses8.py +2 -0
- pythonlings/curriculum/solutions/datetime1.py +2 -0
- pythonlings/curriculum/solutions/datetime2.py +2 -0
- pythonlings/curriculum/solutions/datetime3.py +2 -0
- pythonlings/curriculum/solutions/datetime4.py +2 -0
- pythonlings/curriculum/solutions/datetime5.py +2 -0
- pythonlings/curriculum/solutions/datetime6.py +2 -0
- pythonlings/curriculum/solutions/datetime7.py +2 -0
- pythonlings/curriculum/solutions/datetime8.py +2 -0
- pythonlings/curriculum/solutions/decorators1.py +2 -0
- pythonlings/curriculum/solutions/decorators10.py +2 -0
- pythonlings/curriculum/solutions/decorators2.py +2 -0
- pythonlings/curriculum/solutions/decorators3.py +2 -0
- pythonlings/curriculum/solutions/decorators4.py +2 -0
- pythonlings/curriculum/solutions/decorators5.py +2 -0
- pythonlings/curriculum/solutions/decorators6.py +2 -0
- pythonlings/curriculum/solutions/decorators7.py +2 -0
- pythonlings/curriculum/solutions/decorators8.py +2 -0
- pythonlings/curriculum/solutions/decorators9.py +2 -0
- pythonlings/curriculum/solutions/dictionaries1.py +2 -0
- pythonlings/curriculum/solutions/dictionaries10.py +2 -0
- pythonlings/curriculum/solutions/dictionaries2.py +2 -0
- pythonlings/curriculum/solutions/dictionaries3.py +2 -0
- pythonlings/curriculum/solutions/dictionaries4.py +2 -0
- pythonlings/curriculum/solutions/dictionaries5.py +2 -0
- pythonlings/curriculum/solutions/dictionaries6.py +2 -0
- pythonlings/curriculum/solutions/dictionaries7.py +2 -0
- pythonlings/curriculum/solutions/dictionaries8.py +2 -0
- pythonlings/curriculum/solutions/dictionaries9.py +2 -0
- pythonlings/curriculum/solutions/enums1.py +2 -0
- pythonlings/curriculum/solutions/enums2.py +2 -0
- pythonlings/curriculum/solutions/enums3.py +2 -0
- pythonlings/curriculum/solutions/enums4.py +2 -0
- pythonlings/curriculum/solutions/enums5.py +2 -0
- pythonlings/curriculum/solutions/enums6.py +2 -0
- pythonlings/curriculum/solutions/exceptions1.py +2 -0
- pythonlings/curriculum/solutions/exceptions10.py +2 -0
- pythonlings/curriculum/solutions/exceptions2.py +2 -0
- pythonlings/curriculum/solutions/exceptions3.py +2 -0
- pythonlings/curriculum/solutions/exceptions4.py +2 -0
- pythonlings/curriculum/solutions/exceptions5.py +2 -0
- pythonlings/curriculum/solutions/exceptions6.py +2 -0
- pythonlings/curriculum/solutions/exceptions7.py +2 -0
- pythonlings/curriculum/solutions/exceptions8.py +2 -0
- pythonlings/curriculum/solutions/exceptions9.py +2 -0
- pythonlings/curriculum/solutions/file_io1.py +2 -0
- pythonlings/curriculum/solutions/file_io10.py +2 -0
- pythonlings/curriculum/solutions/file_io2.py +2 -0
- pythonlings/curriculum/solutions/file_io3.py +2 -0
- pythonlings/curriculum/solutions/file_io4.py +2 -0
- pythonlings/curriculum/solutions/file_io5.py +2 -0
- pythonlings/curriculum/solutions/file_io6.py +2 -0
- pythonlings/curriculum/solutions/file_io7.py +2 -0
- pythonlings/curriculum/solutions/file_io8.py +2 -0
- pythonlings/curriculum/solutions/file_io9.py +2 -0
- pythonlings/curriculum/solutions/functional1.py +2 -0
- pythonlings/curriculum/solutions/functional10.py +2 -0
- pythonlings/curriculum/solutions/functional2.py +2 -0
- pythonlings/curriculum/solutions/functional3.py +2 -0
- pythonlings/curriculum/solutions/functional4.py +2 -0
- pythonlings/curriculum/solutions/functional5.py +2 -0
- pythonlings/curriculum/solutions/functional6.py +2 -0
- pythonlings/curriculum/solutions/functional7.py +2 -0
- pythonlings/curriculum/solutions/functional8.py +2 -0
- pythonlings/curriculum/solutions/functional9.py +2 -0
- pythonlings/curriculum/solutions/functions1.py +2 -0
- pythonlings/curriculum/solutions/functions10.py +2 -0
- pythonlings/curriculum/solutions/functions2.py +2 -0
- pythonlings/curriculum/solutions/functions3.py +2 -0
- pythonlings/curriculum/solutions/functions4.py +2 -0
- pythonlings/curriculum/solutions/functions5.py +2 -0
- pythonlings/curriculum/solutions/functions6.py +2 -0
- pythonlings/curriculum/solutions/functions7.py +2 -0
- pythonlings/curriculum/solutions/functions8.py +2 -0
- pythonlings/curriculum/solutions/functions9.py +2 -0
- pythonlings/curriculum/solutions/generators1.py +2 -0
- pythonlings/curriculum/solutions/generators10.py +2 -0
- pythonlings/curriculum/solutions/generators2.py +2 -0
- pythonlings/curriculum/solutions/generators3.py +2 -0
- pythonlings/curriculum/solutions/generators4.py +2 -0
- pythonlings/curriculum/solutions/generators5.py +2 -0
- pythonlings/curriculum/solutions/generators6.py +2 -0
- pythonlings/curriculum/solutions/generators7.py +2 -0
- pythonlings/curriculum/solutions/generators8.py +2 -0
- pythonlings/curriculum/solutions/generators9.py +2 -0
- pythonlings/curriculum/solutions/itertools1.py +2 -0
- pythonlings/curriculum/solutions/itertools2.py +2 -0
- pythonlings/curriculum/solutions/itertools3.py +2 -0
- pythonlings/curriculum/solutions/itertools4.py +2 -0
- pythonlings/curriculum/solutions/itertools5.py +2 -0
- pythonlings/curriculum/solutions/itertools6.py +2 -0
- pythonlings/curriculum/solutions/itertools7.py +2 -0
- pythonlings/curriculum/solutions/itertools8.py +2 -0
- pythonlings/curriculum/solutions/json1.py +2 -0
- pythonlings/curriculum/solutions/json2.py +2 -0
- pythonlings/curriculum/solutions/json3.py +2 -0
- pythonlings/curriculum/solutions/json4.py +2 -0
- pythonlings/curriculum/solutions/json5.py +2 -0
- pythonlings/curriculum/solutions/json6.py +2 -0
- pythonlings/curriculum/solutions/json7.py +2 -0
- pythonlings/curriculum/solutions/json8.py +2 -0
- pythonlings/curriculum/solutions/lists1.py +2 -0
- pythonlings/curriculum/solutions/lists10.py +2 -0
- pythonlings/curriculum/solutions/lists2.py +2 -0
- pythonlings/curriculum/solutions/lists3.py +2 -0
- pythonlings/curriculum/solutions/lists4.py +2 -0
- pythonlings/curriculum/solutions/lists5.py +2 -0
- pythonlings/curriculum/solutions/lists6.py +2 -0
- pythonlings/curriculum/solutions/lists7.py +2 -0
- pythonlings/curriculum/solutions/lists8.py +2 -0
- pythonlings/curriculum/solutions/lists9.py +2 -0
- pythonlings/curriculum/solutions/loops1.py +2 -0
- pythonlings/curriculum/solutions/loops10.py +2 -0
- pythonlings/curriculum/solutions/loops2.py +2 -0
- pythonlings/curriculum/solutions/loops3.py +2 -0
- pythonlings/curriculum/solutions/loops4.py +2 -0
- pythonlings/curriculum/solutions/loops5.py +2 -0
- pythonlings/curriculum/solutions/loops6.py +2 -0
- pythonlings/curriculum/solutions/loops7.py +2 -0
- pythonlings/curriculum/solutions/loops8.py +2 -0
- pythonlings/curriculum/solutions/loops9.py +2 -0
- pythonlings/curriculum/solutions/modules1.py +2 -0
- pythonlings/curriculum/solutions/modules2.py +2 -0
- pythonlings/curriculum/solutions/modules3.py +2 -0
- pythonlings/curriculum/solutions/modules4.py +2 -0
- pythonlings/curriculum/solutions/modules5.py +2 -0
- pythonlings/curriculum/solutions/modules6.py +2 -0
- pythonlings/curriculum/solutions/modules7.py +2 -0
- pythonlings/curriculum/solutions/modules8.py +2 -0
- pythonlings/curriculum/solutions/oop_advanced1.py +2 -0
- pythonlings/curriculum/solutions/oop_advanced10.py +2 -0
- pythonlings/curriculum/solutions/oop_advanced11.py +2 -0
- pythonlings/curriculum/solutions/oop_advanced12.py +2 -0
- pythonlings/curriculum/solutions/oop_advanced2.py +2 -0
- pythonlings/curriculum/solutions/oop_advanced3.py +2 -0
- pythonlings/curriculum/solutions/oop_advanced4.py +2 -0
- pythonlings/curriculum/solutions/oop_advanced5.py +2 -0
- pythonlings/curriculum/solutions/oop_advanced6.py +2 -0
- pythonlings/curriculum/solutions/oop_advanced7.py +2 -0
- pythonlings/curriculum/solutions/oop_advanced8.py +2 -0
- pythonlings/curriculum/solutions/oop_advanced9.py +2 -0
- pythonlings/curriculum/solutions/pathlib1.py +2 -0
- pythonlings/curriculum/solutions/pathlib2.py +2 -0
- pythonlings/curriculum/solutions/pathlib3.py +2 -0
- pythonlings/curriculum/solutions/pathlib4.py +2 -0
- pythonlings/curriculum/solutions/pathlib5.py +2 -0
- pythonlings/curriculum/solutions/pathlib6.py +2 -0
- pythonlings/curriculum/solutions/recursion1.py +2 -0
- pythonlings/curriculum/solutions/recursion2.py +2 -0
- pythonlings/curriculum/solutions/recursion3.py +2 -0
- pythonlings/curriculum/solutions/recursion4.py +2 -0
- pythonlings/curriculum/solutions/recursion5.py +2 -0
- pythonlings/curriculum/solutions/recursion6.py +2 -0
- pythonlings/curriculum/solutions/recursion7.py +2 -0
- pythonlings/curriculum/solutions/recursion8.py +2 -0
- pythonlings/curriculum/solutions/regex1.py +2 -0
- pythonlings/curriculum/solutions/regex10.py +2 -0
- pythonlings/curriculum/solutions/regex2.py +2 -0
- pythonlings/curriculum/solutions/regex3.py +2 -0
- pythonlings/curriculum/solutions/regex4.py +2 -0
- pythonlings/curriculum/solutions/regex5.py +2 -0
- pythonlings/curriculum/solutions/regex6.py +2 -0
- pythonlings/curriculum/solutions/regex7.py +2 -0
- pythonlings/curriculum/solutions/regex8.py +2 -0
- pythonlings/curriculum/solutions/regex9.py +2 -0
- pythonlings/curriculum/solutions/sets1.py +2 -0
- pythonlings/curriculum/solutions/sets10.py +2 -0
- pythonlings/curriculum/solutions/sets2.py +2 -0
- pythonlings/curriculum/solutions/sets3.py +2 -0
- pythonlings/curriculum/solutions/sets4.py +2 -0
- pythonlings/curriculum/solutions/sets5.py +2 -0
- pythonlings/curriculum/solutions/sets6.py +2 -0
- pythonlings/curriculum/solutions/sets7.py +2 -0
- pythonlings/curriculum/solutions/sets8.py +2 -0
- pythonlings/curriculum/solutions/sets9.py +2 -0
- pythonlings/curriculum/solutions/strings1.py +2 -0
- pythonlings/curriculum/solutions/strings10.py +2 -0
- pythonlings/curriculum/solutions/strings2.py +2 -0
- pythonlings/curriculum/solutions/strings3.py +2 -0
- pythonlings/curriculum/solutions/strings4.py +2 -0
- pythonlings/curriculum/solutions/strings5.py +2 -0
- pythonlings/curriculum/solutions/strings6.py +2 -0
- pythonlings/curriculum/solutions/strings7.py +2 -0
- pythonlings/curriculum/solutions/strings8.py +2 -0
- pythonlings/curriculum/solutions/strings9.py +2 -0
- pythonlings/curriculum/solutions/testing1.py +2 -0
- pythonlings/curriculum/solutions/testing10.py +2 -0
- pythonlings/curriculum/solutions/testing11.py +2 -0
- pythonlings/curriculum/solutions/testing12.py +2 -0
- pythonlings/curriculum/solutions/testing2.py +2 -0
- pythonlings/curriculum/solutions/testing3.py +2 -0
- pythonlings/curriculum/solutions/testing4.py +2 -0
- pythonlings/curriculum/solutions/testing5.py +2 -0
- pythonlings/curriculum/solutions/testing6.py +2 -0
- pythonlings/curriculum/solutions/testing7.py +2 -0
- pythonlings/curriculum/solutions/testing8.py +2 -0
- pythonlings/curriculum/solutions/testing9.py +2 -0
- pythonlings/curriculum/solutions/tuples1.py +2 -0
- pythonlings/curriculum/solutions/tuples10.py +2 -0
- pythonlings/curriculum/solutions/tuples2.py +2 -0
- pythonlings/curriculum/solutions/tuples3.py +2 -0
- pythonlings/curriculum/solutions/tuples4.py +2 -0
- pythonlings/curriculum/solutions/tuples5.py +2 -0
- pythonlings/curriculum/solutions/tuples6.py +2 -0
- pythonlings/curriculum/solutions/tuples7.py +2 -0
- pythonlings/curriculum/solutions/tuples8.py +2 -0
- pythonlings/curriculum/solutions/tuples9.py +2 -0
- pythonlings/curriculum/solutions/type_hints1.py +2 -0
- pythonlings/curriculum/solutions/type_hints2.py +2 -0
- pythonlings/curriculum/solutions/type_hints3.py +2 -0
- pythonlings/curriculum/solutions/type_hints4.py +2 -0
- pythonlings/curriculum/solutions/type_hints5.py +2 -0
- pythonlings/curriculum/solutions/type_hints6.py +2 -0
- pythonlings/curriculum/solutions/type_hints7.py +2 -0
- pythonlings/curriculum/solutions/type_hints8.py +2 -0
- pythonlings/curriculum/solutions/variables1.py +2 -0
- pythonlings/curriculum/solutions/variables10.py +2 -0
- pythonlings/curriculum/solutions/variables2.py +2 -0
- pythonlings/curriculum/solutions/variables3.py +2 -0
- pythonlings/curriculum/solutions/variables4.py +2 -0
- pythonlings/curriculum/solutions/variables5.py +2 -0
- pythonlings/curriculum/solutions/variables6.py +2 -0
- pythonlings/curriculum/solutions/variables7.py +2 -0
- pythonlings/curriculum/solutions/variables8.py +2 -0
- pythonlings/curriculum/solutions/variables9.py +2 -0
- pythonlings/docs/NOTICE.md +9 -0
- pythonlings/docs/__init__.py +1 -0
- pythonlings/docs/index.json +160 -0
- pythonlings/docs/topics/__init__.py +1 -0
- pythonlings/docs/topics/async.md +97 -0
- pythonlings/docs/topics/classes.md +97 -0
- pythonlings/docs/topics/collections.md +96 -0
- pythonlings/docs/topics/comprehensions.md +97 -0
- pythonlings/docs/topics/conditionals.md +88 -0
- pythonlings/docs/topics/context_managers.md +97 -0
- pythonlings/docs/topics/dataclasses.md +97 -0
- pythonlings/docs/topics/datetime.md +97 -0
- pythonlings/docs/topics/decorators.md +91 -0
- pythonlings/docs/topics/dictionaries.md +96 -0
- pythonlings/docs/topics/enums.md +96 -0
- pythonlings/docs/topics/exceptions.md +96 -0
- pythonlings/docs/topics/file_io.md +96 -0
- pythonlings/docs/topics/functional.md +96 -0
- pythonlings/docs/topics/functions.md +97 -0
- pythonlings/docs/topics/generators.md +97 -0
- pythonlings/docs/topics/itertools.md +96 -0
- pythonlings/docs/topics/json.md +97 -0
- pythonlings/docs/topics/lists.md +97 -0
- pythonlings/docs/topics/loops.md +95 -0
- pythonlings/docs/topics/modules.md +97 -0
- pythonlings/docs/topics/oop_advanced.md +71 -0
- pythonlings/docs/topics/pathlib.md +79 -0
- pythonlings/docs/topics/recursion.md +73 -0
- pythonlings/docs/topics/regex.md +96 -0
- pythonlings/docs/topics/sets.md +97 -0
- pythonlings/docs/topics/strings.md +96 -0
- pythonlings/docs/topics/testing.md +97 -0
- pythonlings/docs/topics/tuples.md +97 -0
- pythonlings/docs/topics/type_hints.md +97 -0
- pythonlings/docs/topics/variables.md +97 -0
- pythonlings/pythonlings.tcss +123 -0
- pythonlings/screens/__init__.py +0 -0
- pythonlings/screens/docs.py +93 -0
- pythonlings/screens/topic_picker.py +107 -0
- pythonlings/screens/track.py +234 -0
- pythonlings/widgets/__init__.py +0 -0
- pythonlings/widgets/editor_pane.py +33 -0
- pythonlings/widgets/exercise_tree.py +33 -0
- pythonlings/widgets/output_panel.py +180 -0
- pythonlings/widgets/progress.py +15 -0
- pythonlings-0.3.0.dist-info/METADATA +259 -0
- pythonlings-0.3.0.dist-info/RECORD +942 -0
- pythonlings-0.3.0.dist-info/WHEEL +4 -0
- pythonlings-0.3.0.dist-info/entry_points.txt +2 -0
- pythonlings-0.3.0.dist-info/licenses/LICENSE +21 -0
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
# Conditionals
|
|
2
|
+
|
|
3
|
+
Source: https://docs.python.org/3/tutorial/controlflow.html#if-statements
|
|
4
|
+
|
|
5
|
+
This local reference is generated from the official Python documentation and trimmed for pythonlings.
|
|
6
|
+
|
|
7
|
+
`if`, `elif`, and `else` choose which block runs based on boolean conditions.
|
|
8
|
+
|
|
9
|
+
## Extracted reference
|
|
10
|
+
|
|
11
|
+
4.1. `if` Statements
|
|
12
|
+
|
|
13
|
+
Perhaps the most well-known statement type is the `if` statement. For
|
|
14
|
+
example:
|
|
15
|
+
|
|
16
|
+
```python
|
|
17
|
+
>>> x = int(input("Please enter an integer: "))
|
|
18
|
+
Please enter an integer: 42
|
|
19
|
+
>>> if x < 0:
|
|
20
|
+
... x = 0
|
|
21
|
+
... print('Negative changed to zero')
|
|
22
|
+
... elif x == 0:
|
|
23
|
+
... print('Zero')
|
|
24
|
+
... elif x == 1:
|
|
25
|
+
... print('Single')
|
|
26
|
+
... else:
|
|
27
|
+
... print('More')
|
|
28
|
+
...
|
|
29
|
+
More
|
|
30
|
+
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
There can be zero or more `elif` parts, and the `else` part is
|
|
34
|
+
optional. The keyword ‘`elif`’ is short for ‘else if’, and is useful
|
|
35
|
+
to avoid excessive indentation. An `if` … `elif` …
|
|
36
|
+
`elif` … sequence is a substitute for the `switch` or
|
|
37
|
+
`case` statements found in other languages.
|
|
38
|
+
|
|
39
|
+
If you’re comparing the same value to several constants, or checking for specific types or
|
|
40
|
+
attributes, you may also find the `match` statement useful. For more
|
|
41
|
+
details see match Statements.
|
|
42
|
+
|
|
43
|
+
## More reference
|
|
44
|
+
|
|
45
|
+
Source: https://docs.python.org/3/tutorial/controlflow.html#match-statements
|
|
46
|
+
|
|
47
|
+
`match` pattern matching with examples and syntax.
|
|
48
|
+
|
|
49
|
+
4.7. `match` Statements
|
|
50
|
+
|
|
51
|
+
A `match` statement takes an expression and compares its value to successive
|
|
52
|
+
patterns given as one or more case blocks. This is superficially
|
|
53
|
+
similar to a switch statement in C, Java or JavaScript (and many
|
|
54
|
+
other languages), but it’s more similar to pattern matching in
|
|
55
|
+
languages like Rust or Haskell. Only the first pattern that matches
|
|
56
|
+
gets executed and it can also extract components (sequence elements
|
|
57
|
+
or object attributes) from the value into variables. If no case matches,
|
|
58
|
+
none of the branches is executed.
|
|
59
|
+
|
|
60
|
+
The simplest form compares a subject value against one or more literals:
|
|
61
|
+
|
|
62
|
+
```python
|
|
63
|
+
def http_error(status):
|
|
64
|
+
match status:
|
|
65
|
+
case 400:
|
|
66
|
+
return "Bad request"
|
|
67
|
+
case 404:
|
|
68
|
+
return "Not found"
|
|
69
|
+
case 418:
|
|
70
|
+
return "I'm a teapot"
|
|
71
|
+
case _:
|
|
72
|
+
return "Something's wrong with the internet"
|
|
73
|
+
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
Note the last block: the “variable name” `_` acts as a wildcard and
|
|
77
|
+
never fails to match.
|
|
78
|
+
|
|
79
|
+
You can combine several literals in a single pattern using `|` (“or”):
|
|
80
|
+
|
|
81
|
+
```python
|
|
82
|
+
case 401 | 403 | 404:
|
|
83
|
+
return "Not allowed"
|
|
84
|
+
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
Patterns can look like unpacking assignments, and can be used to bind
|
|
88
|
+
variables:
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
# Context Managers
|
|
2
|
+
|
|
3
|
+
Source: https://docs.python.org/3/reference/compound_stmts.html#the-with-statement
|
|
4
|
+
|
|
5
|
+
This local reference is generated from the official Python documentation and trimmed for pythonlings.
|
|
6
|
+
|
|
7
|
+
Context managers run setup and cleanup around a block using `with`.
|
|
8
|
+
|
|
9
|
+
## Extracted reference
|
|
10
|
+
|
|
11
|
+
8.5. The `with` statement
|
|
12
|
+
|
|
13
|
+
The `with` statement is used to wrap the execution of a block with
|
|
14
|
+
methods defined by a context manager (see section With Statement Context Managers).
|
|
15
|
+
This allows common `try`…`except`…`finally`
|
|
16
|
+
usage patterns to be encapsulated for convenient reuse.
|
|
17
|
+
|
|
18
|
+
```python
|
|
19
|
+
|
|
20
|
+
with_stmt: "with" ( "(" with_stmt_contents ","? ")" | with_stmt_contents ) ":" suite
|
|
21
|
+
with_stmt_contents: with_item ("," with_item)*
|
|
22
|
+
with_item: expression ["as" target]
|
|
23
|
+
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
The execution of the `with` statement with one “item” proceeds as follows:
|
|
27
|
+
|
|
28
|
+
-
|
|
29
|
+
|
|
30
|
+
The context expression (the expression given in the
|
|
31
|
+
`with_item`) is evaluated to obtain a context manager.
|
|
32
|
+
|
|
33
|
+
-
|
|
34
|
+
|
|
35
|
+
The context manager’s `__enter__()` is loaded for later use.
|
|
36
|
+
|
|
37
|
+
-
|
|
38
|
+
|
|
39
|
+
The context manager’s `__exit__()` is loaded for later use.
|
|
40
|
+
|
|
41
|
+
-
|
|
42
|
+
|
|
43
|
+
The context manager’s `__enter__()` method is invoked.
|
|
44
|
+
|
|
45
|
+
-
|
|
46
|
+
|
|
47
|
+
If a target was included in the `with` statement, the return value
|
|
48
|
+
from `__enter__()` is assigned to it.
|
|
49
|
+
|
|
50
|
+
Note
|
|
51
|
+
|
|
52
|
+
## More reference
|
|
53
|
+
|
|
54
|
+
Source: https://docs.python.org/3/library/contextlib.html#contextlib.contextmanager
|
|
55
|
+
|
|
56
|
+
`contextlib.contextmanager` builds a context manager from a generator.
|
|
57
|
+
|
|
58
|
+
@contextlib.contextmanager
|
|
59
|
+
|
|
60
|
+
This function is a decorator that can be used to define a factory
|
|
61
|
+
function for `with` statement context managers, without needing to
|
|
62
|
+
create a class or separate `__enter__()` and `__exit__()` methods.
|
|
63
|
+
|
|
64
|
+
While many objects natively support use in with statements, sometimes a
|
|
65
|
+
resource needs to be managed that isn’t a context manager in its own right,
|
|
66
|
+
and doesn’t implement a `close()` method for use with `contextlib.closing`.
|
|
67
|
+
|
|
68
|
+
An abstract example would be the following to ensure correct resource
|
|
69
|
+
management:
|
|
70
|
+
|
|
71
|
+
```python
|
|
72
|
+
from contextlib import contextmanager
|
|
73
|
+
|
|
74
|
+
@contextmanager
|
|
75
|
+
def managed_resource(*args, **kwds):
|
|
76
|
+
# Code to acquire resource, e.g.:
|
|
77
|
+
resource = acquire_resource(*args, **kwds)
|
|
78
|
+
try:
|
|
79
|
+
yield resource
|
|
80
|
+
finally:
|
|
81
|
+
# Code to release resource, e.g.:
|
|
82
|
+
release_resource(resource)
|
|
83
|
+
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
The function can then be used like this:
|
|
87
|
+
|
|
88
|
+
```python
|
|
89
|
+
>>> with managed_resource(timeout=3600) as resource:
|
|
90
|
+
... # Resource is released at the end of this block,
|
|
91
|
+
... # even if code in the block raises an exception
|
|
92
|
+
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
The function being decorated must return a generator-iterator when
|
|
96
|
+
called. This iterator must yield exactly one value, which will be bound to
|
|
97
|
+
the targets in the `with` statement’s `as` clause, if any.
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
# Dataclasses
|
|
2
|
+
|
|
3
|
+
Source: https://docs.python.org/3/library/dataclasses.html
|
|
4
|
+
|
|
5
|
+
This local reference is generated from the official Python documentation and trimmed for pythonlings.
|
|
6
|
+
|
|
7
|
+
Dataclasses generate common class methods for data-focused classes.
|
|
8
|
+
|
|
9
|
+
## Extracted reference
|
|
10
|
+
|
|
11
|
+
dataclasses — Data Classes — Python 3.14.6 documentation
|
|
12
|
+
|
|
13
|
+
Navigation
|
|
14
|
+
|
|
15
|
+
-
|
|
16
|
+
index
|
|
17
|
+
|
|
18
|
+
-
|
|
19
|
+
modules |
|
|
20
|
+
|
|
21
|
+
-
|
|
22
|
+
next |
|
|
23
|
+
|
|
24
|
+
-
|
|
25
|
+
previous |
|
|
26
|
+
|
|
27
|
+
-
|
|
28
|
+
|
|
29
|
+
- Python »
|
|
30
|
+
|
|
31
|
+
-
|
|
32
|
+
|
|
33
|
+
-
|
|
34
|
+
|
|
35
|
+
-
|
|
36
|
+
3.14.6 Documentation »
|
|
37
|
+
|
|
38
|
+
- The Python Standard Library »
|
|
39
|
+
|
|
40
|
+
- Python Runtime Services »
|
|
41
|
+
|
|
42
|
+
- `dataclasses` — Data Classes
|
|
43
|
+
|
|
44
|
+
-
|
|
45
|
+
|
|
46
|
+
|
|
|
47
|
+
|
|
48
|
+
-
|
|
49
|
+
|
|
50
|
+
Theme
|
|
51
|
+
|
|
52
|
+
## More reference
|
|
53
|
+
|
|
54
|
+
Source: https://docs.python.org/3/tutorial/classes.html#class-and-instance-variables
|
|
55
|
+
|
|
56
|
+
Class vs instance variables — the distinction behind dataclass fields.
|
|
57
|
+
|
|
58
|
+
9.3.5. Class and Instance Variables
|
|
59
|
+
|
|
60
|
+
Generally speaking, instance variables are for data unique to each instance
|
|
61
|
+
and class variables are for attributes and methods shared by all instances
|
|
62
|
+
of the class:
|
|
63
|
+
|
|
64
|
+
```python
|
|
65
|
+
class Dog:
|
|
66
|
+
|
|
67
|
+
kind = 'canine' # class variable shared by all instances
|
|
68
|
+
|
|
69
|
+
def __init__(self, name):
|
|
70
|
+
self.name = name # instance variable unique to each instance
|
|
71
|
+
|
|
72
|
+
>>> d = Dog('Fido')
|
|
73
|
+
>>> e = Dog('Buddy')
|
|
74
|
+
>>> d.kind # shared by all dogs
|
|
75
|
+
'canine'
|
|
76
|
+
>>> e.kind # shared by all dogs
|
|
77
|
+
'canine'
|
|
78
|
+
>>> d.name # unique to d
|
|
79
|
+
'Fido'
|
|
80
|
+
>>> e.name # unique to e
|
|
81
|
+
'Buddy'
|
|
82
|
+
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
As discussed in A Word About Names and Objects, shared data can have possibly surprising
|
|
86
|
+
effects involving mutable objects such as lists and dictionaries.
|
|
87
|
+
For example, the tricks list in the following code should not be used as a
|
|
88
|
+
class variable because just a single list would be shared by all Dog
|
|
89
|
+
instances:
|
|
90
|
+
|
|
91
|
+
```python
|
|
92
|
+
class Dog:
|
|
93
|
+
|
|
94
|
+
tricks = [] # mistaken use of a class variable
|
|
95
|
+
|
|
96
|
+
def __init__(self, name):
|
|
97
|
+
self.name = name
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
# Datetime
|
|
2
|
+
|
|
3
|
+
Source: https://docs.python.org/3/library/datetime.html
|
|
4
|
+
|
|
5
|
+
This local reference is generated from the official Python documentation and trimmed for pythonlings.
|
|
6
|
+
|
|
7
|
+
`datetime` represents dates, times, durations, and time zones.
|
|
8
|
+
|
|
9
|
+
## Extracted reference
|
|
10
|
+
|
|
11
|
+
datetime — Basic date and time types — Python 3.14.6 documentation
|
|
12
|
+
|
|
13
|
+
Navigation
|
|
14
|
+
|
|
15
|
+
-
|
|
16
|
+
index
|
|
17
|
+
|
|
18
|
+
-
|
|
19
|
+
modules |
|
|
20
|
+
|
|
21
|
+
-
|
|
22
|
+
next |
|
|
23
|
+
|
|
24
|
+
-
|
|
25
|
+
previous |
|
|
26
|
+
|
|
27
|
+
-
|
|
28
|
+
|
|
29
|
+
- Python »
|
|
30
|
+
|
|
31
|
+
-
|
|
32
|
+
|
|
33
|
+
-
|
|
34
|
+
|
|
35
|
+
-
|
|
36
|
+
3.14.6 Documentation »
|
|
37
|
+
|
|
38
|
+
- The Python Standard Library »
|
|
39
|
+
|
|
40
|
+
- Data Types »
|
|
41
|
+
|
|
42
|
+
- `datetime` — Basic date and time types
|
|
43
|
+
|
|
44
|
+
-
|
|
45
|
+
|
|
46
|
+
|
|
|
47
|
+
|
|
48
|
+
-
|
|
49
|
+
|
|
50
|
+
Theme
|
|
51
|
+
|
|
52
|
+
## More reference
|
|
53
|
+
|
|
54
|
+
Source: https://docs.python.org/3/library/datetime.html#examples-of-usage-datetime
|
|
55
|
+
|
|
56
|
+
Worked `datetime` examples beyond the API reference.
|
|
57
|
+
|
|
58
|
+
Examples of usage: `datetime`
|
|
59
|
+
|
|
60
|
+
Examples of working with `datetime` objects:
|
|
61
|
+
|
|
62
|
+
```python
|
|
63
|
+
>>> import datetime as dt
|
|
64
|
+
|
|
65
|
+
>>> # Using datetime.combine()
|
|
66
|
+
>>> d = dt.date(2005, 7, 14)
|
|
67
|
+
>>> t = dt.time(12, 30)
|
|
68
|
+
>>> dt.datetime.combine(d, t)
|
|
69
|
+
datetime.datetime(2005, 7, 14, 12, 30)
|
|
70
|
+
|
|
71
|
+
>>> # Using datetime.now()
|
|
72
|
+
>>> dt.datetime.now()
|
|
73
|
+
datetime.datetime(2007, 12, 6, 16, 29, 43, 79043) # GMT +1
|
|
74
|
+
>>> dt.datetime.now(dt.timezone.utc)
|
|
75
|
+
datetime.datetime(2007, 12, 6, 15, 29, 43, 79060, tzinfo=datetime.timezone.utc)
|
|
76
|
+
|
|
77
|
+
>>> # Using datetime.strptime()
|
|
78
|
+
>>> my_datetime = dt.datetime.strptime("21/11/06 16:30", "%d/%m/%y %H:%M")
|
|
79
|
+
>>> my_datetime
|
|
80
|
+
datetime.datetime(2006, 11, 21, 16, 30)
|
|
81
|
+
|
|
82
|
+
>>> # Using datetime.timetuple() to get tuple of all attributes
|
|
83
|
+
>>> tt = my_datetime.timetuple()
|
|
84
|
+
>>> for it in tt:
|
|
85
|
+
... print(it)
|
|
86
|
+
...
|
|
87
|
+
2006 # year
|
|
88
|
+
11 # month
|
|
89
|
+
21 # day
|
|
90
|
+
16 # hour
|
|
91
|
+
30 # minute
|
|
92
|
+
0 # second
|
|
93
|
+
1 # weekday (0 = Monday)
|
|
94
|
+
325 # number of days since 1st January
|
|
95
|
+
-1 # dst - method tzinfo.dst() returned None
|
|
96
|
+
|
|
97
|
+
>>> # Date in ISO format
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
# Decorators
|
|
2
|
+
|
|
3
|
+
Source: https://docs.python.org/3/reference/compound_stmts.html#function-definitions
|
|
4
|
+
|
|
5
|
+
This local reference is generated from the official Python documentation and trimmed for pythonlings.
|
|
6
|
+
|
|
7
|
+
Decorators wrap or transform functions and classes with `@decorator` syntax.
|
|
8
|
+
|
|
9
|
+
## Extracted reference
|
|
10
|
+
|
|
11
|
+
8.7. Function definitions
|
|
12
|
+
|
|
13
|
+
A function definition defines a user-defined function object (see section
|
|
14
|
+
The standard type hierarchy):
|
|
15
|
+
|
|
16
|
+
```python
|
|
17
|
+
|
|
18
|
+
funcdef: [decorators] "def" funcname [type_params] "(" [parameter_list] ")"
|
|
19
|
+
["->" expression] ":" suite
|
|
20
|
+
decorators: decorator+
|
|
21
|
+
decorator: "@" assignment_expression NEWLINE
|
|
22
|
+
parameter_list: defparameter ("," defparameter)* "," "/" ["," [parameter_list_no_posonly]]
|
|
23
|
+
| parameter_list_no_posonly
|
|
24
|
+
parameter_list_no_posonly: defparameter ("," defparameter)* ["," [parameter_list_starargs]]
|
|
25
|
+
| parameter_list_starargs
|
|
26
|
+
parameter_list_starargs: "*" [star_parameter] ("," defparameter)* ["," [parameter_star_kwargs]]
|
|
27
|
+
| "*" ("," defparameter)+ ["," [parameter_star_kwargs]]
|
|
28
|
+
| parameter_star_kwargs
|
|
29
|
+
parameter_star_kwargs: "**" parameter [","]
|
|
30
|
+
parameter: identifier [":" expression]
|
|
31
|
+
star_parameter: identifier [":" ["*"] expression]
|
|
32
|
+
defparameter: parameter ["=" expression]
|
|
33
|
+
funcname: identifier
|
|
34
|
+
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
A function definition is an executable statement. Its execution binds the
|
|
38
|
+
function name in the current local namespace to a function object (a wrapper
|
|
39
|
+
around the executable code for the function). This function object contains a
|
|
40
|
+
reference to the current global namespace as the global namespace to be used
|
|
41
|
+
when the function is called.
|
|
42
|
+
|
|
43
|
+
The function definition does not execute the function body; this gets executed
|
|
44
|
+
only when the function is called. [4]
|
|
45
|
+
|
|
46
|
+
A function definition may be wrapped by one or more decorator expressions.
|
|
47
|
+
Decorator expressions are evaluated when the function is defined, in the scope
|
|
48
|
+
that contains the function definition. The result must be a callable, which is
|
|
49
|
+
invoked with the function object as the only argument. The returned value is
|
|
50
|
+
bound to the function name instead of the function object. Multiple decorators
|
|
51
|
+
|
|
52
|
+
## More reference
|
|
53
|
+
|
|
54
|
+
Source: https://docs.python.org/3/library/functools.html#functools.wraps
|
|
55
|
+
|
|
56
|
+
`functools.wraps` preserves the wrapped function's metadata.
|
|
57
|
+
|
|
58
|
+
@functools.wraps(wrapped, assigned=WRAPPER_ASSIGNMENTS, updated=WRAPPER_UPDATES)
|
|
59
|
+
|
|
60
|
+
This is a convenience function for invoking `update_wrapper()` as a
|
|
61
|
+
function decorator when defining a wrapper function. It is equivalent to
|
|
62
|
+
`partial(update_wrapper, wrapped=wrapped, assigned=assigned, updated=updated)`.
|
|
63
|
+
For example:
|
|
64
|
+
|
|
65
|
+
```python
|
|
66
|
+
>>> from functools import wraps
|
|
67
|
+
>>> def my_decorator(f):
|
|
68
|
+
... @wraps(f)
|
|
69
|
+
... def wrapper(*args, **kwds):
|
|
70
|
+
... print('Calling decorated function')
|
|
71
|
+
... return f(*args, **kwds)
|
|
72
|
+
... return wrapper
|
|
73
|
+
...
|
|
74
|
+
>>> @my_decorator
|
|
75
|
+
... def example():
|
|
76
|
+
... """Docstring"""
|
|
77
|
+
... print('Called example function')
|
|
78
|
+
...
|
|
79
|
+
>>> example()
|
|
80
|
+
Calling decorated function
|
|
81
|
+
Called example function
|
|
82
|
+
>>> example.__name__
|
|
83
|
+
'example'
|
|
84
|
+
>>> example.__doc__
|
|
85
|
+
'Docstring'
|
|
86
|
+
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
Without the use of this decorator factory, the name of the example function
|
|
90
|
+
would have been `'wrapper'`, and the docstring of the original `example()`
|
|
91
|
+
would have been lost.
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
# Dictionaries
|
|
2
|
+
|
|
3
|
+
Source: https://docs.python.org/3/tutorial/datastructures.html#dictionaries
|
|
4
|
+
|
|
5
|
+
This local reference is generated from the official Python documentation and trimmed for pythonlings.
|
|
6
|
+
|
|
7
|
+
Dictionaries map keys to values and are the standard way to represent lookup tables.
|
|
8
|
+
|
|
9
|
+
## Extracted reference
|
|
10
|
+
|
|
11
|
+
5.5. Dictionaries
|
|
12
|
+
|
|
13
|
+
Another useful data type built into Python is the dictionary (see
|
|
14
|
+
Mapping Types — dict). Dictionaries are sometimes found in other languages as
|
|
15
|
+
“associative memories” or “associative arrays”. Unlike sequences, which are
|
|
16
|
+
indexed by a range of numbers, dictionaries are indexed by keys, which can be
|
|
17
|
+
any immutable type; strings and numbers can always be keys. Tuples can be used
|
|
18
|
+
as keys if they contain only strings, numbers, or tuples; if a tuple contains
|
|
19
|
+
any mutable object either directly or indirectly, it cannot be used as a key.
|
|
20
|
+
You can’t use lists as keys, since lists can be modified in place using index
|
|
21
|
+
assignments, slice assignments, or methods like `append()` and
|
|
22
|
+
`extend()`.
|
|
23
|
+
|
|
24
|
+
It is best to think of a dictionary as a set of key: value pairs,
|
|
25
|
+
with the requirement that the keys are unique (within one dictionary). A pair of
|
|
26
|
+
braces creates an empty dictionary: `{}`. Placing a comma-separated list of
|
|
27
|
+
key:value pairs within the braces adds initial key:value pairs to the
|
|
28
|
+
dictionary; this is also the way dictionaries are written on output.
|
|
29
|
+
|
|
30
|
+
The main operations on a dictionary are storing a value with some key and
|
|
31
|
+
extracting the value given the key. It is also possible to delete a key:value
|
|
32
|
+
pair with `del`. If you store using a key that is already in use, the old
|
|
33
|
+
value associated with that key is forgotten.
|
|
34
|
+
|
|
35
|
+
Extracting a value for a non-existent key by subscripting (`d[key]`) raises a
|
|
36
|
+
`KeyError`. To avoid getting this error when trying to access a possibly
|
|
37
|
+
non-existent key, use the `get()` method instead, which returns
|
|
38
|
+
`None` (or a specified default value) if the key is not in the dictionary.
|
|
39
|
+
|
|
40
|
+
Performing `list(d)` on a dictionary returns a list of all the keys
|
|
41
|
+
used in the dictionary, in insertion order (if you want it sorted, just use
|
|
42
|
+
`sorted(d)` instead). To check whether a single key is in the
|
|
43
|
+
dictionary, use the `in` keyword.
|
|
44
|
+
|
|
45
|
+
Here is a small example using a dictionary:
|
|
46
|
+
|
|
47
|
+
```python
|
|
48
|
+
>>> tel = {'jack': 4098, 'sape': 4139}
|
|
49
|
+
>>> tel['guido'] = 4127
|
|
50
|
+
>>> tel
|
|
51
|
+
|
|
52
|
+
## More reference
|
|
53
|
+
|
|
54
|
+
Source: https://docs.python.org/3/library/stdtypes.html#mapping-types-dict
|
|
55
|
+
|
|
56
|
+
The dict type with constructor forms, methods, and creation examples.
|
|
57
|
+
|
|
58
|
+
Mapping Types — `dict`
|
|
59
|
+
|
|
60
|
+
A mapping object maps hashable values to arbitrary objects.
|
|
61
|
+
Mappings are mutable objects. There is currently only one standard mapping
|
|
62
|
+
type, the dictionary. (For other containers see the built-in
|
|
63
|
+
`list`, `set`, and `tuple` classes, and the
|
|
64
|
+
`collections` module.)
|
|
65
|
+
|
|
66
|
+
A dictionary’s keys are almost arbitrary values. Values that are not
|
|
67
|
+
hashable, that is, values containing lists, dictionaries or other
|
|
68
|
+
mutable types (that are compared by value rather than by object identity) may
|
|
69
|
+
not be used as keys.
|
|
70
|
+
Values that compare equal (such as `1`, `1.0`, and `True`)
|
|
71
|
+
can be used interchangeably to index the same dictionary entry.
|
|
72
|
+
|
|
73
|
+
class dict(**kwargs)
|
|
74
|
+
|
|
75
|
+
class dict(mapping, /, **kwargs)
|
|
76
|
+
|
|
77
|
+
class dict(iterable, /, **kwargs)
|
|
78
|
+
|
|
79
|
+
Return a new dictionary initialized from an optional positional argument
|
|
80
|
+
and a possibly empty set of keyword arguments.
|
|
81
|
+
|
|
82
|
+
Dictionaries can be created by several means:
|
|
83
|
+
|
|
84
|
+
-
|
|
85
|
+
|
|
86
|
+
Use a comma-separated list of `key: value` pairs within braces:
|
|
87
|
+
`{'jack': 4098, 'sjoerd': 4127}` or `{4098: 'jack', 4127: 'sjoerd'}`
|
|
88
|
+
|
|
89
|
+
-
|
|
90
|
+
|
|
91
|
+
Use a dict comprehension: `{}`, `{x: x ** 2 for x in range(10)}`
|
|
92
|
+
|
|
93
|
+
-
|
|
94
|
+
|
|
95
|
+
Use the type constructor: `dict()`,
|
|
96
|
+
`dict([('foo', 100), ('bar', 200)])`, `dict(foo=100, bar=200)`
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
# Enums
|
|
2
|
+
|
|
3
|
+
Source: https://docs.python.org/3/library/enum.html
|
|
4
|
+
|
|
5
|
+
This local reference is generated from the official Python documentation and trimmed for pythonlings.
|
|
6
|
+
|
|
7
|
+
Enums define named constant values that are easier to read than raw literals.
|
|
8
|
+
|
|
9
|
+
## Extracted reference
|
|
10
|
+
|
|
11
|
+
enum — Support for enumerations — Python 3.14.6 documentation
|
|
12
|
+
|
|
13
|
+
Navigation
|
|
14
|
+
|
|
15
|
+
-
|
|
16
|
+
index
|
|
17
|
+
|
|
18
|
+
-
|
|
19
|
+
modules |
|
|
20
|
+
|
|
21
|
+
-
|
|
22
|
+
next |
|
|
23
|
+
|
|
24
|
+
-
|
|
25
|
+
previous |
|
|
26
|
+
|
|
27
|
+
-
|
|
28
|
+
|
|
29
|
+
- Python »
|
|
30
|
+
|
|
31
|
+
-
|
|
32
|
+
|
|
33
|
+
-
|
|
34
|
+
|
|
35
|
+
-
|
|
36
|
+
3.14.6 Documentation »
|
|
37
|
+
|
|
38
|
+
- The Python Standard Library »
|
|
39
|
+
|
|
40
|
+
- Data Types »
|
|
41
|
+
|
|
42
|
+
- `enum` — Support for enumerations
|
|
43
|
+
|
|
44
|
+
-
|
|
45
|
+
|
|
46
|
+
|
|
|
47
|
+
|
|
48
|
+
-
|
|
49
|
+
|
|
50
|
+
Theme
|
|
51
|
+
|
|
52
|
+
## More reference
|
|
53
|
+
|
|
54
|
+
Source: https://docs.python.org/3/library/enum.html#enum.Flag
|
|
55
|
+
|
|
56
|
+
`Flag` enums combine members with bitwise operators.
|
|
57
|
+
|
|
58
|
+
class enum.Flag
|
|
59
|
+
|
|
60
|
+
`Flag` is the same as `Enum`, but its members support the bitwise
|
|
61
|
+
operators `&` (AND), `|` (OR), `^` (XOR), and `~` (INVERT);
|
|
62
|
+
the results of those operations are (aliases of) members of the enumeration.
|
|
63
|
+
|
|
64
|
+
__contains__(self, value)
|
|
65
|
+
|
|
66
|
+
Returns True if value is in self:
|
|
67
|
+
|
|
68
|
+
```python
|
|
69
|
+
>>> from enum import Flag, auto
|
|
70
|
+
>>> class Color(Flag):
|
|
71
|
+
... RED = auto()
|
|
72
|
+
... GREEN = auto()
|
|
73
|
+
... BLUE = auto()
|
|
74
|
+
...
|
|
75
|
+
>>> purple = Color.RED | Color.BLUE
|
|
76
|
+
>>> white = Color.RED | Color.GREEN | Color.BLUE
|
|
77
|
+
>>> Color.GREEN in purple
|
|
78
|
+
False
|
|
79
|
+
>>> Color.GREEN in white
|
|
80
|
+
True
|
|
81
|
+
>>> purple in white
|
|
82
|
+
True
|
|
83
|
+
>>> white in purple
|
|
84
|
+
False
|
|
85
|
+
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
__iter__(self)
|
|
89
|
+
|
|
90
|
+
Returns all contained non-alias members:
|
|
91
|
+
|
|
92
|
+
```python
|
|
93
|
+
>>> list(Color.RED)
|
|
94
|
+
[<Color.RED: 1>]
|
|
95
|
+
>>> list(purple)
|
|
96
|
+
[<Color.RED: 1>, <Color.BLUE: 4>]
|