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 每行我想要多少个数字(15在这个案例)在断线之前,能以某种方式帮助我进行格式化吗?我有 Python 3.1.7。谢谢!

基本上我如何告诉python15在中断之前创建每行数字,谢谢。

4

4 回答 4

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'),

编辑:错过了 python 3 部分-在这里打印得更好

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 回答
1

混合中的另一个选择是使用itertools.grouper配方:

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)

然后循环变为:

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

如果必须打印新行,您应该保留一个计数器并检查计数器的模数。

可能看起来像这样:

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