/fstring_times_table

Playing with Python 3.6+ f-string to make a times table.

Primary LanguagePython

Using Python 3.6+ f-string to make a times table

Python f-string is pretty powerful and playful. This project shows how to use f-string to make a times table and then convert it into a Markdown string (but you could actually convert into all kinds of different table string for different purposes, e.g., Latex, RST, CSV, etc.).

The code to make the actual times table is very simple. You would get a zip object from it.

def times_table(int_start=1, int_end=9):
    '''
    Using Python 3.6+ f-string to make a times table.

    Parameters
    -----------
    int_start : int
        The start of the times table.

        Default = 1.

    int_end : int
        The end of the times table.

        Default = 9.

    Returns
    --------
    zip : zip object
        The times table as a zip object.
    '''

    int_end = int_end + 1

    list_tbl = [
        [f'{x} × {y} = {x * y}' for y in range(int_start, int_end)]
        for x in range(int_start, int_end)
    ]

    return zip(*list_tbl)

With the zip object, you can then use pytablewriter to convert it into a Markdown string. Note that, on Windows, the code with pytablewriter needs to be guarded, i.e., you need to put them into the if __name__ == '__main__' block.

if __name__ == '__main__':

    int_start = 1

    int_end = 9

    # make a times table from 1 to 9
    list_tbl = list(times_table(int_start, int_end))

    list_header = list(range(int_start, int_end + 1))

    # use pytablewriter to make a markdown table
    writer = pytablewriter.MarkdownTableWriter()

    writer.headers = list_header

    writer.value_matrix = list_tbl

    # copy table string to clipboard
    pyperclip.copy(writer.dumps())

    writer.write_table()

Then, you would get the following times table.

Times table from 1 to 9

1 2 3 4 5 6 7 8 9
1 × 1 = 1 2 × 1 = 2 3 × 1 = 3 4 × 1 = 4 5 × 1 = 5 6 × 1 = 6 7 × 1 = 7 8 × 1 = 8 9 × 1 = 9
1 × 2 = 2 2 × 2 = 4 3 × 2 = 6 4 × 2 = 8 5 × 2 = 10 6 × 2 = 12 7 × 2 = 14 8 × 2 = 16 9 × 2 = 18
1 × 3 = 3 2 × 3 = 6 3 × 3 = 9 4 × 3 = 12 5 × 3 = 15 6 × 3 = 18 7 × 3 = 21 8 × 3 = 24 9 × 3 = 27
1 × 4 = 4 2 × 4 = 8 3 × 4 = 12 4 × 4 = 16 5 × 4 = 20 6 × 4 = 24 7 × 4 = 28 8 × 4 = 32 9 × 4 = 36
1 × 5 = 5 2 × 5 = 10 3 × 5 = 15 4 × 5 = 20 5 × 5 = 25 6 × 5 = 30 7 × 5 = 35 8 × 5 = 40 9 × 5 = 45
1 × 6 = 6 2 × 6 = 12 3 × 6 = 18 4 × 6 = 24 5 × 6 = 30 6 × 6 = 36 7 × 6 = 42 8 × 6 = 48 9 × 6 = 54
1 × 7 = 7 2 × 7 = 14 3 × 7 = 21 4 × 7 = 28 5 × 7 = 35 6 × 7 = 42 7 × 7 = 49 8 × 7 = 56 9 × 7 = 63
1 × 8 = 8 2 × 8 = 16 3 × 8 = 24 4 × 8 = 32 5 × 8 = 40 6 × 8 = 48 7 × 8 = 56 8 × 8 = 64 9 × 8 = 72
1 × 9 = 9 2 × 9 = 18 3 × 9 = 27 4 × 9 = 36 5 × 9 = 45 6 × 9 = 54 7 × 9 = 63 8 × 9 = 72 9 × 9 = 81

The string you get is the following.

