From 3e23055eb6b78619788c0241829f90a08a6702e8 Mon Sep 17 00:00:00 2001 From: Ali Satwat Khan Date: Tue, 14 Jul 2026 23:34:57 +0500 Subject: [PATCH 1/6] fix: raise ValueError in encode() for non-lowercase input encode() previously accepted uppercase letters, digits, and other non-lowercase characters silently, producing incorrect/out-of-range values (e.g. negative numbers for uppercase letters) instead of failing. Add input validation using str.islower() and str.isalpha() to raise a ValueError when the input isn't purely lowercase a-z. Added a doctest covering the new error case. --- ciphers/a1z26.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/ciphers/a1z26.py b/ciphers/a1z26.py index a1377ea6d397..4fc7aa9c2f25 100644 --- a/ciphers/a1z26.py +++ b/ciphers/a1z26.py @@ -13,7 +13,11 @@ def encode(plain: str) -> list[int]: """ >>> encode("myname") [13, 25, 14, 1, 13, 5] + >>> encode("ABCD") + ValueError: plain must contain only lowercase letters (a-z) """ + if not plain.islower() or not plain.isalpha(): + raise ValueError("plain must contain only lowercase letters (a-z)") return [ord(elem) - 96 for elem in plain] From 9ff2a0b8ee82876dec89bf2350bfa49080b675bd Mon Sep 17 00:00:00 2001 From: Ali Satwat Khan Date: Tue, 14 Jul 2026 23:58:55 +0500 Subject: [PATCH 2/6] resolved doctest --- ciphers/a1z26.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/ciphers/a1z26.py b/ciphers/a1z26.py index 4fc7aa9c2f25..102cef4e424e 100644 --- a/ciphers/a1z26.py +++ b/ciphers/a1z26.py @@ -14,6 +14,8 @@ def encode(plain: str) -> list[int]: >>> encode("myname") [13, 25, 14, 1, 13, 5] >>> encode("ABCD") + Traceback (most recent call last): + ... ValueError: plain must contain only lowercase letters (a-z) """ if not plain.islower() or not plain.isalpha(): From 8b25d9fd2845886a56e82a13685f634faabf88d3 Mon Sep 17 00:00:00 2001 From: Ali Satwat Khan Date: Fri, 31 Jul 2026 04:10:03 +0500 Subject: [PATCH 3/6] Fix Ruff 0.16 lint failures --- data_structures/binary_tree/inorder_tree_traversal_2022.py | 2 +- machine_learning/sequential_minimum_optimization.py | 2 +- web_programming/download_images_from_google_query.py | 7 +++++-- 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/data_structures/binary_tree/inorder_tree_traversal_2022.py b/data_structures/binary_tree/inorder_tree_traversal_2022.py index 1357527d2953..a4846a5c29a5 100644 --- a/data_structures/binary_tree/inorder_tree_traversal_2022.py +++ b/data_structures/binary_tree/inorder_tree_traversal_2022.py @@ -43,7 +43,7 @@ def insert(node: BinaryTreeNode | None, new_value: int) -> BinaryTreeNode | None return node -def inorder(node: None | BinaryTreeNode) -> list[int]: # if node is None,return +def inorder(node: BinaryTreeNode | None) -> list[int]: # if node is None,return """ >>> inorder(make_tree()) [6, 10, 14, 15, 20, 25, 60] diff --git a/machine_learning/sequential_minimum_optimization.py b/machine_learning/sequential_minimum_optimization.py index 625fc28fe60c..e96f06d6f080 100644 --- a/machine_learning/sequential_minimum_optimization.py +++ b/machine_learning/sequential_minimum_optimization.py @@ -451,7 +451,7 @@ def test_cancer_data(): print("Hello!\nStart test SVM using the SMO algorithm!") # 0: download dataset and load into pandas' dataframe if not os.path.exists(r"cancer_data.csv"): - request = urllib.request.Request( # noqa: S310 + request = urllib.request.Request( CANCER_DATASET_URL, headers={"User-Agent": "Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)"}, ) diff --git a/web_programming/download_images_from_google_query.py b/web_programming/download_images_from_google_query.py index 659cf6a398a3..940cc3a5f024 100644 --- a/web_programming/download_images_from_google_query.py +++ b/web_programming/download_images_from_google_query.py @@ -88,8 +88,11 @@ def download_images_from_google_query(query: str = "dhaka", max_images: int = 5) opener.addheaders = [ ( "User-Agent", - "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" - " (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36 Edge/18.19582", + ( + "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" + " (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36" + " Edge/18.19582" + ), ) ] urllib.request.install_opener(opener) From a47679a0f7c0ff3164289201deaeace3e23a4e67 Mon Sep 17 00:00:00 2001 From: Christian Clauss Date: Fri, 31 Jul 2026 17:56:22 +0200 Subject: [PATCH 4/6] Enhance encode function error handling examples Update error handling in encode function to include examples for mixed case and invalid characters. --- ciphers/a1z26.py | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/ciphers/a1z26.py b/ciphers/a1z26.py index 102cef4e424e..d99efe186519 100644 --- a/ciphers/a1z26.py +++ b/ciphers/a1z26.py @@ -13,7 +13,15 @@ def encode(plain: str) -> list[int]: """ >>> encode("myname") [13, 25, 14, 1, 13, 5] - >>> encode("ABCD") + >>> encode("abCd") + Traceback (most recent call last): + ... + ValueError: plain must contain only lowercase letters (a-z) + >>> encode("n0w") + Traceback (most recent call last): + ... + ValueError: plain must contain only lowercase letters (a-z) + >>> encode("later!") Traceback (most recent call last): ... ValueError: plain must contain only lowercase letters (a-z) From 459efc3acdc665d8c3ee2b7dbb01b8cf99ace86a Mon Sep 17 00:00:00 2001 From: Christian Clauss Date: Fri, 31 Jul 2026 18:03:20 +0200 Subject: [PATCH 5/6] Fix indentation in test_cancer_data function --- machine_learning/sequential_minimum_optimization.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/machine_learning/sequential_minimum_optimization.py b/machine_learning/sequential_minimum_optimization.py index e96f06d6f080..082fa770bbf4 100644 --- a/machine_learning/sequential_minimum_optimization.py +++ b/machine_learning/sequential_minimum_optimization.py @@ -451,7 +451,7 @@ def test_cancer_data(): print("Hello!\nStart test SVM using the SMO algorithm!") # 0: download dataset and load into pandas' dataframe if not os.path.exists(r"cancer_data.csv"): - request = urllib.request.Request( + request = urllib.request.Request( CANCER_DATASET_URL, headers={"User-Agent": "Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)"}, ) From b639ac6701cad053827b9f45866004e25fe8a6dc Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Fri, 31 Jul 2026 16:03:36 +0000 Subject: [PATCH 6/6] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- machine_learning/sequential_minimum_optimization.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/machine_learning/sequential_minimum_optimization.py b/machine_learning/sequential_minimum_optimization.py index 082fa770bbf4..e96f06d6f080 100644 --- a/machine_learning/sequential_minimum_optimization.py +++ b/machine_learning/sequential_minimum_optimization.py @@ -451,7 +451,7 @@ def test_cancer_data(): print("Hello!\nStart test SVM using the SMO algorithm!") # 0: download dataset and load into pandas' dataframe if not os.path.exists(r"cancer_data.csv"): - request = urllib.request.Request( + request = urllib.request.Request( CANCER_DATASET_URL, headers={"User-Agent": "Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)"}, )