1

I am trying to print a 10x10 times table using for loops.

Here's my attempt:

for x in range (1, 11):
    for y in range (1, 11):
        print (x*y)
    print()

The output is a vertical line of numbers. I need it like the square table kind.

user2864740
  • 60,010
  • 15
  • 145
  • 220
Registered User
  • 468
  • 1
  • 7
  • 31
  • possible duplicate of [How to print in Python without newline or space?](http://stackoverflow.com/questions/493386/how-to-print-in-python-without-newline-or-space) – user2864740 Oct 16 '14 at 03:09
  • Hehe, not really. Since that wasn't what I thought was the original problem, therefore no. – Registered User Oct 16 '14 at 03:11
  • 1
    Then it was thought wrong.. this *is* the problem and is why proper minimal-problem identification is critical. The "task" is irrelevant once the true issue is exposed. After applying an answer found in such a question then there might a *different* problem, for which there is a *different* duplicate question. – user2864740 Oct 16 '14 at 03:12
  • Ok, so it's duplicate? – Registered User Oct 16 '14 at 03:15
  • http://stackoverflow.com/questions/22893613/how-do-i-print-a-list-of-doubles-nicely-in-python (python2/floats, same idea) , http://stackoverflow.com/questions/13945749/string-formatting-in-python-3 – user2864740 Oct 16 '14 at 03:16
  • Sorry dude, didn't mean that. I'll try to search more next time. @user2864740 – Registered User Oct 17 '14 at 01:24

3 Answers3

3

What you need to do is leverage the end argument:

for x in range (1, 11):
    for y in range (1, 11):
        print ('{:3}'.format(x*y), end=' ')
    print()

Also, note the way the row entries are formatted. By using '{:3}'.format(x*y), the expression is padded with spaces out to three digits. For more details on formatting, consult the documentation.

Sample output:

  1   2   3   4   5   6   7   8   9  10 
  2   4   6   8  10  12  14  16  18  20 
  3   6   9  12  15  18  21  24  27  30 
  4   8  12  16  20  24  28  32  36  40 
  5  10  15  20  25  30  35  40  45  50 
  6  12  18  24  30  36  42  48  54  60 
  7  14  21  28  35  42  49  56  63  70 
  8  16  24  32  40  48  56  64  72  80 
  9  18  27  36  45  54  63  72  81  90 
 10  20  30  40  50  60  70  80  90 100 
Brian Cain
  • 14,403
  • 3
  • 50
  • 88
2

The print function adds a \n unless told otherwise. Try explicitly saying not to:

for x in range (1, 11):
    for y in range (1, 11):
        print (x*y, end=' ') 
    print()

Note: I'm assuming you're either on python3 or imported the print_function since you are using the print function, rather than statement.

Edit: added a space in the end

nerdwaller
  • 1,813
  • 1
  • 18
  • 19
0

And one may complicate things a bit and print X index and Y index :) here

n = 11
m = 11

grid = [[x * y for x in range(1,n)] for y in range(1,m)]

print('   ', end='')
print(''.join([f'{j:5}' for j in range(1,n)]))
print('   ', end='')
print(''.join([f'{"_":>5}' for _ in range(1,n)]))

for i in range(n-1):
        print(f'{i+1:2}|', end=' ')
        print(' '.join(f'{x:4}' for x in grid[i]))

Results

       1    2    3    4    5    6    7    8    9   10
       _    _    _    _    _    _    _    _    _    _
 1|    1    2    3    4    5    6    7    8    9   10
 2|    2    4    6    8   10   12   14   16   18   20
 3|    3    6    9   12   15   18   21   24   27   30
 4|    4    8   12   16   20   24   28   32   36   40
 5|    5   10   15   20   25   30   35   40   45   50
 6|    6   12   18   24   30   36   42   48   54   60
 7|    7   14   21   28   35   42   49   56   63   70
 8|    8   16   24   32   40   48   56   64   72   80
 9|    9   18   27   36   45   54   63   72   81   90
10|   10   20   30   40   50   60   70   80   90  100
Aziz Alto
  • 19,057
  • 5
  • 77
  • 60