Как мне удалить, обновить и выполнить поиск в двух разных независимых списках?

#python #list

#python #Список

Вопрос:

У меня есть программа, в которой есть два списка; один для имени (инвентаризация) и один, который содержит количество. Как мне удалить, обновить и выполнить поиск по списку name (inventory) и выполнить соответствующее действие со списком qty. Например, если у меня есть список из пяти элементов, а пять кол-во расположены в порядке опоры в другом списке. Если я удалю третий элемент, как мне также удалить кол-во элемента? Ниже приведен полный код:

 import os


name = []

qty = []
class Inventory:
    def __init__(self,desc,unit):
        self.description = desc
        self.units = unit

class Totals:
    def __init__(self):
        self.inventory=[]
    def adding(self,inventory):
        #adding item to list
        self.inventory.append(inventory)

    def show_items(self):
        if not self.inventory:
            return
        print("{:<15}{:<25}".format(" "*9,"Description","Units in inventory"))
        print("-"*75)
        for c,i in enumerate(self.inventory,1):
            print("{:<15}{:<25}{:<25}{:<10}".format("Item #" str(c),i.description,i.units))
        print("-"*75)


def menuDisplay():
    print ('=============================')
    print ('= Inventory Management Menu =')
    print ('=============================')
    print ('(1) Add New Item to Inventory')
    print ('(2) Remove Item from Inventory')
    print ('(3) Update Inventory')
    print ('(4) Search Item in Inventory')
    print ('(5) Print Inventory Report')
    print ('(99) Quit')
    CHOICE = int(input("Enter choice: "))
    menuSelection(CHOICE)

def menuSelection(CHOICE):

    if CHOICE == 1:
        print('Adding Inventory')
        print('================')
        new_name = input('Enter the name of the item: ')
        name.append(new_name)
        new_qty = int(input("Enter the quantity of the item: "))
        qty.append(new_qty)
        CHOICE = int(input('Enter 98 to continue or 99 to exit: '))
    if CHOICE == 98:
            menuDisplay()
    elif CHOICE == 99:
        exit()
    elif CHOICE == 2:
        print('Removing Inventory')
        print('==================')
        removing = input('Enter the item name to remove from inventory: ')
        name.remove(removing)
        CHOICE = int(input('Enter 98 to continue or 99 to exit: '))
    if CHOICE == 98:
            menuDisplay()
    elif CHOICE == 99:
        exit()
    elif CHOICE == 3:
        print('Updating Inventory')
        print('==================')
        input('Enter the item to update: ')
        update = int(input("Enter the updated quantity. Enter 5 for additional or -5 for less: "))
    if update == 5:
        print()
    elif update == -5:
        print()
        CHOICE = int(input('Enter 98 to continue or 99 to exit: '))
    if CHOICE == 98:
            menuDisplay()
    elif CHOICE == 99:
        exit()
        updateInventory()
    elif CHOICE == 4:
        print('Searching Inventory')
        print('===================')
        search = input('Enter the name of the item: ')
        if search in search:
            print ('Item:     ', item_description)
            print ('Quantity: ', item_quantity)
            print ('----------')
        CHOICE = int(input('Enter 98 to continue or 99 to exit: '))
    if CHOICE == 98:
            menuDisplay()
    elif CHOICE == 99:
        exit()
        searchInventory()
    elif CHOICE == 5:
        print('Current Inventory')
        print('=================')
        input('Enter the name of the item: ')
        CHOICE = int(input('Enter 98 to continue or 99 to exit: '))
    if CHOICE == 98:
            menuDisplay()
    elif CHOICE == 99:
        exit()
        printInventory()
    elif CHOICE == 99:
        exit()
    
def printInventory():
    InventoryFile = open('Inventory.txt', 'r')
    item_description = InventoryFile.readline()
    print ('Current Inventory')
    print ('-----------------')
    while item_description != '':
        item_quantity = InventoryFile.readline()
        item_description = item_description.rstrip('n')
        item_quantity = item_quantity.rstrip('n')
        print ('Item:     ', item_description)
        print ('Quantity: ', item_quantity)
        print ('----------')
        item_description = InventoryFile.readline()
    InventoryFile.close()

    CHOICE = int(input('Enter 98 to continue or 99 to exit: '))
    if CHOICE == 98:
            menuDisplay()
    else:
        exit()
    
menuDisplay()
  

Я считаю, что опция добавления работает, как и удаление, но я не знаю, как удалить кол-во вместе с именем элемента.

Комментарии:

1. Используйте объекты для группировки вашей информации, словари для сопоставления ее с полезными ключами

2. 2 отдельных списка — очень плохой способ мониторинга ваших данных. Вам лучше использовать словарь, или список пар кортежей, или список пар списков

Ответ №1:

Вот что я бы сделал. Однако вам нужно знать 2 новые функции.

1-я новая функция

.remove удаляет элемент, соответствующий тому, что вы удаляете. Однако в вашем случае, я думаю, вы ищете .pop() pop

.pop() принимает число, которое является индексом элемента, который вы хотите удалить.

2-я функция

Теперь вам нужно знать .index , который возвращает индекс строки, которую вы вводите в функцию. Указатель

Собрать его вместе

Теперь, когда вы знаете эти 2 функции, это просто! Используйте .index() в первом списке, затем .pop во втором!

 lis = ["hello", "bye", "sigh"]
lis2 = [10, 20, 30]

takeout = input("What do you want to delete?")
indexdel = lis.index(takeout)
lis.pop(indexdel)
lis2.pop(indexdel)
  

Это приведет к удалению их обоих! Теперь применитесь к своему собственному коду.

Для ваших целей это было бы:

     elif CHOICE == 2:
        print('Removing Inventory')
        print('==================')
        removing = input('Enter the item name to remove from inventory: ')
        indexdel = name.index(removing)
        name.pop(indexdel)
        qty.pop(indexdel)
        CHOICE = int(input('Enter 98 to continue or 99 to exit: '))
  

ТАКЖЕ! Обращение к комментариям об одном объекте

Это тоже было бы моим первым шагом, но я думаю, что сначала это немного сбивает с толку. Тем не менее, я тоже могу показать это!

Давайте создадим класс, который будет хранить эти 2 значения.

 class Foo():
    def __init__(self, name, qty):
        self.name = name
        self.qty = qty
  

Теперь вы можете создать несколько объектов в списке, например:

 item = []
item.append(Foo("hello", 50))
item.append(Foo("bye", 100))

def delitem(name):
    for i in item:
        if i.name == name:
            item.remove(i)
  

Комментарии:

1. Да! Нет проблем!