Skip to content
This repository was archived by the owner on Oct 9, 2018. It is now read-only.
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,208 @@
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Pure Function\n"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"def m(n: int) -> int:\n",
" return 2**n-1\n",
"\n",
"## This result depends only on the parameter, n. \n",
"## There are no changes to global variables and the function doesn't update any mutable data structures."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## A procedural approach!\n",
"\n",
"- Functions generally consist of multiple statements\n",
" - Assignments\n",
" - If-statements\n",
" - While loops\n",
" - Etc."
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Welcome to the barely functional calculator!\n",
"Enter an integer: a\n",
"That is not an integer!\n",
"Enter an integer: a\n",
"That is not an integer!\n",
"Enter an integer: a\n",
"That is not an integer!\n",
"Enter an integer: 8\n",
"Enter an operator (+, -, *, or /): &\n",
"That is not an operator!\n",
"Enter an operator (+, -, *, or /): /\n",
"Enter an integer: 9\n",
"The result is: 0.8888888888888888\n"
]
}
],
"source": [
"OPERATORS = '+', '-', '*', '/'\n",
"\n",
"\n",
"def p_main():\n",
" \n",
" \"\"\"The main flow.\"\"\"\n",
"\n",
" print('Welcome to the barely functional calculator!')\n",
" number1 = p_get_number()\n",
" operator = p_get_operator()\n",
" number2 = p_get_number()\n",
" result = p_calculate(number1, operator, number2)\n",
" print('The result is: %s' % result)\n",
"\n",
"\n",
"def p_get_number():\n",
" \n",
" \"\"\"Reads an integer from the standard input and returns it.\n",
" If a non-integer value is entered, a warning is printed,\n",
" and a new value is read.\"\"\"\n",
" \n",
" while True:\n",
" s = input('Enter an integer: ')\n",
" try:\n",
" return int(s)\n",
" except ValueError:\n",
" print('That is not an integer!')\n",
" \n",
"\n",
"def p_get_operator():\n",
" \n",
" \"\"\"Reads an operator from the standard input and returns it.\n",
" Valid operators are: +, -, *, and /. If an invalid operator\n",
" is entered, a warning is printed, and a new value is read.\"\"\" \n",
" \n",
" while True:\n",
" s = input('Enter an operator (+, -, *, or /): ')\n",
" if s in OPERATORS:\n",
" return s\n",
" print('That is not an operator!')\n",
" \n",
" \n",
"def p_calculate(number1, operator, number2):\n",
" \n",
" \"\"\"Performs a calculation with two numbers and an operator,\n",
" and returns the result.\"\"\"\n",
" \n",
" if operator == '+':\n",
" return number1 + number2\n",
" if operator == '-':\n",
" return number1 - number2\n",
" if operator == '*':\n",
" return number1 * number2\n",
" if operator == '/':\n",
" return number1 / number2\n",
" raise Exception('Invalid operator!')\n",
"\n",
" \n",
"p_main()\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## A functional approach!\n",
"\n",
"- Functions consist of only one expression\n",
"- How can we validate input? (One of the many things we will learn later!)"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Enter and integer: 8\n",
"Enter an operator(+, -, *, /): *\n",
"Enter and integer: 8\n",
"The result is: 64\n"
]
}
],
"source": [
"OPERATORS = '+', '-', '*', '/'\n",
"\n",
"\n",
"def f_get_number():\n",
" return int(input(\"Enter and integer: \"))\n",
"\n",
"\n",
"def f_get_operator():\n",
" return input(\"Enter an operator(+, -, *, /): \")\n",
"\n",
"\n",
"def f_calculate(number1, operator, number2):\n",
" return number1 + number2 if operator == \"+\"\\\n",
" else number1 * number2 if operator == \"*\"\\\n",
" else number1 - number2 if operator == '-'\\\n",
" else number1 / number2 if operator == '/'\\\n",
" else None\n",
"\n",
"def f_main():\n",
" return f_calculate(\n",
" f_get_number(),\n",
" f_get_operator(),\n",
" f_get_number()\n",
" )\n",
" \n",
" \n",
"print('The result is: %s' % f_main())"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"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.6.5"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
Loading