1
 250 255 260 265 270 275 280 285 290 295 300 305 310 315 320
 325 330 335 340 345 350 355 360 365 370 375 380 385 390 395
 400 405 410 415 420 425 430 435 440 445 450 455 460 465 470
 475 480 485 490 495 500 505 510 515 520 525 530 535 540 545
 550 555 560 565 570 575 580 585 590 595 600 605 610 615 620
 625 630 635 640 645 650 655 660 665 670 675 680 685 690 695
 700 705 710 715 720 725 730 735 740 745 750

下限(250この場合)と上限(750この場合はスキップ番号(5この場合))を入力し、Pythonに1行に必要な数(15この場合)を指定するプログラムを作成しようとしています。ケース)行を壊す前に、どういうわけかこれをフォーマットするのを手伝ってくれる?私はPython3.1.7を持っている。ありがとう!

15基本的に、Pythonに、分割する前に1行ごとに数値を作成するように指示するにはどうすればよいですか。

4

4 に答える 4

1

Another option to through in the mix is to use the itertools.grouper recipe:

def grouper(n, iterable, fillvalue=None):
    "Collect data into fixed-length chunks or blocks"
    from itertools import izip_longest
    # grouper(3, 'ABCDEFG', 'x') --> ABC DEF Gxx
    args = [iter(iterable)] * n
    return izip_longest(fillvalue=fillvalue, *args)

Then the loop becomes:

for line in grouper(15, range(250, 755, 5), ''):
    print(' '.join(map(str, line)))
于 2012-10-21T11:45:16.913 に答える
1

rangeを使用して、5のステップで250から750までの数値のリストを作成します。値とカウンターを与えるenumerateを使用して、これをループします。カウンタのモジュロ15をチェックして、改行を印刷に含める必要があるかどうかを判断します。カウンターはゼロから始まるので、cnt%15==14を探します。

import sys

for cnt,v in enumerate(range(250,755,5)):
    if cnt%15==14:
        sys.stdout.write("%d\n" % v)
    else:
        sys.stdout.write("%d " % v)
于 2012-10-20T22:44:01.597 に答える
1

@ ljk07

  1. xrangeの方が優れています-リスト全体を一度に作成することはありません
  2. sys.stdoutは本当に必要ありません-コンマを追加するだけです
  3. 新しいスタイルのフォーマットが優れています

もう少しコンパクトで現代的なものはどうですか

for cnt,v in enumerate(range(250,755,5),1):
    print '{}{}'.format(v,' ' if cnt % 15 else '\n'),

編集:Python3の部分を見逃しました-ここでさらによく印刷します

for cnt,v in enumerate(range(250,755,5),1):
    print( '{:3}'.format(v),end=' ' if cnt % 15 else '\n')
于 2012-10-20T23:57:43.167 に答える
0

新しい行を印刷する必要がある場合は、カウンターを保持し、カウンターのモジュロを確認する必要があります。

次のようになります。

if counter % 15 == 0:
    sys.stdout.write(str("\n"))
于 2012-10-20T21:58:21.733 に答える