Несовпадение длины столбца с количеством строк при использовании библиотеки PrettyTables
И снова здравствуйте. Решил впервые попробовать поработать с библиотекой prettytable для вывода данных в форме таблицы. Необходимо вывести цену товара до скидки, сумму скидки и итоговую цену. Код следующий:
from prettytable import PrettyTable
price_table = PrettyTable()
price_table.add_column('Позиция', ['1', '2', '3', '4', '5'])
price = [4.95, 9.95, 14.95, 19.95, 24.95]
discount = 0.6
dis_sum = []
total_price = []
for item in price:
dis_price = round(item * discount, 2)
dis_sum.append(dis_price)
for item, item2 in zip(price, dis_sum):
item3 = round(item - item2, 2)
total_price.append(item3)
price_table.add_column('Базовая цена', [price])
price_table.add_column('Сумма скидки', [dis_sum])
price_table.add_column('Итоговая цена', [total_price])
print(price_table)
При инициализации кода выскакивает ошибка Exception: Column length 1 does not match number of rows 5. Вопрос: чисто арифметически у меня количество элементов в списках одинаковое (5), для каждого столбца есть заголовок, то есть всего строк должно быть 6. Не пойму в чем ошибка. Подскажите, пожалуйста.
Ответы (1 шт):
price_table.add_column('Базовая цена', [price])
price_table.add_column('Сумма скидки', [dis_sum])
price_table.add_column('Итоговая цена', [total_price])
У вас лишние квадратные скобки, из-за которых у вас получается список из одного элемента (а колонок должно быть 5), этим элементом является список значений.
Так всё работает, если передать просто список без лишних скобок (в списке 5 элементов, что соответствует числу колонок в заголовке):
price_table.add_column('Базовая цена', price)
price_table.add_column('Сумма скидки', dis_sum)
price_table.add_column('Итоговая цена', total_price)
Вывод:
+---------+--------------+--------------+---------------+
| Позиция | Базовая цена | Сумма скидки | Итоговая цена |
+---------+--------------+--------------+---------------+
| 1 | 4.95 | 2.97 | 1.98 |
| 2 | 9.95 | 5.97 | 3.98 |
| 3 | 14.95 | 8.97 | 5.98 |
| 4 | 19.95 | 11.97 | 7.98 |
| 5 | 24.95 | 14.97 | 9.98 |
+---------+--------------+--------------+---------------+