I have a school exercise, but im struggling to understand how to do the multiplication table. Could someone please help me?
So depending on the number and columns_number the multiplication table has to be different. I have tried to solve this this way:
number1 = 4
column1 = 3
for row in range(column1):
for y in range(10):
print("0" str(number1) " " "x" "0" "")
But i dont know what to put in the print statement. Could someone please explain me how to solve this exercise
CodePudding user response:
You can try something like this,
def multiplication_table(num, columns):
output = ""
for i in range(1, 10):
output = f"{num} x {i} = {str(num * i).zill(2)}"
if i % columns == 0:
output = "\n"
else:
output = "\t"
return output
print(multiplication_table(8, 2))
Output -
8 x 1 = 08 8 x 2 = 16
8 x 3 = 24 8 x 4 = 32
8 x 5 = 40 8 x 6 = 48
8 x 7 = 56 8 x 8 = 64
8 x 9 = 72
CodePudding user response:
It will be easier to understand if you break it down into its component parts.
First of all build a list of strings where each string represents a 'cell' in your multiplication table.
Once you have that you can handle the output formatting.
Something like this:
def mtable(x, c):
vlist = []
for i in range(1, 10):
vlist.append(f'{x:02d} x {i:02d} = {x*i:02d}')
for i in range(0, 10, c):
print('\t'.join(vlist[i:i c]))
mtable(4, 3)
Output:
04 x 01 = 04 04 x 02 = 08 04 x 03 = 12
04 x 04 = 16 04 x 05 = 20 04 x 06 = 24
04 x 07 = 28 04 x 08 = 32 04 x 09 = 36
CodePudding user response:
You need something to input numbers:
def get_number(text,rng):
"""Ask with 'text' until the given input is int()-able and
inside range 'rng'. Return the integer - present error and
loop if not an int input or outside of specified."""
while True:
try:
t = input(text)
n = int(t)
if n in rng:
return n
print("Invalid number, use integer in", rng)
except ValueError:
print("Invalid number, use integer in", rng)
You need something to create the table - string concatenation is wasteful, so use lists instead and '--'.join("1","3"])
to joint them back into a string.
To format the numbers, use pythons Format Specification Mini-Language to right-align and pad numbers in strings:
def mult_table(num, times, cols):
out = [[]]
# calculate max width for spacing reasons
maxw =len(str(num*times))
for i in range(1, times 1):
# add to last list inside out
# format numbers right aligned '>' with leading '0' to 'maxw' digits
out[-1].append( f"{num:>0{maxw}} x {i:>0{maxw}} = {num * i:>0{maxw}}")
# if out's last list reached length you need a new line, add new []
if len(out[-1])==cols:
out.append([])
# create the texts from your list of lists
return '\n'.join(' '.join(e) for e in out)
Then you need to get some inputs:
n = get_number("What table? ", range(1,21))
t = get_number("Up to what multiplyer? ", range(1,51))
c = get_number("How many columns? ", range(1, n 1))
print(mult_table(n, t, c))
To get:
What table? 8
Up to what multiplyer? 12
How many columns? 3
08 x 01 = :8 08 x 02 = 16 08 x 03 = 24
08 x 04 = 32 08 x 05 = 40 08 x 06 = 48
08 x 07 = 56 08 x 08 = 64 08 x 09 = 72
08 x 10 = 80 08 x 11 = 88 08 x 12 = 96
What table? 13
Up to what multiplyer? 42
How many columns? 7
013 x 001 = 013 013 x 002 = 026 013 x 003 = 039 013 x 004 = 052 013 x 005 = 065 013 x 006 = 078 013 x 007 = 091
013 x 008 = 104 013 x 009 = 117 013 x 010 = 130 013 x 011 = 143 013 x 012 = 156 013 x 013 = 169 013 x 014 = 182
013 x 015 = 195 013 x 016 = 208 013 x 017 = 221 013 x 018 = 234 013 x 019 = 247 013 x 020 = 260 013 x 021 = 273
013 x 022 = 286 013 x 023 = 299 013 x 024 = 312 013 x 025 = 325 013 x 026 = 338 013 x 027 = 351 013 x 028 = 364
013 x 029 = 377 013 x 030 = 390 013 x 031 = 403 013 x 032 = 416 013 x 033 = 429 013 x 034 = 442 013 x 035 = 455
013 x 036 = 468 013 x 037 = 481 013 x 038 = 494 013 x 039 = 507 013 x 040 = 520 013 x 041 = 533 013 x 042 = 546
# handles bad input gracefully
What table? apple
Invalid number, use integer in range(1, 21)
What table? 42
Invalid number, use integer in range(1, 21)
What table?