|
40 | 40 | " self._n = n\n",
|
41 | 41 | " self._R = R\n",
|
42 | 42 | " \n",
|
| 43 | + " self._interior_angle = None\n", |
| 44 | + " self._side_length = None\n", |
| 45 | + " self._apothem = None\n", |
| 46 | + " self._area = None\n", |
| 47 | + " self._perimeter = None\n", |
| 48 | + " \n", |
43 | 49 | " def __repr__(self):\n",
|
44 | 50 | " return f'Polygon(n={self._n}, R={self._R})'\n",
|
45 | 51 | " \n",
|
|
57 | 63 | " \n",
|
58 | 64 | " @property\n",
|
59 | 65 | " def interior_angle(self):\n",
|
60 |
| - " return (self._n - 2) * 180 / self._n\n", |
| 66 | + " if self._interior_angle is None:\n", |
| 67 | + " self._interior_angle = (self._n - 2) * 180 / self._n\n", |
| 68 | + " return self._interior_angle\n", |
61 | 69 | "\n",
|
62 | 70 | " @property\n",
|
63 | 71 | " def side_length(self):\n",
|
64 |
| - " return 2 * self._R * math.sin(math.pi / self._n)\n", |
| 72 | + " if self._side_length is None:\n", |
| 73 | + " self._side_length = 2 * self._R * math.sin(math.pi / self._n)\n", |
| 74 | + " return self._side_length\n", |
65 | 75 | " \n",
|
66 | 76 | " @property\n",
|
67 | 77 | " def apothem(self):\n",
|
68 |
| - " return self._R * math.cos(math.pi / self._n)\n", |
| 78 | + " if self._apothem is None:\n", |
| 79 | + " self._apothem = self._R * math.cos(math.pi / self._n)\n", |
| 80 | + " return self._apothem\n", |
69 | 81 | " \n",
|
70 | 82 | " @property\n",
|
71 | 83 | " def area(self):\n",
|
72 |
| - " return self._n / 2 * self.side_length * self.apothem\n", |
| 84 | + " if self._area is None:\n", |
| 85 | + " self._area = self._n / 2 * self.side_length * self.apothem\n", |
| 86 | + " return self._area\n", |
73 | 87 | " \n",
|
74 | 88 | " @property\n",
|
75 | 89 | " def perimeter(self):\n",
|
76 |
| - " return self._n * self.side_length\n", |
| 90 | + " if self._perimeter is None:\n", |
| 91 | + " self._perimeter = self._n * self.side_length\n", |
| 92 | + " return self._perimeter\n", |
77 | 93 | " \n",
|
78 | 94 | " def __eq__(self, other):\n",
|
79 | 95 | " if isinstance(other, self.__class__):\n",
|
|
98 | 114 | },
|
99 | 115 | {
|
100 | 116 | "cell_type": "code",
|
101 |
| - "execution_count": 18, |
| 117 | + "execution_count": 2, |
102 | 118 | "metadata": {
|
103 | 119 | "collapsed": true
|
104 | 120 | },
|
|
138 | 154 | },
|
139 | 155 | {
|
140 | 156 | "cell_type": "code",
|
141 |
| - "execution_count": 4, |
| 157 | + "execution_count": 3, |
142 | 158 | "metadata": {
|
143 | 159 | "collapsed": true
|
144 | 160 | },
|
|
173 | 189 | },
|
174 | 190 | {
|
175 | 191 | "cell_type": "code",
|
176 |
| - "execution_count": 23, |
| 192 | + "execution_count": 4, |
177 | 193 | "metadata": {
|
178 | 194 | "collapsed": true
|
179 | 195 | },
|
|
208 | 224 | },
|
209 | 225 | {
|
210 | 226 | "cell_type": "code",
|
211 |
| - "execution_count": 24, |
| 227 | + "execution_count": 5, |
212 | 228 | "metadata": {},
|
213 | 229 | "outputs": [
|
214 | 230 | {
|
|
236 | 252 | },
|
237 | 253 | {
|
238 | 254 | "cell_type": "code",
|
239 |
| - "execution_count": 26, |
| 255 | + "execution_count": 6, |
240 | 256 | "metadata": {},
|
241 | 257 | "outputs": [
|
242 | 258 | {
|
|
245 | 261 | "[]"
|
246 | 262 | ]
|
247 | 263 | },
|
248 |
| - "execution_count": 26, |
| 264 | + "execution_count": 6, |
249 | 265 | "metadata": {},
|
250 | 266 | "output_type": "execute_result"
|
251 | 267 | }
|
|
263 | 279 | },
|
264 | 280 | {
|
265 | 281 | "cell_type": "code",
|
266 |
| - "execution_count": 19, |
| 282 | + "execution_count": 7, |
267 | 283 | "metadata": {
|
268 | 284 | "collapsed": true
|
269 | 285 | },
|
|
302 | 318 | },
|
303 | 319 | {
|
304 | 320 | "cell_type": "code",
|
305 |
| - "execution_count": 20, |
| 321 | + "execution_count": 8, |
306 | 322 | "metadata": {
|
307 | 323 | "collapsed": true
|
308 | 324 | },
|
|
313 | 329 | },
|
314 | 330 | {
|
315 | 331 | "cell_type": "code",
|
316 |
| - "execution_count": 21, |
| 332 | + "execution_count": 9, |
317 | 333 | "metadata": {},
|
318 | 334 | "outputs": [
|
319 | 335 | {
|
|
333 | 349 | },
|
334 | 350 | {
|
335 | 351 | "cell_type": "code",
|
336 |
| - "execution_count": 22, |
| 352 | + "execution_count": 10, |
337 | 353 | "metadata": {},
|
338 | 354 | "outputs": [
|
339 | 355 | {
|
|
360 | 376 | },
|
361 | 377 | {
|
362 | 378 | "cell_type": "code",
|
363 |
| - "execution_count": 32, |
| 379 | + "execution_count": 11, |
364 | 380 | "metadata": {
|
365 | 381 | "collapsed": true
|
366 | 382 | },
|
|
402 | 418 | },
|
403 | 419 | {
|
404 | 420 | "cell_type": "code",
|
405 |
| - "execution_count": 33, |
| 421 | + "execution_count": 12, |
406 | 422 | "metadata": {},
|
407 | 423 | "outputs": [
|
408 | 424 | {
|
|
412 | 428 | "traceback": [
|
413 | 429 | "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
|
414 | 430 | "\u001b[1;31mAttributeError\u001b[0m Traceback (most recent call last)",
|
415 |
| - "\u001b[1;32m<ipython-input-33-a69efa15bd2e>\u001b[0m in \u001b[0;36m<module>\u001b[1;34m()\u001b[0m\n\u001b[0;32m 1\u001b[0m \u001b[0mpolygons\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mPolygons\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;36m10\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;36m1\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> 2\u001b[1;33m \u001b[0mprint\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mpolygons\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mmax_efficiency_polygon\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m", |
416 |
| - "\u001b[1;32m<ipython-input-32-69e2f4e6f9be>\u001b[0m in \u001b[0;36mmax_efficiency_polygon\u001b[1;34m(self)\u001b[0m\n\u001b[0;32m 19\u001b[0m \u001b[1;32mdef\u001b[0m \u001b[0mmax_efficiency_polygon\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 20\u001b[0m \u001b[1;32mif\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_max_efficiency_polygon\u001b[0m \u001b[1;32mis\u001b[0m \u001b[1;32mNone\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m---> 21\u001b[1;33m sorted_polygons = sorted(self._polygons, \n\u001b[0m\u001b[0;32m 22\u001b[0m \u001b[0mkey\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;32mlambda\u001b[0m \u001b[0mp\u001b[0m\u001b[1;33m:\u001b[0m \u001b[0mp\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0marea\u001b[0m\u001b[1;33m/\u001b[0m\u001b[0mp\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mperimeter\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 23\u001b[0m reverse=True)\n", |
| 431 | + "\u001b[1;32m<ipython-input-12-a69efa15bd2e>\u001b[0m in \u001b[0;36m<module>\u001b[1;34m()\u001b[0m\n\u001b[0;32m 1\u001b[0m \u001b[0mpolygons\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mPolygons\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;36m10\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;36m1\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> 2\u001b[1;33m \u001b[0mprint\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mpolygons\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mmax_efficiency_polygon\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m", |
| 432 | + "\u001b[1;32m<ipython-input-11-69e2f4e6f9be>\u001b[0m in \u001b[0;36mmax_efficiency_polygon\u001b[1;34m(self)\u001b[0m\n\u001b[0;32m 19\u001b[0m \u001b[1;32mdef\u001b[0m \u001b[0mmax_efficiency_polygon\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 20\u001b[0m \u001b[1;32mif\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_max_efficiency_polygon\u001b[0m \u001b[1;32mis\u001b[0m \u001b[1;32mNone\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m---> 21\u001b[1;33m sorted_polygons = sorted(self._polygons, \n\u001b[0m\u001b[0;32m 22\u001b[0m \u001b[0mkey\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;32mlambda\u001b[0m \u001b[0mp\u001b[0m\u001b[1;33m:\u001b[0m \u001b[0mp\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0marea\u001b[0m\u001b[1;33m/\u001b[0m\u001b[0mp\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mperimeter\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 23\u001b[0m reverse=True)\n", |
417 | 433 | "\u001b[1;31mAttributeError\u001b[0m: 'Polygons' object has no attribute '_polygons'"
|
418 | 434 | ]
|
419 | 435 | }
|
|
434 | 450 | },
|
435 | 451 | {
|
436 | 452 | "cell_type": "code",
|
437 |
| - "execution_count": 35, |
| 453 | + "execution_count": 13, |
438 | 454 | "metadata": {
|
439 | 455 | "collapsed": true
|
440 | 456 | },
|
|
476 | 492 | },
|
477 | 493 | {
|
478 | 494 | "cell_type": "code",
|
479 |
| - "execution_count": 36, |
| 495 | + "execution_count": 14, |
480 | 496 | "metadata": {},
|
481 | 497 | "outputs": [
|
482 | 498 | {
|
|
0 commit comments