0

素数を表示するための小さなプログラムを作成しています。コード (以下) は正しい答えを生成しますが、出力を「きれいに」表示するのに問題があります。

import math
N = int(input('List primes up to: '))
maxDigits = math.ceil(math.log10(N)) #equal spacing, even with lesser digit stuff
for i in range(3,N,2):
    for d in range(2,int(math.sqrt(i))):
        if i%d==0:
            break
    else :
        print(str(i),end=' '*(maxDigits-len(str(i))))

アイデアは、素数が持つことができる最大桁数に基づいて、出力画面にできるだけ多くの列を収めることでした。しかし、今プログラムを実行すると、改行なしですべての数字が長い行に表示されます。これにより、次のような出力が得られます。

それはとても醜いです!それは私の目を燃やす!http://img194.imageshack.us/img194/5522/2eyd.png

これは...まさに私が目指していたものではありません。数字が行を折り返すという事実がなく、十分なスペースがない場合に次の行に移動することがわかっていれば、すべてうまくいくでしょう。では、どうすればプログラムでこの厄介なラッピングを取り除くことができますか? エレガントなほど (つまり、端末の幅を数えて maxDigits で割る必要があるとは言わないでください)、より良い...:D

4

2 に答える 2

0

ライブラリPrettyPrinter(別名pprint)を見てください。インデントと深さのレベルを設定でき、すべてを自律的に処理します

于 2013-08-23T14:59:15.617 に答える
0

改行はいつでも追加できます。簡単な方法は、特定の数の数字の後に、たとえば 10 ごとに文字を追加することです'\n'。より複雑な方法は、端末の幅を決定し、1 行に出力できる数字の数を計算することです。

str.format()また、テーブルの各列の幅を設定できるものを確認することもできます。書式設定に使用できるオプションの詳細については、書式文字列の構文を確認してください。

于 2013-08-23T15:00:33.750 に答える