2016-04-05 3 views
3

Я относительно новичок в программировании на Python, используя Python 3.x, и я работаю над системой Barosshop P.O.S, где администратор будет иметь привилегию добавлять сервисы и их соответствующие Цены. Я использую библиотеку Pretty Table для достижения распечатки таблицы с идентификатором serviceID, сервисом и ценой.Как использовать Pretty Table в Python для печати данных из нескольких списков?

Вот мой код:

from prettytable import PrettyTable 
import random 

serviceID = [] 
services = [] 
price = [] 
x = PrettyTable() 

x.add_column("ServiceID",[serviceID]) 
x.add_column("Service", [services]) 
x.add_column("Price", [price]) 

while True: 
try: 

    ID = random.randint(1,90000) #range high to lower probability of non-uniqueness 
    serviceID.append(ID) #Generates unique ID for each service 
    prompt1 = input("Please add a service name to the list\n") 
    services.append(prompt1) 

    prompt2 = input("Please enter a price for the service\n") 
    prompt2 == int(prompt2) 
    price.append(prompt2) 

    print(x) 


except ValueError: 
    print("Please enter valid type") 
    continue 

Когда я вхожу в первый сервис и цена, выход:

+-----------+---------+--------+ 
| ServiceID | Service | Price | 
+-----------+---------+--------+ 
| [9880] | ['box'] | ['90'] | 
+-----------+---------+--------+ 

Когда я ввожу 2-й сервис и цена, выход заключается в следующем:

+---------------+-----------------+--------------+ 
| ServiceID |  Service  | Price  | 
+---------------+-----------------+--------------+ 
| [9880, 47612] | ['box', 'trim'] | ['90', '80'] | 
+---------------+-----------------+--------------+ 

Я хотел бы выход быть это:

+---------------+-----------------+--------------+ 
| ServiceID |  Service  | Price  | 
+---------------+-----------------+--------------+ 
| 9880   |  box  |  90  | 
| 47612  |  trim  |  80  | 
+---------------+-----------------+--------------+ 

Кто-нибудь знает, как достичь этого? Любая помощь будет оценена по достоинству.

+0

Вы должны присоединиться строки в списках с ' "\ п" .join (your_sublist)' –

ответ

2

Мы можем сделать, добавив строку в объект PrettyTable по методу add_row.

Demo:

>>> from prettytable import PrettyTable 
>>> import random 
>>> 
>>> x = PrettyTable(["ServiceID", "Service", "Price"]) 
>>> 
>>> while True: 
...  #- Get value 
...  ID = random.randint(1,90000) #range high to lower probability of non-uniqueness 
...  prompt1 = raw_input("Please add a service name to the list\n") 
...  try: 
...   #- Type Casting. 
...   prompt2 = int(raw_input("Please enter a price for the service\n")) 
...  except ValueError: 
...   print("Please enter valid type") 
...   continue 
...  #- Add row 
...  x.add_row([ID, prompt1, prompt2]) 
...  #- Ask user to Continue or not. 
...  choice = raw_input("Continue yes/ no:").lower() 
...  if not(choice=="yes" or choice=="y"): 
...   break 
... 
Please add a service name to the list 
2 
Please enter a price for the service 
3 
Continue yes/ no:y 
Please add a service name to the list 
4 
Please enter a price for the service 
6 
Continue yes/ no:y 
Please add a service name to the list 
5 
Please enter a price for the service 
7 
Continue yes/ no:n 
>>> print x 
+-----------+---------+-------+ 
| ServiceID | Service | Price | 
+-----------+---------+-------+ 
| 38515 | 2 | 3 | 
| 8680 | 4 | 6 | 
| 51188 | 5 | 7 | 
+-----------+---------+-------+ 
>>> 

Delete Row:

Используйте del_row() метод. Нам нужно передать индекс строки, который мы хотим удалить.

