16

そこで、プログラムの他の場所で収集されたデータに基づいて小さなスター テーブルを作成する関数を用意しました。テーブルは正しい出力を生成しますが、各数字の文字数が変化するため、テーブルの位置合わせが解除されます。例えば、

70-78: *****
79-87: ***
88-96: ****
97-105: **
106-114: ******
115-123: ****

出力が次のようになるように、星を揃える方法はありますか (hehe):

70-78:   *****
79-87:   ***
88-96:   ****
97-105:  **
106-114: ******
115-123: ****

現在、テーブルを印刷する方法は次のとおりです。

for x in range(numClasses):
    print('{0}-{1}: {2}'.format(lower[x],upper[x],"*"*num[x]))
4

5 に答える 5

10

これでうまくいくはずです。賢い方法もあると思います。

print '70-78:'.ljust(10) + '*****'

使用することもできますexpandtabs()

print ('70-78'+'\t'+ '*****').expandtabs(10)
于 2013-06-13T15:55:14.470 に答える
1

私が使用しているソリューションは確かにアドホックですが、機能し、これまでの回答よりも優れています。基本的にはVR17が提案した方法ですが、タブのサイズがデータセットに合わせて調整され、ハードコードされているだけではありません.

最初に、数字の文字をある数字で返すメソッドを作成しました。

def charNum(number):
    return math.floor(math.log(number,10)+1)

次に、データセットとデータセットcharNum()の最後のポイントで関数を使用しました。最後のポイントが最大の数であるため、各リストでは最後のポイントのみを使用する必要がありました。次に、数字ではない文字 (ダッシュ、セミコロン、スペース) を数え、それに応じて調整しました。 したがって、最終的な tabLength 変数は次のようになります。lowerupper

tabLength = charNum(lower[-1])+charNum(upper[-1])+3

tabLength次に、変数を関数にプラグインして、expandTab()適切な間隔を確保しました。出力例を次に示します。

1-11:  *******
12-22: *
23-33: ***
34-44: **
45-55: ***
56-66: *

99-249:   *****
250-400:  ****
401-551:  **
552-702:  **
703-853:  *
854-1004: ***

99-200079:      ******
200080-400060:  **
400061-600041:  ****
600042-800022:  **
800023-1000003: *

これで実際に目にする唯一の問題は、これをテーブルまたは何かに拡張したい場合、タブがすべてファンキーになることです。もし私がそれをやったなら、私はおそらく調べてljustrjust今はあまり詳しくありません. 誰かがより良い答えを思いついた場合に備えて、しばらく質問を開いたままにします。

于 2013-06-13T17:11:20.420 に答える
0

簡単な方法(あなたの場合)は、スペースの代わりにタブを配置することです:

for x in range(numClasses):
    print('{0}-{1}:\t{2}'.format(lower[x],upper[x],"*"*num[x]))

別の方法は、次を使用することstr.ljustです。

for x in range(numClasses):
    label = '{0}-{1}:'.format(lower[x], upper[x])
    print(label.ljust(10, ' ') + "*" * num[x])
于 2013-06-13T16:03:29.567 に答える