Составление счета в Python 3

1

Я пытаюсь написать код для печати законопроекта, но проблема с интервалом из-за различной длины символов. В приведенном ниже коде я добавил проверку длины, так что если имя продукта, которое в этом случае имеет индекс [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)

что я должен сделать, чтобы сделать счет равным

Изображение 174551

Теги:

1 ответ

1
Лучший ответ

Функция 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
  • 0
    Нет необходимости вызывать str() для аргументов myformat.format() . Форматирование заботится о строковом кодировании.
  • 0
    Благодарю. Убраны все приведения str кроме str([i+1]) .

Ещё вопросы

Сообщество Overcoder
Наверх
Меню