>>> print x 
+-----------+---------+-------+ 
| ServiceID | Service | Price | 
+-----------+---------+-------+ 
| 38515 | 2 | 3 | 
| 8680 | 4 | 6 | 
| 51188 | 5 | 7 | 
+-----------+---------+-------+ 
>>> x.del_row(1) 
>>> print x 
+-----------+---------+-------+ 
| ServiceID | Service | Price | 
+-----------+---------+-------+ 
| 38515 | 2 | 3 | 
| 51188 | 5 | 7 | 
+-----------+---------+-------+ 

нужно обрабатывать исключения, если мы обеспечиваем значение индекса больше, то общее число строк в исключения повысятся, что нужно обрабатывать в Уре коде.

Исключение:

>>> x.del_row(10) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "/usr/local/lib/python2.7/dist-packages/prettytable.py", line 832, in del_row 
    raise Exception("Cant delete row at index %d, table only has %d rows!" % (row_index, len(self._rows))) 
Exception: Cant delete row at index 10, table only has 2 rows! 

Примечание:

  1. Использование raw_input() для Python 2.x

  2. Использование input() для Python 3.x

+0

Спасибо Вивек и Padraic. Как удалить строку из таблицы? Я пробовал индексировать таблицу, как этот del [2], но это не работает. –

+0

@ElizabethMabishi: Используйте метод del_row. пропустите индекс строки, который мы хотим удалить. Я добавляю в ответ. –

+0

@ janus-py, Vivek Для моего предыдущего вопроса я нашел способ доступа к отдельным элементам. Это то, что я сделал: Защиту log_service(): в то время как True: попытка: response3 = вход ("Пожалуйста, выберите услугу из списка с помощью ServiceID \ п") response3 = INT (response3) у = (x [response3: (response3 + 1)]) # запишите в таблицу отчетов. Работает, но не сохраняет предыдущее значение. то есть. начинается каждый раз Существует ли метод, например, список добавлений, или другой, который я могу использовать для добавления строки в новую таблицу каждый раз, когда вызывается fx? Извиняется, он не создает блок кода –

0

Я достиг этого, всегда создавая новый экземпляр класса, который является довольно привлекательным. PrettyTable внутри цикла while.

from prettytable import PrettyTable 
import random 

serviceID = [] 
services = [] 
price = [] 

while True: 
    try: 
     x = PrettyTable() 

     ID = random.randint(1,90000) #range high to lower probability of non-uniqueness 
     serviceID.append(ID) #Generates unique ID for each service 

     prompt1 = input("Please add a service name to the list\n") 
     services.append(prompt1) 

     prompt2 = input("Please enter a price for the service\n") 
     prompt2 == int(prompt2) 
     price.append(prompt2) 

     x.add_column("ServiceID", serviceID) 
     x.add_column("Service", services) 
     x.add_column("Price", price) 

     print(x) 


    except ValueError: 
     print("Please enter valid type") 
     continue 

Вот моя версия кода, использующая metonds field_names() и add_row().

from prettytable import PrettyTable 
import random 

serviceID = [] 
services = [] 
price = [] 

x = PrettyTable() 

x.field_names = ["ServiceID", "Service", "Price"] 

while True: 
    try: 
     ID = random.randint(1,90000) #range high to lower probability of non-uniqueness 
     serviceID.append(ID) # in order to store new value if you will need it later 

     prompt1 = input("Please add a service name to the list\n") 
     services.append(prompt1) # in order to store new value if you will need it later 

     prompt2 = input("Please enter a price for the service\n") 
     prompt2 == int(prompt2) 
     services.append(prompt2) # in order to store new value if you will need it later 

     x.add_row([ID, prompt1, prompt2]) 
     print(x) 

    except ValueError: 
     print("Please enter valid type") 
     continue 
+0

Спасибо! Позвольте мне проверить это. –

+0

Есть ли способ доступа к отдельным элементам в строке, чтобы достичь тех же результатов, что и со списком? Например, в этом случае у обычного пользователя будет возможность войти в ServiceID, и программа будет печатать данные службы и цены этой строки и запрашивать подтверждение записи. Если это подтверждено, программа затем зарегистрирует запись в (ServiceID, Service and Price) отчет, который может просматривать администратор. Я очень ценю вашу помощь, ребята! –

Смежные вопросы