learning_python/zero_2_hundred/zero_2_hundred.ipynb

1088 lines
46 KiB
Plaintext

{
"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": "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\n",
"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": "iVBORw0KGgoAAAANSUhEUgAAAYIAAAEWCAYAAABrDZDcAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8vihELAAAACXBIWXMAAAsTAAALEwEAmpwYAAAiQ0lEQVR4nO3de3xcdZ3/8dcnadK0TXpPIWlaUkqBtlyKlHrpriCCUJHWu/DTFdAVUHiIsvtYi64K7K66wuriCmJ14YcKVmRdqP6KoEAFdhfbwJbSJC0tpbmQ0rQJbZqkuX9+f8xMGdJJMk1ycubyfj4e85g5lznnk0k775zv95zvMXdHRESyV07YBYiISLgUBCIiWU5BICKS5RQEIiJZTkEgIpLlFAQiIllOQSAyQmb2VTP7adh1iAyX6ToCETCz3cBxQG/c7JPdvaHfeucBv3D3sjErTiRg48IuQCSFXOrufwy7CJGxpqYhkSSZ2STgUaDUzFqjj1Izu9nMfhFdp9zM3MyuMrM6M3vDzK41s3PMbIuZHTCzH/bb7mfMrDq67mNmdkIYP59kLwWBSJLcvQ1YATS4e2H00TDA6m8HFgCfAP4V+BpwAbAY+LiZnQtgZh8Evgp8GCgGngF+GeCPIXIUBYHImx6O/sV+wMweHuG2/sHdO9z9caAN+KW7N7r7a0S+7M+KrncN8G13r3b3HuBbwBIdFchYUhCIvOmD7j41+vjgCLe1N+714QTThdHXJwB3xAIIaAYMmD3C/YskTZ3FIsdmtE+zqwP+yd3vH+XtiiRNRwQix2YvMMPMpozS9u4GbjKzxQBmNsXMPjZK2xZJio4IRI6Bu28zs18Cu8wsF1g0wu39p5kVAmuj/QIHgT8Avx55tSLJ0QVlIiJZTk1DIiJZTkEgIpLlFAQiIllOQSAikuXS7qyhmTNnenl5edhliIikleeff36/uxcnWpZ2QVBeXk5FRUXYZYiIpBUzqxlomZqGRESynIJARCTLKQhERLJc2vURJNLd3U19fT0dHR1hl5LSCgoKKCsrIy8vL+xSRCSFZEQQ1NfXU1RURHl5OWYWdjkpyd1pamqivr6eefPmhV2OiKSQjGga6ujoYMaMGQqBQZgZM2bM0FGTiBwlI4IAUAgkQZ+RiCSSMUEgIpKpunv7+Pb6al6sOxDI9hUEo+QHP/gBCxcu5JOf/GTYpYhIhmk4cJgfP72L7XsPBbL9jOgsTgV33XUXjz76qDpiRWTU1TS1A3DC9ImBbF9HBKPg2muvZdeuXaxcuZLvf//7YZcjIhmmpjkaBDMmBbL9jDsiuOW3lVQ1tIzqNheVTuably4ecPndd9/N73//e5566ilmzpw5qvsWEalrbid/XA6zisYHsn0dEYiIpLiapjbmTp9ITk4wZ/5l3BHBYH+5i4iko5qm9sD6ByDgIwIzu9jMtpvZTjNbnWD5lWa2z8w2Rx9/HWQ9IiLpxt2pa25n7ozggiCwIwIzywXuBC4E6oFNZrbO3av6rford78+qDpERNJZU1sXbV29zA3wiCDIpqFlwE533wVgZmuBVUD/IMgIu3fvDrsEEclAR04dDfCIIMimodlAXdx0fXRefx8xsy1m9pCZzUm0ITO72swqzKxi3759QdQqIpKSapvbAJg7PZhTRyHYIEjUve39pn8LlLv7GcAfgfsSbcjd17j7UndfWlyc8JabIiIZqbbpMGZQNm1CYPsIMgjqgfi/8MuAhvgV3L3J3Tujkz8Bzg6wHhGRtFPT3MbxkwsoyMsNbB9BBsEmYIGZzTOzfOAyYF38CmZWEje5EqgOsB4RkbRT29QeaEcxBNhZ7O49ZnY98BiQC9zj7pVmditQ4e7rgC+a2UqgB2gGrgyqHhGRdFTb3M55pwTbJB7oBWXuvh5Y32/eN+Je3wTcFGQNIiLp6nBXL42HOgM/ItAQEyIiKao2Otjc3IAGm4tREIySwe5HcPPNN3P77bcnva0DBw5w1113HZnevXs3DzzwwKjUKSLpo6YpcupokMNLgIJg1Nx1112sX7+e+++/f8TbGo0g6O3tHXEdIhKuI0cE6dpZHJpHV8PrL43uNo8/HVZ8Z8DF8fcj+MxnPsOXv/zlo9Z58cUXOf/886mrq+Pv/u7v+NznPgfAbbfdxoMPPkhnZycf+tCHuOWWW1i9ejWvvPIKS5Ys4cILL+SZZ56hurqaJUuWcMUVV/DFL36R1atXs2HDBjo7O7nuuuu45ppr2LBhA7fccgslJSVs3ryZqqqMvIhbJGvUNrdTVDCOqRPzAt1P5gVBCJK5H8GWLVt47rnnaGtr46yzzuKSSy5h69at7Nixg40bN+LurFy5kqeffprvfOc7bN26lc2bNwOwYcMGbr/9dn73u98BsGbNGqZMmcKmTZvo7Oxk+fLlvO997wNg48aNbN26VXdKE8kANU3tnDBjImbBDD8dk3lBMMhf7mFatWoVEyZMYMKECbznPe9h48aNPPvsszz++OOcddZZALS2trJjxw7mzp076LYef/xxtmzZwkMPPQTAwYMH2bFjB/n5+SxbtkwhIJIhapvbWVQyOfD9ZF4QpKj+iW5muDs33XQT11xzzVuWDTWAnbvzb//2b1x00UVvmb9hwwYmTQr27AIRGRu9fU79G+1ctPj4wPelzuIx8sgjj9DR0UFTUxMbNmzgnHPO4aKLLuKee+6htbUVgNdee43GxkaKioo4dOjQkff2n77ooov40Y9+RHd3NwAvv/wybW1tY/sDiUig9hw8THevBzrqaIyOCMbIsmXLuOSSS6itreXrX/86paWllJaWUl1dzTvf+U4ACgsL+cUvfsH8+fNZvnw5p512GitWrOBb3/oW48aN48wzz+TKK6/khhtuYPfu3bztbW/D3SkuLubhhx8O9wcUkVFVGxt+OuAzhgDMvf+AoKlt6dKlXlFR8ZZ51dXVLFy4MKSK0os+K5H0sHZjLat/8xLPfuU9lE0beRiY2fPuvjTRMjUNiYikoJrmdvJyjZIpwQ0/HaOmoVF07733cscdd7xl3vLly7nzzjtDqkhE0lVtUztl0yaSmxPsqaOQQUHg7oGfazuUq666iquuuirUGgaTbs2AItmsprkt8CuKYzKiaaigoICmpiZ90Q3C3WlqaqKgoCDsUkQkCWNxH4KYjDgiKCsro76+Ht3PeHAFBQWUlZWFXYaIDOFAexctHT1jcuooZEgQ5OXl6WpaEckYNU1jM9hcTEY0DYmIZJLYqKMnBHwfghgFgYhIiokFwZzpwZ86CgoCEZGUU9PURnHReCbmj03rvYJARCTF1DS1j8nQEjEKAhGRFFPXPHanjoKCQEQkpXT29LKnpYO5Y3TqKCgIRERSSl3zYdwZs2sIQEEgIpJS6o7csH7sbjKlIBARSSE1TZGbTKmPQEQkS9U0tzMxP5eZhfljtk8FgYhICokNNjeWoykrCEREUkjtGJ86CgoCEZGU0dfn1Da3j+kZQxBwEJjZxWa23cx2mtnqQdb7qJm5mSW8n6aISDZoPNRJZ08fc8dosLmYwILAzHKBO4EVwCLgcjNblGC9IuCLwJ+DqkVEJB3Ezhgay+ElINgjgmXATnff5e5dwFpgVYL1/gH4LtARYC0iIimvtnls70MQE2QQzAbq4qbro/OOMLOzgDnu/rvBNmRmV5tZhZlV6C5kIpKpapvbyc0xZk8bm+GnY4IMgkTnPh25qbCZ5QDfB/5mqA25+xp3X+ruS4uLi0exRBGR1FHT1E7p1ALycsf2PJ4g91YPzImbLgMa4qaLgNOADWa2G3gHsE4dxiKSrcI4dRSCDYJNwAIzm2dm+cBlwLrYQnc/6O4z3b3c3cuB54CV7l4RYE0iIikrEgRje8YQBBgE7t4DXA88BlQDD7p7pZndamYrg9qviEg6OtTRTXNb15hfQwAQ6H3Q3H09sL7fvG8MsO55QdYiIpLKapqiN6zPsKYhERFJUt2RG9YrCEREslJNNAjCaBpSEIiIpICapnamT8qnqCBvzPetIBARSQF1ze2hNAuBgkBEJCXUNLeF0lEMCgIRkdB19/bRcKAjlP4BUBCIiITutTcO09vnoVxVDAoCEZHQhTXqaIyCQEQkZG+eOjr2w0uAgkBEJHS1TW2MH5fDrKLxoexfQSAiErLa6KmjOTmJRu8PnoJARCRkNU3toZ06CgoCEZFQuXtk+OmQTh0FBYGISKj2t3bR3tWrIwIRkWx15NRRHRGIiGSn2uY2gFDuTBajIBARCVFNUztmUDZtQmg1KAhEREL06v42SqdMoCAvN7QaFAQiIiGqamhhYUlRqDUoCEREQnK4q5dX9rWyqHRKqHUoCEREQrJ97yH6HBaVTA61DgWBiEhIKhsOArC4VEEgIpKVqhpamFwwLtQzhkBBICISmsqGFhaVTsYsnMHmYhQEIiIh6O1ztr3ewqKScDuKQUEgIhKKV/e30tHdF3r/ACgIRERCUdnQAsAiBYGISHaqamghPzeHk2YVhl2KgkBEJAxVe1o4+fhC8nLD/xoesgIzKzOzvzWzR8xsk5k9bWZ3mdklZjbo+83sYjPbbmY7zWx1guXXmtlLZrbZzJ41s0Uj+WFERNKBu1PZ0MLiFOgohiGCwMzuBe4BuoB/Bi4HvgD8EbgYeNbM3j3Ae3OBO4EVwCLg8gRf9A+4++nuvgT4LvC94f8oIiLpYW9LJ81tXSnRPwAwbojl/+LuWxPM3wr8xszygbkDvHcZsNPddwGY2VpgFVAVW8HdW+LWnwR4soWLiKSrVLmiOGbQIEgUAmY2DZjj7lvcvQvYOcDbZwN1cdP1wNsTbO864EYgHzg/0YbM7GrgaoC5cwfKHRGR9FDV0IIZnBryGEMxSfVSmNkGM5tsZtOBF4F7zWyoZpxEl8od9Re/u9/p7vOBrwB/n2hD7r7G3Ze6+9Li4uJkShYRSVmVDS2Uz5hE4fihGmXGRrLd1VOizTgfBu5197OBC4Z4Tz0wJ266DGgYZP21wAeTrEdEJG1V7WkJfcTReMkGwTgzKwE+DvwuyfdsAhaY2bxoX8JlwLr4FcxsQdzkJcCOJLctIpKWWjq6qW1uT5mOYhi6szjmVuAx4Fl332RmJzLEl7a795jZ9dH35QL3uHulmd0KVLj7OuB6M7sA6AbeAK4Y7g8iIpIOqlPoiuKYpILA3X8N/DpuehfwkSTetx5Y32/eN+Je35B0pSIiGSA2tMTidGkaMrO/j3YQD7T8fDP7wOiXJSKSmar2tDCzcDyzJheEXcoRQx0RvAT81sw6gBeAfUABsABYQuTCsm8FWaCISCaJ3YMglQx1HcEjwCPRTt3lQAnQAvwCuNrdDwdfoohIZujq6WNn4yHOOyW1ToNPto9gBzqjR0RkRHY0HqK711Pq1FHQ6KMiImPmSEdxijUNKQhERMZIVUMLE/NzKZ8xKexS3kJBICIyRqoaWlhYMpmcnHBvVt9fsmMNnWxmT5jZ1uj0GWaWcFwgERE5Wl+fp9zQEjHJHhH8BLiJyBXAuPsWIkNGiIhIEureaKe1syfl+gcg+SCY6O4b+83rGe1iREQyVVUKDi0Rk2wQ7Dez+USHkTazjwJ7AqtKRCTDVDa0kJtjnHxcUdilHCXZQeeuA9YAp5rZa8CrwKcCq0pEJMNU7WnhpOJCCvJywy7lKMleULYLuMDMJgE57n4o2LJERDJLZcNBls+fGXYZCSUVBGY2Ffg0UE7k3gQAuPsXgypMRCRT7G/tZG9LZ0r2D0DyTUPrgeeIDELXF1w5IiKZJ5U7iiH5IChw9xsDrUREJENV7YkGQQpeQwDJnzX0czP7nJmVmNn02CPQykREMkRlQwuzp05g6sT8sEtJKNkjgi7gNuBrRE8hjT6fGERRIiKZpKrhYMo2C0HyQXAjcJK77w+yGBGRTNPe1cOu/W1cemZp2KUMKNmmoUqgPchCREQy0bbXD+Geuv0DkPwRQS+w2cyeAjpjM3X6qIjI4I7cg2D2lJArGViyQfBw9CEiIsegqqGFKRPyKJ2SOjer7y/ZK4vvC7oQEZFMVNVwkMWlk4ldiJuKBg0CM3vQ3T9uZi/x5tlCR7j7GYFVJiKS5np6+9j2+iH+6h0nhF3KoIY6Irgh+vyBoAsREck0u/a30dnTx+LZqdtRDEOcNeTusaGmv+DuNfEP4AvBlycikr6ODC1RkrodxZD86aMXJpi3YjQLERHJNJUNB8kfl8P84tS6WX1/Q/URfJ7IX/4nmtmWuEVFwH8FWZiISLqr2tPCqccXMS432b+5wzFUdQ8AlwLros+xx9nuPuSNaczsYjPbbmY7zWx1guU3mlmVmW0xsyfMLLV7VEREkuTuVDa0pOQ9ivsb9IjA3Q8CB4HLj3XDZpYL3EmkWake2GRm69y9Km61/wWWunt79Ojju8AnjnVfIiKppq75MAfau1lUmtr9A5B8H8FwLAN2uvsud+8C1gKr4ldw96fcPTZ0xXNAWYD1iIiMmae2NwLwlyel5l3J4gUZBLOBurjp+ui8gXwWeDTRAjO72swqzKxi3759o1iiiEgwntjWyInFkyifmdodxRBsECS6jO6oi9IAzOxTwFIiQ10f/Sb3Ne6+1N2XFhcXj2KJIiKjr62zh+deaeK9p84Ku5SkJDvW0HDUA3PipsuAhv4rmdkFRO5zcK67d/ZfLiKSbp7duZ+u3j7OP/W4sEtJSpBHBJuABWY2z8zygcuInH10hJmdBfwYWOnujQHWIiIyZp6o3svkgnEsLZ8WdilJCSwI3L0HuB54DKgGHnT3SjO71cxWRle7DSgEfm1mm81s3QCbExFJC319zpPb9nHuKbPIS/HrB2KCbBrC3dcD6/vN+0bc6wuC3L+IyFh76bWD7G/tTJv+AQi2aUhEJOs8sa2RHINzT06fE1sUBCIio+iJ6r2cfcI0pk3KD7uUpCkIRERGyesHO6hsaOG9C9PjbKEYBYGIyCh5clvk5Md06h8ABYGIyKh5ctte5kyfwEmzCsMu5ZgoCERERkFHdy/P7tzPe089LqXvT5yIgkBEZBT89yv76eju470L06tZCBQEIiKj4onqRibl57Js3vSwSzlmCgIRkRFyd57c1shfLihm/LjcsMs5ZgoCEZERqtrTwp6DHZyfhs1CoCAQERmxJ6sbMYP3nKIgEBHJSk9sa+TMsqkUF40Pu5RhURCIiIzAvkOdvFh/IO0uIounIBARGYGntjfiTtr2D4CCQERkRJ6sbqRkSgGLSiaHXcqwKQhERIaps6eXZ3bs4/xTZ6Xd1cTxFAQiIsO08dVm2rp60/Jq4ngKAhGRYXqiupGCvBzeNX9m2KWMiIJARGQY3J0ntu1l+fyZFOSl39XE8RQEIiLDsLOxlbrmw2l3E5pEFAQiIsPwRPQmNOen8fUDMQoCEZFheLK6kcWlkzl+SkHYpYyYgkBE5Bi90dZFRU1zWl9NHE9BICJyjP708j76HM7PgP4BUBCIiBwTd+fBijqKi8ZzxuwpYZczKhQEIiLH4PGqvfz3K01cd958cnLS92rieAoCEZEkdXT38o//r4qTjyvkU+84IexyRs24sAsQEUkXP31mF3XNh3ngr9/OuNzM+Ts6c34SEZEA7Tl4mDufeoUVpx3Pu05K7yEl+gs0CMzsYjPbbmY7zWx1guXvNrMXzKzHzD4aZC0iIiPx7fXb6HPnq+9fGHYpoy6wIDCzXOBOYAWwCLjczBb1W60WuBJ4IKg6RERGatPuZta92MA17z6ROdMnhl3OqAuyj2AZsNPddwGY2VpgFVAVW8Hdd0eX9QVYh4jIsPX2Od98pJLSKQV8/ryTwi4nEEE2Dc0G6uKm66PzjpmZXW1mFWZWsW/fvlEpTkQkGb/aVEfVnhZuev9CJuSn9yijAwkyCBKdYOvD2ZC7r3H3pe6+tLi4eIRliYgk52B7N7c9to1l86bzgTNKwi4nMEEGQT0wJ266DGgIcH8iIqPq+398mYOHu7n50sVpfSvKoQQZBJuABWY2z8zygcuAdQHuT0Rk1Gx//RA/f66Gy5fNZVFp+t6YPhmBBYG79wDXA48B1cCD7l5pZrea2UoAMzvHzOqBjwE/NrPKoOoREUmWu3Pr7yopHD+Ov3nfKWGXE7hAryx29/XA+n7zvhH3ehORJiMRkZTxWOVe/mtnE7esXMz0SflhlxM4XVksIhInNp7QKccV8cm3zw27nDGhsYZEROL85Old1L9xmAc+l1njCQ0mO35KEZEk7Gw8xF0bXuH9px/Pu+Zn1nhCg1EQiIgAzW1dfOb/VjBp/Di+/oH+o+FkNjUNiUjW6+zp5dqfP8/rLR2svfodlEyZEHZJY0pHBCKS1dydr/5mKxt3N3P7x87kbXOnhV3SmFMQiEhWu/tPu/iPF+r50gULWHlmadjlhEJBICJZ6/dbX+e7j23j0jNLueG9C8IuJzQKAhHJSltfO8iXf7WZM8umcttHz8josYSGoiAQkayzt6WDz963iWkT81jz6bMpyMvM4aWTpbOGRCSrHO7q5a/vq6C1o4eHPv8uZhUVhF1S6BQEIpI1+vqcGx/czNaGg/z000tZWJLZo4omS01DIpI1vveHl3l06+t87f0Lee/C48IuJ2UoCEQkK9z/5xp++NROLl82h8/+xbywy0kpahoSkYzW2dPLrb+t4v4/13LuycXcuuq0rD5DKBEFgYhkrPo32vnC/S+wpf4g1547n79938lZM6LosVAQiEhG2rC9kS/9ajO9vc6P/+psLlp8fNglpSwFgYhklL4+5wdP7uCOJ3ZwynFF3P2psymfOSnsslKagkBEMsYbbV186Veb+dPL+/jw22bzTx88nQn52X2xWDIUBCKSEV6sO8AX7n+BfYc6+daHTufyZXPUKZwkBYGIpLXePueBjbX8w2+rKC4az0OffydnlE0Nu6y0oiAQkbR08HA3v66o42f/U0NtczvnnlzMv35iCdMm5YddWtpREIhIWtnZ2MrP/mc3Dz1fT3tXL+eUT+MrF5/KitOOJydHTUHDoSAQkZTX1+f8acc+7v2v3Tz98j7yc3O49MxSrnxXOaeXTQm7vLSnIBCRlHWgvYuH//c17vufGl7d38asovHceOHJ/J+3z2Vm4fiwy8sYCgIRSRl7WzrY+GozG19tZtPuZrbvPYQ7nDV3KndctoQVp5WQP05XBo82BYGIhMLd2d3UzqZXm9m4O/LlX9vcDsDE/FzOPmEal5xewrmnFOssoIApCEQkcD29feza30b1nhaq9xyiek8LlQ0t7G/tBGDaxDzOKZ/Op995AsvmTWdRyWSNCTSGFAQiMmo6untpbutid1Mb26Jf+NWvt/Dy3la6evoAyMs1TppVxLtPnsnZJ0xjWfl0TppVqIu/QhRoEJjZxcAdQC7wU3f/Tr/l44GfAWcDTcAn3H13kDWJyOB6evto6+qlvauHts63Prd29tDc1kVzWxf7W7toau2kqS363NrFoc6et2xrZmE+C0smc+W7yllYUsSpx09mfnGh2vlTTGBBYGa5wJ3AhUA9sMnM1rl7VdxqnwXecPeTzOwy4J+BTwRVk0iqcHf6PHJVbJ9HHr19Tl8fkdfu9PQ63b199PRFnrt7++jpdXr6+ujufXN55BGZ39Xz5vqx1109fRzu7uVw7Mu9683XkefYI7Is9pf7YHIMpk8az8zCfGYU5nNG2VRmFOYzs3A8MyblUzp1AgtLJlNcpDN70kGQRwTLgJ3uvgvAzNYCq4D4IFgF3Bx9/RDwQzMzd/fRLmbTb+5g1tafjPZmheR+VcmsZaP8Wx9sc4Mts/ilPnTt3v+1J16WaPlR+xtADjA++hiKc3QTi1nkkYNhBrkGZkZO/HOekZMPOWbkWGS9+Oec2HOOkZtjb+6lA+iwyDH9ABW9+XIUfslvaUJK1Jw02P6Odf9x2z+y3/779AT7GsnPOcg+z/sKnPaREWw7sSCDYDZQFzddD7x9oHXcvcfMDgIzgP3xK5nZ1cDVAHPnzh1WMeOKZrJ/4onDeu9YUOtolI1Ok0H/L9eEn68R+c8b3Wf8Ov6WaTsy0X878d9JFlv+5upvafe2WF1mWPQL+cjmLbLUou+NPL/1S/ioL+64L+cjr0m0PLLO0T//KP2rS/jl/tZPcOgv76R3NsB+j2F/yf7cib7YB9pnopAYzuc71D4Lph77NpMQZBAMEdVJr4O7rwHWACxdunRYUXvWhZ+ECz85nLeKiGS0IHts6oE5cdNlQMNA65jZOGAK0BxgTSIi0k+QQbAJWGBm88wsH7gMWNdvnXXAFdHXHwWeDKJ/QEREBhZY01C0zf964DEip4/e4+6VZnYrUOHu64B/B35uZjuJHAlcFlQ9IiKSWKDXEbj7emB9v3nfiHvdAXwsyBpERGRwuqpDRCTLKQhERLKcgkBEJMspCEREspyl29maZrYPqBnm22fS76rlNJPO9adz7aD6w5TOtUPq1H+CuxcnWpB2QTASZlbh7kvDrmO40rn+dK4dVH+Y0rl2SI/61TQkIpLlFAQiIlku24JgTdgFjFA615/OtYPqD1M61w5pUH9W9RGIiMjRsu2IQERE+lEQiIhkuawJAjO72My2m9lOM1sddj3Hwsx2m9lLZrbZzCrCrmcoZnaPmTWa2da4edPN7A9mtiP6PC3MGgczQP03m9lr0d/BZjN7f5g1DsTM5pjZU2ZWbWaVZnZDdH7Kf/6D1J4un32BmW00sxej9d8SnT/PzP4c/ex/FR2WP6VkRR+BmeUCLwMXErkZzibgcnevGvSNKcLMdgNL3T0VLkoZkpm9G2gFfubup0XnfRdodvfvRIN4mrt/Jcw6BzJA/TcDre5+e5i1DcXMSoASd3/BzIqA54EPAleS4p//ILV/nPT47A2Y5O6tZpYHPAvcANwI/Mbd15rZ3cCL7v6jMGvtL1uOCJYBO919l7t3AWuBVSHXlLHc/WmOvtPcKuC+6Ov7iPwHT0kD1J8W3H2Pu78QfX0IqCZyb/CU//wHqT0teERrdDIv+nDgfOCh6PyU/OyzJQhmA3Vx0/Wk0T8wIv+YHjez583s6rCLGabj3H0PRP7DA7NCrmc4rjezLdGmo5RrWunPzMqBs4A/k2aff7/aIU0+ezPLNbPNQCPwB+AV4IC790RXScnvnmwJAkswL53axJa7+9uAFcB10aYLGVs/AuYDS4A9wL+EWs0QzKwQ+A/gS+7eEnY9xyJB7Wnz2bt7r7svIXKP9mXAwkSrjWlRSciWIKgH5sRNlwENIdVyzNy9IfrcCPwnkX9g6WZvtA041hbcGHI9x8Td90b/k/cBPyGFfwfR9un/AO53999EZ6fF55+o9nT67GPc/QCwAXgHMNXMYneDTMnvnmwJgk3AgmjvfT6ReyOvC7mmpJjZpGjHGWY2CXgfsHXwd6WkdcAV0ddXAI+EWMsxi32JRn2IFP0dRDss/x2odvfvxS1K+c9/oNrT6LMvNrOp0dcTgAuI9HM8BXw0ulpqfvbZcNYQQPSUs38FcoF73P2fwq0oOWZ2IpGjAIjcY/qBVK/dzH4JnEdk+N29wDeBh4EHgblALfAxd0/JDtkB6j+PSNOEA7uBa2Jt7qnEzP4CeAZ4CeiLzv4qkbb2lP78B6n9ctLjsz+DSGdwLpE/sh9091uj/4fXAtOB/wU+5e6d4VV6tKwJAhERSSxbmoZERGQACgIRkSynIBARyXIKAhGRLKcgEBHJcgoCEZEspyAQEclyCgKRETKz8ugY+j+JjkP/ePTKUpG0oCAQGR0LgDvdfTFwAPhIuOWIJE9BIDI6XnX3zdHXzwPl4ZUicmwUBCKjI37smF4i40KJpAUFgYhIllMQiIhkOY0+KiKS5XREICKS5RQEIiJZTkEgIpLlFAQiIllOQSAikuUUBCIiWU5BICKS5f4/ALVPwYLlURcAAAAASUVORK5CYII=\n",
"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
}