Я пытаюсь написать код для печати законопроекта, но проблема с интервалом из-за различной длины символов. В приведенном ниже коде я добавил проверку длины, так что если имя продукта, которое в этом случае имеет индекс [0], имеет большее количество букв, будет меньше места, чем другие. Но теперь у меня проблема с индексом [2], то есть количество. Если я ставлю такое же количество чисел, например (2 и 3) в обоих списках, оно работает, но когда количество идет в десятки или происходит ошибка межстрочного интервала. например (2 и 23)
tprice = 0
tup = [['apple','100','2'],['blackberry','100','23']]
f= open(filename,'w')
g= open('recpt.txt','r')
lines = g.readlines()
for line in lines:
base = line.split()
tup.append(base)
print('S.no','\t','Product','\t','Unit','\t','Price')
for i in range(len(tup)):
if len(tup[i][0]) <= 7:
print([i+1],'\t',tup[i][0],'\t','\t',tup[i][2],'\t',tup[i][1])
else:
print([i+1], '\t', tup[i][0], '\t', tup[i][2],'\t',tup[i][1])
price = int(tup[i][1])
tprice += price
print(tprice)
что я должен сделать, чтобы сделать счет равным
Функция format
кажется идеальной для этого. Попробуйте вот так:
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
str()
для аргументовmyformat.format()
. Форматирование заботится о строковом кодировании.str
кромеstr([i+1])
.