Программа кассового аппарата Python «зависает» после аннулирования товара

#python #keyboard-events

Вопрос:

Я практикуюсь в программировании, создавая программу кассового аппарата. К сожалению, я столкнулся с проблемой, когда дело доходит до удаления объекта. Я использую модуль клавиатуры, и для аннулирования у меня есть он, чтобы он удалял горячие клавиши для отделов (которые добавляют продукт в продажу), чтобы изменить их функцию, чтобы удалить продукт из продажи, затем удалить и добавить обратно исходные горячие клавиши отдела. К сожалению, после аннулирования продукта программа не позволит мне использовать ни одну из горячих клавиш, пока я не нажму горячую клавишу отдела, к которому был прикреплен продукт, который я аннулировал. Вот мой длинный, но, надеюсь, понятный код. Для целей тестирования я заранее определил отделы, поэтому, когда вы начинаете, вы просто вводите цену (без десятичной дроби), а затем нажимаете «q», «w» или «e» для отдела. Если вы хотите аннулировать, вы указываете эту цену, нажимаете «-«, а затем горячую клавишу для отдела, в который вы изначально добавили этот продукт.

 import keyboard from functools import partial  num="" subtotal=0.00 under=False index=0 departments=[] numDepartments=0 letters=['q','w','e','r','t','y','u','i','o','p','a','s','d','f','g','h','j','k','l','z','x','c','v','b','n','m'] depHotkeys=[] canComplete=False products=[] paymentMethod="" temp=[]  class depType:  def __init__(self,departmentType,key) -gt; None:  self.departmentType=departmentType  self.key=key  def getDepartment(self):  return self.departmentType  def getKey(self):  return self.key  class item:  def __init__(self,department,price,hotkey) -gt; None:  self.department=department  self.price=price  self.hotkey=hotkey  def getDepartment(self):  return self.department  def getPrice(self):  return self.price  def getHotkey(self):  return self.hotkey  def __str__(self) -gt; str:  return "{}: {}".format(self.department,self.price)  class invoice:  def __init__(self,subtotal,products,change,payment) -gt; None:  self.subtotal=subtotal  self.products=products  self.change=change  self.payment=payment  def add(pressedKey):  global subtotal  global num  if num=="":  price=0  else:  price=int(num)  forCount=0  for keyPress in depHotkeys:  if keyPress==pressedKey:  product=item(departments[forCount],price,keyPress)  products.append(product)  print(product)  forCount =1  subtotal =(price/100)  num=""  canComplete=False  forCount=0  def type(i):  global num  num =str(i)  print(num,end='r')  def subtract():  canVoid=False  global subtotal  global num  if num=="":  price=0  else:  price=int(num)  i=0  voided=False  for x in depHotkeys:  keyboard.remove_hotkey(x)  keyboard.add_hotkey(x,partial(void,price))  i =1  def void(price):  pressed=keyboard.read_hotkey()  global subtotal  voided=False  i=0  x=0  for obj in products:  if pressed==obj.getHotkey() and price==obj.getPrice() and not voided:  print("V-gt;{}: -{}".format(obj.getDepartment(),price))  del products[x]  voided=True  x =1  for i in depHotkeys:  keyboard.remove_hotkey(i)  keyboard.add_hotkey(i,partial(add,i))  subtotal-=(price/100)  num=""  canComplete=False  forCount=0  def getSubtotal():  global canComplete  form="${:,.2f}".format(subtotal)  print("Subtotal: {}".format(form))  canComplete=True  def complete():  global subtotal  global num  if canComplete:  if num=="":  moneyGiven=0  else:  moneyGiven=int(num)  main()  moneyGiven=float(moneyGiven/100)  change=moneyGiven-subtotal  changeForm="${:,.2f}".format(change)  print("Change {}".format(changeForm))  else:  print("You must obtain the subtotal before completing a sale. Input money again.n")  num=""  def main():  print("nn")  for printer in products:  print("n{}".format(printer))  getSubtotal() '''while not under:  numDepartments=int(input("Number of departments (maximum is 26): "))  if numDepartmentsgt;0 and numDepartmentslt;=26:  under=True''' numDepartments=3 while indexlt;numDepartments:  depHotkeys.append(letters[index])  index =1 tempDep=["Deli","Grocery","Bakery"] index=0 for x in depHotkeys:  #dep=input("Enter the department for '{}': ".format(x))  dep=tempDep[index]  departments.append(dep)  part=depType(dep,x)  temp.append(part)  keyboard.add_hotkey(x,partial(add,x))  index =1  for i in range(10):  keyboard.add_hotkey(str(i),partial(type,i))  keyboard.add_hotkey('-',subtract) keyboard.add_hotkey('=',getSubtotal) keyboard.add_hotkey('enter',complete)  keyboard.add_hotkey('tab',main) keyboard.wait('esc')