ch02: automated tests

This commit is contained in:
Luciano Ramalho
2019-11-20 20:19:50 -03:00
parent 64e8bdcd79
commit 8a1b6fe145
6 changed files with 299 additions and 201 deletions

21
02-array-seq/README.md Normal file
View File

@@ -0,0 +1,21 @@
# An Array of Sequences
Sample code for Chapter 2 of _Fluent Python 2e_ by Luciano Ramalho (O'Reilly, 2020)
## Running the tests
### Doctests
Use Python's standard ``doctest`` module, for example:
$ python3 -m doctest bisect_demo.py -v
### Jupyter Notebook
Install ``pytest`` and the ``nbval`` plugin:
$ pip install pytest nbval
Run:
$ pytest --nbval

View File

@@ -1,4 +0,0 @@
Sample code for Chapter 2 - "An array of sequences"
From the book "Fluent Python" by Luciano Ramalho (O'Reilly, 2015)
http://shop.oreilly.com/product/0636920032519.do

View File

@@ -923,21 +923,10 @@
"cell_type": "code", "cell_type": "code",
"execution_count": 35, "execution_count": 35,
"metadata": {}, "metadata": {},
"outputs": [ "outputs": [],
{
"data": {
"text/plain": [
"139840389979848"
]
},
"execution_count": 35,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [ "source": [
"l = [1, 2, 3]\n", "l = [1, 2, 3]\n",
"id(l)" "idl = id(l)"
] ]
}, },
{ {
@@ -948,7 +937,7 @@
{ {
"data": { "data": {
"text/plain": [ "text/plain": [
"[1, 2, 3, 1, 2, 3]" "4414271936"
] ]
}, },
"execution_count": 36, "execution_count": 36,
@@ -956,31 +945,32 @@
"output_type": "execute_result" "output_type": "execute_result"
} }
], ],
"source": [
"# NBVAL_IGNORE_OUTPUT\n",
"idl"
]
},
{
"cell_type": "code",
"execution_count": 37,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[1, 2, 3, 1, 2, 3]"
]
},
"execution_count": 37,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [ "source": [
"l *= 2\n", "l *= 2\n",
"l" "l"
] ]
}, },
{
"cell_type": "code",
"execution_count": 37,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"139840389979848"
]
},
"execution_count": 37,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"id(l) # same list"
]
},
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 38, "execution_count": 38,
@@ -989,7 +979,7 @@
{ {
"data": { "data": {
"text/plain": [ "text/plain": [
"139840321336880" "True"
] ]
}, },
"execution_count": 38, "execution_count": 38,
@@ -998,29 +988,59 @@
} }
], ],
"source": [ "source": [
"t = (1, 2, 3)\n", "id(l) == idl # same list"
"id(t)"
] ]
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 39, "execution_count": 39,
"metadata": {}, "metadata": {},
"outputs": [],
"source": [
"t = (1, 2, 3)\n",
"idt = id(t)"
]
},
{
"cell_type": "code",
"execution_count": 40,
"metadata": {},
"outputs": [ "outputs": [
{ {
"data": { "data": {
"text/plain": [ "text/plain": [
"139840440497640" "4414275328"
] ]
}, },
"execution_count": 39, "execution_count": 40,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# NBVAL_IGNORE_OUTPUT\n",
"idt"
]
},
{
"cell_type": "code",
"execution_count": 41,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"False"
]
},
"execution_count": 41,
"metadata": {}, "metadata": {},
"output_type": "execute_result" "output_type": "execute_result"
} }
], ],
"source": [ "source": [
"t *= 2\n", "t *= 2\n",
"id(t) # new tuple" "id(t) == idt # new tuple"
] ]
}, },
{ {
@@ -1032,7 +1052,7 @@
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 40, "execution_count": 42,
"metadata": {}, "metadata": {},
"outputs": [ "outputs": [
{ {
@@ -1053,7 +1073,7 @@
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 41, "execution_count": 43,
"metadata": {}, "metadata": {},
"outputs": [ "outputs": [
{ {
@@ -1062,7 +1082,7 @@
"(1, 2, [30, 40, 50, 60])" "(1, 2, [30, 40, 50, 60])"
] ]
}, },
"execution_count": 41, "execution_count": 43,
"metadata": {}, "metadata": {},
"output_type": "execute_result" "output_type": "execute_result"
} }
@@ -1080,7 +1100,7 @@
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 42, "execution_count": 44,
"metadata": {}, "metadata": {},
"outputs": [ "outputs": [
{ {
@@ -1115,7 +1135,7 @@
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 43, "execution_count": 45,
"metadata": {}, "metadata": {},
"outputs": [ "outputs": [
{ {
@@ -1124,7 +1144,7 @@
"['apple', 'banana', 'grape', 'raspberry']" "['apple', 'banana', 'grape', 'raspberry']"
] ]
}, },
"execution_count": 43, "execution_count": 45,
"metadata": {}, "metadata": {},
"output_type": "execute_result" "output_type": "execute_result"
} }
@@ -1136,7 +1156,7 @@
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 44, "execution_count": 46,
"metadata": {}, "metadata": {},
"outputs": [ "outputs": [
{ {
@@ -1145,53 +1165,13 @@
"['grape', 'raspberry', 'apple', 'banana']" "['grape', 'raspberry', 'apple', 'banana']"
] ]
}, },
"execution_count": 44,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"fruits"
]
},
{
"cell_type": "code",
"execution_count": 45,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"['raspberry', 'grape', 'banana', 'apple']"
]
},
"execution_count": 45,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"sorted(fruits, reverse=True)"
]
},
{
"cell_type": "code",
"execution_count": 46,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"['grape', 'apple', 'banana', 'raspberry']"
]
},
"execution_count": 46, "execution_count": 46,
"metadata": {}, "metadata": {},
"output_type": "execute_result" "output_type": "execute_result"
} }
], ],
"source": [ "source": [
"sorted(fruits, key=len)" "fruits"
] ]
}, },
{ {
@@ -1202,7 +1182,7 @@
{ {
"data": { "data": {
"text/plain": [ "text/plain": [
"['raspberry', 'banana', 'grape', 'apple']" "['raspberry', 'grape', 'banana', 'apple']"
] ]
}, },
"execution_count": 47, "execution_count": 47,
@@ -1211,7 +1191,7 @@
} }
], ],
"source": [ "source": [
"sorted(fruits, key=len, reverse=True)" "sorted(fruits, reverse=True)"
] ]
}, },
{ {
@@ -1222,7 +1202,7 @@
{ {
"data": { "data": {
"text/plain": [ "text/plain": [
"['grape', 'raspberry', 'apple', 'banana']" "['grape', 'apple', 'banana', 'raspberry']"
] ]
}, },
"execution_count": 48, "execution_count": 48,
@@ -1231,7 +1211,7 @@
} }
], ],
"source": [ "source": [
"fruits" "sorted(fruits, key=len)"
] ]
}, },
{ {
@@ -1242,7 +1222,7 @@
{ {
"data": { "data": {
"text/plain": [ "text/plain": [
"['apple', 'banana', 'grape', 'raspberry']" "['raspberry', 'banana', 'grape', 'apple']"
] ]
}, },
"execution_count": 49, "execution_count": 49,
@@ -1250,6 +1230,46 @@
"output_type": "execute_result" "output_type": "execute_result"
} }
], ],
"source": [
"sorted(fruits, key=len, reverse=True)"
]
},
{
"cell_type": "code",
"execution_count": 50,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"['grape', 'raspberry', 'apple', 'banana']"
]
},
"execution_count": 50,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"fruits"
]
},
{
"cell_type": "code",
"execution_count": 51,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"['apple', 'banana', 'grape', 'raspberry']"
]
},
"execution_count": 51,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [ "source": [
"fruits.sort()\n", "fruits.sort()\n",
"fruits" "fruits"
@@ -1271,7 +1291,7 @@
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 50, "execution_count": 52,
"metadata": {}, "metadata": {},
"outputs": [ "outputs": [
{ {
@@ -1318,7 +1338,7 @@
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 51, "execution_count": 53,
"metadata": {}, "metadata": {},
"outputs": [ "outputs": [
{ {
@@ -1354,7 +1374,7 @@
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 52, "execution_count": 54,
"metadata": {}, "metadata": {},
"outputs": [ "outputs": [
{ {
@@ -1363,7 +1383,7 @@
"['F', 'D', 'D', 'C', 'C', 'B', 'B', 'A', 'A']" "['F', 'D', 'D', 'C', 'C', 'B', 'B', 'A', 'A']"
] ]
}, },
"execution_count": 52, "execution_count": 54,
"metadata": {}, "metadata": {},
"output_type": "execute_result" "output_type": "execute_result"
} }
@@ -1385,7 +1405,7 @@
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 53, "execution_count": 55,
"metadata": {}, "metadata": {},
"outputs": [ "outputs": [
{ {
@@ -1394,7 +1414,7 @@
"['F', 'F', 'D', 'D', 'C', 'C', 'B', 'B', 'A']" "['F', 'F', 'D', 'D', 'C', 'C', 'B', 'B', 'A']"
] ]
}, },
"execution_count": 53, "execution_count": 55,
"metadata": {}, "metadata": {},
"output_type": "execute_result" "output_type": "execute_result"
} }
@@ -1416,7 +1436,7 @@
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 54, "execution_count": 56,
"metadata": {}, "metadata": {},
"outputs": [ "outputs": [
{ {
@@ -1470,40 +1490,6 @@
"#### Example 2-19. Creating, saving, and loading a large array of floats" "#### Example 2-19. Creating, saving, and loading a large array of floats"
] ]
}, },
{
"cell_type": "code",
"execution_count": 55,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0.5963321947530882"
]
},
"execution_count": 55,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"from array import array\n",
"from random import random\n",
"\n",
"floats = array('d', (random() for i in range(10**7)))\n",
"floats[-1]"
]
},
{
"cell_type": "code",
"execution_count": 56,
"metadata": {},
"outputs": [],
"source": [
"with open('floats.bin', 'wb') as fp:\n",
" floats.tofile(fp)"
]
},
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 57, "execution_count": 57,
@@ -1520,6 +1506,40 @@
"output_type": "execute_result" "output_type": "execute_result"
} }
], ],
"source": [
"from array import array\n",
"from random import random\n",
"\n",
"floats = array('d', (random() for i in range(10**7)))\n",
"floats[-1]"
]
},
{
"cell_type": "code",
"execution_count": 58,
"metadata": {},
"outputs": [],
"source": [
"with open('floats.bin', 'wb') as fp:\n",
" floats.tofile(fp)"
]
},
{
"cell_type": "code",
"execution_count": 59,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0.5963321947530882"
]
},
"execution_count": 59,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [ "source": [
"floats2 = array('d')\n", "floats2 = array('d')\n",
"\n", "\n",
@@ -1531,7 +1551,7 @@
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 58, "execution_count": 60,
"metadata": {}, "metadata": {},
"outputs": [ "outputs": [
{ {
@@ -1540,7 +1560,7 @@
"True" "True"
] ]
}, },
"execution_count": 58, "execution_count": 60,
"metadata": {}, "metadata": {},
"output_type": "execute_result" "output_type": "execute_result"
} }
@@ -1565,7 +1585,7 @@
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 59, "execution_count": 61,
"metadata": {}, "metadata": {},
"outputs": [ "outputs": [
{ {
@@ -1574,7 +1594,7 @@
"5" "5"
] ]
}, },
"execution_count": 59, "execution_count": 61,
"metadata": {}, "metadata": {},
"output_type": "execute_result" "output_type": "execute_result"
} }
@@ -1587,7 +1607,7 @@
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 60, "execution_count": 62,
"metadata": {}, "metadata": {},
"outputs": [ "outputs": [
{ {
@@ -1596,7 +1616,7 @@
"-2" "-2"
] ]
}, },
"execution_count": 60, "execution_count": 62,
"metadata": {}, "metadata": {},
"output_type": "execute_result" "output_type": "execute_result"
} }
@@ -1607,7 +1627,7 @@
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 61, "execution_count": 63,
"metadata": {}, "metadata": {},
"outputs": [ "outputs": [
{ {
@@ -1616,7 +1636,7 @@
"[254, 255, 255, 255, 0, 0, 1, 0, 2, 0]" "[254, 255, 255, 255, 0, 0, 1, 0, 2, 0]"
] ]
}, },
"execution_count": 61, "execution_count": 63,
"metadata": {}, "metadata": {},
"output_type": "execute_result" "output_type": "execute_result"
} }
@@ -1628,7 +1648,7 @@
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 62, "execution_count": 64,
"metadata": {}, "metadata": {},
"outputs": [ "outputs": [
{ {
@@ -1637,7 +1657,7 @@
"array('h', [-2, -1, 1024, 1, 2])" "array('h', [-2, -1, 1024, 1, 2])"
] ]
}, },
"execution_count": 62, "execution_count": 64,
"metadata": {}, "metadata": {},
"output_type": "execute_result" "output_type": "execute_result"
} }
@@ -1663,7 +1683,7 @@
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 63, "execution_count": 65,
"metadata": {}, "metadata": {},
"outputs": [ "outputs": [
{ {
@@ -1672,7 +1692,7 @@
"array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11])" "array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11])"
] ]
}, },
"execution_count": 63, "execution_count": 65,
"metadata": {}, "metadata": {},
"output_type": "execute_result" "output_type": "execute_result"
} }
@@ -1685,7 +1705,7 @@
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 64, "execution_count": 66,
"metadata": {}, "metadata": {},
"outputs": [ "outputs": [
{ {
@@ -1694,7 +1714,7 @@
"numpy.ndarray" "numpy.ndarray"
] ]
}, },
"execution_count": 64, "execution_count": 66,
"metadata": {}, "metadata": {},
"output_type": "execute_result" "output_type": "execute_result"
} }
@@ -1705,7 +1725,7 @@
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 65, "execution_count": 67,
"metadata": {}, "metadata": {},
"outputs": [ "outputs": [
{ {
@@ -1714,7 +1734,7 @@
"(12,)" "(12,)"
] ]
}, },
"execution_count": 65, "execution_count": 67,
"metadata": {}, "metadata": {},
"output_type": "execute_result" "output_type": "execute_result"
} }
@@ -1725,7 +1745,7 @@
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 66, "execution_count": 68,
"metadata": {}, "metadata": {},
"outputs": [ "outputs": [
{ {
@@ -1736,7 +1756,7 @@
" [ 8, 9, 10, 11]])" " [ 8, 9, 10, 11]])"
] ]
}, },
"execution_count": 66, "execution_count": 68,
"metadata": {}, "metadata": {},
"output_type": "execute_result" "output_type": "execute_result"
} }
@@ -1748,7 +1768,7 @@
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 67, "execution_count": 69,
"metadata": {}, "metadata": {},
"outputs": [ "outputs": [
{ {
@@ -1757,7 +1777,7 @@
"array([ 8, 9, 10, 11])" "array([ 8, 9, 10, 11])"
] ]
}, },
"execution_count": 67, "execution_count": 69,
"metadata": {}, "metadata": {},
"output_type": "execute_result" "output_type": "execute_result"
} }
@@ -1768,7 +1788,7 @@
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 68, "execution_count": 70,
"metadata": {}, "metadata": {},
"outputs": [ "outputs": [
{ {
@@ -1777,7 +1797,7 @@
"9" "9"
] ]
}, },
"execution_count": 68, "execution_count": 70,
"metadata": {}, "metadata": {},
"output_type": "execute_result" "output_type": "execute_result"
} }
@@ -1788,7 +1808,7 @@
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 69, "execution_count": 71,
"metadata": {}, "metadata": {},
"outputs": [ "outputs": [
{ {
@@ -1797,7 +1817,7 @@
"array([1, 5, 9])" "array([1, 5, 9])"
] ]
}, },
"execution_count": 69, "execution_count": 71,
"metadata": {}, "metadata": {},
"output_type": "execute_result" "output_type": "execute_result"
} }
@@ -1808,7 +1828,7 @@
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 70, "execution_count": 72,
"metadata": {}, "metadata": {},
"outputs": [ "outputs": [
{ {
@@ -1820,7 +1840,7 @@
" [ 3, 7, 11]])" " [ 3, 7, 11]])"
] ]
}, },
"execution_count": 70, "execution_count": 72,
"metadata": {}, "metadata": {},
"output_type": "execute_result" "output_type": "execute_result"
} }
@@ -1838,7 +1858,7 @@
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 71, "execution_count": 73,
"metadata": {}, "metadata": {},
"outputs": [], "outputs": [],
"source": [ "source": [
@@ -1849,7 +1869,7 @@
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 72, "execution_count": 74,
"metadata": {}, "metadata": {},
"outputs": [], "outputs": [],
"source": [ "source": [
@@ -1858,7 +1878,7 @@
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 73, "execution_count": 75,
"metadata": {}, "metadata": {},
"outputs": [ "outputs": [
{ {
@@ -1867,7 +1887,7 @@
"array([0.29150425, 0.33893554, 0.08112756])" "array([0.29150425, 0.33893554, 0.08112756])"
] ]
}, },
"execution_count": 73, "execution_count": 75,
"metadata": {}, "metadata": {},
"output_type": "execute_result" "output_type": "execute_result"
} }
@@ -1878,7 +1898,7 @@
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 74, "execution_count": 76,
"metadata": {}, "metadata": {},
"outputs": [ "outputs": [
{ {
@@ -1887,7 +1907,7 @@
"array([0.14575213, 0.16946777, 0.04056378])" "array([0.14575213, 0.16946777, 0.04056378])"
] ]
}, },
"execution_count": 74, "execution_count": 76,
"metadata": {}, "metadata": {},
"output_type": "execute_result" "output_type": "execute_result"
} }
@@ -1899,16 +1919,16 @@
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 75, "execution_count": 77,
"metadata": {}, "metadata": {},
"outputs": [ "outputs": [
{ {
"data": { "data": {
"text/plain": [ "text/plain": [
"0.00606649300607387" "True"
] ]
}, },
"execution_count": 75, "execution_count": 77,
"metadata": {}, "metadata": {},
"output_type": "execute_result" "output_type": "execute_result"
} }
@@ -1916,12 +1936,14 @@
"source": [ "source": [
"from time import perf_counter as pc\n", "from time import perf_counter as pc\n",
"\n", "\n",
"t0 = pc(); floats /= 3; pc() - t0" "t0 = pc()\n",
"floats /= 3\n",
"(pc() - t0) < 0.01"
] ]
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 76, "execution_count": 78,
"metadata": {}, "metadata": {},
"outputs": [], "outputs": [],
"source": [ "source": [
@@ -1932,7 +1954,7 @@
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 77, "execution_count": 79,
"metadata": {}, "metadata": {},
"outputs": [ "outputs": [
{ {
@@ -1941,7 +1963,7 @@
"memmap([0.29150425, 0.33893554, 0.08112756])" "memmap([0.29150425, 0.33893554, 0.08112756])"
] ]
}, },
"execution_count": 77, "execution_count": 79,
"metadata": {}, "metadata": {},
"output_type": "execute_result" "output_type": "execute_result"
} }
@@ -1966,7 +1988,7 @@
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 78, "execution_count": 80,
"metadata": {}, "metadata": {},
"outputs": [ "outputs": [
{ {
@@ -1975,7 +1997,7 @@
"deque([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])" "deque([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])"
] ]
}, },
"execution_count": 78, "execution_count": 80,
"metadata": {}, "metadata": {},
"output_type": "execute_result" "output_type": "execute_result"
} }
@@ -1989,7 +2011,7 @@
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 79, "execution_count": 81,
"metadata": {}, "metadata": {},
"outputs": [ "outputs": [
{ {
@@ -1998,7 +2020,7 @@
"deque([7, 8, 9, 0, 1, 2, 3, 4, 5, 6])" "deque([7, 8, 9, 0, 1, 2, 3, 4, 5, 6])"
] ]
}, },
"execution_count": 79, "execution_count": 81,
"metadata": {}, "metadata": {},
"output_type": "execute_result" "output_type": "execute_result"
} }
@@ -2010,7 +2032,7 @@
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 80, "execution_count": 82,
"metadata": {}, "metadata": {},
"outputs": [ "outputs": [
{ {
@@ -2019,7 +2041,7 @@
"deque([1, 2, 3, 4, 5, 6, 7, 8, 9, 0])" "deque([1, 2, 3, 4, 5, 6, 7, 8, 9, 0])"
] ]
}, },
"execution_count": 80, "execution_count": 82,
"metadata": {}, "metadata": {},
"output_type": "execute_result" "output_type": "execute_result"
} }
@@ -2031,7 +2053,7 @@
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 81, "execution_count": 83,
"metadata": {}, "metadata": {},
"outputs": [ "outputs": [
{ {
@@ -2040,7 +2062,7 @@
"deque([-1, 1, 2, 3, 4, 5, 6, 7, 8, 9])" "deque([-1, 1, 2, 3, 4, 5, 6, 7, 8, 9])"
] ]
}, },
"execution_count": 81, "execution_count": 83,
"metadata": {}, "metadata": {},
"output_type": "execute_result" "output_type": "execute_result"
} }
@@ -2052,7 +2074,7 @@
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 82, "execution_count": 84,
"metadata": {}, "metadata": {},
"outputs": [ "outputs": [
{ {
@@ -2061,7 +2083,7 @@
"deque([3, 4, 5, 6, 7, 8, 9, 11, 22, 33])" "deque([3, 4, 5, 6, 7, 8, 9, 11, 22, 33])"
] ]
}, },
"execution_count": 82, "execution_count": 84,
"metadata": {}, "metadata": {},
"output_type": "execute_result" "output_type": "execute_result"
} }
@@ -2073,7 +2095,7 @@
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 83, "execution_count": 85,
"metadata": {}, "metadata": {},
"outputs": [ "outputs": [
{ {
@@ -2082,7 +2104,7 @@
"deque([40, 30, 20, 10, 3, 4, 5, 6, 7, 8])" "deque([40, 30, 20, 10, 3, 4, 5, 6, 7, 8])"
] ]
}, },
"execution_count": 83, "execution_count": 85,
"metadata": {}, "metadata": {},
"output_type": "execute_result" "output_type": "execute_result"
} }
@@ -2108,7 +2130,7 @@
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 84, "execution_count": 86,
"metadata": {}, "metadata": {},
"outputs": [], "outputs": [],
"source": [ "source": [
@@ -2117,7 +2139,7 @@
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 85, "execution_count": 87,
"metadata": {}, "metadata": {},
"outputs": [ "outputs": [
{ {
@@ -2144,7 +2166,7 @@
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 86, "execution_count": 88,
"metadata": {}, "metadata": {},
"outputs": [ "outputs": [
{ {
@@ -2153,7 +2175,7 @@
"[0, '1', 5, 6, '9', 14, 19, '23', 28, '28']" "[0, '1', 5, 6, '9', 14, 19, '23', 28, '28']"
] ]
}, },
"execution_count": 86, "execution_count": 88,
"metadata": {}, "metadata": {},
"output_type": "execute_result" "output_type": "execute_result"
} }
@@ -2166,7 +2188,7 @@
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 87, "execution_count": 89,
"metadata": {}, "metadata": {},
"outputs": [ "outputs": [
{ {
@@ -2175,7 +2197,7 @@
"[0, '1', 14, 19, '23', 28, '28', 5, 6, '9']" "[0, '1', 14, 19, '23', 28, '28', 5, 6, '9']"
] ]
}, },
"execution_count": 87, "execution_count": 89,
"metadata": {}, "metadata": {},
"output_type": "execute_result" "output_type": "execute_result"
} }
@@ -2208,7 +2230,7 @@
"name": "python", "name": "python",
"nbconvert_exporter": "python", "nbconvert_exporter": "python",
"pygments_lexer": "ipython3", "pygments_lexer": "ipython3",
"version": "3.7.2" "version": "3.8.0"
} }
}, },
"nbformat": 4, "nbformat": 4,

