用Python 3制作账单

用Python 3制作账单,python,Python,我正试图写一个代码来打印账单,但由于字符长度不同,空格有问题。在下面的代码中,我添加了一个长度检查,这样,如果产品名称(在本例中为索引[0])的字母数大于其他名称,则获得的空间将小于其他名称。但现在我在索引[2]中遇到了一个问题,那就是数量。如果我在两个列表中放置相同数量的数量,例如(2和3),它会工作,但当一个数量以十或百为单位时,就会出现间隔错误。例如(2和23) tprice=0 tup=[['apple','100','2',['blackberry','100','23']] f=打开

我正试图写一个代码来打印账单,但由于字符长度不同,空格有问题。在下面的代码中,我添加了一个长度检查,这样,如果产品名称(在本例中为索引[0])的字母数大于其他名称,则获得的空间将小于其他名称。但现在我在索引[2]中遇到了一个问题,那就是数量。如果我在两个列表中放置相同数量的数量,例如(2和3),它会工作,但当一个数量以十或百为单位时,就会出现间隔错误。例如(2和23)

tprice=0
tup=[['apple','100','2',['blackberry','100','23']]
f=打开(文件名为“w”)
g=打开('recpt.txt','r')
行=g.读行()
对于行中的行:
base=line.split()
tup.append(基本)
打印('S.no'、'\t'、'Product'、'\t'、'Unit'、'\t'、'Price')
对于范围内的i(len(tup)):

如果len(tup[i][0])则
格式
函数似乎非常适合于此。试着这样做:

tprice = 0
tup = [['apple', '100', '2'], ['blackberry', '100', '23']]
myformat = "{:<10}{:<25}{:<5}{}"

f = open(filename, 'w')
g = open('recpt.txt', 'r')
lines = g.readlines()

for line in lines:
    base = line.split()
    tup.append(base)

print(myformat.format('S.no', 'Product', 'Unit', 'Price'))

for i in range(len(tup)):
    if len(tup[i][0]) <= 7:
        print(myformat.format(str([i + 1]), tup[i][0], tup[i][2], tup[i][1]))
    else:
        print(myformat.format(str([i + 1]), tup[i][0], tup[i][2], tup[i][1]))

    price = int(tup[i][1])
    tprice += price

print(tprice)

试一下专为这种情况而设计的表格库:为什么不将所有内容都存储在一个数据框中?无需对
myformat.format()
的参数调用
str()
。格式会处理字符串化。谢谢。删除了除
str([i+1])以外的所有
str
强制转换。
tprice = 0
tup = [['apple', '100', '2'], ['blackberry', '100', '23']]
myformat = "{:<10}{:<25}{:<5}{}"

f = open(filename, 'w')
g = open('recpt.txt', 'r')
lines = g.readlines()

for line in lines:
    base = line.split()
    tup.append(base)

print(myformat.format('S.no', 'Product', 'Unit', 'Price'))

for i in range(len(tup)):
    if len(tup[i][0]) <= 7:
        print(myformat.format(str([i + 1]), tup[i][0], tup[i][2], tup[i][1]))
    else:
        print(myformat.format(str([i + 1]), tup[i][0], tup[i][2], tup[i][1]))

    price = int(tup[i][1])
    tprice += price

print(tprice)
S.no      Product                  Unit Price
[1]       apple                    2    100 
[2]       blackberry               23   100