2016-07-23 7 views
0

ピラミッドのフォーマットに問題があります。私はループから印刷するときにフォーマットを使用しようとしましたが、それは動作していないように見えて、プログラムを壊すだけです。出力をフォーマットするためのさまざまな方法は何でしょうか。私が抱っている唯一の問題は、10桁以上の数字を印刷するときです。印刷出力をフォーマットする最良の方法は何でしょうか?私は、さまざまな方法を試してみたが、ここでhttps://docs.python.org/3.5/library/string.html#formatstringsPythonで文字列のまとまりを使って印刷書式を設定するにはどうすればいいですか?

ドキュメント からループ内の書式設定作業を行うことができませんでしたスクリプトです:

userinput = int(input("Enter the number of lines: ")) # User input of the total number of lines 
userinput = userinput + 1 # adding a value of 1 additionally with the user input to make numbers even 

for i in range(1, userinput): # Loop through lines from 1 to userinput 

    for j in range(userinput - i): # printing spaces, 1 at a time from j = 1 to j = userinput - i 
     print(" ", end = " ") 

    for j in range(i, 0, -1): # printing number decreasing from the line number j to 1 
     print(j, end = " ") 

    for j in range(2,i + 1): # Printing number increasing from 2 to line number j 
     print(j, end = " ") 
    print() 
    j += 1 

出力時にその10未満

Enter the number of lines: 9 
        1 
       2 1 2 
       3 2 1 2 3 
      4 3 2 1 2 3 4 
      5 4 3 2 1 2 3 4 5 
     6 5 4 3 2 1 2 3 4 5 6 
     7 6 5 4 3 2 1 2 3 4 5 6 7 
    8 7 6 5 4 3 2 1 2 3 4 5 6 7 8 
    9 8 7 6 5 4 3 2 1 2 3 4 5 6 7 8 9 

出力が15以上の場合:

Enter the number of lines: 15 
           1 
          2 1 2 
          3 2 1 2 3 
         4 3 2 1 2 3 4 
         5 4 3 2 1 2 3 4 5 
        6 5 4 3 2 1 2 3 4 5 6 
        7 6 5 4 3 2 1 2 3 4 5 6 7 
       8 7 6 5 4 3 2 1 2 3 4 5 6 7 8 
       9 8 7 6 5 4 3 2 1 2 3 4 5 6 7 8 9 
      10 9 8 7 6 5 4 3 2 1 2 3 4 5 6 7 8 9 10 
      11 10 9 8 7 6 5 4 3 2 1 2 3 4 5 6 7 8 9 10 11 
     12 11 10 9 8 7 6 5 4 3 2 1 2 3 4 5 6 7 8 9 10 11 12 
     13 12 11 10 9 8 7 6 5 4 3 2 1 2 3 4 5 6 7 8 9 10 11 12 13 
    14 13 12 11 10 9 8 7 6 5 4 3 2 1 2 3 4 5 6 7 8 9 10 11 12 13 14 
    15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 

