From 4911bbd40cd459bbd9cac7bc552feb64681d6a80 Mon Sep 17 00:00:00 2001 From: gauvainboiche Date: Wed, 14 Jan 2026 10:21:12 +0100 Subject: [PATCH] Semaine 4, jour 2 --- .gitignore | 4 +- Semaine_04/Bases/.python-version | 1 + Semaine_04/Bases/README.md | 0 Semaine_04/Bases/main.py | 5 + Semaine_04/Bases/pyproject.toml | 9 ++ Semaine_04/Bases/uv.lock | 113 +++++++++++++++++ Semaine_04/Bibliotheque/.python-version | 1 + Semaine_04/Bibliotheque/README.md | 0 Semaine_04/Bibliotheque/functions.py | 56 +++++++++ Semaine_04/Bibliotheque/main.py | 36 ++++++ Semaine_04/Bibliotheque/pyproject.toml | 7 ++ Semaine_04/Bibliotheque/uv.lock | 8 ++ Semaine_04/Exercices/.python-version | 1 + Semaine_04/Exercices/README.md | 0 Semaine_04/Exercices/coke_kata.py | 21 ++++ Semaine_04/Exercices/exo_01.py | 72 +++++++++++ Semaine_04/Exercices/exo_03.py | 28 +++++ Semaine_04/Exercices/main.py | 1 + Semaine_04/Exercices/pendu.py | 34 +++++ Semaine_04/Exercices/pyproject.toml | 7 ++ Semaine_04/Exercices/uv.lock | 8 ++ Semaine_04/Exercices_python.pdf | Bin 0 -> 112435 bytes Semaine_04/Fonctions/.python-version | 1 + Semaine_04/Fonctions/README.md | 0 Semaine_04/Fonctions/csv_test | 1 + Semaine_04/Fonctions/functions.py | 42 +++++++ Semaine_04/Fonctions/main.py | 31 +++++ Semaine_04/Fonctions/pyproject.toml | 9 ++ Semaine_04/Fonctions/uv.lock | 161 ++++++++++++++++++++++++ Semaine_04/Jour_01.md | 66 ++++++++++ Semaine_04/Jour_02.md | 136 ++++++++++++++++++++ Semaine_04/Jour_03.md | 54 ++++++++ 32 files changed, 912 insertions(+), 1 deletion(-) create mode 100644 Semaine_04/Bases/.python-version create mode 100644 Semaine_04/Bases/README.md create mode 100644 Semaine_04/Bases/main.py create mode 100644 Semaine_04/Bases/pyproject.toml create mode 100644 Semaine_04/Bases/uv.lock create mode 100644 Semaine_04/Bibliotheque/.python-version create mode 100644 Semaine_04/Bibliotheque/README.md create mode 100644 Semaine_04/Bibliotheque/functions.py create mode 100644 Semaine_04/Bibliotheque/main.py create mode 100644 Semaine_04/Bibliotheque/pyproject.toml create mode 100644 Semaine_04/Bibliotheque/uv.lock create mode 100644 Semaine_04/Exercices/.python-version create mode 100644 Semaine_04/Exercices/README.md create mode 100644 Semaine_04/Exercices/coke_kata.py create mode 100644 Semaine_04/Exercices/exo_01.py create mode 100644 Semaine_04/Exercices/exo_03.py create mode 100644 Semaine_04/Exercices/main.py create mode 100644 Semaine_04/Exercices/pendu.py create mode 100644 Semaine_04/Exercices/pyproject.toml create mode 100644 Semaine_04/Exercices/uv.lock create mode 100644 Semaine_04/Exercices_python.pdf create mode 100644 Semaine_04/Fonctions/.python-version create mode 100644 Semaine_04/Fonctions/README.md create mode 100644 Semaine_04/Fonctions/csv_test create mode 100644 Semaine_04/Fonctions/functions.py create mode 100644 Semaine_04/Fonctions/main.py create mode 100644 Semaine_04/Fonctions/pyproject.toml create mode 100644 Semaine_04/Fonctions/uv.lock create mode 100644 Semaine_04/Jour_01.md create mode 100644 Semaine_04/Jour_02.md create mode 100644 Semaine_04/Jour_03.md diff --git a/.gitignore b/.gitignore index b3f7f10..d993436 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,3 @@ -desktop.ini \ No newline at end of file +desktop.ini +**/__pycache__/ +**/.venv/ \ No newline at end of file diff --git a/Semaine_04/Bases/.python-version b/Semaine_04/Bases/.python-version new file mode 100644 index 0000000..e4fba21 --- /dev/null +++ b/Semaine_04/Bases/.python-version @@ -0,0 +1 @@ +3.12 diff --git a/Semaine_04/Bases/README.md b/Semaine_04/Bases/README.md new file mode 100644 index 0000000..e69de29 diff --git a/Semaine_04/Bases/main.py b/Semaine_04/Bases/main.py new file mode 100644 index 0000000..c83e1ef --- /dev/null +++ b/Semaine_04/Bases/main.py @@ -0,0 +1,5 @@ +prenom = "Alice" +nom = "Dupont" +age = 30 + +print(prenom) \ No newline at end of file diff --git a/Semaine_04/Bases/pyproject.toml b/Semaine_04/Bases/pyproject.toml new file mode 100644 index 0000000..a11d538 --- /dev/null +++ b/Semaine_04/Bases/pyproject.toml @@ -0,0 +1,9 @@ +[project] +name = "bases" +version = "0.1.0" +description = "Add your description here" +readme = "README.md" +requires-python = ">=3.12" +dependencies = [ + "requests>=2.32.5", +] diff --git a/Semaine_04/Bases/uv.lock b/Semaine_04/Bases/uv.lock new file mode 100644 index 0000000..5b0839f --- /dev/null +++ b/Semaine_04/Bases/uv.lock @@ -0,0 +1,113 @@ +version = 1 +revision = 3 +requires-python = ">=3.12" + +[[package]] +name = "bases" +version = "0.1.0" +source = { virtual = "." } +dependencies = [ + { name = "requests" }, +] + +[package.metadata] +requires-dist = [{ name = "requests", specifier = ">=2.32.5" }] + +[[package]] +name = "certifi" +version = "2026.1.4" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e0/2d/a891ca51311197f6ad14a7ef42e2399f36cf2f9bd44752b3dc4eab60fdc5/certifi-2026.1.4.tar.gz", hash = "sha256:ac726dd470482006e014ad384921ed6438c457018f4b3d204aea4281258b2120", size = 154268, upload-time = "2026-01-04T02:42:41.825Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e6/ad/3cc14f097111b4de0040c83a525973216457bbeeb63739ef1ed275c1c021/certifi-2026.1.4-py3-none-any.whl", hash = "sha256:9943707519e4add1115f44c2bc244f782c0249876bf51b6599fee1ffbedd685c", size = 152900, upload-time = "2026-01-04T02:42:40.15Z" }, +] + +[[package]] +name = "charset-normalizer" +version = "3.4.4" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/13/69/33ddede1939fdd074bce5434295f38fae7136463422fe4fd3e0e89b98062/charset_normalizer-3.4.4.tar.gz", hash = "sha256:94537985111c35f28720e43603b8e7b43a6ecfb2ce1d3058bbe955b73404e21a", size = 129418, upload-time = "2025-10-14T04:42:32.879Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f3/85/1637cd4af66fa687396e757dec650f28025f2a2f5a5531a3208dc0ec43f2/charset_normalizer-3.4.4-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:0a98e6759f854bd25a58a73fa88833fba3b7c491169f86ce1180c948ab3fd394", size = 208425, upload-time = "2025-10-14T04:40:53.353Z" }, + { url = "https://files.pythonhosted.org/packages/9d/6a/04130023fef2a0d9c62d0bae2649b69f7b7d8d24ea5536feef50551029df/charset_normalizer-3.4.4-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b5b290ccc2a263e8d185130284f8501e3e36c5e02750fc6b6bdeb2e9e96f1e25", size = 148162, upload-time = "2025-10-14T04:40:54.558Z" }, + { url = "https://files.pythonhosted.org/packages/78/29/62328d79aa60da22c9e0b9a66539feae06ca0f5a4171ac4f7dc285b83688/charset_normalizer-3.4.4-cp312-cp312-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:74bb723680f9f7a6234dcf67aea57e708ec1fbdf5699fb91dfd6f511b0a320ef", size = 144558, upload-time = "2025-10-14T04:40:55.677Z" }, + { url = "https://files.pythonhosted.org/packages/86/bb/b32194a4bf15b88403537c2e120b817c61cd4ecffa9b6876e941c3ee38fe/charset_normalizer-3.4.4-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:f1e34719c6ed0b92f418c7c780480b26b5d9c50349e9a9af7d76bf757530350d", size = 161497, upload-time = "2025-10-14T04:40:57.217Z" }, + { url = "https://files.pythonhosted.org/packages/19/89/a54c82b253d5b9b111dc74aca196ba5ccfcca8242d0fb64146d4d3183ff1/charset_normalizer-3.4.4-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:2437418e20515acec67d86e12bf70056a33abdacb5cb1655042f6538d6b085a8", size = 159240, upload-time = "2025-10-14T04:40:58.358Z" }, + { url = "https://files.pythonhosted.org/packages/c0/10/d20b513afe03acc89ec33948320a5544d31f21b05368436d580dec4e234d/charset_normalizer-3.4.4-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:11d694519d7f29d6cd09f6ac70028dba10f92f6cdd059096db198c283794ac86", size = 153471, upload-time = "2025-10-14T04:40:59.468Z" }, + { url = "https://files.pythonhosted.org/packages/61/fa/fbf177b55bdd727010f9c0a3c49eefa1d10f960e5f09d1d887bf93c2e698/charset_normalizer-3.4.4-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:ac1c4a689edcc530fc9d9aa11f5774b9e2f33f9a0c6a57864e90908f5208d30a", size = 150864, upload-time = "2025-10-14T04:41:00.623Z" }, + { url = "https://files.pythonhosted.org/packages/05/12/9fbc6a4d39c0198adeebbde20b619790e9236557ca59fc40e0e3cebe6f40/charset_normalizer-3.4.4-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:21d142cc6c0ec30d2efee5068ca36c128a30b0f2c53c1c07bd78cb6bc1d3be5f", size = 150647, upload-time = "2025-10-14T04:41:01.754Z" }, + { url = "https://files.pythonhosted.org/packages/ad/1f/6a9a593d52e3e8c5d2b167daf8c6b968808efb57ef4c210acb907c365bc4/charset_normalizer-3.4.4-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:5dbe56a36425d26d6cfb40ce79c314a2e4dd6211d51d6d2191c00bed34f354cc", size = 145110, upload-time = "2025-10-14T04:41:03.231Z" }, + { url = "https://files.pythonhosted.org/packages/30/42/9a52c609e72471b0fc54386dc63c3781a387bb4fe61c20231a4ebcd58bdd/charset_normalizer-3.4.4-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:5bfbb1b9acf3334612667b61bd3002196fe2a1eb4dd74d247e0f2a4d50ec9bbf", size = 162839, upload-time = "2025-10-14T04:41:04.715Z" }, + { url = "https://files.pythonhosted.org/packages/c4/5b/c0682bbf9f11597073052628ddd38344a3d673fda35a36773f7d19344b23/charset_normalizer-3.4.4-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:d055ec1e26e441f6187acf818b73564e6e6282709e9bcb5b63f5b23068356a15", size = 150667, upload-time = "2025-10-14T04:41:05.827Z" }, + { url = "https://files.pythonhosted.org/packages/e4/24/a41afeab6f990cf2daf6cb8c67419b63b48cf518e4f56022230840c9bfb2/charset_normalizer-3.4.4-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:af2d8c67d8e573d6de5bc30cdb27e9b95e49115cd9baad5ddbd1a6207aaa82a9", size = 160535, upload-time = "2025-10-14T04:41:06.938Z" }, + { url = "https://files.pythonhosted.org/packages/2a/e5/6a4ce77ed243c4a50a1fecca6aaaab419628c818a49434be428fe24c9957/charset_normalizer-3.4.4-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:780236ac706e66881f3b7f2f32dfe90507a09e67d1d454c762cf642e6e1586e0", size = 154816, upload-time = "2025-10-14T04:41:08.101Z" }, + { url = "https://files.pythonhosted.org/packages/a8/ef/89297262b8092b312d29cdb2517cb1237e51db8ecef2e9af5edbe7b683b1/charset_normalizer-3.4.4-cp312-cp312-win32.whl", hash = "sha256:5833d2c39d8896e4e19b689ffc198f08ea58116bee26dea51e362ecc7cd3ed26", size = 99694, upload-time = "2025-10-14T04:41:09.23Z" }, + { url = "https://files.pythonhosted.org/packages/3d/2d/1e5ed9dd3b3803994c155cd9aacb60c82c331bad84daf75bcb9c91b3295e/charset_normalizer-3.4.4-cp312-cp312-win_amd64.whl", hash = "sha256:a79cfe37875f822425b89a82333404539ae63dbdddf97f84dcbc3d339aae9525", size = 107131, upload-time = "2025-10-14T04:41:10.467Z" }, + { url = "https://files.pythonhosted.org/packages/d0/d9/0ed4c7098a861482a7b6a95603edce4c0d9db2311af23da1fb2b75ec26fc/charset_normalizer-3.4.4-cp312-cp312-win_arm64.whl", hash = "sha256:376bec83a63b8021bb5c8ea75e21c4ccb86e7e45ca4eb81146091b56599b80c3", size = 100390, upload-time = "2025-10-14T04:41:11.915Z" }, + { url = "https://files.pythonhosted.org/packages/97/45/4b3a1239bbacd321068ea6e7ac28875b03ab8bc0aa0966452db17cd36714/charset_normalizer-3.4.4-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:e1f185f86a6f3403aa2420e815904c67b2f9ebc443f045edd0de921108345794", size = 208091, upload-time = "2025-10-14T04:41:13.346Z" }, + { url = "https://files.pythonhosted.org/packages/7d/62/73a6d7450829655a35bb88a88fca7d736f9882a27eacdca2c6d505b57e2e/charset_normalizer-3.4.4-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6b39f987ae8ccdf0d2642338faf2abb1862340facc796048b604ef14919e55ed", size = 147936, upload-time = "2025-10-14T04:41:14.461Z" }, + { url = "https://files.pythonhosted.org/packages/89/c5/adb8c8b3d6625bef6d88b251bbb0d95f8205831b987631ab0c8bb5d937c2/charset_normalizer-3.4.4-cp313-cp313-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:3162d5d8ce1bb98dd51af660f2121c55d0fa541b46dff7bb9b9f86ea1d87de72", size = 144180, upload-time = "2025-10-14T04:41:15.588Z" }, + { url = "https://files.pythonhosted.org/packages/91/ed/9706e4070682d1cc219050b6048bfd293ccf67b3d4f5a4f39207453d4b99/charset_normalizer-3.4.4-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:81d5eb2a312700f4ecaa977a8235b634ce853200e828fbadf3a9c50bab278328", size = 161346, upload-time = "2025-10-14T04:41:16.738Z" }, + { url = "https://files.pythonhosted.org/packages/d5/0d/031f0d95e4972901a2f6f09ef055751805ff541511dc1252ba3ca1f80cf5/charset_normalizer-3.4.4-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:5bd2293095d766545ec1a8f612559f6b40abc0eb18bb2f5d1171872d34036ede", size = 158874, upload-time = "2025-10-14T04:41:17.923Z" }, + { url = "https://files.pythonhosted.org/packages/f5/83/6ab5883f57c9c801ce5e5677242328aa45592be8a00644310a008d04f922/charset_normalizer-3.4.4-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a8a8b89589086a25749f471e6a900d3f662d1d3b6e2e59dcecf787b1cc3a1894", size = 153076, upload-time = "2025-10-14T04:41:19.106Z" }, + { url = "https://files.pythonhosted.org/packages/75/1e/5ff781ddf5260e387d6419959ee89ef13878229732732ee73cdae01800f2/charset_normalizer-3.4.4-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:bc7637e2f80d8530ee4a78e878bce464f70087ce73cf7c1caf142416923b98f1", size = 150601, upload-time = "2025-10-14T04:41:20.245Z" }, + { url = "https://files.pythonhosted.org/packages/d7/57/71be810965493d3510a6ca79b90c19e48696fb1ff964da319334b12677f0/charset_normalizer-3.4.4-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:f8bf04158c6b607d747e93949aa60618b61312fe647a6369f88ce2ff16043490", size = 150376, upload-time = "2025-10-14T04:41:21.398Z" }, + { url = "https://files.pythonhosted.org/packages/e5/d5/c3d057a78c181d007014feb7e9f2e65905a6c4ef182c0ddf0de2924edd65/charset_normalizer-3.4.4-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:554af85e960429cf30784dd47447d5125aaa3b99a6f0683589dbd27e2f45da44", size = 144825, upload-time = "2025-10-14T04:41:22.583Z" }, + { url = "https://files.pythonhosted.org/packages/e6/8c/d0406294828d4976f275ffbe66f00266c4b3136b7506941d87c00cab5272/charset_normalizer-3.4.4-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:74018750915ee7ad843a774364e13a3db91682f26142baddf775342c3f5b1133", size = 162583, upload-time = "2025-10-14T04:41:23.754Z" }, + { url = "https://files.pythonhosted.org/packages/d7/24/e2aa1f18c8f15c4c0e932d9287b8609dd30ad56dbe41d926bd846e22fb8d/charset_normalizer-3.4.4-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:c0463276121fdee9c49b98908b3a89c39be45d86d1dbaa22957e38f6321d4ce3", size = 150366, upload-time = "2025-10-14T04:41:25.27Z" }, + { url = "https://files.pythonhosted.org/packages/e4/5b/1e6160c7739aad1e2df054300cc618b06bf784a7a164b0f238360721ab86/charset_normalizer-3.4.4-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:362d61fd13843997c1c446760ef36f240cf81d3ebf74ac62652aebaf7838561e", size = 160300, upload-time = "2025-10-14T04:41:26.725Z" }, + { url = "https://files.pythonhosted.org/packages/7a/10/f882167cd207fbdd743e55534d5d9620e095089d176d55cb22d5322f2afd/charset_normalizer-3.4.4-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:9a26f18905b8dd5d685d6d07b0cdf98a79f3c7a918906af7cc143ea2e164c8bc", size = 154465, upload-time = "2025-10-14T04:41:28.322Z" }, + { url = "https://files.pythonhosted.org/packages/89/66/c7a9e1b7429be72123441bfdbaf2bc13faab3f90b933f664db506dea5915/charset_normalizer-3.4.4-cp313-cp313-win32.whl", hash = "sha256:9b35f4c90079ff2e2edc5b26c0c77925e5d2d255c42c74fdb70fb49b172726ac", size = 99404, upload-time = "2025-10-14T04:41:29.95Z" }, + { url = "https://files.pythonhosted.org/packages/c4/26/b9924fa27db384bdcd97ab83b4f0a8058d96ad9626ead570674d5e737d90/charset_normalizer-3.4.4-cp313-cp313-win_amd64.whl", hash = "sha256:b435cba5f4f750aa6c0a0d92c541fb79f69a387c91e61f1795227e4ed9cece14", size = 107092, upload-time = "2025-10-14T04:41:31.188Z" }, + { url = "https://files.pythonhosted.org/packages/af/8f/3ed4bfa0c0c72a7ca17f0380cd9e4dd842b09f664e780c13cff1dcf2ef1b/charset_normalizer-3.4.4-cp313-cp313-win_arm64.whl", hash = "sha256:542d2cee80be6f80247095cc36c418f7bddd14f4a6de45af91dfad36d817bba2", size = 100408, upload-time = "2025-10-14T04:41:32.624Z" }, + { url = "https://files.pythonhosted.org/packages/2a/35/7051599bd493e62411d6ede36fd5af83a38f37c4767b92884df7301db25d/charset_normalizer-3.4.4-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:da3326d9e65ef63a817ecbcc0df6e94463713b754fe293eaa03da99befb9a5bd", size = 207746, upload-time = "2025-10-14T04:41:33.773Z" }, + { url = "https://files.pythonhosted.org/packages/10/9a/97c8d48ef10d6cd4fcead2415523221624bf58bcf68a802721a6bc807c8f/charset_normalizer-3.4.4-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8af65f14dc14a79b924524b1e7fffe304517b2bff5a58bf64f30b98bbc5079eb", size = 147889, upload-time = "2025-10-14T04:41:34.897Z" }, + { url = "https://files.pythonhosted.org/packages/10/bf/979224a919a1b606c82bd2c5fa49b5c6d5727aa47b4312bb27b1734f53cd/charset_normalizer-3.4.4-cp314-cp314-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:74664978bb272435107de04e36db5a9735e78232b85b77d45cfb38f758efd33e", size = 143641, upload-time = "2025-10-14T04:41:36.116Z" }, + { url = "https://files.pythonhosted.org/packages/ba/33/0ad65587441fc730dc7bd90e9716b30b4702dc7b617e6ba4997dc8651495/charset_normalizer-3.4.4-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:752944c7ffbfdd10c074dc58ec2d5a8a4cd9493b314d367c14d24c17684ddd14", size = 160779, upload-time = "2025-10-14T04:41:37.229Z" }, + { url = "https://files.pythonhosted.org/packages/67/ed/331d6b249259ee71ddea93f6f2f0a56cfebd46938bde6fcc6f7b9a3d0e09/charset_normalizer-3.4.4-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:d1f13550535ad8cff21b8d757a3257963e951d96e20ec82ab44bc64aeb62a191", size = 159035, upload-time = "2025-10-14T04:41:38.368Z" }, + { url = "https://files.pythonhosted.org/packages/67/ff/f6b948ca32e4f2a4576aa129d8bed61f2e0543bf9f5f2b7fc3758ed005c9/charset_normalizer-3.4.4-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ecaae4149d99b1c9e7b88bb03e3221956f68fd6d50be2ef061b2381b61d20838", size = 152542, upload-time = "2025-10-14T04:41:39.862Z" }, + { url = "https://files.pythonhosted.org/packages/16/85/276033dcbcc369eb176594de22728541a925b2632f9716428c851b149e83/charset_normalizer-3.4.4-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:cb6254dc36b47a990e59e1068afacdcd02958bdcce30bb50cc1700a8b9d624a6", size = 149524, upload-time = "2025-10-14T04:41:41.319Z" }, + { url = "https://files.pythonhosted.org/packages/9e/f2/6a2a1f722b6aba37050e626530a46a68f74e63683947a8acff92569f979a/charset_normalizer-3.4.4-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:c8ae8a0f02f57a6e61203a31428fa1d677cbe50c93622b4149d5c0f319c1d19e", size = 150395, upload-time = "2025-10-14T04:41:42.539Z" }, + { url = "https://files.pythonhosted.org/packages/60/bb/2186cb2f2bbaea6338cad15ce23a67f9b0672929744381e28b0592676824/charset_normalizer-3.4.4-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:47cc91b2f4dd2833fddaedd2893006b0106129d4b94fdb6af1f4ce5a9965577c", size = 143680, upload-time = "2025-10-14T04:41:43.661Z" }, + { url = "https://files.pythonhosted.org/packages/7d/a5/bf6f13b772fbb2a90360eb620d52ed8f796f3c5caee8398c3b2eb7b1c60d/charset_normalizer-3.4.4-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:82004af6c302b5d3ab2cfc4cc5f29db16123b1a8417f2e25f9066f91d4411090", size = 162045, upload-time = "2025-10-14T04:41:44.821Z" }, + { url = "https://files.pythonhosted.org/packages/df/c5/d1be898bf0dc3ef9030c3825e5d3b83f2c528d207d246cbabe245966808d/charset_normalizer-3.4.4-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:2b7d8f6c26245217bd2ad053761201e9f9680f8ce52f0fcd8d0755aeae5b2152", size = 149687, upload-time = "2025-10-14T04:41:46.442Z" }, + { url = "https://files.pythonhosted.org/packages/a5/42/90c1f7b9341eef50c8a1cb3f098ac43b0508413f33affd762855f67a410e/charset_normalizer-3.4.4-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:799a7a5e4fb2d5898c60b640fd4981d6a25f1c11790935a44ce38c54e985f828", size = 160014, upload-time = "2025-10-14T04:41:47.631Z" }, + { url = "https://files.pythonhosted.org/packages/76/be/4d3ee471e8145d12795ab655ece37baed0929462a86e72372fd25859047c/charset_normalizer-3.4.4-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:99ae2cffebb06e6c22bdc25801d7b30f503cc87dbd283479e7b606f70aff57ec", size = 154044, upload-time = "2025-10-14T04:41:48.81Z" }, + { url = "https://files.pythonhosted.org/packages/b0/6f/8f7af07237c34a1defe7defc565a9bc1807762f672c0fde711a4b22bf9c0/charset_normalizer-3.4.4-cp314-cp314-win32.whl", hash = "sha256:f9d332f8c2a2fcbffe1378594431458ddbef721c1769d78e2cbc06280d8155f9", size = 99940, upload-time = "2025-10-14T04:41:49.946Z" }, + { url = "https://files.pythonhosted.org/packages/4b/51/8ade005e5ca5b0d80fb4aff72a3775b325bdc3d27408c8113811a7cbe640/charset_normalizer-3.4.4-cp314-cp314-win_amd64.whl", hash = "sha256:8a6562c3700cce886c5be75ade4a5db4214fda19fede41d9792d100288d8f94c", size = 107104, upload-time = "2025-10-14T04:41:51.051Z" }, + { url = "https://files.pythonhosted.org/packages/da/5f/6b8f83a55bb8278772c5ae54a577f3099025f9ade59d0136ac24a0df4bde/charset_normalizer-3.4.4-cp314-cp314-win_arm64.whl", hash = "sha256:de00632ca48df9daf77a2c65a484531649261ec9f25489917f09e455cb09ddb2", size = 100743, upload-time = "2025-10-14T04:41:52.122Z" }, + { url = "https://files.pythonhosted.org/packages/0a/4c/925909008ed5a988ccbb72dcc897407e5d6d3bd72410d69e051fc0c14647/charset_normalizer-3.4.4-py3-none-any.whl", hash = "sha256:7a32c560861a02ff789ad905a2fe94e3f840803362c84fecf1851cb4cf3dc37f", size = 53402, upload-time = "2025-10-14T04:42:31.76Z" }, +] + +[[package]] +name = "idna" +version = "3.11" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/6f/6d/0703ccc57f3a7233505399edb88de3cbd678da106337b9fcde432b65ed60/idna-3.11.tar.gz", hash = "sha256:795dafcc9c04ed0c1fb032c2aa73654d8e8c5023a7df64a53f39190ada629902", size = 194582, upload-time = "2025-10-12T14:55:20.501Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0e/61/66938bbb5fc52dbdf84594873d5b51fb1f7c7794e9c0f5bd885f30bc507b/idna-3.11-py3-none-any.whl", hash = "sha256:771a87f49d9defaf64091e6e6fe9c18d4833f140bd19464795bc32d966ca37ea", size = 71008, upload-time = "2025-10-12T14:55:18.883Z" }, +] + +[[package]] +name = "requests" +version = "2.32.5" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "certifi" }, + { name = "charset-normalizer" }, + { name = "idna" }, + { name = "urllib3" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/c9/74/b3ff8e6c8446842c3f5c837e9c3dfcfe2018ea6ecef224c710c85ef728f4/requests-2.32.5.tar.gz", hash = "sha256:dbba0bac56e100853db0ea71b82b4dfd5fe2bf6d3754a8893c3af500cec7d7cf", size = 134517, upload-time = "2025-08-18T20:46:02.573Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/1e/db/4254e3eabe8020b458f1a747140d32277ec7a271daf1d235b70dc0b4e6e3/requests-2.32.5-py3-none-any.whl", hash = "sha256:2462f94637a34fd532264295e186976db0f5d453d1cdd31473c85a6a161affb6", size = 64738, upload-time = "2025-08-18T20:46:00.542Z" }, +] + +[[package]] +name = "urllib3" +version = "2.6.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/c7/24/5f1b3bdffd70275f6661c76461e25f024d5a38a46f04aaca912426a2b1d3/urllib3-2.6.3.tar.gz", hash = "sha256:1b62b6884944a57dbe321509ab94fd4d3b307075e0c2eae991ac71ee15ad38ed", size = 435556, upload-time = "2026-01-07T16:24:43.925Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/39/08/aaaad47bc4e9dc8c725e68f9d04865dbcb2052843ff09c97b08904852d84/urllib3-2.6.3-py3-none-any.whl", hash = "sha256:bf272323e553dfb2e87d9bfd225ca7b0f467b919d7bbd355436d3fd37cb0acd4", size = 131584, upload-time = "2026-01-07T16:24:42.685Z" }, +] diff --git a/Semaine_04/Bibliotheque/.python-version b/Semaine_04/Bibliotheque/.python-version new file mode 100644 index 0000000..e4fba21 --- /dev/null +++ b/Semaine_04/Bibliotheque/.python-version @@ -0,0 +1 @@ +3.12 diff --git a/Semaine_04/Bibliotheque/README.md b/Semaine_04/Bibliotheque/README.md new file mode 100644 index 0000000..e69de29 diff --git a/Semaine_04/Bibliotheque/functions.py b/Semaine_04/Bibliotheque/functions.py new file mode 100644 index 0000000..56c6a6a --- /dev/null +++ b/Semaine_04/Bibliotheque/functions.py @@ -0,0 +1,56 @@ +import json + +def add_new_book(book_list: list[dict[str, str]], book: dict[str, str]): # On précise le contenu des clefs et valeurs du dictionnaire + """Ajoute un nouveau livre""" + if book in book_list: + return f"{book["Title"].upper()} y est déjà." + book_list.append(book) + return f"{book["Title"].upper()} a été ajouté." + +def take_out_book(book_list: list[dict[str, str]], title: str): + """Retire un livre déjà présent""" + for book in book_list: + if book["Title"].lower() == title.lower(): + book_list.remove(book) + return f"{title.upper()} a été retiré." + return f"{title.upper()} n'y est pas." + +def list_books_in_list(book_list: list[dict]): + """Liste les livres présents""" + return book_list + +def sort_books_by_name(book_list: list[dict]): + """Tri les livres par ordre alphabétique""" + book_list.sort(key= lambda dict: dict["Title"]) # pour trier par clefs et non plus par objets + +def display_number_of_books(book_list: list) -> int: + """Donne le nombre de livres présents""" + return len(book_list) + +def search_book_by_word(book_list: list[dict[str, str]], word: str): + """Cherche un livre par mot de départ""" + results = [] + for book in book_list: + if word.lower() in book["Title"].lower(): + results.append(book) + return results if len(results) > 0 else "Pas de résultat." + +def search_book_by_letter(book_list: list[dict[str, str]], letter: str): + """Cherche un livre par lettre de départ""" + results = [] + for book in book_list: + if book["Title"].startswith(letter): + results.append(book) + return results if len(results) > 0 else "Pas de résultat." + +# Sauvegarde des livres dans un JSON pour persistance des données + +def save(book_list): + """Inscris dans un fichier JSON le contenu de la bibliothèque""" + with open("books.json", "w") as json_file: + json.dump(book_list, json_file, indent= 4) + +def load(): + """Récupère le contenu d'un fichier JSON""" + with open("books.json") as json_file: + return json.load(json_file) \ No newline at end of file diff --git a/Semaine_04/Bibliotheque/main.py b/Semaine_04/Bibliotheque/main.py new file mode 100644 index 0000000..4614736 --- /dev/null +++ b/Semaine_04/Bibliotheque/main.py @@ -0,0 +1,36 @@ +from functions import \ + add_new_book,\ + take_out_book,\ + list_books_in_list,\ + sort_books_by_name,\ + display_number_of_books,\ + search_book_by_word,\ + search_book_by_letter,\ + save, load + +books = [] + +for i in range(3): + new_book_title = input ("Quel livre ajouter ? > ") + new_book_author = input ("Qui l'a écrit ? > ") + new_book = { + "Title": new_book_title, + "Author": new_book_author + } + new_book_added = add_new_book(books, new_book) + print (new_book_added) + +#print(take_out_book(books, new_book)) + +sort_books_by_name(books) +print(list_books_in_list(books)) + +book_number = display_number_of_books(books) + +print(f"La bibliothèque contient {book_number} livres.") + +searching_word = input("Mot recherché > ") +print(search_book_by_word(books, searching_word)) + +searching_letter = input("Lettre recherchée > ") +print(search_book_by_letter(books, searching_letter)) \ No newline at end of file diff --git a/Semaine_04/Bibliotheque/pyproject.toml b/Semaine_04/Bibliotheque/pyproject.toml new file mode 100644 index 0000000..7206aa4 --- /dev/null +++ b/Semaine_04/Bibliotheque/pyproject.toml @@ -0,0 +1,7 @@ +[project] +name = "bibliotheque" +version = "0.1.0" +description = "Add your description here" +readme = "README.md" +requires-python = ">=3.12" +dependencies = [] diff --git a/Semaine_04/Bibliotheque/uv.lock b/Semaine_04/Bibliotheque/uv.lock new file mode 100644 index 0000000..74de980 --- /dev/null +++ b/Semaine_04/Bibliotheque/uv.lock @@ -0,0 +1,8 @@ +version = 1 +revision = 3 +requires-python = ">=3.12" + +[[package]] +name = "bibliotheque" +version = "0.1.0" +source = { virtual = "." } diff --git a/Semaine_04/Exercices/.python-version b/Semaine_04/Exercices/.python-version new file mode 100644 index 0000000..e4fba21 --- /dev/null +++ b/Semaine_04/Exercices/.python-version @@ -0,0 +1 @@ +3.12 diff --git a/Semaine_04/Exercices/README.md b/Semaine_04/Exercices/README.md new file mode 100644 index 0000000..e69de29 diff --git a/Semaine_04/Exercices/coke_kata.py b/Semaine_04/Exercices/coke_kata.py new file mode 100644 index 0000000..4e23cdf --- /dev/null +++ b/Semaine_04/Exercices/coke_kata.py @@ -0,0 +1,21 @@ +""" +An isogram is a word that has no repeating letters, consecutive or non-consecutive. Implement a function that determines whether a string that contains only letters is an isogram. Assume the empty string is an isogram. Ignore letter case. + +Example: (Input --> Output) + +"Dermatoglyphics" --> true +"aba" --> false +"moOse" --> false (ignore letter case) +""" + +def is_isogram(string): + string = string.lower() + for letter in string: + if string.count(letter) > 1: + return False + return True + +# Solution la plus opti + +def is_isogram(string): + return len(string) == len(set(string.lower())) diff --git a/Semaine_04/Exercices/exo_01.py b/Semaine_04/Exercices/exo_01.py new file mode 100644 index 0000000..bf11507 --- /dev/null +++ b/Semaine_04/Exercices/exo_01.py @@ -0,0 +1,72 @@ +destinations = { + "Pyongyang": 5, + "Havana": 2, + "Caracas": 7 +} + +destinations["Moscow"] = 0 +destinations["Ho-Chi-Minh Town"] = 0 + +def add_destination(destinations: dict, town: str, number: int): + if town not in destinations: + destinations[town] = 0 + +def add_reservation(destinations: dict, town: str, number: int): + if town in destinations: + destinations[town] += number + else: + destinations[town] = number + +def remove_reservation(destinations: dict, town: str): + if town in destinations: + new_destinations = dict(destinations) + del new_destinations[town] + return new_destinations + +def show_destinations_available(destinations: dict): + for town in destinations: + if destinations[town] != 0: + print(town + " : " + str(destinations[town])) + +def show_destinations_by_reservations(destinations: dict): + print(sorted(destinations)) # ["Pyongyang", "Havana", "Caracas"] + print(sorted(destinations.keys())) # ["Pyongyang", "Havana", "Caracas"] + print(sorted(destinations.values)) # [5, 2, 7] + print(sorted(destinations.items)) # [("Pyongyang", 5), ("Havana", 2), ("Caracas", 7)] + +def return_second_tuple_element(tuple): + return tuple[1] + +print(sorted(destinations.items(), key= return_second_tuple_element)) # [('Moscow', 0), ('Ho-Chi-Minh Town', 0), ('Havana', 2), ('Pyongyang', 5), ('Caracas', 7)] +print(sorted(destinations.items(), key= lambda tuple : tuple[1])) # [('Moscow', 0), ('Ho-Chi-Minh Town', 0), ('Havana', 2), ('Pyongyang', 5), ('Caracas', 7)] + +#show_destinations_available(destinations) + +# Données déstructurées + +dc_infos = ("Dale", "Cooper", "32") +dc_prenom = dc_infos[0] +dc_nom = dc_infos[1] +dc_age = dc_infos[2] + +dc_prenom, dc_nom, dc_age = dc_infos + +def generator(): + for i in range(10): + yield i + +def square_generator(n): + for i in range(n): + yield i ** 2 + +print(generator()) +squares = square_generator(10) + +print(next(squares)) +print(next(squares)) +print(next(squares)) +print(next(squares)) +print(next(squares)) +print(next(squares)) +print(next(squares)) +print(next(squares)) \ No newline at end of file diff --git a/Semaine_04/Exercices/exo_03.py b/Semaine_04/Exercices/exo_03.py new file mode 100644 index 0000000..794d665 --- /dev/null +++ b/Semaine_04/Exercices/exo_03.py @@ -0,0 +1,28 @@ +import sys + +input_string = input("Ecris un truc > ") + +if len(input_string) == 0: + print("Tu aurais pu participer.") + sys.exit() + +def return_string_infos(input_string: str): + print("Tu as tapé : " + "\"" + input_string + "\"") + print("Elle fait exactement " + str(len(input_string)) + " caractères.") + print("EN MAJUSCULES, ELLE DONNE : " + "\"" + input_string.upper() + "\"") + print("en minuscules, elle donne : " + "\"" + input_string.lower() + "\"") + print("A l'envers, elle donne : " + "\"" + input_string[::-1] + "\"") + +def replace_word_in_string(input_string: str, word_to_replace: str, word_replacement: str) -> str: + print(f"Remplaçant \"{word_to_replace}\" par \"{word_replacement}\", cela donne : {input_string.replace(word_to_replace, word_replacement)}") + +def count_occurences_in_string(input_string: str, occurence: str): + print(f"L'occurence \"{occurence}\" apparaît {input_string.count(occurence)} fois.") + +def strip_of_spaces(input_string: str): + print(f"Sans les espaces de début et de fin, cela donne : {input_string.strip()}") + +return_string_infos(input_string) +replace_word_in_string(input_string, "vie", "mort") +count_occurences_in_string(input_string, "e") +strip_of_spaces(input_string) \ No newline at end of file diff --git a/Semaine_04/Exercices/main.py b/Semaine_04/Exercices/main.py new file mode 100644 index 0000000..949c093 --- /dev/null +++ b/Semaine_04/Exercices/main.py @@ -0,0 +1 @@ +from Semaine_04.Exercice_01.exo_01 import \ No newline at end of file diff --git a/Semaine_04/Exercices/pendu.py b/Semaine_04/Exercices/pendu.py new file mode 100644 index 0000000..65e4f4b --- /dev/null +++ b/Semaine_04/Exercices/pendu.py @@ -0,0 +1,34 @@ +word_to_find = "parapluie" +word_hidden = "_" * len(word_to_find) +list_word_hidden = list(word_hidden) +attempts = 10 + +already_chosen_letter = [] + +print(word_hidden) + +while word_hidden != word_to_find and attempts > 0: + chosen_letter = input("Saisir une lettre > ").strip().lower()[0] # on ne prend VRAIMENT que la première lettre + + if chosen_letter in already_chosen_letter: + print(f"Vous avez déjà saisie la lettre {chosen_letter.upper()}.") + attempts -= 1 + continue + + already_chosen_letter.append(chosen_letter) + + if chosen_letter not in word_to_find: + attempts -= 1 + continue + + for index, letter in enumerate(word_to_find): + if letter == chosen_letter: + list_word_hidden[index] = chosen_letter + + word_hidden = "".join(list_word_hidden) + print(f"Il reste {attempts} tentatives. \n {word_hidden} \n") + +if word_hidden != word_to_find: + print(f"Perdu ! Le mot était {word_to_find.upper()}.") +else: + print("Gagné !") \ No newline at end of file diff --git a/Semaine_04/Exercices/pyproject.toml b/Semaine_04/Exercices/pyproject.toml new file mode 100644 index 0000000..dfb5994 --- /dev/null +++ b/Semaine_04/Exercices/pyproject.toml @@ -0,0 +1,7 @@ +[project] +name = "exercice-01" +version = "0.1.0" +description = "Add your description here" +readme = "README.md" +requires-python = ">=3.12" +dependencies = [] diff --git a/Semaine_04/Exercices/uv.lock b/Semaine_04/Exercices/uv.lock new file mode 100644 index 0000000..aa108c2 --- /dev/null +++ b/Semaine_04/Exercices/uv.lock @@ -0,0 +1,8 @@ +version = 1 +revision = 3 +requires-python = ">=3.12" + +[[package]] +name = "exercice-01" +version = "0.1.0" +source = { virtual = "." } diff --git a/Semaine_04/Exercices_python.pdf b/Semaine_04/Exercices_python.pdf new file mode 100644 index 0000000000000000000000000000000000000000..735659c14493fad657e01f8e33b920f188c7c1ed GIT binary patch literal 112435 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%0D2%12*8uw_lX zf$M<|4!WJ~LG}IUZ{SAyKbWZ*UxOx@*pM4nn^|?0+|?50Du+#aIKFEo4CN%#-*WN7 z`Qa3m#iPG!s=h}xOIa3^s!^c6n61cDT-ft9!dmxgBmG9DZdZO%%a&v0fZJ=W#>!As zCt;<2CN}S0hs5X=8yV4Xe46%Kdp zB2#?Ln&Dm_s2@D~&Nw~kCI(6DM*h5FjM_ynP~S11e_Wh~N3?k-)ON2x-l%pfgH%>c z0bMS06vh!x8X9k_6-#NHbUsqn&kRq?5ApJCz!x7#IR3WzAnaJzvsyvlii_ZVrGMkf zeFPD#6uFXdGn3QKH%M5c*G3yZ#AiUnP1G2*qE~S)zh#1I>xSx+2cp>oX0eithotq- zH=e9tKccrw-zS{7JK1H-cI2-ub9}wQzkWBE;Bv+_G~FM|`M3yTtzw$`z;5#88%Gz* z?$<@@(EB_(T)sWqGpL=_`>yE=bGu6KBxu7a_)Q6rKhdFyf!DQGL(9rhe+*0vj=r?u zQWfPh%P3d-iVb2Ff7+Es{|dc8sOebD*a+H@SRil9cD0gt+fvb({@RB+Jyn=T@IAcM zZI*q%di@^BKIM;?3Y_0pKQQQD>x_TLC!~Jk6OxX0=D>>N{{$xxP{1M!`w1fccW{Cq za5+MeFn;JMIPs@x^%11xE!55E73t#nJA9(m2j9O`FlLa#=AAC zm2#n*;XjbZU-Juzs|M&ZiQ!!rM4ZPtf(PAQNN4;T1eorK+kAGE%A?ie$^_9G!d(9_kX@2TTQ3EyaE=#6cUcb#?%d!E#Uvg2E7~jZE*3N{ewa3!2RN&Nvc#6(wF;#m;x%7B*MrOoT+y)FZv4D$Ty6 zw;pSGdw>-7dJm1BaPb%$$pBkez7nL=li$dqzcn>@fq}U?%TTlX2)}sa>6PCn6yz5U z^w)&?J3HsUDyaVyCj2zgpR#qrewyU}^8UJ`Ei4HEi?9G8_|F3b>~;aXUtkIPGX?>A zog5&C|BgWczz86`Q!y|Y0tSf5sh9u)%nw||uQ3Q1%#S$J4yaNH1bE#1+79>(IhkUo zVo(J91e>0U0lX7-W;`$y;2{8V{IwkfFi#`S#K2%A4ER>3+5skMJ}_{ne(ei}0Ic+E z40zB$fhWi5b_nR%^MWA=82@ki11=A6U7za9$0zXHcu*t~diMH&W&nLX-4_Oiz<OHY<7dwSKYK5MRtU)1oWl5k2hQ2Pd~oR5^8$u_zO#J= z1Q398|MYnU0H%62e*y>y@@!uu5)40E2SEA&%lxVFfck@+Z3o2Qd}q!96f*>I=9+;R z?BvaxljEOr0f-3zZx@`2!GXJUCIFEe(1gOmyc#y1 y7AI4cSKZOk83erF@e_{AJ6Jk`P97~MKVcYW6SVWsNe$FH3@Sj#$||iQL-=2#UKphS literal 0 HcmV?d00001 diff --git a/Semaine_04/Fonctions/.python-version b/Semaine_04/Fonctions/.python-version new file mode 100644 index 0000000..e4fba21 --- /dev/null +++ b/Semaine_04/Fonctions/.python-version @@ -0,0 +1 @@ +3.12 diff --git a/Semaine_04/Fonctions/README.md b/Semaine_04/Fonctions/README.md new file mode 100644 index 0000000..e69de29 diff --git a/Semaine_04/Fonctions/csv_test b/Semaine_04/Fonctions/csv_test new file mode 100644 index 0000000..5761aef --- /dev/null +++ b/Semaine_04/Fonctions/csv_test @@ -0,0 +1 @@ +Nom,Prénom,Âge diff --git a/Semaine_04/Fonctions/functions.py b/Semaine_04/Fonctions/functions.py new file mode 100644 index 0000000..87383f3 --- /dev/null +++ b/Semaine_04/Fonctions/functions.py @@ -0,0 +1,42 @@ +import os +from tkinter.ttk import Separator +import pandas +import csv + +def addition(a: int, b: int): + somme = a + b + return somme + +def create_folder(path: str, name:str): + chemin_complet = os.path.join(path, name) + if not os.path.isdir(chemin_complet): + os.mkdir(chemin_complet) + +def create_empty_csv_file( + path: str, + filename: str, + /, # ce qui est avant le / est du positionnage + *, # ce qui est après le * est du nommage + colonnes: list, + separateur: str = "," + ): + tableau = pandas.DataFrame(columns= colonnes) + chemin_complet = os.path.join(path, filename) + tableau.to_csv( + path_or_buf= chemin_complet, + sep= separateur, + index= False + ) + +def write_to_csv( + path: str, + filename: str, + colonnes: list, + donnees: list[dict] + ): + if not filename.endswith(".csv"): + filename += ".csv" + chemin_complet = os.path.join(path, filename) + fichier_csv = open(chemin_complet, "a") + writer = csv.DictWriter(fichier_csv, colonnes, delimiter= separateur, lineterminator= "\n") + writer.writerows(donnees) \ No newline at end of file diff --git a/Semaine_04/Fonctions/main.py b/Semaine_04/Fonctions/main.py new file mode 100644 index 0000000..9fae9b5 --- /dev/null +++ b/Semaine_04/Fonctions/main.py @@ -0,0 +1,31 @@ +from functions import addition, create_folder, create_empty_csv_file, write_to_csv + +print(addition(3,7)) + +create_folder(".", "data") + +# Ou bien, si on veut changer l'ordre des arguments + +create_folder( + name= "data", + path= "." +) + +create_empty_csv_file( + ".", + "csv_test", + colonnes= ["Nom", "Prénom", "Âge"] +) + +data = [ + {"id" = 1, "Prénom": "Dale", "Nom": "Cooper", "Âge": 35}, + {"id" = 2, "Prénom": "Dale", "Nom": "Cooper", "Âge": 35}, + {"id" = 3, "Prénom": "Dougie", "Nom": "Jones", "Âge": 35}, +] + +write_to_csv( + path= "data", + filename= "donnees", + colonnes= ["Nom", "Prénom", "Âge"], + donnees= data[] +) \ No newline at end of file diff --git a/Semaine_04/Fonctions/pyproject.toml b/Semaine_04/Fonctions/pyproject.toml new file mode 100644 index 0000000..a02ea95 --- /dev/null +++ b/Semaine_04/Fonctions/pyproject.toml @@ -0,0 +1,9 @@ +[project] +name = "fonctions" +version = "0.1.0" +description = "Add your description here" +readme = "README.md" +requires-python = ">=3.12" +dependencies = [ + "pandas>=2.3.3", +] diff --git a/Semaine_04/Fonctions/uv.lock b/Semaine_04/Fonctions/uv.lock new file mode 100644 index 0000000..9e3bb28 --- /dev/null +++ b/Semaine_04/Fonctions/uv.lock @@ -0,0 +1,161 @@ +version = 1 +revision = 3 +requires-python = ">=3.12" + +[[package]] +name = "fonctions" +version = "0.1.0" +source = { virtual = "." } +dependencies = [ + { name = "pandas" }, +] + +[package.metadata] +requires-dist = [{ name = "pandas", specifier = ">=2.3.3" }] + +[[package]] +name = "numpy" +version = "2.4.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/24/62/ae72ff66c0f1fd959925b4c11f8c2dea61f47f6acaea75a08512cdfe3fed/numpy-2.4.1.tar.gz", hash = "sha256:a1ceafc5042451a858231588a104093474c6a5c57dcc724841f5c888d237d690", size = 20721320, upload-time = "2026-01-10T06:44:59.619Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/78/7f/ec53e32bf10c813604edf07a3682616bd931d026fcde7b6d13195dfb684a/numpy-2.4.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:d3703409aac693fa82c0aee023a1ae06a6e9d065dba10f5e8e80f642f1e9d0a2", size = 16656888, upload-time = "2026-01-10T06:42:40.913Z" }, + { url = "https://files.pythonhosted.org/packages/b8/e0/1f9585d7dae8f14864e948fd7fa86c6cb72dee2676ca2748e63b1c5acfe0/numpy-2.4.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:7211b95ca365519d3596a1d8688a95874cc94219d417504d9ecb2df99fa7bfa8", size = 12373956, upload-time = "2026-01-10T06:42:43.091Z" }, + { url = "https://files.pythonhosted.org/packages/8e/43/9762e88909ff2326f5e7536fa8cb3c49fb03a7d92705f23e6e7f553d9cb3/numpy-2.4.1-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:5adf01965456a664fc727ed69cc71848f28d063217c63e1a0e200a118d5eec9a", size = 5202567, upload-time = "2026-01-10T06:42:45.107Z" }, + { url = "https://files.pythonhosted.org/packages/4b/ee/34b7930eb61e79feb4478800a4b95b46566969d837546aa7c034c742ef98/numpy-2.4.1-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:26f0bcd9c79a00e339565b303badc74d3ea2bd6d52191eeca5f95936cad107d0", size = 6549459, upload-time = "2026-01-10T06:42:48.152Z" }, + { url = "https://files.pythonhosted.org/packages/79/e3/5f115fae982565771be994867c89bcd8d7208dbfe9469185497d70de5ddf/numpy-2.4.1-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0093e85df2960d7e4049664b26afc58b03236e967fb942354deef3208857a04c", size = 14404859, upload-time = "2026-01-10T06:42:49.947Z" }, + { url = "https://files.pythonhosted.org/packages/d9/7d/9c8a781c88933725445a859cac5d01b5871588a15969ee6aeb618ba99eee/numpy-2.4.1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7ad270f438cbdd402c364980317fb6b117d9ec5e226fff5b4148dd9aa9fc6e02", size = 16371419, upload-time = "2026-01-10T06:42:52.409Z" }, + { url = "https://files.pythonhosted.org/packages/a6/d2/8aa084818554543f17cf4162c42f162acbd3bb42688aefdba6628a859f77/numpy-2.4.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:297c72b1b98100c2e8f873d5d35fb551fce7040ade83d67dd51d38c8d42a2162", size = 16182131, upload-time = "2026-01-10T06:42:54.694Z" }, + { url = "https://files.pythonhosted.org/packages/60/db/0425216684297c58a8df35f3284ef56ec4a043e6d283f8a59c53562caf1b/numpy-2.4.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:cf6470d91d34bf669f61d515499859fa7a4c2f7c36434afb70e82df7217933f9", size = 18295342, upload-time = "2026-01-10T06:42:56.991Z" }, + { url = "https://files.pythonhosted.org/packages/31/4c/14cb9d86240bd8c386c881bafbe43f001284b7cce3bc01623ac9475da163/numpy-2.4.1-cp312-cp312-win32.whl", hash = "sha256:b6bcf39112e956594b3331316d90c90c90fb961e39696bda97b89462f5f3943f", size = 5959015, upload-time = "2026-01-10T06:42:59.631Z" }, + { url = "https://files.pythonhosted.org/packages/51/cf/52a703dbeb0c65807540d29699fef5fda073434ff61846a564d5c296420f/numpy-2.4.1-cp312-cp312-win_amd64.whl", hash = "sha256:e1a27bb1b2dee45a2a53f5ca6ff2d1a7f135287883a1689e930d44d1ff296c87", size = 12310730, upload-time = "2026-01-10T06:43:01.627Z" }, + { url = "https://files.pythonhosted.org/packages/69/80/a828b2d0ade5e74a9fe0f4e0a17c30fdc26232ad2bc8c9f8b3197cf7cf18/numpy-2.4.1-cp312-cp312-win_arm64.whl", hash = "sha256:0e6e8f9d9ecf95399982019c01223dc130542960a12edfa8edd1122dfa66a8a8", size = 10312166, upload-time = "2026-01-10T06:43:03.673Z" }, + { url = "https://files.pythonhosted.org/packages/04/68/732d4b7811c00775f3bd522a21e8dd5a23f77eb11acdeb663e4a4ebf0ef4/numpy-2.4.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:d797454e37570cfd61143b73b8debd623c3c0952959adb817dd310a483d58a1b", size = 16652495, upload-time = "2026-01-10T06:43:06.283Z" }, + { url = "https://files.pythonhosted.org/packages/20/ca/857722353421a27f1465652b2c66813eeeccea9d76d5f7b74b99f298e60e/numpy-2.4.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:82c55962006156aeef1629b953fd359064aa47e4d82cfc8e67f0918f7da3344f", size = 12368657, upload-time = "2026-01-10T06:43:09.094Z" }, + { url = "https://files.pythonhosted.org/packages/81/0d/2377c917513449cc6240031a79d30eb9a163d32a91e79e0da47c43f2c0c8/numpy-2.4.1-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:71abbea030f2cfc3092a0ff9f8c8fdefdc5e0bf7d9d9c99663538bb0ecdac0b9", size = 5197256, upload-time = "2026-01-10T06:43:13.634Z" }, + { url = "https://files.pythonhosted.org/packages/17/39/569452228de3f5de9064ac75137082c6214be1f5c532016549a7923ab4b5/numpy-2.4.1-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:5b55aa56165b17aaf15520beb9cbd33c9039810e0d9643dd4379e44294c7303e", size = 6545212, upload-time = "2026-01-10T06:43:15.661Z" }, + { url = "https://files.pythonhosted.org/packages/8c/a4/77333f4d1e4dac4395385482557aeecf4826e6ff517e32ca48e1dafbe42a/numpy-2.4.1-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c0faba4a331195bfa96f93dd9dfaa10b2c7aa8cda3a02b7fd635e588fe821bf5", size = 14402871, upload-time = "2026-01-10T06:43:17.324Z" }, + { url = "https://files.pythonhosted.org/packages/ba/87/d341e519956273b39d8d47969dd1eaa1af740615394fe67d06f1efa68773/numpy-2.4.1-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d3e3087f53e2b4428766b54932644d148613c5a595150533ae7f00dab2f319a8", size = 16359305, upload-time = "2026-01-10T06:43:19.376Z" }, + { url = "https://files.pythonhosted.org/packages/32/91/789132c6666288eaa20ae8066bb99eba1939362e8f1a534949a215246e97/numpy-2.4.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:49e792ec351315e16da54b543db06ca8a86985ab682602d90c60ef4ff4db2a9c", size = 16181909, upload-time = "2026-01-10T06:43:21.808Z" }, + { url = "https://files.pythonhosted.org/packages/cf/b8/090b8bd27b82a844bb22ff8fdf7935cb1980b48d6e439ae116f53cdc2143/numpy-2.4.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:79e9e06c4c2379db47f3f6fc7a8652e7498251789bf8ff5bd43bf478ef314ca2", size = 18284380, upload-time = "2026-01-10T06:43:23.957Z" }, + { url = "https://files.pythonhosted.org/packages/67/78/722b62bd31842ff029412271556a1a27a98f45359dea78b1548a3a9996aa/numpy-2.4.1-cp313-cp313-win32.whl", hash = "sha256:3d1a100e48cb266090a031397863ff8a30050ceefd798f686ff92c67a486753d", size = 5957089, upload-time = "2026-01-10T06:43:27.535Z" }, + { url = "https://files.pythonhosted.org/packages/da/a6/cf32198b0b6e18d4fbfa9a21a992a7fca535b9bb2b0cdd217d4a3445b5ca/numpy-2.4.1-cp313-cp313-win_amd64.whl", hash = "sha256:92a0e65272fd60bfa0d9278e0484c2f52fe03b97aedc02b357f33fe752c52ffb", size = 12307230, upload-time = "2026-01-10T06:43:29.298Z" }, + { url = "https://files.pythonhosted.org/packages/44/6c/534d692bfb7d0afe30611320c5fb713659dcb5104d7cc182aff2aea092f5/numpy-2.4.1-cp313-cp313-win_arm64.whl", hash = "sha256:20d4649c773f66cc2fc36f663e091f57c3b7655f936a4c681b4250855d1da8f5", size = 10313125, upload-time = "2026-01-10T06:43:31.782Z" }, + { url = "https://files.pythonhosted.org/packages/da/a1/354583ac5c4caa566de6ddfbc42744409b515039e085fab6e0ff942e0df5/numpy-2.4.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:f93bc6892fe7b0663e5ffa83b61aab510aacffd58c16e012bb9352d489d90cb7", size = 12496156, upload-time = "2026-01-10T06:43:34.237Z" }, + { url = "https://files.pythonhosted.org/packages/51/b0/42807c6e8cce58c00127b1dc24d365305189991f2a7917aa694a109c8d7d/numpy-2.4.1-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:178de8f87948163d98a4c9ab5bee4ce6519ca918926ec8df195af582de28544d", size = 5324663, upload-time = "2026-01-10T06:43:36.211Z" }, + { url = "https://files.pythonhosted.org/packages/fe/55/7a621694010d92375ed82f312b2f28017694ed784775269115323e37f5e2/numpy-2.4.1-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:98b35775e03ab7f868908b524fc0a84d38932d8daf7b7e1c3c3a1b6c7a2c9f15", size = 6645224, upload-time = "2026-01-10T06:43:37.884Z" }, + { url = "https://files.pythonhosted.org/packages/50/96/9fa8635ed9d7c847d87e30c834f7109fac5e88549d79ef3324ab5c20919f/numpy-2.4.1-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:941c2a93313d030f219f3a71fd3d91a728b82979a5e8034eb2e60d394a2b83f9", size = 14462352, upload-time = "2026-01-10T06:43:39.479Z" }, + { url = "https://files.pythonhosted.org/packages/03/d1/8cf62d8bb2062da4fb82dd5d49e47c923f9c0738032f054e0a75342faba7/numpy-2.4.1-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:529050522e983e00a6c1c6b67411083630de8b57f65e853d7b03d9281b8694d2", size = 16407279, upload-time = "2026-01-10T06:43:41.93Z" }, + { url = "https://files.pythonhosted.org/packages/86/1c/95c86e17c6b0b31ce6ef219da00f71113b220bcb14938c8d9a05cee0ff53/numpy-2.4.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:2302dc0224c1cbc49bb94f7064f3f923a971bfae45c33870dcbff63a2a550505", size = 16248316, upload-time = "2026-01-10T06:43:44.121Z" }, + { url = "https://files.pythonhosted.org/packages/30/b4/e7f5ff8697274c9d0fa82398b6a372a27e5cef069b37df6355ccb1f1db1a/numpy-2.4.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:9171a42fcad32dcf3fa86f0a4faa5e9f8facefdb276f54b8b390d90447cff4e2", size = 18329884, upload-time = "2026-01-10T06:43:46.613Z" }, + { url = "https://files.pythonhosted.org/packages/37/a4/b073f3e9d77f9aec8debe8ca7f9f6a09e888ad1ba7488f0c3b36a94c03ac/numpy-2.4.1-cp313-cp313t-win32.whl", hash = "sha256:382ad67d99ef49024f11d1ce5dcb5ad8432446e4246a4b014418ba3a1175a1f4", size = 6081138, upload-time = "2026-01-10T06:43:48.854Z" }, + { url = "https://files.pythonhosted.org/packages/16/16/af42337b53844e67752a092481ab869c0523bc95c4e5c98e4dac4e9581ac/numpy-2.4.1-cp313-cp313t-win_amd64.whl", hash = "sha256:62fea415f83ad8fdb6c20840578e5fbaf5ddd65e0ec6c3c47eda0f69da172510", size = 12447478, upload-time = "2026-01-10T06:43:50.476Z" }, + { url = "https://files.pythonhosted.org/packages/6c/f8/fa85b2eac68ec631d0b631abc448552cb17d39afd17ec53dcbcc3537681a/numpy-2.4.1-cp313-cp313t-win_arm64.whl", hash = "sha256:a7870e8c5fc11aef57d6fea4b4085e537a3a60ad2cdd14322ed531fdca68d261", size = 10382981, upload-time = "2026-01-10T06:43:52.575Z" }, + { url = "https://files.pythonhosted.org/packages/1b/a7/ef08d25698e0e4b4efbad8d55251d20fe2a15f6d9aa7c9b30cd03c165e6f/numpy-2.4.1-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:3869ea1ee1a1edc16c29bbe3a2f2a4e515cc3a44d43903ad41e0cacdbaf733dc", size = 16652046, upload-time = "2026-01-10T06:43:54.797Z" }, + { url = "https://files.pythonhosted.org/packages/8f/39/e378b3e3ca13477e5ac70293ec027c438d1927f18637e396fe90b1addd72/numpy-2.4.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:e867df947d427cdd7a60e3e271729090b0f0df80f5f10ab7dd436f40811699c3", size = 12378858, upload-time = "2026-01-10T06:43:57.099Z" }, + { url = "https://files.pythonhosted.org/packages/c3/74/7ec6154f0006910ed1fdbb7591cf4432307033102b8a22041599935f8969/numpy-2.4.1-cp314-cp314-macosx_14_0_arm64.whl", hash = "sha256:e3bd2cb07841166420d2fa7146c96ce00cb3410664cbc1a6be028e456c4ee220", size = 5207417, upload-time = "2026-01-10T06:43:59.037Z" }, + { url = "https://files.pythonhosted.org/packages/f7/b7/053ac11820d84e42f8feea5cb81cc4fcd1091499b45b1ed8c7415b1bf831/numpy-2.4.1-cp314-cp314-macosx_14_0_x86_64.whl", hash = "sha256:f0a90aba7d521e6954670550e561a4cb925713bd944445dbe9e729b71f6cabee", size = 6542643, upload-time = "2026-01-10T06:44:01.852Z" }, + { url = "https://files.pythonhosted.org/packages/c0/c4/2e7908915c0e32ca636b92e4e4a3bdec4cb1e7eb0f8aedf1ed3c68a0d8cd/numpy-2.4.1-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5d558123217a83b2d1ba316b986e9248a1ed1971ad495963d555ccd75dcb1556", size = 14418963, upload-time = "2026-01-10T06:44:04.047Z" }, + { url = "https://files.pythonhosted.org/packages/eb/c0/3ed5083d94e7ffd7c404e54619c088e11f2e1939a9544f5397f4adb1b8ba/numpy-2.4.1-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2f44de05659b67d20499cbc96d49f2650769afcb398b79b324bb6e297bfe3844", size = 16363811, upload-time = "2026-01-10T06:44:06.207Z" }, + { url = "https://files.pythonhosted.org/packages/0e/68/42b66f1852bf525050a67315a4fb94586ab7e9eaa541b1bef530fab0c5dd/numpy-2.4.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:69e7419c9012c4aaf695109564e3387f1259f001b4326dfa55907b098af082d3", size = 16197643, upload-time = "2026-01-10T06:44:08.33Z" }, + { url = "https://files.pythonhosted.org/packages/d2/40/e8714fc933d85f82c6bfc7b998a0649ad9769a32f3494ba86598aaf18a48/numpy-2.4.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:2ffd257026eb1b34352e749d7cc1678b5eeec3e329ad8c9965a797e08ccba205", size = 18289601, upload-time = "2026-01-10T06:44:10.841Z" }, + { url = "https://files.pythonhosted.org/packages/80/9a/0d44b468cad50315127e884802351723daca7cf1c98d102929468c81d439/numpy-2.4.1-cp314-cp314-win32.whl", hash = "sha256:727c6c3275ddefa0dc078524a85e064c057b4f4e71ca5ca29a19163c607be745", size = 6005722, upload-time = "2026-01-10T06:44:13.332Z" }, + { url = "https://files.pythonhosted.org/packages/7e/bb/c6513edcce5a831810e2dddc0d3452ce84d208af92405a0c2e58fd8e7881/numpy-2.4.1-cp314-cp314-win_amd64.whl", hash = "sha256:7d5d7999df434a038d75a748275cd6c0094b0ecdb0837342b332a82defc4dc4d", size = 12438590, upload-time = "2026-01-10T06:44:15.006Z" }, + { url = "https://files.pythonhosted.org/packages/e9/da/a598d5cb260780cf4d255102deba35c1d072dc028c4547832f45dd3323a8/numpy-2.4.1-cp314-cp314-win_arm64.whl", hash = "sha256:ce9ce141a505053b3c7bce3216071f3bf5c182b8b28930f14cd24d43932cd2df", size = 10596180, upload-time = "2026-01-10T06:44:17.386Z" }, + { url = "https://files.pythonhosted.org/packages/de/bc/ea3f2c96fcb382311827231f911723aeff596364eb6e1b6d1d91128aa29b/numpy-2.4.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:4e53170557d37ae404bf8d542ca5b7c629d6efa1117dac6a83e394142ea0a43f", size = 12498774, upload-time = "2026-01-10T06:44:19.467Z" }, + { url = "https://files.pythonhosted.org/packages/aa/ab/ef9d939fe4a812648c7a712610b2ca6140b0853c5efea361301006c02ae5/numpy-2.4.1-cp314-cp314t-macosx_14_0_arm64.whl", hash = "sha256:a73044b752f5d34d4232f25f18160a1cc418ea4507f5f11e299d8ac36875f8a0", size = 5327274, upload-time = "2026-01-10T06:44:23.189Z" }, + { url = "https://files.pythonhosted.org/packages/bd/31/d381368e2a95c3b08b8cf7faac6004849e960f4a042d920337f71cef0cae/numpy-2.4.1-cp314-cp314t-macosx_14_0_x86_64.whl", hash = "sha256:fb1461c99de4d040666ca0444057b06541e5642f800b71c56e6ea92d6a853a0c", size = 6648306, upload-time = "2026-01-10T06:44:25.012Z" }, + { url = "https://files.pythonhosted.org/packages/c8/e5/0989b44ade47430be6323d05c23207636d67d7362a1796ccbccac6773dd2/numpy-2.4.1-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:423797bdab2eeefbe608d7c1ec7b2b4fd3c58d51460f1ee26c7500a1d9c9ee93", size = 14464653, upload-time = "2026-01-10T06:44:26.706Z" }, + { url = "https://files.pythonhosted.org/packages/10/a7/cfbe475c35371cae1358e61f20c5f075badc18c4797ab4354140e1d283cf/numpy-2.4.1-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:52b5f61bdb323b566b528899cc7db2ba5d1015bda7ea811a8bcf3c89c331fa42", size = 16405144, upload-time = "2026-01-10T06:44:29.378Z" }, + { url = "https://files.pythonhosted.org/packages/f8/a3/0c63fe66b534888fa5177cc7cef061541064dbe2b4b60dcc60ffaf0d2157/numpy-2.4.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:42d7dd5fa36d16d52a84f821eb96031836fd405ee6955dd732f2023724d0aa01", size = 16247425, upload-time = "2026-01-10T06:44:31.721Z" }, + { url = "https://files.pythonhosted.org/packages/6b/2b/55d980cfa2c93bd40ff4c290bf824d792bd41d2fe3487b07707559071760/numpy-2.4.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:e7b6b5e28bbd47b7532698e5db2fe1db693d84b58c254e4389d99a27bb9b8f6b", size = 18330053, upload-time = "2026-01-10T06:44:34.617Z" }, + { url = "https://files.pythonhosted.org/packages/23/12/8b5fc6b9c487a09a7957188e0943c9ff08432c65e34567cabc1623b03a51/numpy-2.4.1-cp314-cp314t-win32.whl", hash = "sha256:5de60946f14ebe15e713a6f22850c2372fa72f4ff9a432ab44aa90edcadaa65a", size = 6152482, upload-time = "2026-01-10T06:44:36.798Z" }, + { url = "https://files.pythonhosted.org/packages/00/a5/9f8ca5856b8940492fc24fbe13c1bc34d65ddf4079097cf9e53164d094e1/numpy-2.4.1-cp314-cp314t-win_amd64.whl", hash = "sha256:8f085da926c0d491ffff3096f91078cc97ea67e7e6b65e490bc8dcda65663be2", size = 12627117, upload-time = "2026-01-10T06:44:38.828Z" }, + { url = "https://files.pythonhosted.org/packages/ad/0d/eca3d962f9eef265f01a8e0d20085c6dd1f443cbffc11b6dede81fd82356/numpy-2.4.1-cp314-cp314t-win_arm64.whl", hash = "sha256:6436cffb4f2bf26c974344439439c95e152c9a527013f26b3577be6c2ca64295", size = 10667121, upload-time = "2026-01-10T06:44:41.644Z" }, +] + +[[package]] +name = "pandas" +version = "2.3.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "numpy" }, + { name = "python-dateutil" }, + { name = "pytz" }, + { name = "tzdata" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/33/01/d40b85317f86cf08d853a4f495195c73815fdf205eef3993821720274518/pandas-2.3.3.tar.gz", hash = "sha256:e05e1af93b977f7eafa636d043f9f94c7ee3ac81af99c13508215942e64c993b", size = 4495223, upload-time = "2025-09-29T23:34:51.853Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9c/fb/231d89e8637c808b997d172b18e9d4a4bc7bf31296196c260526055d1ea0/pandas-2.3.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:6d21f6d74eb1725c2efaa71a2bfc661a0689579b58e9c0ca58a739ff0b002b53", size = 11597846, upload-time = "2025-09-29T23:19:48.856Z" }, + { url = "https://files.pythonhosted.org/packages/5c/bd/bf8064d9cfa214294356c2d6702b716d3cf3bb24be59287a6a21e24cae6b/pandas-2.3.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:3fd2f887589c7aa868e02632612ba39acb0b8948faf5cc58f0850e165bd46f35", size = 10729618, upload-time = "2025-09-29T23:39:08.659Z" }, + { url = "https://files.pythonhosted.org/packages/57/56/cf2dbe1a3f5271370669475ead12ce77c61726ffd19a35546e31aa8edf4e/pandas-2.3.3-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ecaf1e12bdc03c86ad4a7ea848d66c685cb6851d807a26aa245ca3d2017a1908", size = 11737212, upload-time = "2025-09-29T23:19:59.765Z" }, + { url = "https://files.pythonhosted.org/packages/e5/63/cd7d615331b328e287d8233ba9fdf191a9c2d11b6af0c7a59cfcec23de68/pandas-2.3.3-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b3d11d2fda7eb164ef27ffc14b4fcab16a80e1ce67e9f57e19ec0afaf715ba89", size = 12362693, upload-time = "2025-09-29T23:20:14.098Z" }, + { url = "https://files.pythonhosted.org/packages/a6/de/8b1895b107277d52f2b42d3a6806e69cfef0d5cf1d0ba343470b9d8e0a04/pandas-2.3.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:a68e15f780eddf2b07d242e17a04aa187a7ee12b40b930bfdd78070556550e98", size = 12771002, upload-time = "2025-09-29T23:20:26.76Z" }, + { url = "https://files.pythonhosted.org/packages/87/21/84072af3187a677c5893b170ba2c8fbe450a6ff911234916da889b698220/pandas-2.3.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:371a4ab48e950033bcf52b6527eccb564f52dc826c02afd9a1bc0ab731bba084", size = 13450971, upload-time = "2025-09-29T23:20:41.344Z" }, + { url = "https://files.pythonhosted.org/packages/86/41/585a168330ff063014880a80d744219dbf1dd7a1c706e75ab3425a987384/pandas-2.3.3-cp312-cp312-win_amd64.whl", hash = "sha256:a16dcec078a01eeef8ee61bf64074b4e524a2a3f4b3be9326420cabe59c4778b", size = 10992722, upload-time = "2025-09-29T23:20:54.139Z" }, + { url = "https://files.pythonhosted.org/packages/cd/4b/18b035ee18f97c1040d94debd8f2e737000ad70ccc8f5513f4eefad75f4b/pandas-2.3.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:56851a737e3470de7fa88e6131f41281ed440d29a9268dcbf0002da5ac366713", size = 11544671, upload-time = "2025-09-29T23:21:05.024Z" }, + { url = "https://files.pythonhosted.org/packages/31/94/72fac03573102779920099bcac1c3b05975c2cb5f01eac609faf34bed1ca/pandas-2.3.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:bdcd9d1167f4885211e401b3036c0c8d9e274eee67ea8d0758a256d60704cfe8", size = 10680807, upload-time = "2025-09-29T23:21:15.979Z" }, + { url = "https://files.pythonhosted.org/packages/16/87/9472cf4a487d848476865321de18cc8c920b8cab98453ab79dbbc98db63a/pandas-2.3.3-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e32e7cc9af0f1cc15548288a51a3b681cc2a219faa838e995f7dc53dbab1062d", size = 11709872, upload-time = "2025-09-29T23:21:27.165Z" }, + { url = "https://files.pythonhosted.org/packages/15/07/284f757f63f8a8d69ed4472bfd85122bd086e637bf4ed09de572d575a693/pandas-2.3.3-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:318d77e0e42a628c04dc56bcef4b40de67918f7041c2b061af1da41dcff670ac", size = 12306371, upload-time = "2025-09-29T23:21:40.532Z" }, + { url = "https://files.pythonhosted.org/packages/33/81/a3afc88fca4aa925804a27d2676d22dcd2031c2ebe08aabd0ae55b9ff282/pandas-2.3.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:4e0a175408804d566144e170d0476b15d78458795bb18f1304fb94160cabf40c", size = 12765333, upload-time = "2025-09-29T23:21:55.77Z" }, + { url = "https://files.pythonhosted.org/packages/8d/0f/b4d4ae743a83742f1153464cf1a8ecfafc3ac59722a0b5c8602310cb7158/pandas-2.3.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:93c2d9ab0fc11822b5eece72ec9587e172f63cff87c00b062f6e37448ced4493", size = 13418120, upload-time = "2025-09-29T23:22:10.109Z" }, + { url = "https://files.pythonhosted.org/packages/4f/c7/e54682c96a895d0c808453269e0b5928a07a127a15704fedb643e9b0a4c8/pandas-2.3.3-cp313-cp313-win_amd64.whl", hash = "sha256:f8bfc0e12dc78f777f323f55c58649591b2cd0c43534e8355c51d3fede5f4dee", size = 10993991, upload-time = "2025-09-29T23:25:04.889Z" }, + { url = "https://files.pythonhosted.org/packages/f9/ca/3f8d4f49740799189e1395812f3bf23b5e8fc7c190827d55a610da72ce55/pandas-2.3.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:75ea25f9529fdec2d2e93a42c523962261e567d250b0013b16210e1d40d7c2e5", size = 12048227, upload-time = "2025-09-29T23:22:24.343Z" }, + { url = "https://files.pythonhosted.org/packages/0e/5a/f43efec3e8c0cc92c4663ccad372dbdff72b60bdb56b2749f04aa1d07d7e/pandas-2.3.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:74ecdf1d301e812db96a465a525952f4dde225fdb6d8e5a521d47e1f42041e21", size = 11411056, upload-time = "2025-09-29T23:22:37.762Z" }, + { url = "https://files.pythonhosted.org/packages/46/b1/85331edfc591208c9d1a63a06baa67b21d332e63b7a591a5ba42a10bb507/pandas-2.3.3-cp313-cp313t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6435cb949cb34ec11cc9860246ccb2fdc9ecd742c12d3304989017d53f039a78", size = 11645189, upload-time = "2025-09-29T23:22:51.688Z" }, + { url = "https://files.pythonhosted.org/packages/44/23/78d645adc35d94d1ac4f2a3c4112ab6f5b8999f4898b8cdf01252f8df4a9/pandas-2.3.3-cp313-cp313t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:900f47d8f20860de523a1ac881c4c36d65efcb2eb850e6948140fa781736e110", size = 12121912, upload-time = "2025-09-29T23:23:05.042Z" }, + { url = "https://files.pythonhosted.org/packages/53/da/d10013df5e6aaef6b425aa0c32e1fc1f3e431e4bcabd420517dceadce354/pandas-2.3.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:a45c765238e2ed7d7c608fc5bc4a6f88b642f2f01e70c0c23d2224dd21829d86", size = 12712160, upload-time = "2025-09-29T23:23:28.57Z" }, + { url = "https://files.pythonhosted.org/packages/bd/17/e756653095a083d8a37cbd816cb87148debcfcd920129b25f99dd8d04271/pandas-2.3.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:c4fc4c21971a1a9f4bdb4c73978c7f7256caa3e62b323f70d6cb80db583350bc", size = 13199233, upload-time = "2025-09-29T23:24:24.876Z" }, + { url = "https://files.pythonhosted.org/packages/04/fd/74903979833db8390b73b3a8a7d30d146d710bd32703724dd9083950386f/pandas-2.3.3-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:ee15f284898e7b246df8087fc82b87b01686f98ee67d85a17b7ab44143a3a9a0", size = 11540635, upload-time = "2025-09-29T23:25:52.486Z" }, + { url = "https://files.pythonhosted.org/packages/21/00/266d6b357ad5e6d3ad55093a7e8efc7dd245f5a842b584db9f30b0f0a287/pandas-2.3.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:1611aedd912e1ff81ff41c745822980c49ce4a7907537be8692c8dbc31924593", size = 10759079, upload-time = "2025-09-29T23:26:33.204Z" }, + { url = "https://files.pythonhosted.org/packages/ca/05/d01ef80a7a3a12b2f8bbf16daba1e17c98a2f039cbc8e2f77a2c5a63d382/pandas-2.3.3-cp314-cp314-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6d2cefc361461662ac48810cb14365a365ce864afe85ef1f447ff5a1e99ea81c", size = 11814049, upload-time = "2025-09-29T23:27:15.384Z" }, + { url = "https://files.pythonhosted.org/packages/15/b2/0e62f78c0c5ba7e3d2c5945a82456f4fac76c480940f805e0b97fcbc2f65/pandas-2.3.3-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ee67acbbf05014ea6c763beb097e03cd629961c8a632075eeb34247120abcb4b", size = 12332638, upload-time = "2025-09-29T23:27:51.625Z" }, + { url = "https://files.pythonhosted.org/packages/c5/33/dd70400631b62b9b29c3c93d2feee1d0964dc2bae2e5ad7a6c73a7f25325/pandas-2.3.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:c46467899aaa4da076d5abc11084634e2d197e9460643dd455ac3db5856b24d6", size = 12886834, upload-time = "2025-09-29T23:28:21.289Z" }, + { url = "https://files.pythonhosted.org/packages/d3/18/b5d48f55821228d0d2692b34fd5034bb185e854bdb592e9c640f6290e012/pandas-2.3.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:6253c72c6a1d990a410bc7de641d34053364ef8bcd3126f7e7450125887dffe3", size = 13409925, upload-time = "2025-09-29T23:28:58.261Z" }, + { url = "https://files.pythonhosted.org/packages/a6/3d/124ac75fcd0ecc09b8fdccb0246ef65e35b012030defb0e0eba2cbbbe948/pandas-2.3.3-cp314-cp314-win_amd64.whl", hash = "sha256:1b07204a219b3b7350abaae088f451860223a52cfb8a6c53358e7948735158e5", size = 11109071, upload-time = "2025-09-29T23:32:27.484Z" }, + { url = "https://files.pythonhosted.org/packages/89/9c/0e21c895c38a157e0faa1fb64587a9226d6dd46452cac4532d80c3c4a244/pandas-2.3.3-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:2462b1a365b6109d275250baaae7b760fd25c726aaca0054649286bcfbb3e8ec", size = 12048504, upload-time = "2025-09-29T23:29:31.47Z" }, + { url = "https://files.pythonhosted.org/packages/d7/82/b69a1c95df796858777b68fbe6a81d37443a33319761d7c652ce77797475/pandas-2.3.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:0242fe9a49aa8b4d78a4fa03acb397a58833ef6199e9aa40a95f027bb3a1b6e7", size = 11410702, upload-time = "2025-09-29T23:29:54.591Z" }, + { url = "https://files.pythonhosted.org/packages/f9/88/702bde3ba0a94b8c73a0181e05144b10f13f29ebfc2150c3a79062a8195d/pandas-2.3.3-cp314-cp314t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a21d830e78df0a515db2b3d2f5570610f5e6bd2e27749770e8bb7b524b89b450", size = 11634535, upload-time = "2025-09-29T23:30:21.003Z" }, + { url = "https://files.pythonhosted.org/packages/a4/1e/1bac1a839d12e6a82ec6cb40cda2edde64a2013a66963293696bbf31fbbb/pandas-2.3.3-cp314-cp314t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2e3ebdb170b5ef78f19bfb71b0dc5dc58775032361fa188e814959b74d726dd5", size = 12121582, upload-time = "2025-09-29T23:30:43.391Z" }, + { url = "https://files.pythonhosted.org/packages/44/91/483de934193e12a3b1d6ae7c8645d083ff88dec75f46e827562f1e4b4da6/pandas-2.3.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:d051c0e065b94b7a3cea50eb1ec32e912cd96dba41647eb24104b6c6c14c5788", size = 12699963, upload-time = "2025-09-29T23:31:10.009Z" }, + { url = "https://files.pythonhosted.org/packages/70/44/5191d2e4026f86a2a109053e194d3ba7a31a2d10a9c2348368c63ed4e85a/pandas-2.3.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:3869faf4bd07b3b66a9f462417d0ca3a9df29a9f6abd5d0d0dbab15dac7abe87", size = 13202175, upload-time = "2025-09-29T23:31:59.173Z" }, +] + +[[package]] +name = "python-dateutil" +version = "2.9.0.post0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "six" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/66/c0/0c8b6ad9f17a802ee498c46e004a0eb49bc148f2fd230864601a86dcf6db/python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3", size = 342432, upload-time = "2024-03-01T18:36:20.211Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl", hash = "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427", size = 229892, upload-time = "2024-03-01T18:36:18.57Z" }, +] + +[[package]] +name = "pytz" +version = "2025.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f8/bf/abbd3cdfb8fbc7fb3d4d38d320f2441b1e7cbe29be4f23797b4a2b5d8aac/pytz-2025.2.tar.gz", hash = "sha256:360b9e3dbb49a209c21ad61809c7fb453643e048b38924c765813546746e81c3", size = 320884, upload-time = "2025-03-25T02:25:00.538Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/81/c4/34e93fe5f5429d7570ec1fa436f1986fb1f00c3e0f43a589fe2bbcd22c3f/pytz-2025.2-py2.py3-none-any.whl", hash = "sha256:5ddf76296dd8c44c26eb8f4b6f35488f3ccbf6fbbd7adee0b7262d43f0ec2f00", size = 509225, upload-time = "2025-03-25T02:24:58.468Z" }, +] + +[[package]] +name = "six" +version = "1.17.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/94/e7/b2c673351809dca68a0e064b6af791aa332cf192da575fd474ed7d6f16a2/six-1.17.0.tar.gz", hash = "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81", size = 34031, upload-time = "2024-12-04T17:35:28.174Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl", hash = "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274", size = 11050, upload-time = "2024-12-04T17:35:26.475Z" }, +] + +[[package]] +name = "tzdata" +version = "2025.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/5e/a7/c202b344c5ca7daf398f3b8a477eeb205cf3b6f32e7ec3a6bac0629ca975/tzdata-2025.3.tar.gz", hash = "sha256:de39c2ca5dc7b0344f2eba86f49d614019d29f060fc4ebc8a417896a620b56a7", size = 196772, upload-time = "2025-12-13T17:45:35.667Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c7/b0/003792df09decd6849a5e39c28b513c06e84436a54440380862b5aeff25d/tzdata-2025.3-py2.py3-none-any.whl", hash = "sha256:06a47e5700f3081aab02b2e513160914ff0694bce9947d6b76ebd6bf57cfc5d1", size = 348521, upload-time = "2025-12-13T17:45:33.889Z" }, +] diff --git a/Semaine_04/Jour_01.md b/Semaine_04/Jour_01.md new file mode 100644 index 0000000..71c80dd --- /dev/null +++ b/Semaine_04/Jour_01.md @@ -0,0 +1,66 @@ +# Les bases de Python + +## UV (NPM de Python) + +*Je suis sur Windows, les commandes divergent sur UNIX(like) + +Pour installer UV, remplaçant PIP et consorts (évidemment codé en RUST) : + +https://docs.astral.sh/uv/#projects + +Dans le dossier de travail : + +`uv init --python 3.12` + +Et dans le dossier initialisé : + +```sh +.venv\Scripts\activate +uv run main.py + +# On peut aussi activer le .venv en l'initialisation plus avant en intervertissant les commandes, donc : + +uv run main.py +.venv\Scripts\activate +``` + +## Quelques bases oubliées + +### Fonctions + +Une fonction appelle un résultat. + +```py +fonction(variable) +``` + +Définir une fonction : + +```py +def fonction(): + return true +``` + +On peut forcer le type des variables d'une fonction : + +```py +def fonction(a: int, b: int): + somme = a + b + return somme +``` + +Et même une valeur par défaut + +```py +def fonction(a: int, b: int = 5): + somme = a + b + return somme +``` + +### Méthodes + +Une méthode suit une variable. + +```py +variable.methode("Valeur") +``` \ No newline at end of file diff --git a/Semaine_04/Jour_02.md b/Semaine_04/Jour_02.md new file mode 100644 index 0000000..a585bea --- /dev/null +++ b/Semaine_04/Jour_02.md @@ -0,0 +1,136 @@ +## Fonctions LAMBDA + + + +## Méthodes et fonctions avancées + +### Données déstructurées + +dc_infos = ("Dale", "Cooper", "32") +dc_prenom = dc_infos[0] +dc_nom = dc_infos[1] +dc_age = dc_infos[2] + +dc_prenom, dc_nom, dc_age = dc_infos + +### Surcharge de méthode + +```py +range(10) # [0,1,2,3,4,5,6,7,8,9] +range(2, 10) # [2,3,4,5,6,7,8,9] +range(2, 10, 2) # [2,4,6,8] +``` + +### A la place de `return` => `yield` + +```py +def generator(): + for i in range(10): + return i +``` + +Renverra [0], `return` étant un arrêt. + +Alors que : + +```py +def generator(): + for i in range(10): + yield i +``` + +Va renvoyer : `` + +### Générateurs + +La fonction `next` permet d'économiser des ressources en mettant en mémoire la fonction et sa position. Par exemple : + +```py +def square_generator(n): + for i in range(n): + yield i ** 2 +``` + +Renverra ``. Maintenant, on utilise : + +```py +squares = square_generator(10) + +print(next(squares)) +print(next(squares)) +print(next(squares)) +print(next(squares)) +print(next(squares)) +print(next(squares)) +print(next(squares)) +print(next(squares)) +``` + +Renverra : + +``` +0 +1 +4 +9 +16 +25 +36 +49 +``` + +### Return, Yield et Continue + +```py +for square in generator: + if square > 50: # Si le carré est supérieur à 50, la boucle cesse + break + if square % 2 == 0: # Si le carré est pair, on le zappe + continue + print(square) +``` + +## Format String + +Le classique : + +```py +print("La lettre " + variable_str + " apparaît " + variable_int + " fois.") +``` + +Se remplace bien par : + +```py +print(f"La lettre {variable_str} apparaît {variable_int} fois.") +``` + +Le `%s` c'est un peu démodé face au f-string, franchement. + +## Listes de compréhension + +Pour peupler une liste avec des formules, on peut faire du standard : + +```py +liste = [] + +for i in range(5) + liste.append(i) + +print(liste) # [0, 1, 2, 3, 4] +``` + +Ou, une liste compréhensive, contenant l'algo de base amenant le résultat : + +```py +liste = [i for i in range(5)] + +print(liste) # [0, 1, 2, 3, 4] +``` + +Et même inclure des conditions : + +```py +liste = [i for i in range(5) if i % 2 == 0] + +print(liste) # [0, 2, 4] +``` \ No newline at end of file diff --git a/Semaine_04/Jour_03.md b/Semaine_04/Jour_03.md new file mode 100644 index 0000000..bacddf8 --- /dev/null +++ b/Semaine_04/Jour_03.md @@ -0,0 +1,54 @@ +## Sérialisation, Dé-sérialisation + +Sérialisation => On prend des objets, on transforme en JSON +Dé-sérialisation => On prend un JSON, on transforme en objets + +### Exemple de sérialisation + +On prend une liste classique + +```py +livres = [{"titre": "1984", "auteur": "Orwell"}, {"titre": "LSDA", "auteur": "Tolkien"}] +``` + +On peut donc traiter un fichier JSON avec la fonction `open` et le sérialiser avec `dump` : + +```py +import json + +livres = [{"titre": "1984", "auteur": "Orwell"}, {"titre": "LSDA", "auteur": "Tolkien"}] + +# file=/path/ , w-rite +fichier_json = open("livres.json", "w") +json.dump(livres, fichier_json) +fichier_json.close() +``` + +Ou, avec un `Context-Manager` au lieu d'ouvrir et de fermer : + +```py +import json + +livres = [{"titre": "1984", "auteur": "Orwell"}, {"titre": "LSDA", "auteur": "Tolkien"}] + +with open("livres.json", "w") as fichier_json: + json.dump(livres, fichier_json, indent= 4) +``` + +### Exemple de dé-sérialisation + +```py +import json + +livres = [{"titre": "1984", "auteur": "Orwell"}, {"titre": "LSDA", "auteur": "Tolkien"}] + +with open("livres.json", "w") as fichier_json: + objet = json.load(fichier_json) + +print(objet) + +objet.append({"titre": "Alice aux pays", "auteur": "Caroll"}) + +with open("livres.json", "w") as fichier_json: + json.dump(objet, fichier_json, indent= 4) +``` \ No newline at end of file