That is the kind of question you should answer yourself.
[pythonimport string
characters = string.digits + string.ascii_uppercase
indexes = (9, 10, 11)
a = (characters[x] for x in indexes)
b = list(a)
c = "-".join(b)
print("characters", characters)
print("a", a)
print("b", b)
print("c", c))[/python]
Output:
characters 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ
a <generator object <genexpr> at 0x00000128B57E3300>
b ['9', 'A', 'B']
c 9-A-B
From the output you can see:
characters is a str that contains all the characters you'll use for any number base up to 36.
(characters[x] for x in indexes) is a generator object.
The generator will return a series. We can use list() to unpack the series so we can print it out. The printed series show that generator object converts the indexes from ints to characters.
join() if is a str method. You can read about it here:
https://docs.python.org/3/library/stdtyp...l#str.join
In my example I used '-' as the separator so it is more easily seen.
Now do you know what line 16 does?