私は10以上の余分なスペースを予約したとき、ここで私の外見は次のようになります:(ドットは空白と区別するために使用され、印刷の冒頭には" "の引用符が追加されました。ここで

Enter the number of lines: 12 
. . . . . . . . . . . . 1       
. . . . . . . . . . . 2 1 2      
. . . . . . . . . . 3 2 1 2 3      
. . . . . . . . . 4 3 2 1 2 3 4     
. . . . . . . . 5 4 3 2 1 2 3 4 5     
. . . . . . . 6 5 4 3 2 1 2 3 4 5 6    
. . . . . . 7 6 5 4 3 2 1 2 3 4 5 6 7    
. . . . . 8 7 6 5 4 3 2 1 2 3 4 5 6 7 8   
. . . . 9 8 7 6 5 4 3 2 1 2 3 4 5 6 7 8 9   
. . . 10 9 8 7 6 5 4 3 2 1 2 3 4 5 6 7 8 9 10  
. . 11 10 9 8 7 6 5 4 3 2 1 2 3 4 5 6 7 8 9 10 11  
. 12 11 10 9 8 7 6 5 4 3 2 1 2 3 4 5 6 7 8 9 10 11 12 

は、私がここでaditionalスペースに

for j in range(userinput - i): # printing spaces, 1 at a time from j = 1 to j = userinput - i 
     print(".", end = " ") 

    for j in range(i, 0, -1): # printing number decreasing from the line number j to 1 
     print(" ", j, end = "") 

    for j in range(2,i + 1): # Printing number increasing from 2 to line number j 
     print(" ", j, end = "") 

    for j in range(userinput - i): # printing spaces, 1 at a time from j = 1 to j = userinput - i 
     print(" ", end = " ") 

を追加することにより、変更しようとしたものです私が達成しようとしています何の理想的な出力です:

          1 
             2 1 2 
            3 2 1 2 3 
            4 3 2 1 2 3 4 
           5 4 3 2 1 2 3 4 5 
          6 5 4 3 2 1 2 3 4 5 6 
         7 6 5 4 3 2 1 2 3 4 5 6 7 
         8 7 6 5 4 3 2 1 2 3 4 5 6 7 8 
        9 8 7 6 5 4 3 2 1 2 3 4 5 6 7 8 9 
       10 9 8 7 6 5 4 3 2 1 2 3 4 5 6 7 8 9 10 
      11 10 9 8 7 6 5 4 3 2 1 2 3 4 5 6 7 8 9 10 11 
     12 11 10 9 8 7 6 5 4 3 2 1 2 3 4 5 6 7 8 9 10 11 12 
     13 12 11 10 9 8 7 6 5 4 3 2 1 2 3 4 5 6 7 8 9 10 11 12 13 
    14 13 12 11 10 9 8 7 6 5 4 3 2 1 2 3 4 5 6 7 8 9 10 11 12 13 14 
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 

ありがとうございました!

答えて

1

事が

  • 最大数の長さです。
  • 印刷中の現在の番号の長さ。
  • 長さの違い。正しく宇宙のすべてのために

、あなたはより少ない桁(大きな数の追加の数字を補償する)との数字の後に余分なスペース を印刷する必要があるとしています。例えば

、正しくスペースその他の小さい数字にするためにあなたが数10を含む行を、持っている場合、あなたは数で、第2桁を補うために余分なスペースを使用する必要があるとしている10

この解決策は私には役に立ちます。

userinput = int(input("Enter the number of lines: ")) 
userinput = userinput + 1 

# Here, you can see I am storing the length of the largest number 
input_length = len(str(userinput)) 

for i in range(1, userinput): 

    # First the row is positioned as needed with the correct number of spaces 
    spaces = " " * input_length 
    for j in range(userinput - i): 
     print(spaces, end = " ") 

    for j in range(i, 0, -1): 
     # Now, the current numbers length is compared to the 
     # largest number's length, and the appropriate number 
     # of spaces are appended after the number. 
     spaces = " " * (input_length + 1 - len(str(j))) 
     print(j, end = spaces) 

    for j in range(2,i + 1): 
     # The same is done here as in the previous loop. 
     spaces = " " * (input_length + 1 - len(str(j))) 
     print(j, end = spaces) 
    print() 
    j += 1 
+0

ありがとうございます!もし私がもっと理解しようとしているようなものであれば、それ以上の説明を加える時間があれば。私は試して理解するために見てみましょう。 – Dmitriy

+0

@Dmitriy、私は説明で私の答えを更新しました。私はそれが助けて欲しい – Paradoxinabox

+0

説明をありがとうございます。私が理解しようとしていることの1つは 'spaces =" "*(input_length + 1 - len(str(j)))'ですので、正しく理解すれば2桁のときに何が行われているのかは "*" 2 + 1 - 1) '? 「j」は技術的にも1ですか?私はロジックの背後にあるスペースをどのように計算しているのか理解しようとしています。ありがとうございました! – Dmitriy

1

は、私は、これはあなたが探しているものかもしれないと思う https://stackoverflow.com/a/13077777/6510412

を見てみましょう。私はそれが助けて欲しいこの問題のために考慮すべき

+0

私は自分のコードでそれを達成しようとしていますが、 'code'format(" "、4d)' code'や他のフォーマットを使うとフォーマット作業ができませんでした。プログラムを壊す。ちょうど私の修正しようとしています。ありがとう! – Dmitriy

+0

申し訳ありませんが、私はこの回答を指し示すことを意図しましたhttp://stackoverflow.com/a/13077777/6510412 私は元の答えを更新しました。 – Paradoxinabox

+0

リンクをありがとう。誰かが書いたコードを見るだけでは分かりにくいので、私はもっと説明を探しています。私は文字列の書式設定の使い方を理解し、それを学ぶことを試みています。 – Dmitriy

関連する問題