View File

@@ -1,3 +1,41 @@
"""
bisect_demo.py
Demonstration of ``bisect.bisect``::
>>> import bisect
>>> demo(bisect.bisect)
31 @ 14 | | | | | | | | | | | | | |31
30 @ 14 | | | | | | | | | | | | | |30
29 @ 13 | | | | | | | | | | | | |29
23 @ 11 | | | | | | | | | | |23
22 @ 9 | | | | | | | | |22
10 @ 5 | | | | |10
8 @ 5 | | | | |8
5 @ 3 | | |5
2 @ 1 |2
1 @ 1 |1
0 @ 0 0
Demonstration of ``bisect.bisect_left``::
>>> demo(bisect.bisect_left)
31 @ 14 | | | | | | | | | | | | | |31
30 @ 13 | | | | | | | | | | | | |30
29 @ 12 | | | | | | | | | | | |29
23 @ 9 | | | | | | | | |23
22 @ 9 | | | | | | | | |22
10 @ 5 | | | | |10
8 @ 4 | | | |8
5 @ 2 | |5
2 @ 1 |2
1 @ 0 1
0 @ 0 0
"""
# BEGIN BISECT_DEMO # BEGIN BISECT_DEMO
import bisect import bisect
import sys import sys

View File

@@ -1,3 +1,16 @@
"""
metro_lat_long.py
Demonstration of nested tuple unpacking::
>>> main()
| lat. | long.
Mexico City | 19.4333 | -99.1333
New York-Newark | 40.8086 | -74.0204
Sao Paulo | -23.5478 | -46.6358
"""
metro_areas = [ metro_areas = [
('Tokyo', 'JP', 36.933, (35.689722, 139.691667)), # <1> ('Tokyo', 'JP', 36.933, (35.689722, 139.691667)), # <1>
('Delhi NCR', 'IN', 21.935, (28.613889, 77.208889)), ('Delhi NCR', 'IN', 21.935, (28.613889, 77.208889)),
@@ -6,8 +19,12 @@ metro_areas = [
('Sao Paulo', 'BR', 19.649, (-23.547778, -46.635833)), ('Sao Paulo', 'BR', 19.649, (-23.547778, -46.635833)),
] ]
print('{:15} | {:^9} | {:^9}'.format('', 'lat.', 'long.')) def main():
fmt = '{:15} | {:9.4f} | {:9.4f}' print('{:15} | {:^9} | {:^9}'.format('', 'lat.', 'long.'))
for name, cc, pop, (latitude, longitude) in metro_areas: # <2> fmt = '{:15} | {:9.4f} | {:9.4f}'
if longitude <= 0: # <3> for name, cc, pop, (latitude, longitude) in metro_areas: # <2>
print(fmt.format(name, latitude, longitude)) if longitude <= 0: # <3>
print(fmt.format(name, latitude, longitude))
if __name__ == '__main__':
main()

4
02-array-seq/test.sh Executable file
View File

@@ -0,0 +1,4 @@
#!/bin/bash
python3 -m doctest bisect_demo.py
python3 -m doctest metro_lat_long.py
pytest -q --nbval