|    1    |    2     |    3     |    4     |    5     |    6     |    7     |    8     |    9     |
|---------|----------|----------|----------|----------|----------|----------|----------|----------|
|1 × 1 = 1|2 × 1 = 2 |3 × 1 = 3 |4 × 1 = 4 |5 × 1 = 5 |6 × 1 = 6 |7 × 1 = 7 |8 × 1 = 8 |9 × 1 = 9 |
|1 × 2 = 2|2 × 2 = 4 |3 × 2 = 6 |4 × 2 = 8 |5 × 2 = 10|6 × 2 = 12|7 × 2 = 14|8 × 2 = 16|9 × 2 = 18|
|1 × 3 = 3|2 × 3 = 6 |3 × 3 = 9 |4 × 3 = 12|5 × 3 = 15|6 × 3 = 18|7 × 3 = 21|8 × 3 = 24|9 × 3 = 27|
|1 × 4 = 4|2 × 4 = 8 |3 × 4 = 12|4 × 4 = 16|5 × 4 = 20|6 × 4 = 24|7 × 4 = 28|8 × 4 = 32|9 × 4 = 36|
|1 × 5 = 5|2 × 5 = 10|3 × 5 = 15|4 × 5 = 20|5 × 5 = 25|6 × 5 = 30|7 × 5 = 35|8 × 5 = 40|9 × 5 = 45|
|1 × 6 = 6|2 × 6 = 12|3 × 6 = 18|4 × 6 = 24|5 × 6 = 30|6 × 6 = 36|7 × 6 = 42|8 × 6 = 48|9 × 6 = 54|
|1 × 7 = 7|2 × 7 = 14|3 × 7 = 21|4 × 7 = 28|5 × 7 = 35|6 × 7 = 42|7 × 7 = 49|8 × 7 = 56|9 × 7 = 63|
|1 × 8 = 8|2 × 8 = 16|3 × 8 = 24|4 × 8 = 32|5 × 8 = 40|6 × 8 = 48|7 × 8 = 56|8 × 8 = 64|9 × 8 = 72|
|1 × 9 = 9|2 × 9 = 18|3 × 9 = 27|4 × 9 = 36|5 × 9 = 45|6 × 9 = 54|7 × 9 = 63|8 × 9 = 72|9 × 9 = 81|

You can easily get the string in other formats. All you need to do is change the writer from Markdown to the desired one. See the documentation of pytablewriter for more details.

Here is an example for reStructuredText.

writer = pytablewriter.RstGridTableWriter()
.. table::

    +---------+----------+----------+----------+----------+----------+----------+----------+----------+
    |    1    |    2     |    3     |    4     |    5     |    6     |    7     |    8     |    9     |
    +=========+==========+==========+==========+==========+==========+==========+==========+==========+
    |1 × 1 = 1|2 × 1 = 2 |3 × 1 = 3 |4 × 1 = 4 |5 × 1 = 5 |6 × 1 = 6 |7 × 1 = 7 |8 × 1 = 8 |9 × 1 = 9 |
    +---------+----------+----------+----------+----------+----------+----------+----------+----------+
    |1 × 2 = 2|2 × 2 = 4 |3 × 2 = 6 |4 × 2 = 8 |5 × 2 = 10|6 × 2 = 12|7 × 2 = 14|8 × 2 = 16|9 × 2 = 18|
    +---------+----------+----------+----------+----------+----------+----------+----------+----------+
    |1 × 3 = 3|2 × 3 = 6 |3 × 3 = 9 |4 × 3 = 12|5 × 3 = 15|6 × 3 = 18|7 × 3 = 21|8 × 3 = 24|9 × 3 = 27|
    +---------+----------+----------+----------+----------+----------+----------+----------+----------+
    |1 × 4 = 4|2 × 4 = 8 |3 × 4 = 12|4 × 4 = 16|5 × 4 = 20|6 × 4 = 24|7 × 4 = 28|8 × 4 = 32|9 × 4 = 36|
    +---------+----------+----------+----------+----------+----------+----------+----------+----------+
    |1 × 5 = 5|2 × 5 = 10|3 × 5 = 15|4 × 5 = 20|5 × 5 = 25|6 × 5 = 30|7 × 5 = 35|8 × 5 = 40|9 × 5 = 45|
    +---------+----------+----------+----------+----------+----------+----------+----------+----------+
    |1 × 6 = 6|2 × 6 = 12|3 × 6 = 18|4 × 6 = 24|5 × 6 = 30|6 × 6 = 36|7 × 6 = 42|8 × 6 = 48|9 × 6 = 54|
    +---------+----------+----------+----------+----------+----------+----------+----------+----------+
    |1 × 7 = 7|2 × 7 = 14|3 × 7 = 21|4 × 7 = 28|5 × 7 = 35|6 × 7 = 42|7 × 7 = 49|8 × 7 = 56|9 × 7 = 63|
    +---------+----------+----------+----------+----------+----------+----------+----------+----------+
    |1 × 8 = 8|2 × 8 = 16|3 × 8 = 24|4 × 8 = 32|5 × 8 = 40|6 × 8 = 48|7 × 8 = 56|8 × 8 = 64|9 × 8 = 72|
    +---------+----------+----------+----------+----------+----------+----------+----------+----------+
    |1 × 9 = 9|2 × 9 = 18|3 × 9 = 27|4 × 9 = 36|5 × 9 = 45|6 × 9 = 54|7 × 9 = 63|8 × 9 = 72|9 × 9 = 81|
    +---------+----------+----------+----------+----------+----------+----------+----------+----------+

Contributing

高斯羽 博士 (Dr. Gāo, Sī Yǔ)

Licence

MIT