使用for循环格式化输出或python中的不同方法

时间:2012-03-13 17:19:48

标签: python

我做了一个程序来计算python中的库存;但是,我有格式化布局输出的问题。到目前为止我所做的是:

def summary(a,b,c,row,col,tot):
    d={0:"Small", 1:"Medium", 2:"Large", 3:"Xlarge"}
    for i in range(row):
        for j in range(col):
            print "%6d" %(a[i][j]),
        print "%s%6d\n" %(d[i],(b[i])),
    print "\n" ,
    for j in range(col):
        print "%6d" %(c[j]),
    print "%6d\n" %tot

因此输出为7 x 4矩阵,总数为右侧和总列数。但是我想在左侧放一些名字来代表特定的名字,比如尺寸小等,所以我使用了字典,但我得到的是在行总数之前的右侧。我无法弄清楚我怎么能把它放在与数字相同的左侧。我想在数字(矩阵)中放置两列,其中一列是中间第一个最左列中的一个大小,然后是第二列名称,因为你可以看到在字典中使用的指定,然后数字会出现在同一行。

非常感谢任何帮助或建议。我做了一个程序来计算python中的库存;但是,我有格式化布局输出的问题。到目前为止我所做的是:

def summary(a,b,c,row,col,tot):
    d={0:"Small", 1:"Medium", 2:"Large", 3:"Xlarge"}
    for i in range(row):
        for j in range(col):
            print "%6d" %(a[i][j]),
        print "%s%6d\n" %(d[i],(b[i])),
    print "\n" ,
    for j in range(col):
        print "%6d" %(c[j]),
    print "%6d\n" %tot

因此输出为7 x 4矩阵,总数为右侧和总列数。但是我想在左侧放一些名字来代表特定的名字,比如尺寸小等,所以我使用了字典,但我得到的是在行总数之前的右侧。我无法弄清楚我怎么能把它放在与数字相同的左侧。我想在数字(矩阵)中放置两列,其中一列是中间第一个最左列中的一个大小,然后是第二列名称,因为你可以看到在字典中使用的指定,然后数字会出现在同一行。

非常感谢任何帮助或建议。

我希望它看起来像这样

 small   1 1 1 1 1 1 1  7
 medium  1 1 1 1 1 1 1  7

尺寸大1 1 1 1 1 1 1 7

 xlarge  1 1 1 1 1 1 1  7
         4 4 4 4 4 4 4  28

我得到了

1 1 1 1 1 1 1小7

1 1 1 1 1 1 1 medium 7

1 1 1 1 1 1 1 large 7

1 1 1 1 1 1 1 xlarge 7

4 4 4 4 4 4 4 28

抱歉以前不够具体。

2 个答案:

答案 0 :(得分:0)

您只需将“%s”和相应的变量移动到正确的位置:

def summary(a,b,c,row,col,tot):
    d={0:"Small", 1:"Medium", 2:"Large", 3:"Xlarge"}
    for i in range(row):
        print "%8s" % d[i],
        for j in range(col):
            print "%6d" %(a[i][j]),
        print "%6d\n" % ((b[i])),
    print "\n" ,
    print "%8s" % " ",
    for j in range(col):
        print "%6d" %(c[j]),
    print "%6d\n" %tot

在调用时(请注意这只是测试编号,您将用真实编号替换它们):

summary([[1, 2, 3, 4, 5, 6, 7],
         [1, 2, 3, 4, 5, 6, 7],
         [1, 2, 3, 4, 5, 6, 7],
         [1, 2, 3, 4, 5, 6, 7]], [12, 13, 14, 15], 
         [22, 23, 24, 25, 26, 27, 28], 4, 7, 7777)

你会得到类似的东西:

   Small      1      2      3      4      5      6      7     12
  Medium      1      2      3      4      5      6      7     13
   Large      1      2      3      4      5      6      7     14
  Xlarge      1      2      3      4      5      6      7     15

             22     23     24     25     26     27     28   7777

如果您希望调整名称,则必须在格式说明之前添加“ - ”,如:

            print "%-8s" % d[i],

答案 1 :(得分:0)

只需在行前打印:

def summary(a,b,c,row,col,tot):
    d={0:"Small", 1:"Medium", 2:"Large", 3:"Xlarge"}
    for i in range(row):
        print d[i].ljust(6),
        for j in range(col):
            print "%6d" %(a[i][j]),
        print "%6d\n" %(b[i]),
    print "\n" ,
    for j in range(col):
        print "%6d" %(c[j]),
    print "%6d\n" %tot

这假设您希望第一列左对齐。也可以使用右对齐(rjust())和居中(center())。

此外,由于您只是使用连续的数字索引,因此您只需使用列表而不是字典。

作为旁注,更多描述性变量从来都不是坏事。此外,根据this,%格式已过时,format()方法应在新程序中使用。