Je suis relativement nouveau en programmation Python, avec Python 3.x, et je travaille sur un système Barbershop P.O.S où l’administrateur aura le privilège d’ajouter des services et les prix correspondants. J'utilise la bibliothèque Pretty Table pour imprimer une table avec serviceID, service et price.
Voici mon code:
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
Lorsque j'entre le premier service et le prix, la sortie est:
+-----------+---------+--------+
| ServiceID | Service | Price |
+-----------+---------+--------+
| [9880] | ['box'] | ['90'] |
+-----------+---------+--------+
Lorsque j'entre le 2e service et le prix, la sortie est la suivante:
+---------------+-----------------+--------------+
| ServiceID | Service | Price |
+---------------+-----------------+--------------+
| [9880, 47612] | ['box', 'trim'] | ['90', '80'] |
+---------------+-----------------+--------------+
J'aimerais que le résultat soit le suivant:
+---------------+-----------------+--------------+
| ServiceID | Service | Price |
+---------------+-----------------+--------------+
| 9880 | box | 90 |
| 47612 | trim | 80 |
+---------------+-----------------+--------------+
Est-ce que quelqu'un sait comment y parvenir? Toute aide serait appréciée.
Nous pouvons le faire en ajoutant une ligne dans l'objet PrettyTable
avec la méthode add_row
.
Démo :
>>> 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 |
+-----------+---------+-------+
>>>
Supprimer la ligne :
Utilisez la méthode del_row()
. Nous devons transmettre l'index de la ligne que nous voulons supprimer.
>>> 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 |
+-----------+---------+-------+
Nécessité de gérer une exception si nous fournissons une valeur d'index supérieure à celle que le nombre total de lignes générées par l'exception générera, qui doivent être traitées dans le code ur.
L'exception est:
>>> 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!
Remarque :
Utilisez raw_input()
pour Python 2.x
Utilisez input()
pour Python 3.x
J'ai accompli cela en créant toujours une nouvelle instance de la classe prettytable.PrettyTable dans la boucle 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
Voici ma version du code utilisant methonds field_names () et 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