From 3fd0b9a3548746fe40a52240f3be0c25674e6ba1 Mon Sep 17 00:00:00 2001 From: gail-mar Date: Thu, 23 Oct 2025 18:56:55 +0200 Subject: [PATCH] finished function lab --- main.ipynb | 470 ++++++++++++++++++++---- mod/__pycache__/testing.cpython-313.pyc | Bin 0 -> 20223 bytes 2 files changed, 402 insertions(+), 68 deletions(-) create mode 100644 mod/__pycache__/testing.cpython-313.pyc diff --git a/main.ipynb b/main.ipynb index b05630a..aa4220e 100644 --- a/main.ipynb +++ b/main.ipynb @@ -20,7 +20,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 3, "metadata": {}, "outputs": [], "source": [ @@ -37,19 +37,33 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "def greater(a,b):\n", - "#your code here" + " if a > b:\n", + " return a\n", + " return b" ] }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "....................................................................................................\n", + "----------------------------------------------------------------------\n", + "Ran 100 tests in 0.200s\n", + "\n", + "OK\n" + ] + } + ], "source": [ "# This will test your function \n", "test_greater(greater)" @@ -57,11 +71,22 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 6, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "3" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ - "#your code here" + "greater(3,2)" ] }, { @@ -73,18 +98,65 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 7, "metadata": {}, "outputs": [], "source": [ - "#your code here" + "lst = [1,2,3]" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 8, "metadata": {}, "outputs": [], + "source": [ + "def greatest(lst):\n", + " largest = lst[0]\n", + " for i in lst:\n", + " if i > largest:\n", + " largest = i\n", + " return largest\n", + " \n" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "3" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "greatest(lst)" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "....................................................................................................\n", + "----------------------------------------------------------------------\n", + "Ran 100 tests in 0.102s\n", + "\n", + "OK\n" + ] + } + ], "source": [ "# This will test your function \n", "test_greatest(greatest)" @@ -99,21 +171,61 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 11, "metadata": {}, "outputs": [], "source": [ "def sum_all(lst):\n", - "#your code here" + " total = 0\n", + " for i in lst:\n", + " total += i\n", + " return total" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[1, 2, 3]\n" + ] + } + ], + "source": [ + "sum_all(lst)\n", + "print(lst)" + ] + }, + { + "cell_type": "code", + "execution_count": 13, "metadata": { "scrolled": true }, - "outputs": [], + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "....................." + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "...............................................................................\n", + "----------------------------------------------------------------------\n", + "Ran 100 tests in 0.210s\n", + "\n", + "OK\n" + ] + } + ], "source": [ "# This will test your function \n", "test_sum(sum_all)" @@ -128,21 +240,36 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 14, "metadata": {}, "outputs": [], "source": [ "def mult_all(lst):\n", - "#your code here" + " total = 1\n", + " for i in lst:\n", + " total *= i\n", + " return total" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 15, "metadata": { "scrolled": true }, - "outputs": [], + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "....................................................................................................\n", + "----------------------------------------------------------------------\n", + "Ran 100 tests in 0.124s\n", + "\n", + "OK\n" + ] + } + ], "source": [ "# This will test your function \n", "test_mult(mult_all)" @@ -157,19 +284,42 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 16, "metadata": {}, "outputs": [], "source": [ "def oper_all(arr, oper = \"*\"):\n", - "#your code here" + " if oper == \"*\":\n", + " result = 1\n", + " for i in arr:\n", + " result *= i\n", + " return result\n", + " elif oper == \"+\":\n", + " result = 0\n", + " for i in arr:\n", + " result += i\n", + " return result\n", + " else:\n", + " return None" ] }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], + "execution_count": 17, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "....................................................................................................\n", + "----------------------------------------------------------------------\n", + "Ran 100 tests in 0.135s\n", + "\n", + "OK\n" + ] + } + ], "source": [ "# This will test your function \n", "test_operations(oper_all)" @@ -184,12 +334,15 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 18, "metadata": {}, "outputs": [], "source": [ "def factorial(n):\n", - "#your code here" + " result = 1\n", + " for i in range(n):\n", + " result = result*(1+i)\n", + " return(result) " ] }, { @@ -213,9 +366,21 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], + "execution_count": 19, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "....................................................................................................\n", + "----------------------------------------------------------------------\n", + "Ran 100 tests in 0.117s\n", + "\n", + "OK\n" + ] + } + ], "source": [ "# This will test your function \n", "test_factorial(factorial)" @@ -232,19 +397,37 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 20, "metadata": {}, "outputs": [], "source": [ - "def unique(lst_un):\n", - "#your code here" + "\n", + "def unique(lst):\n", + " lst_un = []\n", + " for i in lst:\n", + " if i not in lst_un:\n", + " lst_un.append(i)\n", + " return lst_un \n", + " " ] }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], + "execution_count": 21, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "....................................................................................................\n", + "----------------------------------------------------------------------\n", + "Ran 100 tests in 0.225s\n", + "\n", + "OK\n" + ] + } + ], "source": [ "# This will test your function \n", "test_unique(unique)" @@ -260,19 +443,41 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 39, "metadata": {}, "outputs": [], "source": [ "def mode_counter(arr):\n", - "#your code here" + " freq = {}\n", + " for item in arr:\n", + " freq[item] = freq.get(item, 0) + 1\n", + "\n", + " mode = None\n", + " max_freq = 0\n", + " for item, count in freq.items():\n", + " if count > max_freq:\n", + " max_freq = count\n", + " mode = item\n", + " return mode" ] }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], + "execution_count": 40, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "....................................................................................................\n", + "----------------------------------------------------------------------\n", + "Ran 100 tests in 0.098s\n", + "\n", + "OK\n" + ] + } + ], "source": [ "# This will test your function \n", "test_mode(mode_counter)" @@ -288,19 +493,65 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 92, "metadata": {}, "outputs": [], "source": [ "def st_dev(list_sd):\n", - "#your code here" + " #claculate the length of the list\n", + " count_len = 0\n", + " for i in list_sd:\n", + " count_len += 1\n", + " \n", + " #calculate the sum of the list\n", + " total = 0\n", + " for num in list_sd:\n", + " total += num\n", + "\n", + " #calculate the mean\n", + " mean = total/count_len\n", + "\n", + " #Calculate variance\n", + " variance_sum = 0\n", + " for x in list_sd:\n", + " variance_sum += (x - mean) ** 2\n", + " variance = variance_sum / (count_len-1)\n", + "\n", + " #Manual square root using Newton-Raphson\n", + " def sqrt(value):\n", + " guess = value/2\n", + " for _ in range(100):\n", + " guess = 0.5 * (guess + value / guess)\n", + " return guess\n", + "\n", + " return sqrt(variance)\n", + "\n" ] }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], + "execution_count": 93, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "............................................." + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + ".......................................................\n", + "----------------------------------------------------------------------\n", + "Ran 100 tests in 0.309s\n", + "\n", + "OK\n" + ] + } + ], "source": [ "# This will test your function \n", "test_stdev(st_dev)" @@ -315,19 +566,44 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 70, "metadata": {}, "outputs": [], "source": [ "def pangram(string):\n", - "#your code here" + " # Step 1: Create alphabet manually\n", + " alphabet = ''\n", + " for i in range(26):\n", + " alphabet += chr(97 + i) # ASCII for 'a' to 'z'\n", + "\n", + " # Step 2: Track which letters appear\n", + " found = ''\n", + " for char in string:\n", + " lower = char.lower()\n", + " if 'a' <= lower <= 'z' and lower not in found:\n", + " found += lower\n", + "\n", + " # Step 3: Check if all letters are found\n", + " return len(found) == 26" ] }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], + "execution_count": 71, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "..............................\n", + "----------------------------------------------------------------------\n", + "Ran 30 tests in 0.025s\n", + "\n", + "OK\n" + ] + } + ], "source": [ "# This will test your function \n", "test_pangram(pangram)" @@ -344,19 +620,52 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 72, "metadata": {}, "outputs": [], "source": [ "def sort_alpha(string):\n", - "#your code here" + " # Step 1: Manually split the string into words\n", + " words = []\n", + " word = ''\n", + " for char in string:\n", + " if char == ',':\n", + " words.append(word)\n", + " word = ''\n", + " else:\n", + " word += char\n", + " words.append(word) # Add the last word\n", + "\n", + " # Step 2: Sort the list\n", + " sorted_words = sorted(words)\n", + "\n", + " # Step 3: Manually rebuild the comma-separated string\n", + " result = ''\n", + " for i in range(len(sorted_words)):\n", + " result += sorted_words[i]\n", + " if i < len(sorted_words) - 1:\n", + " result += ','\n", + "\n", + " return result" ] }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], + "execution_count": 73, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "....................................................................................................\n", + "----------------------------------------------------------------------\n", + "Ran 100 tests in 0.100s\n", + "\n", + "OK\n" + ] + } + ], "source": [ "# This will test your function \n", "test_alpha(sort_alpha)" @@ -371,19 +680,49 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 74, "metadata": {}, "outputs": [], "source": [ "def check_pass(password):\n", - "#your code here" + " if len(password) < 8:\n", + " return False\n", + "\n", + " has_lower = False\n", + " has_upper = False\n", + " has_digit = False\n", + " has_special = False\n", + "\n", + " for char in password:\n", + " if 'a' <= char <= 'z':\n", + " has_lower = True\n", + " elif 'A' <= char <= 'Z':\n", + " has_upper = True\n", + " elif '0' <= char <= '9':\n", + " has_digit = True\n", + " else:\n", + " has_special = True\n", + "\n", + " return has_lower and has_upper and has_digit and has_special" ] }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], + "execution_count": 75, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "....................................................................................................\n", + "----------------------------------------------------------------------\n", + "Ran 100 tests in 0.094s\n", + "\n", + "OK\n" + ] + } + ], "source": [ "# This will test your function \n", "test_pass(check_pass)" @@ -392,7 +731,7 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 3 (ipykernel)", + "display_name": "base", "language": "python", "name": "python3" }, @@ -406,12 +745,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.9.13" - }, - "vscode": { - "interpreter": { - "hash": "aee8b7b246df8f9039afb4144a1f6fd8d2ca17a180786b69acc140d282b71a49" - } + "version": "3.13.5" } }, "nbformat": 4, diff --git a/mod/__pycache__/testing.cpython-313.pyc b/mod/__pycache__/testing.cpython-313.pyc new file mode 100644 index 0000000000000000000000000000000000000000..11d46a49b8a578c9f5ebae625f27893b5f0f5f8a GIT binary patch literal 20223 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 Ws)o(Cc?(=x3$ZiBR@O#A^8Wz+8k&#* literal 0 HcmV?d00001