diff --git a/s25/Louis_Lecture_Notes/08_Conditionals1/Lec_08_Conditionals1.ipynb b/s25/Louis_Lecture_Notes/08_Conditionals1/Lec_08_Conditionals1.ipynb new file mode 100644 index 0000000000000000000000000000000000000000..d246547fcd1a54c81a1ad9b0aec100b6f09c6300 --- /dev/null +++ b/s25/Louis_Lecture_Notes/08_Conditionals1/Lec_08_Conditionals1.ipynb @@ -0,0 +1,661 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Warmup" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Warmup 1 -- Creating Functions\n", + "# Create a function that works with the calls to the function at the bottom of this cell.\n", + "# Note: To calculate an interest-only payment, multiply the loan balance by the annual interest rate,\n", + "# and divide by the number of payments in a year.\n", + "\n", + "# TODO: Create Function Here\n", + "\n", + "\n", + "# Function Calls that should work:\n", + "# passing arguments by position\n", + "print(interest_only_payment(50000, 0.04, 12)) # should return approx. $166.66\n", + "# passing arguments by keyword\n", + "print(interest_only_payment(rate=0.04, num_payments=12, balance=50000)) # should also return approx. $166.66\n", + "# Using default values\n", + "print(interest_only_payment()) # should also return approx. $166.66" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "# Warmup 2 -- Calling Functions\n", + "\n", + "def triangle_number(n=1):\n", + " \"\"\"\n", + " Calculates and returns the n-th triangle number.\n", + " The formula for the n-th triangle number is (n^2+n)/2\n", + " A triangle number is a value where you can organize that number of items into a triangle\n", + " starting with a row with 1 item and each successive row has one more than the previous.\n", + " The first 5 triangle numbers are 1, 3, 6, 10, 15\n", + " \"\"\"\n", + " n = int(n)\n", + " ans = int( n * (n+1) / 2 )\n", + " return ans\n", + "\n", + "def triangle_sum(n=1,m=2):\n", + " \"\"\"\n", + " Calculates and returns the sum of two triangle numbers.\n", + " \"\"\"\n", + " ans = triangle_number(n) + triangle_number(m)\n", + " return ans\n", + "\n", + "# TODO: Write and print the output of function calls to the triangle_sum function\n", + "# print out sum of call to triangle_sum using only default arguments\n", + " \n", + "# print out sum of call to triangle_sum using only positional arguments\n", + " \n", + "# print out sum of call to triangle_sum using only keyword arguments\n", + " \n", + "# print out sum of call to triangle_sum using a mix of default, positional and/or keyword arguments\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Warmup 3 --Trace the following code Using the debugger or Python Tutor. At any point as the program executes, you should be able to state what line of code will execute next and what the output will be.\n", + "\n", + "[link](https://pythontutor.com/visualize.html#code=def%20f%28%29%3A%0A%20%20%20%20x%20%3D%201%0A%20%20%20%20print%28x%29%0A%20%20%20%20g%28%29%0A%0Adef%20g%28%29%3A%0A%20%20%20%20x%20%3D%202%0A%20%20%20%20print%28x%29%0A%20%20%20%20h%28%29%0A%0Adef%20h%28%29%3A%0A%20%20%20%20x%20%3D%203%0A%20%20%20%20print%28x%29%0A%0Af%28%29&cumulative=false&curInstr=0&heapPrimitives=nevernest&mode=display&origin=opt-frontend.js&py=3&rawInputLstJSON=%5B%5D&textReferences=false)..." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "def f():\n", + " x = 1\n", + " print(x)\n", + " g()\n", + "\n", + "def g():\n", + " x = 2\n", + " print(x)\n", + " h()\n", + "\n", + "def h():\n", + " x = 3\n", + " print(x)\n", + "\n", + "f()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Warmup 4 -- Let's make some changes to it! [link](https://pythontutor.com/visualize.html#code=x%20%3D%20100%0A%0Adef%20f%28%29%3A%0A%20%20%20%20x%20%3D%201%0A%20%20%20%20print%28x%29%0A%20%20%20%20g%28%29%0A%0Adef%20g%28%29%3A%0A%20%20%20%20x%20%3D%202%0A%20%20%20%20print%28x%29%0A%20%20%20%20h%28%29%0A%0Adef%20h%28%29%3A%0A%20%20%20%20print%28x%29%0A%0Af%28%29&cumulative=false&curInstr=0&heapPrimitives=nevernest&mode=display&origin=opt-frontend.js&py=3&rawInputLstJSON=%5B%5D&textReferences=false)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "x = 100\n", + "\n", + "def f():\n", + " x = 1\n", + " print(x)\n", + " g()\n", + "\n", + "def g():\n", + " x = 2\n", + " print(x)\n", + " h()\n", + "\n", + "def h():\n", + " print(x)\n", + "\n", + "f()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Warmup 5 -- finally [link](https://pythontutor.com/visualize.html#code=x%20%3D%20100%0A%0Adef%20f%28%29%3A%0A%20%20%20%20x%20%3D%201%0A%20%20%20%20print%28x%29%0A%20%20%20%20g%28%29%0A%0Adef%20g%28%29%3A%0A%20%20%20%20global%20x%0A%20%20%20%20x%20%3D%202%0A%20%20%20%20print%28x%29%0A%20%20%20%20h%28%29%0A%0Adef%20h%28%29%3A%0A%20%20%20%20print%28x%29%0A%0Af%28%29&cumulative=false&curInstr=0&heapPrimitives=nevernest&mode=display&origin=opt-frontend.js&py=3&rawInputLstJSON=%5B%5D&textReferences=false)..." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "x = 100\n", + "\n", + "def f():\n", + " x = 1\n", + " print(x)\n", + " g()\n", + "\n", + "def g():\n", + " global x\n", + " x = 2\n", + " print(x)\n", + " h()\n", + "\n", + "def h():\n", + " print(x)\n", + "\n", + "f()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Reminder\n", + "\n", + "Python has two scopes -- global and local. The callstack stores variables in frames. When executing a line of code, the variables in the current local scope and global scope are accessible.\n", + "\n", + "Some Lessons on executing Functions:\n", + "\n", + "1. Functions don't execute unless they are called\n", + "2. Variables created in a function die after function returns\n", + "3. Variables start fresh every time a function is called again\n", + "4. You can't see the variables of other function invocations, even those that call you\n", + "5. You can generally just use global variables inside a function\n", + "6. If you do an assignment to a variable in a function, Python assumes you want it local\n", + "7. Assignment to a variable should be before its use in a function, even if there's a a global variable with the same name\n", + "8. Use a global declaration to prevent Python from creating a local variable when you want a global variable\n", + "9. In Python, arguments are \"passed by value\", meaning reassignments to a parameter don't change the argument outside\n", + "10. It's irrelevant whether the argument (outside) and parameter (inside) have the same variable name\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Conditionals 1\n", + "\n", + "## Reading\n", + "\n", + "* [Downey Ch 5 (\"Floor Division and Modulus\" to \"Nested Conditionals\" and \"Keyboard Input\" to end)](https://greenteapress.com/thinkpython2/html/thinkpython2006.html)\n", + "* [Downey Ch 6 (\"Return Values\" to \"Boolean Functions\")](https://greenteapress.com/thinkpython2/html/thinkpython2007.html)\n", + "* [Python for Everybody, 4.1 - 4.5](https://runestone.academy/ns/books/published//py4e-int/conditional/toctree.html)\n", + "\n", + "## Learning Objectives\n", + "After this lecture you will be able to...\n", + " - write conditional statements\n", + " - using conditional execution ( if )\n", + " - using alternate execution (if/else)\n", + " - using chained conditionals (if/elif/elif/…/else)\n", + " - identify code blocks (indentation layers) in a program\n", + " - count the number of blocks in a segment of code\n", + " - determine the output of code with conditional statements" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## if statement Syntax:\n", + "\n", + "An if statement has the form:\n", + "```python\n", + "if condition:\n", + " #block of code to run if condition is true\n", + "```\n", + "\n", + "The `condition` portion is an expression that evaluates to `True` or `False`. If the condition evaluates to True\n", + "then the indented block of code is executed. If it is false then the indented block of code is skipped.\n", + "\n", + "### Example usage" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Word is short\n" + ] + } + ], + "source": [ + "# Determine if a word is short or not.\n", + "# If it is short, say \"Word is short\" <= 5 characters\n", + "# If it is long, say \"Word is long\"\n", + "word = \"hello\"\n", + "word_length = len(word)\n", + "\n", + "if word_length <= 5:\n", + " print(\"Word is short\")\n", + "if word_length > 5:\n", + " print(\"Word is long\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### You Try\n", + "In the cell below print \"even\" if the inputed value is even" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "num = int(input(\"Enter an integer number\"))\n", + "\n", + "##TODO write an if statement that prints \"even\" if num is holding an even value\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## if-else statement Syntax\n", + "\n", + "An if-else statement has the form:\n", + "\n", + "```python\n", + "if condition:\n", + " # block of code to run if condition is true\n", + "else:\n", + " # block of code to run if condition is false\n", + "```\n", + "\n", + "The `condition` portion is an expression that evaluates to `True` or `False`. If the condition evaluates to True then the first indented block of code is executed. If it is false then the indented block of code after the `else:` is executed.\n", + "\n", + "### Example usage\n", + "\n", + "Bob runs a community bakery. Every day, he recieves a shipment of dough balls, each of which bakes 4 loaves of bread, and he evenly splits the bread among his customers. Some days he may recieve 10 customers, some days 20 customers, and some days none at all!\n", + "\n", + "Below is the code that tells Bob how much bread he gave to each customer." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stdin", + "output_type": "stream", + "text": [ + "How many balls of dough did we recieve? 4\n", + "How many customers were there? 4\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Each customer gets 4.0 loaves of bread.\n" + ] + } + ], + "source": [ + "balls_of_dough = int(input(\"How many balls of dough did we recieve? \"))\n", + "num_customers = int(input(\"How many customers were there? \"))\n", + "bread_baked = balls_of_dough * 4\n", + "\n", + "# If statement to avoid the zero division runtime error\n", + "if num_customers == 0: \n", + " print(\"Sorry! No one showed up. All the bread went to waste.\")\n", + "else: \n", + " bread_per_customer = bread_baked / num_customers\n", + " print(\"Each customer gets\", round(bread_per_customer, 2), \"loaves of bread.\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### You Try\n", + "\n", + "In the cell below write an if-else statement that prints \"you may enter\" or \"entry denied\" depending\n", + "on the value in the `password` variable. The correct value for entry is **CatNipFOREVER**." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "name": "stdin", + "output_type": "stream", + "text": [ + "Enter Password: ········\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "hello\n" + ] + } + ], + "source": [ + "from getpass import getpass\n", + "password = getpass(\"Enter Password:\")\n", + "\n", + "##TODO write an if-else statement that prints \"you may enter\" or \"entry denied\" if they entered\n", + "# the proper password (i.e. if password refers to the value \"CatNipFOREVER\")\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## if-elif statement syntax\n", + "\n", + "An if-elif statment has the form:\n", + "\n", + "```python\n", + "if condition1:\n", + " # code block 1\n", + "elif condition2:\n", + " # code block 2\n", + "elif condition3:\n", + " # code block 3\n", + "...\n", + "elif conditionN:\n", + " # code block N\n", + "else: (this final else portion is optional)\n", + " # code block N+1\n", + "```\n", + "\n", + "If `condition 1` evaluates to `True` then code block 1 is executed. If it is false then `condition2` is evaluated. If it is `True` then code block 2 is executed. If it is false then `condition3` is evaluated. If it is true then code block 3 is executed. This process continues until the final condition (`conditionN`). If it is true then code block N is executed. If it is false then code block N+1 is executed (if present).\n", + "\n", + "Notice that <u>**only one** code block will be executed and if the final else portion is included then **exactly one** code block will be executed.</u>\n", + "\n", + "### Example Usage\n", + "\n", + "**Age Categorizer**\n", + "\n", + "Assume `age` is an int parameter of the `categorize_age()` function, which categorizes the person's age.\n", + "\n", + "All the following bounds are inclusive (meaning you should include both ends)\n", + "\n", + " - Return \"Baby\" if between ages of 0 and 1\n", + " - Return \"Toddler\" if between ages of 2 and 4\n", + " - Return \"Child\" if between ages of 5 and 17\n", + " - Return \"Adult\" if between ages of 18 and 64\n", + " - Return \"Senior\" if between ages of 65 and 125\n", + " - Return \"Not a valid age\" for all other ages.\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 46, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "N/A\n" + ] + } + ], + "source": [ + "def categorize_age(age):\n", + " if age < 0:\n", + " return \"N/A\"\n", + " elif age <= 1:\n", + " return \"Baby\"\n", + " elif age <= 4:\n", + " return \"Toddler\"\n", + " elif age <= 17:\n", + " return \"Child\"\n", + " elif age <= 64:\n", + " return \"Adult\"\n", + " elif age <= 125:\n", + " return \"Senior\"\n", + " elif age > 125:\n", + " return \"N/A\"\n", + "\n", + "# This is a lot of tests! Let's try them incrementally.\n", + "print(categorize_age(-2))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Watch the code run in the [PythonTutor](https://pythontutor.com/visualize.html#code=def%20categorize_age%28age%29%3A%0A%20%20%20%20if%20age%20%3C%200%3A%0A%20%20%20%20%20%20%20%20return%20%22N/A%22%0A%20%20%20%20elif%20age%20%3C%3D%201%3A%0A%20%20%20%20%20%20%20%20return%20%22Baby%22%0A%20%20%20%20elif%20age%20%3C%3D%204%3A%0A%20%20%20%20%20%20%20%20return%20%22Toddler%22%0A%20%20%20%20elif%20age%20%3C%3D%2017%3A%0A%20%20%20%20%20%20%20%20return%20%22Child%22%0A%20%20%20%20elif%20age%20%3C%3D%2064%3A%0A%20%20%20%20%20%20%20%20return%20%22Adult%22%0A%20%20%20%20elif%20age%20%3C%3D%20125%3A%0A%20%20%20%20%20%20%20%20return%20%22Senior%22%0A%20%20%20%20elif%20age%20%3E%20125%3A%0A%20%20%20%20%20%20%20%20return%20%22N/A%22%0A%0Aprint%28categorize_age%28-2%29%29&cumulative=false&heapPrimitives=nevernest&mode=edit&origin=opt-frontend.js&py=311&rawInputLstJSON=%5B%5D&textReferences=false). Notice that the conditions are evaulated one after the other until a condition is found which is true and then that code block is the one that is executed." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### You Try\n", + "\n", + "In the cell below finish writing the `calculate_letter_grade()` function. The input to the function is a percentage (float) and the return value should be a letter grade following these rules:\n", + "\n", + "- \\>= 93 - A\n", + "- \\>= 88 - AB\n", + "- \\>= 80 - B\n", + "- \\>= 75 - BC\n", + "- \\>= 70 - C\n", + "- \\>= 60 - D\n", + "- anything else - F" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "##TODO finish the calculate_letter_grade() function\n", + "def calculate_letter_grade(percentage):\n", + " \"\"\"returns the letter grade for the provided course percentage\"\"\"\n", + " pass\n", + "\n", + "# Should work with the following function call. Try different values\n", + "print(calculate_letter_grade(86.5))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Practice\n", + "\n", + "Let's work through computing a string representation of a date given the year, month, and day.\n", + "\n", + "\n", + "### Date Printer\n", + "\n", + "See the requirements below. We will first break down the problem into smaller problems and right a function for each." + ] + }, + { + "attachments": { + "date%20printer.png": { + "image/png": "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" + } + }, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "" + ] + }, + { + "cell_type": "code", + "execution_count": 48, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Jan\n", + "Mar\n", + "N/A\n", + "N/A\n" + ] + } + ], + "source": [ + "# first function: convert a month (int) into a 3 letter abbreviation or \"N/A\"\n", + "def month_to_str(month): # fruitful function!\n", + " if month == 1:\n", + " return \"Jan\"\n", + " elif month == 2:\n", + " return \"Feb\"\n", + " elif month == 3:\n", + " return \"Mar\"\n", + " else:\n", + " return \"N/A\"\n", + "\n", + "print(month_to_str(1))\n", + "print(month_to_str(3))\n", + "print(month_to_str(15))\n", + "print(month_to_str(-1))" + ] + }, + { + "cell_type": "code", + "execution_count": 59, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "11st\n" + ] + } + ], + "source": [ + "#### second function: convert a day (int) into a string writing '15th', '23rd' or \"N/A\"\n", + "def day_to_str(day):\n", + " \"\"\"Covert a day into a date string with proper ending. \n", + " 16 --> '16th', 23 --> '23rd', \"\"\"\n", + " last_digit = day % 10\n", + " if last_digit == 1:\n", + " return str(day) + \"st\"\n", + " elif last_digit == 2:\n", + " return str(day) + \"nd\"\n", + " elif last_digit == 3:\n", + " return str(day) + \"rd\"\n", + " else: \n", + " return str(day) + \"th\"\n", + "\n", + "# st - ends 1\n", + "# nd - ends 2\n", + "# rd - ends 3\n", + "# th - ends 4-0 \n", + "\n", + "print(day_to_str(11))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# third function: convert a year (int) into a string for year\n", + "# 2021 ---> '21 # return a string with ' and the last 2 digits\n", + "# 1996 ---> 1996 # if year before 2000 return all 4 digits, as a string\n", + "\n", + "def year_to_str(year):\n", + " \"\"\"Convert a year (as an integer) into a string. If the year is < 2000, return the full 4 digits\n", + " Otherwise, return the last 2 digits with a single quote in front\"\"\"\n", + " pass\n", + "\n", + "print(year_to_str(2022))\n", + "print(year_to_str(2004))\n", + "print(year_to_str(2010))\n", + "print(year_to_str(1997))\n", + "print(year_to_str(1462))\n", + "print(year_to_str(181))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# now put it all together\n", + "def format_date(year=2021, month=1, day=1):\n", + " \"\"\"returns a string representing the date, such as Feb 10th of ‘22\"\"\"\n", + " pass\n", + " \n", + "print(format_date())\n", + "print(format_date(2007))\n", + "print(format_date(day=23, year=2006, month=9))\n", + "print(format_date(2022, 2, 11))\n", + "print(format_date(1997, 10, 22))\n", + "print(format_date(1497, 6, 8))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Summary\n", + "\n", + "You have learned about the syntax for the three types of conditional statements and you have practiced writing code using each of them.\n", + "\n", + "- **if** statement\n", + "- **if-else** statement\n", + "- **if-elif** statement\n", + "\n" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.12" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/s25/Louis_Lecture_Notes/08_Conditionals1/Lec_08_Conditionals1_Solution.ipynb b/s25/Louis_Lecture_Notes/08_Conditionals1/Lec_08_Conditionals1_Solution.ipynb new file mode 100644 index 0000000000000000000000000000000000000000..f035557037d606061129d0b19a8d24d7c42fe8b5 --- /dev/null +++ b/s25/Louis_Lecture_Notes/08_Conditionals1/Lec_08_Conditionals1_Solution.ipynb @@ -0,0 +1,827 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Warmup" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "166.66666666666666\n", + "166.66666666666666\n", + "166.66666666666666\n" + ] + } + ], + "source": [ + "# Warmup 1 -- Creating Functions\n", + "# Create a function that works with the calls to the function at the bottom of this cell.\n", + "# Note: To calculate an interest-only payment, multiply the loan balance by the annual interest rate,\n", + "# and divide by the number of payments in a year.\n", + "\n", + "# TODO: Create Function Here\n", + "def interest_only_payment(balance=50000,rate=0.04,num_payments=12):\n", + " ans = balance*rate/num_payments\n", + " return ans\n", + "\n", + "# Function Calls that should work:\n", + "# passing arguments by position\n", + "print(interest_only_payment(50000, 0.04, 12)) # should return approx. $166.66\n", + "# passing arguments by keyword\n", + "print(interest_only_payment(rate=0.04, num_payments=12, balance=50000)) # should also return approx. $166.66\n", + "# Using default values\n", + "print(interest_only_payment()) # should also return approx. $166.66" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "4\n", + "9\n", + "38\n", + "126\n" + ] + } + ], + "source": [ + "# Warmup 2 -- Calling Functions\n", + "\n", + "def triangle_number(n=1):\n", + " \"\"\"\n", + " Calculates and returns the n-th triangle number.\n", + " The formula for the n-th triangle number is (n^2+n)/2\n", + " A triangle number is a value where you can organize that number of items into a triangle\n", + " starting with a row with 1 item and each successive row has one more than the previous.\n", + " The first 5 triangle numbers are 1, 3, 6, 10, 15\n", + " \"\"\"\n", + " n = int(n)\n", + " ans = int( n * (n+1) / 2 )\n", + " return ans\n", + "\n", + "def triangle_sum(n=1,m=2):\n", + " \"\"\"\n", + " Calculates and returns the sum of two triangle numbers.\n", + " \"\"\"\n", + " ans = triangle_number(n) + triangle_number(m)\n", + " return ans\n", + "\n", + "# TODO: Write and print the output of function calls to the triangle_sum function\n", + "# print out sum of call to triangle_sum using only default arguments\n", + "print(triangle_sum())\n", + "# print out sum of call to triangle_sum using only positional arguments\n", + "print(triangle_sum(2,3))\n", + "# print out sum of call to triangle_sum using only keyword arguments\n", + "print(triangle_sum(m=4,n=7))\n", + "# print out sum of call to triangle_sum using a mix of default, positional and/or keyword arguments\n", + "print(triangle_sum(6,m=14))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Warmup 3 --Trace the following code Using the debugger or Python Tutor. At any point as the program executes, you should be able to state what line of code will execute next and what the output will be.\n", + "\n", + "[link](https://pythontutor.com/visualize.html#code=def%20f%28%29%3A%0A%20%20%20%20x%20%3D%201%0A%20%20%20%20print%28x%29%0A%20%20%20%20g%28%29%0A%0Adef%20g%28%29%3A%0A%20%20%20%20x%20%3D%202%0A%20%20%20%20print%28x%29%0A%20%20%20%20h%28%29%0A%0Adef%20h%28%29%3A%0A%20%20%20%20x%20%3D%203%0A%20%20%20%20print%28x%29%0A%0Af%28%29&cumulative=false&curInstr=0&heapPrimitives=nevernest&mode=display&origin=opt-frontend.js&py=3&rawInputLstJSON=%5B%5D&textReferences=false)..." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "1\n", + "2\n", + "3\n" + ] + } + ], + "source": [ + "def f():\n", + " x = 1\n", + " print(x)\n", + " g()\n", + "\n", + "def g():\n", + " x = 2\n", + " print(x)\n", + " h()\n", + "\n", + "def h():\n", + " x = 3\n", + " print(x)\n", + "\n", + "f()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Warmup 4 -- Let's make some changes to it! [link](https://pythontutor.com/visualize.html#code=x%20%3D%20100%0A%0Adef%20f%28%29%3A%0A%20%20%20%20x%20%3D%201%0A%20%20%20%20print%28x%29%0A%20%20%20%20g%28%29%0A%0Adef%20g%28%29%3A%0A%20%20%20%20x%20%3D%202%0A%20%20%20%20print%28x%29%0A%20%20%20%20h%28%29%0A%0Adef%20h%28%29%3A%0A%20%20%20%20print%28x%29%0A%0Af%28%29&cumulative=false&curInstr=0&heapPrimitives=nevernest&mode=display&origin=opt-frontend.js&py=3&rawInputLstJSON=%5B%5D&textReferences=false)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "1\n", + "2\n", + "100\n" + ] + } + ], + "source": [ + "x = 100\n", + "\n", + "def f():\n", + " x = 1\n", + " print(x)\n", + " g()\n", + "\n", + "def g():\n", + " x = 2\n", + " print(x)\n", + " h()\n", + "\n", + "def h():\n", + " print(x)\n", + "\n", + "f()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Warmup 5 -- finally [link](https://pythontutor.com/visualize.html#code=x%20%3D%20100%0A%0Adef%20f%28%29%3A%0A%20%20%20%20x%20%3D%201%0A%20%20%20%20print%28x%29%0A%20%20%20%20g%28%29%0A%0Adef%20g%28%29%3A%0A%20%20%20%20global%20x%0A%20%20%20%20x%20%3D%202%0A%20%20%20%20print%28x%29%0A%20%20%20%20h%28%29%0A%0Adef%20h%28%29%3A%0A%20%20%20%20print%28x%29%0A%0Af%28%29&cumulative=false&curInstr=0&heapPrimitives=nevernest&mode=display&origin=opt-frontend.js&py=3&rawInputLstJSON=%5B%5D&textReferences=false)..." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "1\n", + "2\n", + "2\n" + ] + } + ], + "source": [ + "x = 100\n", + "\n", + "def f():\n", + " x = 1\n", + " print(x)\n", + " g()\n", + "\n", + "def g():\n", + " global x\n", + " x = 2\n", + " print(x)\n", + " h()\n", + "\n", + "def h():\n", + " print(x)\n", + "\n", + "f()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Reminder\n", + "\n", + "Python has two scopes -- global and local. The callstack stores variables in frames. When executing a line of code, the variables in the current local scope and global scope are accessible.\n", + "\n", + "Some Lessons on executing Functions:\n", + "\n", + "1. Functions don't execute unless they are called\n", + "2. Variables created in a function die after function returns\n", + "3. Variables start fresh every time a function is called again\n", + "4. You can't see the variables of other function invocations, even those that call you\n", + "5. You can generally just use global variables inside a function\n", + "6. If you do an assignment to a variable in a function, Python assumes you want it local\n", + "7. Assignment to a variable should be before its use in a function, even if there's a a global variable with the same name\n", + "8. Use a global declaration to prevent Python from creating a local variable when you want a global variable\n", + "9. In Python, arguments are \"passed by value\", meaning reassignments to a parameter don't change the argument outside\n", + "10. It's irrelevant whether the argument (outside) and parameter (inside) have the same variable name\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Conditionals 1\n", + "\n", + "## Reading\n", + "\n", + "* [Downey Ch 5 (\"Floor Division and Modulus\" to \"Nested Conditionals\" and \"Keyboard Input\" to end)](https://greenteapress.com/thinkpython2/html/thinkpython2006.html)\n", + "* [Downey Ch 6 (\"Return Values\" to \"Boolean Functions\")](https://greenteapress.com/thinkpython2/html/thinkpython2007.html)\n", + "* [Python for Everybody, 4.1 - 4.5](https://runestone.academy/ns/books/published//py4e-int/conditional/toctree.html)\n", + "\n", + "## Learning Objectives\n", + "After this lecture you will be able to...\n", + " - write conditional statements\n", + " - using conditional execution ( if )\n", + " - using alternate execution (if/else)\n", + " - using chained conditionals (if/elif/elif/…/else)\n", + " - identify code blocks (indentation layers) in a program\n", + " - count the number of blocks in a segment of code\n", + " - determine the output of code with conditional statements" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## if statement Syntax:\n", + "\n", + "An if statement has the form:\n", + "```python\n", + "if condition:\n", + " #block of code to run if condition is true\n", + "```\n", + "\n", + "The `condition` portion is an expression that evaluates to `True` or `False`. If the condition evaluates to True\n", + "then the indented block of code is executed. If it is false then the indented block of code is skipped.\n", + "\n", + "### Example usage" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Word is short\n" + ] + } + ], + "source": [ + "# Determine if a word is short or not.\n", + "# If it is short, say \"Word is short\" <= 5 characters\n", + "# If it is long, say \"Word is long\"\n", + "word = \"hello\"\n", + "word_length = len(word)\n", + "\n", + "if word_length <= 5:\n", + " print(\"Word is short\")\n", + "if word_length > 5:\n", + " print(\"Word is long\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### You Try\n", + "In the cell below print \"even\" if the inputed value is even" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stdin", + "output_type": "stream", + "text": [ + "Enter an integer number 4\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "even\n" + ] + } + ], + "source": [ + "num = int(input(\"Enter an integer number\"))\n", + "\n", + "##TODO write an if statement that prints \"even\" if num is holding an even value\n", + "if num%2==0:\n", + " print(\"even\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## if-else statement Syntax\n", + "\n", + "An if-else statement has the form:\n", + "\n", + "```python\n", + "if condition:\n", + " # block of code to run if condition is true\n", + "else:\n", + " # block of code to run if condition is false\n", + "```\n", + "\n", + "The `condition` portion is an expression that evaluates to `True` or `False`. If the condition evaluates to True then the first indented block of code is executed. If it is false then the indented block of code after the `else:` is executed.\n", + "\n", + "### Example usage\n", + "\n", + "Bob runs a community bakery. Every day, he recieves a shipment of dough balls, each of which bakes 4 loaves of bread, and he evenly splits the bread among his customers. Some days he may recieve 10 customers, some days 20 customers, and some days none at all!\n", + "\n", + "Below is the code that tells Bob how much bread he gave to each customer." + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stdin", + "output_type": "stream", + "text": [ + "How many balls of dough did we recieve? 3\n", + "How many customers were there? 8\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Each customer gets 1.5 loaves of bread.\n" + ] + } + ], + "source": [ + "balls_of_dough = int(input(\"How many balls of dough did we recieve? \"))\n", + "num_customers = int(input(\"How many customers were there? \"))\n", + "bread_baked = balls_of_dough * 4\n", + "\n", + "# If statement to avoid the zero division runtime error\n", + "if num_customers == 0: \n", + " print(\"Sorry! No one showed up. All the bread went to waste.\")\n", + "else: \n", + " bread_per_customer = bread_baked / num_customers\n", + " print(\"Each customer gets\", round(bread_per_customer, 2), \"loaves of bread.\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### You Try\n", + "\n", + "In the cell below write an if-else statement that prints \"you may enter\" or \"entry denied\" depending\n", + "on the value in the `password` variable. The correct value for entry is **CatNipFOREVER**." + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "name": "stdin", + "output_type": "stream", + "text": [ + "Enter Password: ········\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "entry denied\n" + ] + } + ], + "source": [ + "from getpass import getpass\n", + "password = getpass(\"Enter Password:\")\n", + "\n", + "##TODO write an if-else statement that prints \"you may enter\" or \"entry denied\" if they entered\n", + "# the proper password (i.e. if password refers to the value \"CatNipFOREVER\")\n", + "if password==\"CatNipFOREVER\":\n", + " print(\"you may enter\")\n", + "else:\n", + " print(\"entry denied\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## if-elif statement syntax\n", + "\n", + "An if-elif statment has the form:\n", + "\n", + "```python\n", + "if condition1:\n", + " # code block 1\n", + "elif condition2:\n", + " # code block 2\n", + "elif condition3:\n", + " # code block 3\n", + "...\n", + "elif conditionN:\n", + " # code block N\n", + "else: (this final else portion is optional)\n", + " # code block N+1\n", + "```\n", + "\n", + "If `condition 1` evaluates to `True` then code block 1 is executed. If it is false then `condition2` is evaluated. If it is `True` then code block 2 is executed. If it is false then `condition3` is evaluated. If it is true then code block 3 is executed. This process continues until the final condition (`conditionN`). If it is true then code block N is executed. If it is false then code block N+1 is executed (if present).\n", + "\n", + "Notice that <u>**only one** code block will be executed and if the final else portion is included then **exactly one** code block will be executed.</u>\n", + "\n", + "### Example Usage\n", + "\n", + "**Age Categorizer**\n", + "\n", + "Assume `age` is an int parameter of the `categorize_age()` function, which categorizes the person's age.\n", + "\n", + "All the following bounds are inclusive (meaning you should include both ends)\n", + "\n", + " - Return \"Baby\" if between ages of 0 and 1\n", + " - Return \"Toddler\" if between ages of 2 and 4\n", + " - Return \"Child\" if between ages of 5 and 17\n", + " - Return \"Adult\" if between ages of 18 and 64\n", + " - Return \"Senior\" if between ages of 65 and 125\n", + " - Return \"Not a valid age\" for all other ages.\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "N/A\n", + "Baby\n", + "Toddler\n", + "Child\n", + "Adult\n", + "Senior\n", + "N/A\n" + ] + } + ], + "source": [ + "def categorize_age(age):\n", + " if age < 0:\n", + " return \"N/A\"\n", + " elif age <= 1:\n", + " return \"Baby\"\n", + " elif age <= 4:\n", + " return \"Toddler\"\n", + " elif age <= 17:\n", + " return \"Child\"\n", + " elif age <= 64:\n", + " return \"Adult\"\n", + " elif age <= 125:\n", + " return \"Senior\"\n", + " elif age > 125:\n", + " return \"N/A\"\n", + "\n", + "# This is a lot of tests! Let's try them incrementally.\n", + "print(categorize_age(-2))\n", + "print(categorize_age(0))\n", + "print(categorize_age(3))\n", + "print(categorize_age(15))\n", + "print(categorize_age(64))\n", + "print(categorize_age(65))\n", + "print(categorize_age(126))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Watch the code run in the [PythonTutor](https://pythontutor.com/visualize.html#code=def%20categorize_age%28age%29%3A%0A%20%20%20%20if%20age%20%3C%200%3A%0A%20%20%20%20%20%20%20%20return%20%22N/A%22%0A%20%20%20%20elif%20age%20%3C%3D%201%3A%0A%20%20%20%20%20%20%20%20return%20%22Baby%22%0A%20%20%20%20elif%20age%20%3C%3D%204%3A%0A%20%20%20%20%20%20%20%20return%20%22Toddler%22%0A%20%20%20%20elif%20age%20%3C%3D%2017%3A%0A%20%20%20%20%20%20%20%20return%20%22Child%22%0A%20%20%20%20elif%20age%20%3C%3D%2064%3A%0A%20%20%20%20%20%20%20%20return%20%22Adult%22%0A%20%20%20%20elif%20age%20%3C%3D%20125%3A%0A%20%20%20%20%20%20%20%20return%20%22Senior%22%0A%20%20%20%20elif%20age%20%3E%20125%3A%0A%20%20%20%20%20%20%20%20return%20%22N/A%22%0A%0Aprint%28categorize_age%28-2%29%29&cumulative=false&heapPrimitives=nevernest&mode=edit&origin=opt-frontend.js&py=311&rawInputLstJSON=%5B%5D&textReferences=false). Notice that the conditions are evaulated one after the other until a condition is found which is true and then that code block is the one that is executed." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### You Try\n", + "\n", + "In the cell below finish writing the `calculate_letter_grade()` function. The input to the function is a percentage (float) and the return value should be a letter grade following these rules:\n", + "\n", + "- \\>= 93 - A\n", + "- \\>= 88 - AB\n", + "- \\>= 80 - B\n", + "- \\>= 75 - BC\n", + "- \\>= 70 - C\n", + "- \\>= 60 - D\n", + "- anything else - F" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "B\n" + ] + } + ], + "source": [ + "##TODO finish the calculate_letter_grade() function\n", + "def calculate_letter_grade(percentage):\n", + " \"\"\"returns the letter grade for the provided course percentage\"\"\"\n", + " if percentage >= 93:\n", + " return \"A\"\n", + " elif percentage >= 88:\n", + " return \"AB\"\n", + " elif percentage >= 80:\n", + " return \"B\"\n", + " elif percentage >= 75:\n", + " return \"BC\"\n", + " elif percentage >= 70:\n", + " return \"C\"\n", + " elif percentage >= 60:\n", + " return \"D\"\n", + " else:\n", + " return \"F\"\n", + "\n", + "# Should work with the following function call. Try different values\n", + "print(calculate_letter_grade(86.5))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Practice\n", + "\n", + "Let's work through computing a string representation of a date given the year, month, and day.\n", + "\n", + "\n", + "### Date Printer\n", + "\n", + "See the requirements below. We will first break down the problem into smaller problems and right a function for each." + ] + }, + { + "attachments": { + "date%20printer.png": { + "image/png": "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" + } + }, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Jan\n", + "Mar\n", + "Jul\n", + "N/A\n", + "N/A\n" + ] + } + ], + "source": [ + "# first function: convert a month (int) into a 3 letter abbreviation or \"N/A\"\n", + "def month_to_str(month): # fruitful function!\n", + " if month == 1:\n", + " return \"Jan\"\n", + " elif month == 2:\n", + " return \"Feb\"\n", + " elif month == 3:\n", + " return \"Mar\"\n", + " elif month == 4:\n", + " return \"Apr\"\n", + " elif month == 5:\n", + " return \"May\"\n", + " elif month == 6:\n", + " return \"Jun\"\n", + " elif month == 7:\n", + " return \"Jul\"\n", + " elif month == 8:\n", + " return \"Aug\"\n", + " elif month == 9:\n", + " return \"Sep\"\n", + " elif month == 10:\n", + " return \"Oct\"\n", + " elif month == 11:\n", + " return \"Nov\"\n", + " elif month == 12:\n", + " return \"Dec\"\n", + " else:\n", + " return \"N/A\"\n", + "\n", + "print(month_to_str(1))\n", + "print(month_to_str(3))\n", + "print(month_to_str(7))\n", + "print(month_to_str(15))\n", + "print(month_to_str(-1))" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "11st\n", + "4th\n", + "22nd\n", + "43rd\n" + ] + } + ], + "source": [ + "#### second function: convert a day (int) into a string writing '15th', '23rd' or \"N/A\"\n", + "def day_to_str(day):\n", + " \"\"\"Covert a day into a date string with proper ending. \n", + " 16 --> '16th', 23 --> '23rd', \"\"\"\n", + " last_digit = day % 10\n", + " if last_digit == 1:\n", + " return str(day) + \"st\"\n", + " elif last_digit == 2:\n", + " return str(day) + \"nd\"\n", + " elif last_digit == 3:\n", + " return str(day) + \"rd\"\n", + " else: \n", + " return str(day) + \"th\"\n", + "\n", + "# st - ends 1\n", + "# nd - ends 2\n", + "# rd - ends 3\n", + "# th - ends 4-0 \n", + "\n", + "print(day_to_str(11))\n", + "print(day_to_str(4))\n", + "print(day_to_str(22))\n", + "print(day_to_str(43))" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "'22\n", + "'04\n", + "'10\n", + "1997\n", + "1462\n", + "181\n" + ] + } + ], + "source": [ + "# third function: convert a year (int) into a string for year\n", + "# 2021 ---> '21 # return a string with ' and the last 2 digits\n", + "# 1996 ---> 1996 # if year before 2000 return all 4 digits, as a string\n", + "\n", + "def year_to_str(year):\n", + " \"\"\"Convert a year (as an integer) into a string. If the year is < 2000, return the full 4 digits\n", + " Otherwise, return the last 2 digits with a single quote in front\"\"\"\n", + " if year < 2000:\n", + " return str(year)\n", + " else:\n", + " last_two = str(year % 100)\n", + " if len(last_two) < 2:\n", + " last_two = '0'+last_two\n", + " return \"'\"+last_two\n", + "\n", + "print(year_to_str(2022))\n", + "print(year_to_str(2004))\n", + "print(year_to_str(2010))\n", + "print(year_to_str(1997))\n", + "print(year_to_str(1462))\n", + "print(year_to_str(181))" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Jan 1st of '21\n", + "Jan 1st of '07\n", + "Sep 23rd of '06\n", + "Feb 11st of '22\n", + "Oct 22nd of 1997\n", + "Jun 8th of 1497\n" + ] + } + ], + "source": [ + "# now put it all together\n", + "def format_date(year=2021, month=1, day=1):\n", + " \"\"\"returns a string representing the date, such as Feb 10th of ‘22\"\"\"\n", + " return month_to_str(month)+\" \"+day_to_str(day)+\" of \"+year_to_str(year)\n", + " \n", + "print(format_date())\n", + "print(format_date(2007))\n", + "print(format_date(day=23, year=2006, month=9))\n", + "print(format_date(2022, 2, 11))\n", + "print(format_date(1997, 10, 22))\n", + "print(format_date(1497, 6, 8))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Summary\n", + "\n", + "You have learned about the syntax for the three types of conditional statements and you have practiced writing code using each of them.\n", + "\n", + "- **if** statement\n", + "- **if-else** statement\n", + "- **if-elif** statement\n", + "\n" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.12" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +}