2016-03-27 12 views
2

ich wissen müssen, wie eine Folge von Zahlen zu erzeugen, die rechtsbündig in Reihen (von 6) und Säulen (von 7) mit einem Satz Feld sind Breite (von 2) und Raum (von 1).Wie Zeilen und Spalten in Python generieren 3

Zuerst habe ich den Benutzer zu einer Eingabe Nummer fragen "n" (mit Anforderungen -6 < n < 2) und dann "n to n+6" in der ersten Spalte drucken, "n+7 to n+13" in der folgenden Spalte und so weiter.

Ich habe die Eingabe/Ausgabe aus dem folgenden Code bekommen, aber nicht wissen, wie die Zeilen und Spalten zu erzeugen (oder die Feldbreiten angeben):

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 

Ich habe versucht, zu tun es mit for-Schleifen innerhalb dieser for-Schleife, aber kann es nicht herausfinden. Jede Hilfe wird wirklich geschätzt - danke im Voraus!

Antwort

1

Die höchste Zahl nur zwei Ziffern haben kann, so dass Sie genau richtig 2 müssen auszurichten, mit einem Schritt von 6 mit der ersten Schleife und Beginn der inneren Schleife von jedem x von der ersten, müssen wir auch fangen, wenn n ist gleich -5, 38 mit einem Schritt von sechs ergibt uns immer 7 Spalten und sechs Zeilen, wenn n -5 dann ist Wir müssen 37 verwenden, also minus (n < -4) würde 38 machen -> 37, wenn n -5 war oder sonst nichts wegnehmen:

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() 

es in einer Funktion pr_right Putting und von -5 bis 1 ausgeführt wird:

-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 

Es gibt andere und einfachere Wege, aber ich glaube, das eine Art ist Übung zu lernen.

Wenn es tatsächlich sechs Zeilen und 7 Spalten, die leichter ist:

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

Welche, wenn wir sie durch eine andere pr_right Funktionsausgänge laufen:

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 
+0

Danke für die Antwort @Padraic. Ich hatte tatsächlich meine Reihen und Spalten verwechselt, aber es geschafft, Ihren Rat zu verwenden und es zu korrigieren mit: 'wenn n> -6 und n <2: für x im Bereich (n, 35 + n, 6): für j im Bereich (x, x + 7): Drucken ("{:> 2}". Format (j), Ende = "") print() ' –

+0

@JoshAlexandre, keine Sorgen, so sieben Reihen und sechs Spalten ? –

+0

Ja, alles sortiert. Vielen Dank! –

1

Sie können numpy für reshape verwenden. Daraus ergibt ich einen prägnanten und lesbaren 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) 
+0

Dank @Colonel. Ich ging mit einer for-Schleife innerhalb einer anderen for-Schleife, aber schätzen lernen über numpy! Wird es definitiv in Zukunft verwenden. –

+0

es ist vektorisiert und viel schneller/besser als For-Schleifen! –

0

Version ohne 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 
+0

Danke für die Hilfe @Maciej! –