learning_python/zero_2_hundred/zero_2_hundred.ipynb

1088 lines
46 KiB
Plaintext
Raw Permalink Normal View History

2021-09-25 23:59:32 +00:00
{
"cells": [
{
"cell_type": "markdown",
"id": "auburn-huntington",
"metadata": {},
"source": [
"# Getting started with Python / Interactive Python with Jupyter Lab\n",
"\n",
"## Installing miniconda\n",
"\n",
"- https://docs.conda.io/en/latest/miniconda.html\n",
"- https://youtu.be/YqUb9XALnDE?t=209"
]
},
{
"cell_type": "markdown",
"id": "labeled-unknown",
"metadata": {},
"source": [
"### Printing and Variable"
]
},
{
"cell_type": "code",
"execution_count": 12,
"id": "asian-catalog",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Hello World\n"
]
}
],
"source": [
"print(\"Hello World\")"
]
},
{
"cell_type": "code",
"execution_count": 13,
"id": "robust-customs",
"metadata": {},
"outputs": [],
"source": [
"# comments are done like this"
]
},
{
"cell_type": "code",
"execution_count": 16,
"id": "chicken-broadcast",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"10\n"
]
}
],
"source": [
"number = 10\n",
"string = \"This is a string\"\n",
"\n",
"print(number)"
]
},
{
"cell_type": "code",
"execution_count": 17,
"id": "suburban-august",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"This is a string\n"
]
}
],
"source": [
"print(string)"
]
},
{
"cell_type": "code",
"execution_count": 18,
"id": "dramatic-brand",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"number: 10, and string: This is a string\n"
]
}
],
"source": [
"print(f\"number: {number}, and string: {string}\")"
]
},
{
"cell_type": "code",
"execution_count": 19,
"id": "female-spain",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"<class 'int'> and <class 'str'>\n"
]
}
],
"source": [
"print(f\"{type(number)} and {type(string)}\")"
]
},
{
"cell_type": "markdown",
"id": "immediate-worst",
"metadata": {},
"source": [
"### Functions"
]
},
{
"cell_type": "code",
"execution_count": 20,
"id": "favorite-damages",
"metadata": {},
"outputs": [],
"source": [
"# Fibonacci sequence: 0, 1, 1, 2, 3, 5, 8...\n",
"\n",
"def f(n: int) -> int:\n",
" \"\"\"\n",
" Fibonacci sequence\n",
" ---\n",
" params\n",
" n (int) number requested in sequence\n",
" \n",
" returns\n",
" interger in fibonacci sequence\n",
" \"\"\"\n",
" if n == 0:\n",
" return 0\n",
" if n == 1:\n",
" return 1\n",
" if n == 2:\n",
" return 1\n",
" if n >= 3:\n",
" return f(n-1) + f(n-2)"
]
},
{
"cell_type": "code",
"execution_count": 21,
"id": "reliable-nudist",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"\u001b[0;31mSignature:\u001b[0m \u001b[0mf\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mn\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mint\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m->\u001b[0m \u001b[0mint\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;31mDocstring:\u001b[0m\n",
"Fibonacci sequence\n",
"---\n",
"params\n",
"n (int) number requested in sequence\n",
"\n",
"returns\n",
"interger in fibonacci sequence\n",
"\u001b[0;31mFile:\u001b[0m ~/JupyterlabProjects/Saxon/<ipython-input-20-d0995f361bf4>\n",
"\u001b[0;31mType:\u001b[0m function\n"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"?f"
]
},
{
"cell_type": "markdown",
"id": "leading-literacy",
"metadata": {},
"source": [
"### More data type - Lists"
]
},
{
"cell_type": "code",
"execution_count": 22,
"id": "alternate-fault",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"range(0, 10)"
]
},
"execution_count": 22,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"r = range(10)\n",
"r"
]
},
{
"cell_type": "code",
"execution_count": 24,
"id": "tutorial-buying",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]"
]
},
"execution_count": 24,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"lst = list(r)\n",
"lst"
]
},
{
"cell_type": "code",
"execution_count": 25,
"id": "south-czech",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0"
]
},
"execution_count": 25,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"lst[0]"
]
},
{
"cell_type": "code",
"execution_count": 26,
"id": "administrative-class",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[1, 2]"
]
},
"execution_count": 26,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"lst[1:3]"
]
},
{
"cell_type": "code",
"execution_count": 31,
"id": "grateful-addiction",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"9"
]
},
"execution_count": 31,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"lst[-1]"
]
},
{
"cell_type": "code",
"execution_count": 28,
"id": "brown-density",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]"
]
},
"execution_count": 28,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"lst[::-1]"
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "exciting-fundamental",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"3\n",
"4\n",
"0.5\n"
]
}
],
"source": [
"def f1(x: int) -> int:\n",
" return x + 1\n",
"\n",
"def f2(x: int) -> int:\n",
" return x ** 2\n",
"\n",
"def f3(x: int) -> float:\n",
" return 1 / x\n",
"\n",
"funcs = [f1, f2, f3]\n",
"\n",
"for func in funcs:\n",
" print(func(2))"
]
},
{
"cell_type": "code",
"execution_count": 29,
"id": "together-lancaster",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"0, 1, 1, 2, 3, 5, 8, 13, 21, 34, "
]
}
],
"source": [
"for i in lst:\n",
" output = f(i)\n",
" print(output, end=\", \")"
]
},
{
"cell_type": "code",
"execution_count": 30,
"id": "governmental-karma",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[0, 1, 1, 2, 3, 5, 8, 13, 21, 34]"
]
},
"execution_count": 30,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"output = []\n",
"for i in lst:\n",
" output.append(f(i))\n",
"output"
]
},
{
"cell_type": "code",
"execution_count": 11,
"id": "latter-plumbing",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[0, 1, 1, 2, 3, 5, 8, 13, 21, 34]"
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"[f(i) for i in rng]"
]
},
{
"cell_type": "markdown",
"id": "offensive-documentation",
"metadata": {},
"source": [
"### Importing libraries"
]
},
{
"cell_type": "code",
"execution_count": 32,
"id": "organizational-easter",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"288 ns ± 246 ns per loop (mean ± std. dev. of 7 runs, 1 loop each)\n",
"302 ns ± 252 ns per loop (mean ± std. dev. of 7 runs, 1 loop each)\n",
"304 ns ± 204 ns per loop (mean ± std. dev. of 7 runs, 1 loop each)\n",
"623 ns ± 288 ns per loop (mean ± std. dev. of 7 runs, 1 loop each)\n",
"957 ns ± 326 ns per loop (mean ± std. dev. of 7 runs, 1 loop each)\n",
"2.39 µs ± 880 ns per loop (mean ± std. dev. of 7 runs, 1 loop each)\n",
"2.28 µs ± 424 ns per loop (mean ± std. dev. of 7 runs, 1 loop each)\n",
"3.56 µs ± 411 ns per loop (mean ± std. dev. of 7 runs, 1 loop each)\n",
"5.62 µs ± 447 ns per loop (mean ± std. dev. of 7 runs, 1 loop each)\n",
"9.05 µs ± 598 ns per loop (mean ± std. dev. of 7 runs, 1 loop each)\n",
"14.4 µs ± 623 ns per loop (mean ± std. dev. of 7 runs, 1 loop each)\n",
"23.9 µs ± 2.03 µs per loop (mean ± std. dev. of 7 runs, 1 loop each)\n",
"36.9 µs ± 534 ns per loop (mean ± std. dev. of 7 runs, 1 loop each)\n",
"61.1 µs ± 3.57 µs per loop (mean ± std. dev. of 7 runs, 1 loop each)\n",
"96.1 µs ± 506 ns per loop (mean ± std. dev. of 7 runs, 1 loop each)\n",
"155 µs ± 677 ns per loop (mean ± std. dev. of 7 runs, 1 loop each)\n",
"252 µs ± 5.16 µs per loop (mean ± std. dev. of 7 runs, 1 loop each)\n",
"485 µs ± 183 µs per loop (mean ± std. dev. of 7 runs, 1 loop each)\n",
"807 µs ± 125 µs per loop (mean ± std. dev. of 7 runs, 1 loop each)\n",
"1.45 ms ± 245 µs per loop (mean ± std. dev. of 7 runs, 1 loop each)\n",
"1.84 ms ± 152 µs per loop (mean ± std. dev. of 7 runs, 1 loop each)\n",
"3.27 ms ± 529 µs per loop (mean ± std. dev. of 7 runs, 1 loop each)\n",
"4.65 ms ± 601 µs per loop (mean ± std. dev. of 7 runs, 1 loop each)\n",
"7.25 ms ± 602 µs per loop (mean ± std. dev. of 7 runs, 1 loop each)\n",
"12 ms ± 1.27 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)\n",
"18.7 ms ± 1.36 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)\n",
"30.7 ms ± 3.21 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)\n",
"63.5 ms ± 22.9 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)\n",
"115 ms ± 38.6 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)\n",
"130 ms ± 9.28 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)\n",
"251 ms ± 50.4 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)\n",
"392 ms ± 73.8 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)\n",
"629 ms ± 104 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)\n"
]
}
],
"source": [
"times = []\n",
"for i in range(33):\n",
" t = %timeit -n1 -o f(i)\n",
" times.append(t.best)"
]
},
{
"cell_type": "code",
"execution_count": 34,
"id": "demanding-circulation",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>f</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>1.580001e-07</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>1.819999e-07</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>1.979997e-07</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>4.560002e-07</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>7.710000e-07</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" f\n",
"0 1.580001e-07\n",
"1 1.819999e-07\n",
"2 1.979997e-07\n",
"3 4.560002e-07\n",
"4 7.710000e-07"
]
},
"execution_count": 34,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"import pandas as pd\n",
"\n",
"df = pd.DataFrame(data=times, columns=[\"f\"])\n",
"df.head()"
]
},
{
"cell_type": "code",
"execution_count": 36,
"id": "complete-warren",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAYIAAAEWCAYAAABrDZDcAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8vihELAAAACXBIWXMAAAsTAAALEwEAmpwYAAAfg0lEQVR4nO3de3xcdZ3/8dcnk6RpLr2nkDZtU0oLbbkptbi4K/wA/YFKYRUVVlf5rS6i8lB/7D4eou4Ptf7UXd319hAXwcUfKlgQXa1uEbXUC65KA5ZL0hZCaS6kNGlCmzZprvP5/TEz7ZDmMk1ycs7MvJ+PxzxmzpkzZz6ZNvPO+X6/53vM3RERkfxVEHYBIiISLgWBiEieUxCIiOQ5BYGISJ5TEIiI5DkFgYhInlMQiEySmX3czL4Vdh0iE2U6j0AEzGwvcAowlLZ6lbu3DtvuYuB77l49bcWJBKww7AJEIuRKd/9V2EWITDc1DYlkyMzKgAeBRWZ2JHlbZGafMrPvJbepMTM3s/9lZs1m9pKZ3WhmrzKzJ83soJl9fdh+/87Mdia3fcjMloXx80n+UhCIZMjdu4ErgFZ3L0/eWkfZ/AJgJfB24CvAJ4DLgLXA28zsIgAzuxr4OPBmoBL4HfD9AH8MkRMoCESO+3HyL/aDZvbjSe7rM+7e6+6/ALqB77t7m7u/QOLL/hXJ7d4HfN7dd7r7IPA54DwdFch0UhCIHHe1u89J3q6e5L72pz0+OsJyefLxMuCrqQACOgEDFk/y/UUyps5ikZMz1cPsmoHPuvs9U7xfkYzpiEDk5OwH5pvZ7Cna3+3Ax8xsLYCZzTazt07RvkUyoiMCkZPg7rvM7PvAHjOLAWsmub//NLNyYFOyX+AQ8EvgB5OvViQzOqFMRCTPqWlIRCTPKQhERPKcgkBEJM8pCERE8lzWjRpasGCB19TUhF2GiEhWeeyxxw64e+VIz2VdENTU1FBbWxt2GSIiWcXMGkd7Tk1DIiJ5TkEgIpLnFAQiInku6/oIRjIwMEBLSwu9vb1hl3KCkpISqqurKSoqCrsUEZER5UQQtLS0UFFRQU1NDWYWdjnHuDsdHR20tLSwfPnysMsRERlRTjQN9fb2Mn/+/EiFAICZMX/+/EgeqYiIpOREEACRC4GUqNYlIpKSM0EgIpKrBobifH7LTp5oPhjI/hUEU+RrX/saq1ev5h3veEfYpYhIjmk9eJRv/nYPu/cfDmT/OdFZHAXf+MY3ePDBB9UpLCJTrrGjB4Bl80oD2b+OCKbAjTfeyJ49e9iwYQNf/vKXwy5HRHJMY2cyCOaXBbL/nDsi+PRP66hv7ZrSfa5ZNItPXrl21Odvv/12fv7zn7Nt2zYWLFgwpe8tItLc2UNxYQELK2YEsn8dEYiIRFxjRzdL55VSUBDMKMScOyIY6y93EZFs1NjRE1j/AAR8RGBml5vZbjNrMLNbRnj+ejNrN7Mdydt7g6xHRCTbuDvNnT0snR9cEAR2RGBmMeA24HVAC7DdzDa7e/2wTe9z95uCqkNEJJt1dPfT3T/E0gCPCIJsGloPNLj7HgAz2wRcBQwPgpywd+/esEsQkRx0bOhogEcEQTYNLQaa05ZbkuuGe4uZPWlmD5jZkpF2ZGY3mFmtmdW2t7cHUauISCQ1dXYDsHReMENHIdggGKl724ct/xSocfdzgF8Bd4+0I3e/w93Xufu6ysoRL7kpIpKTmjqOYgbVc2cG9h5BBkELkP4XfjXQmr6Bu3e4e19y8U7g/Im+mfvwjImGqNYlItmhsbObU2eVUFIUC+w9ggyC7cBKM1tuZsXAtcDm9A3MrCptcQOwcyJvVFJSQkdHR+S+dFPXIygpKQm7FBHJUk0dPYF2FEOAncXuPmhmNwEPATHgLnevM7ONQK27bwY+ZGYbgEGgE7h+Iu9VXV1NS0sLUew/SF2hTERkIpo6e7j4jGCbxAM9oczdtwBbhq27Ne3xx4CPTfZ9ioqKNNmbiOSco/1DtB3uC/yIQFNMiIhEVFNysrmlAU02l6IgEBGJqMaOxNDRIKeXAAWBiEhkHTsiUBCIiOSnps4eKkoKmVNaFOj7KAhERCKqsaOHZfNLMQtm+ukUBYGISEQ1dfawLMCpJVIUBCIiETQUd1pe6mFJwP0DoCAQEYmkfYeOMjDkgc46mqIgEBGJoKbU9NM6IhARyU/HTyZTEIiI5KXGzh6KYkbV7OCmn05REIiIRFBTRw/Vc0uJFQQ7dBQUBCIikdTY2R34GcUpCgIRkQiajusQpCgIREQi5mBPP129g9MydBQUBCIikdPYMT2TzaUoCEREIiY1dHRZwNchSFEQiIhETCoIlswLfugoKAhERCKnsaObyooZlBYHejXhYxQEIiIR09jRMy1TS6QoCEREIqa5c/qGjoKCQEQkUvoGh9jX1TstcwylKAhERCKkufMo7kzbOQSgIBARiZTmYxesn56ho6AgEBGJlMaObmD6TiYDBYGISKQ0dvZQWhxjQXnxtL2ngkBEJEJSk82ZBT/9dIqCQEQkQpqmeegoKAhERCIjHneaOnumdcQQBBwEZna5me02swYzu2WM7a4xMzezdUHWIyISZW2H++gbjLN0miabSwksCMwsBtwGXAGsAa4zszUjbFcBfAj4U1C1iIhkg9SIoemcXgKCPSJYDzS4+x537wc2AVeNsN1ngC8AvQHWIiISeU2d03sdgpQgg2Ax0Jy23JJcd4yZvQJY4u4/G2tHZnaDmdWaWW17e/vUVyoiEgFNnT3ECozFc6dn+umUIINgpLFPfuxJswLgy8A/jLcjd7/D3de5+7rKysopLFFEJDoaO3pYNKeEotj0juMJ8t1agCVpy9VAa9pyBXAW8Gsz2wu8GtisDmMRyVdhDB2FYINgO7DSzJabWTFwLbA59aS7H3L3Be5e4+41wB+BDe5eG2BNIiKRlQiC6R0xBAEGgbsPAjcBDwE7gfvdvc7MNprZhqDeV0QkGx3uHaCzu3/azyEACPQ6aO6+BdgybN2to2x7cZC1iIhEWWNH8oL1OdY0JCIiGWo+dsF6BYGISF5qTAZBGE1DCgIRkQho7OhhXlkxFSVF0/7eCgIRkQho7uwJpVkIFAQiIpHQ2NkdSkcxKAhEREI3MBSn9WBvKP0DoCAQEQndCy8dZSjuoZxVDAoCEZHQhTXraIqCQEQkZMeHjk7/9BKgIBARCV1TRzczCgtYWDEjlPdXEIiIhKwpOXS0oGCk2fuDpyAQEQlZY0dPaENHQUEgIhIqd09MPx3S0FFQEIiIhOrAkX56+od0RCAikq+ODR3VEYGISH5q6uwGCOXKZCkKAhGREDV29GAG1XNnhlaDgkBEJETPH+hm0eyZlBTFQqtBQSAiEqL61i5WV1WEWoOCQEQkJEf7h3iu/QhrFs0OtQ4FgYhISHbvP0zcYU3VrFDrUBCIiISkrvUQAGsXKQhERPJSfWsXs0oKQx0xBAoCEZHQ1LV2sWbRLMzCmWwuRUEgIhKCobiz68Uu1lSF21EMCgIRkVA8f+AIvQPx0PsHQEEgIhKKutYuANYoCERE8lN9axfFsQJOX1gedikKAhGRMNTv62LVqeUUxcL/Gh63AjOrNrN/NLOfmNl2M/utmX3DzN5oZmO+3swuN7PdZtZgZreM8PyNZvaUme0ws0fMbM1kfhgRkWzg7tS1drE2Ah3FME4QmNm3gbuAfuBfgOuADwC/Ai4HHjGz147y2hhwG3AFsAa4boQv+nvd/Wx3Pw/4AvClif8oIiLZYX9XH53d/ZHoHwAoHOf5f3P3p0dY/zTwIzMrBpaO8tr1QIO77wEws03AVUB9agN370rbvgzwTAsXEclWUTmjOGXMIBgpBMxsLrDE3Z90936gYZSXLwaa05ZbgAtG2N8HgZuBYuCSkXZkZjcANwAsXTpa7oiIZIf61i7M4MyQ5xhKyaiXwsx+bWazzGwe8ATwbTMbrxlnpFPlTviL391vc/cVwEeBfxppR+5+h7uvc/d1lZWVmZQsIhJZda1d1Mwvo3zGeI0y0yPT7urZyWacNwPfdvfzgcvGeU0LsCRtuRpoHWP7TcDVGdYjIpK
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"import matplotlib.pyplot as plt\n",
"\n",
"g = df.plot(title=\"F time\")\n",
"g.set_xlabel(\"n\")\n",
"g.set_ylabel(\"time (s)\")\n",
"plt.savefig(\"f.png\")"
]
},
{
"cell_type": "code",
"execution_count": 15,
"id": "empirical-tolerance",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"f 3.693825\n",
"dtype: float64"
]
},
"execution_count": 15,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.sum()"
]
},
{
"cell_type": "markdown",
"id": "dress-series",
"metadata": {},
"source": [
"### More data types - Dictionaries"
]
},
{
"cell_type": "code",
"execution_count": 68,
"id": "fifth-stereo",
"metadata": {},
"outputs": [],
"source": [
"dct = {\n",
" \"key1\": \"value1\",\n",
" \"key2\": [\"value2\", \"value3\"],\n",
" \"random name for a key\": 1,\n",
" \"key4\": (2000, 3000)\n",
"}"
]
},
{
"cell_type": "code",
"execution_count": 42,
"id": "periodic-estate",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(2000, 3000)"
]
},
"execution_count": 42,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"dct[\"key4\"]"
]
},
{
"cell_type": "code",
"execution_count": 45,
"id": "buried-plant",
"metadata": {},
"outputs": [],
"source": [
"#dct['key5'] will error"
]
},
{
"cell_type": "code",
"execution_count": 50,
"id": "precise-possession",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"True"
]
},
"execution_count": 50,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"dct.get(\"key5\") is None"
]
},
{
"cell_type": "code",
"execution_count": 70,
"id": "perfect-commander",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"key: key1, value: value1\n",
"key: key2, value: ['value2', 'value3']\n",
"key: random name for a key, value: 1\n",
"key: key4, value: (2000, 3000)\n"
]
}
],
"source": [
"for k,v in dct.items():\n",
" print(f\"key: {k}, value: {v}\")"
]
},
{
"cell_type": "code",
"execution_count": 91,
"id": "prompt-maldives",
"metadata": {},
"outputs": [],
"source": [
"cache = {}\n",
"\n",
"def f_better(n: int) -> int:\n",
" \"\"\"\n",
" Fibonacci sequence - !!with caching!!\n",
" ---\n",
" params\n",
" n (int) number requested in sequence\n",
" \n",
" returns\n",
" interger in fibonacci sequence\n",
" \"\"\"\n",
" if all([cache.get(n-1), cache.get(n-2)]):\n",
" return cache[n-1] + cache[n-2] \n",
" elif n == 0:\n",
" return 0\n",
" elif n == 1 or n == 2:\n",
" return 1\n",
" else:\n",
" cache[n] = f_better(n-1) + f_better(n-2) \n",
" return cache[n]"
]
},
{
"cell_type": "code",
"execution_count": 92,
"id": "north-logistics",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>f</th>\n",
" <th>f_better</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>1.580001e-07</td>\n",
" <td>0.000001</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>1.819999e-07</td>\n",
" <td>0.000001</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>1.979997e-07</td>\n",
" <td>0.000001</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>4.560002e-07</td>\n",
" <td>0.000003</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>7.710000e-07</td>\n",
" <td>0.000006</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" f f_better\n",
"0 1.580001e-07 0.000001\n",
"1 1.819999e-07 0.000001\n",
"2 1.979997e-07 0.000001\n",
"3 4.560002e-07 0.000003\n",
"4 7.710000e-07 0.000006"
]
},
"execution_count": 92,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"times = []\n",
"for i in range(35):\n",
" t = %timeit -n1 -o -q f_better(i)\n",
" times.append(t.best)\n",
" \n",
"df['f_better'] = pd.DataFrame(data=times)\n",
"df.head()"
]
},
{
"cell_type": "code",
"execution_count": 93,
"id": "honest-rings",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"g = df.plot(title=\"F time\")\n",
"g.set_xlabel(\"n\")\n",
"g.set_ylabel(\"time (s)\")\n",
"plt.savefig(\"f_better.png\")"
]
},
{
"cell_type": "code",
"execution_count": 83,
"id": "egyptian-seminar",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"{3: 2,\n",
" 4: 3,\n",
" 6: 8,\n",
" 7: 13,\n",
" 9: 34,\n",
" 10: 55,\n",
" 12: 144,\n",
" 13: 233,\n",
" 15: 610,\n",
" 16: 987,\n",
" 18: 2584,\n",
" 19: 4181,\n",
" 21: 10946,\n",
" 22: 17711,\n",
" 24: 46368,\n",
" 25: 75025,\n",
" 27: 196418,\n",
" 28: 317811,\n",
" 30: 832040,\n",
" 31: 1346269,\n",
" 33: 3524578,\n",
" 34: 5702887}"
]
},
"execution_count": 83,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"cache"
]
},
{
"cell_type": "markdown",
"id": "loving-jungle",
"metadata": {},
"source": [
"### Classes"
]
},
{
"cell_type": "code",
"execution_count": 133,
"id": "parallel-sharp",
"metadata": {},
"outputs": [],
"source": [
"class Car:\n",
" \"\"\"\n",
" Class for cars that people drive\n",
" ---\n",
" params \n",
" make (str): make of the car\n",
" model (str): model of the car\n",
" year (int): year car was made\n",
" \"\"\"\n",
" def __init__(self, make: str, model: str, year: int=2021):\n",
" self.make = make\n",
" self.model = model\n",
" self.year = year\n",
" self.__is_driving = False\n",
" \n",
" def __repr__(self):\n",
" return f'{self.make} - {self.model}'\n",
" \n",
" def drive(self) -> str:\n",
" if not self.__is_driving:\n",
" print(f'{self.make} - {self.model} is now driving')\n",
" self.__is_driving = True\n",
" else:\n",
" print(f'{self.make} - {self.model} is ALREADY driving!')\n",
" \n",
" def stop(self) -> str:\n",
" if self.__is_driving:\n",
" print(f'{self.make} - {self.model} has stopped')\n",
" self.__is_driving = False\n",
" else:\n",
" print(f'{self.make} - {self.model} is ALREADY stopped!')"
]
},
{
"cell_type": "code",
"execution_count": 134,
"id": "protective-lying",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"\u001b[0;31mInit signature:\u001b[0m \u001b[0mCar\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mmake\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mstr\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mmodel\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mstr\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0myear\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mint\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;36m2021\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;31mDocstring:\u001b[0m \n",
"Class for cars that people drive\n",
"---\n",
"params \n",
" make (str): make of the car\n",
" model (str): model of the car\n",
" year (int): year car was made\n",
"\u001b[0;31mType:\u001b[0m type\n",
"\u001b[0;31mSubclasses:\u001b[0m \n"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"?Car"
]
},
{
"cell_type": "code",
"execution_count": 135,
"id": "dimensional-shanghai",
"metadata": {},
"outputs": [],
"source": [
"shivan = Car('Toyota', 'Corolla', '2008')\n",
"bruno = Car('Tesla', 'Model3')"
]
},
{
"cell_type": "code",
"execution_count": 136,
"id": "raised-brook",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Tesla - Model3"
]
},
"execution_count": 136,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"bruno"
]
},
{
"cell_type": "code",
"execution_count": 137,
"id": "earlier-diploma",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Toyota - Corolla is now driving\n"
]
}
],
"source": [
"shivan.drive()"
]
},
{
"cell_type": "code",
"execution_count": 138,
"id": "varied-setting",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Toyota - Corolla is ALREADY driving!\n"
]
}
],
"source": [
"shivan.drive()"
]
},
{
"cell_type": "code",
"execution_count": 139,
"id": "recognized-forwarding",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Tesla - Model3 is ALREADY stopped!\n"
]
}
],
"source": [
"bruno.stop()"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "executed-cleanup",
"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.7.10"
}
},
"nbformat": 4,
"nbformat_minor": 5
}