根据用户参数输出格式

时间:2012-10-20 21:52:43

标签: python python-3.x line-breaks

 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。谢谢!< / p>

基本上我怎么告诉python在破解之前每行创建15个数字,谢谢。

4 个答案:

答案 0 :(得分:1)

使用范围创建250到750的数字列表,步长为5.使用枚举值循环显示该值,该值包含值和计数器。检查计数器的模数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)

答案 1 :(得分:1)

@ ljk07

  1. xrange更好 - 不会立即创建整个列表
  2. 你真的不需要sys.stdout - 只需添加逗号
  3. 新样式格式更好
  4. 如何更紧凑,更现代

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

答案 2 :(得分: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)))

答案 3 :(得分:0)

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

看起来像这样:

if counter % 15 == 0:
    sys.stdout.write(str("\n"))