計算機科学のブログ

ほしい物リスト

Python - Formatted String Literals: Make Charts from Data - f-string, svg

Head First Python: A Learner’s Guide to the Fundamentals of Python Programming, A Brain-Friendly GuidePaul Barry(著)、 O’Reilly Mediaの Chapter 5.(Formatted String Literals: Make Charts from Data)、EXERCISE(271/682)の解答を求めてみる。

Jupyter(コード、入出力結果)

Charts.ipynb

_,_,_,_,times,average,converts = swimclub.read_swim_data(filename)
times
['1:27.95', '1:21.07', '1:30.96', '1:23.22', '1:27.95', '1:28.30']
average
'1:26.58'
converts
[8795, 8107, 9096, 8322, 8795, 8830]
from_max = max(converts)
from_max
9096
svgs = ''
import hfpy_utils
bar_width = hfpy_utils.convert2range(converts[n], 0, from_max, 0, 400)
---------------------------------------------------------------------------

NameError                                 Traceback (most recent call last)

Cell In[15], line 1
----> 1 bar_width = hfpy_utils.convert2range(converts[n], 0, from_max, 0, 400)


NameError: name 'n' is not defined
for n, t in enumerate(times):
    bar_width = hfpy_utils.convert2range(converts[n], 0, from_max, 0, 400)
    svg = f'''
<svg height="30" width="400">
    <rect height="30" width="{bar_width}" sttyle="fill:rgb(0,0,255);">
</svg>
{t}<br>
'''
    svgs += svg
svgs
'\n<svg height="30" width="400">\n    <rect height="30" width="386.76" sttyle="fill:rgb(0,0,255);">\n</svg>\n1:27.95<br>\n\n<svg height="30" width="400">\n    <rect height="30" width="356.51" sttyle="fill:rgb(0,0,255);">\n</svg>\n1:21.07<br>\n\n<svg height="30" width="400">\n    <rect height="30" width="400.0" sttyle="fill:rgb(0,0,255);">\n</svg>\n1:30.96<br>\n\n<svg height="30" width="400">\n    <rect height="30" width="365.96" sttyle="fill:rgb(0,0,255);">\n</svg>\n1:23.22<br>\n\n<svg height="30" width="400">\n    <rect height="30" width="386.76" sttyle="fill:rgb(0,0,255);">\n</svg>\n1:27.95<br>\n\n<svg height="30" width="400">\n    <rect height="30" width="388.3" sttyle="fill:rgb(0,0,255);">\n</svg>\n1:28.30<br>\n'
print(svgs)
<svg height="30" width="400">
    <rect height="30" width="386.76" sttyle="fill:rgb(0,0,255);">
</svg>
1:27.95<br>

<svg height="30" width="400">
    <rect height="30" width="356.51" sttyle="fill:rgb(0,0,255);">
</svg>
1:21.07<br>

<svg height="30" width="400">
    <rect height="30" width="400.0" sttyle="fill:rgb(0,0,255);">
</svg>
1:30.96<br>

<svg height="30" width="400">
    <rect height="30" width="365.96" sttyle="fill:rgb(0,0,255);">
</svg>
1:23.22<br>

<svg height="30" width="400">
    <rect height="30" width="386.76" sttyle="fill:rgb(0,0,255);">
</svg>
1:27.95<br>

<svg height="30" width="400">
    <rect height="30" width="388.3" sttyle="fill:rgb(0,0,255);">
</svg>
1:28.30<br>