If you meen this
1 * 1 = 1
12 * 1 = 12
123 * 1 = 123
1234 * 1 = 1234
12345 * 1 = 12345
123456 * 1 = 123456
1234567 * 1 = 1234567
12345678 * 1 = 12345678
123456789 * 1 = 123456789
then you need ie. {:9s} (for string) to add extra spaces (or {:9d} for int)
def triangle(n):
a = 0
b = 1
for i in range(1, n+1):
a = 10*a + i
print('{:9d} * {} = {}'.format(a, b, a*b))
triangle(9)
See: pyformat.info
EDIT: to use n instead of 9 you need {:{}d} and .format(a, n, ...)
print('{:{}d} * {} = {}'.format(a, n, b, a*b))
EDIT: version with two arguments
def triangle(n, b):
a = 0
for i in range(1, n+1):
a = 10*a + i
print('{:{}d} * {} = {}'.format(a, n, b, a*b))
triangle(5, 3)
1 * 3 = 3
12 * 3 = 36
123 * 3 = 369
1234 * 3 = 3702
12345 * 3 = 37035
EDIT: some explanations:
Line a = 10*a + i:
You used string and concatenation to create string "1234" from string "123" - "1234" = "123" + "4". I use integer and *10 to create integer 1234 from integer 123 - 1234 = 123*10 + 4. (and now I can use integer 1234 to calcutate 1234*b in next line)
Line print('{:{}d} * {} = {}'.format(a, n, b, a*b))
To make more readable you can use
numbers (because arguments in format() are numbered - 0,1,2,...)
print('{0:{1}d} * {2} = {3}'.format(a, n, b, a*b))
or even (d means decimal or int)
print('{0:{1:d}d} * {2:d} = {3:d}'.format(a, n, b, a*b))
names
print('{x:{y}d} * {z} = {v}'.format(x=a, y=n, z=b, v=a*b))
or even
print('{x:{y:d}d} * {z:d} = {v:d}'.format(x=a, y=n, z=b, v=a*b))
{:9} (or {x:9d}) will get integer value and create 9 char length text aligned to right so you get extra spaces on left side.
Try {:<9} to get 9 char length text aligned to left
1 * 3 = 3
12 * 3 = 36
123 * 3 = 369
1234 * 3 = 3702
12345 * 3 = 37035
123456 * 3 = 370368
1234567 * 3 = 3703701
12345678 * 3 = 37037034
123456789 * 3 = 370370367
or {:^9} to get centered text
1 * 3 = 3
12 * 3 = 36
123 * 3 = 369
1234 * 3 = 3702
12345 * 3 = 37035
123456 * 3 = 370368
1234567 * 3 = 3703701
12345678 * 3 = 37037034
123456789 * 3 = 370370367
See more: pyformat.info