2

I need to know how to generate a sequence of numbers that are right-justified in rows (of 6) and columns (of 7) with a set field width (of 2) and space (of 1).

First I have to ask the user for an input number "n" (with requirements -6 < n < 2) and then print "n to n+6" in the first column, "n+7 to n+13" in the following column and so on.

I've got the input/output from the following code but don't know how to generate the rows and columns (or specify the field widths):

n = int(input("Enter the start number: "))

if n>-6 and n<2:
    for x in range(n, n+41):
        print(n, end=" ")
        n = n+1

I've been trying to do it with for loops within this for loop but can't figure it out. Any help will be really appreciated - thank you in advance!

0

3 Answers 3

2

The highest number can only have two digits so you just need to right align 2, using a step of 6 with the first loop and starting the inner loop from each x from the first, we also need to catch when n is equal to -5, 38 with a step of six always gives us 7 columns and six rows unless n is -5 then we need to use 37 so minus (n < -4) would make 38 -> 37 when n was -5 or else take nothing away:

n = int(input("Enter the start number: "))

if -6 < n < 2:
    for x in range(n, 38 - (n < -4), 6):
        for j in range(x,  x + 6):
            print("{:>2}".format(j), end=" ")
        print()

Putting it in a function pr_right and running from -5 to 1:

-5 -4 -3 -2 -1  0 
 1  2  3  4  5  6 
 7  8  9 10 11 12 
13 14 15 16 17 18 
19 20 21 22 23 24 
25 26 27 28 29 30 
31 32 33 34 35 36 

-4 -3 -2 -1  0  1 
 2  3  4  5  6  7 
 8  9 10 11 12 13 
14 15 16 17 18 19 
20 21 22 23 24 25 
26 27 28 29 30 31 
32 33 34 35 36 37 

-3 -2 -1  0  1  2 
 3  4  5  6  7  8 
 9 10 11 12 13 14 
15 16 17 18 19 20 
21 22 23 24 25 26 
27 28 29 30 31 32 
33 34 35 36 37 38 

-2 -1  0  1  2  3 
 4  5  6  7  8  9 
10 11 12 13 14 15 
16 17 18 19 20 21 
22 23 24 25 26 27 
28 29 30 31 32 33 
34 35 36 37 38 39 

-1  0  1  2  3  4 
 5  6  7  8  9 10 
11 12 13 14 15 16 
17 18 19 20 21 22 
23 24 25 26 27 28 
29 30 31 32 33 34 
35 36 37 38 39 40 

 0  1  2  3  4  5 
 6  7  8  9 10 11 
12 13 14 15 16 17 
18 19 20 21 22 23 
24 25 26 27 28 29 
30 31 32 33 34 35 
36 37 38 39 40 41 

 1  2  3  4  5  6 
 7  8  9 10 11 12 
13 14 15 16 17 18 
19 20 21 22 23 24 
25 26 27 28 29 30 
31 32 33 34 35 36 
37 38 39 40 41 42 

There are other and easier ways but I imagine this is some kind of learning exercise.

If it is actually six rows and 7 columns that is easier:

for x in range(n, 37, 7):
    for j in range(x,  x + 7):
        print("{:>2}".format(j), end=" ")
    print()

Which if we run it through another pr_right function outputs:

In [10]: for n in range(-5, 2):
             pr_right(n)
             print()
   ....:     
-5 -4 -3 -2 -1  0  1 
 2  3  4  5  6  7  8 
 9 10 11 12 13 14 15 
16 17 18 19 20 21 22 
23 24 25 26 27 28 29 
30 31 32 33 34 35 36 

-4 -3 -2 -1  0  1  2 
 3  4  5  6  7  8  9 
10 11 12 13 14 15 16 
17 18 19 20 21 22 23 
24 25 26 27 28 29 30 
31 32 33 34 35 36 37 

-3 -2 -1  0  1  2  3 
 4  5  6  7  8  9 10 
11 12 13 14 15 16 17 
18 19 20 21 22 23 24 
25 26 27 28 29 30 31 
32 33 34 35 36 37 38 

-2 -1  0  1  2  3  4 
 5  6  7  8  9 10 11 
12 13 14 15 16 17 18 
19 20 21 22 23 24 25 
26 27 28 29 30 31 32 
33 34 35 36 37 38 39 

-1  0  1  2  3  4  5 
 6  7  8  9 10 11 12 
13 14 15 16 17 18 19 
20 21 22 23 24 25 26 
27 28 29 30 31 32 33 
34 35 36 37 38 39 40 

 0  1  2  3  4  5  6 
 7  8  9 10 11 12 13 
14 15 16 17 18 19 20 
21 22 23 24 25 26 27 
28 29 30 31 32 33 34 
35 36 37 38 39 40 41 

 1  2  3  4  5  6  7 
 8  9 10 11 12 13 14 
15 16 17 18 19 20 21 
22 23 24 25 26 27 28 
29 30 31 32 33 34 35 
36 37 38 39 40 41 42 
Sign up to request clarification or add additional context in comments.

4 Comments

Thanks for the answer @Padraic. I actually had my rows and columns mixed up but managed to use your advice and correct it with: if n>-6 and n<2: for x in range(n, 35 + n, 6): for j in range(x, x + 7): print("{:>2}".format(j), end=" ") print()
@JoshAlexandre, no worries, so seven rows and six columns?
Yep, all sorted though. Thank you!
@JoshAlexandre, I added an example for seven rows and six columns, I think your implementation might not be quite right
1

You can use numpy for reshape. This gives a concise and more readable code:

import numpy as np

n = int(input("Enter the start number: "))

if n>-6 and n<2:
    print (n + np.arange(42)).reshape(6,7)

2 Comments

Thanks @Colonel. I went with using a for loop within another for loop but appreciate learning about numpy! Will definitely use it in the future.
it is vectorized and much faster/neater than for loops!
0

Version without numpy:

n = int(input("Enter the start number: "))

for x in range(n, n + 42, 7):
    for y in range(x, x + 7):
        print y,
    print

1 Comment

Thanks for the help @Maciej!

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.