用户输入未保存到库存lis

2024-05-14 18:36:18 发布

您现在位置:Python中文网/ 问答频道 /正文

基本上,我正在制作一个应用程序,以更好地帮助我管理我的易趣商店。我对编程和面向对象编程还是很陌生的。看完一些教程后,我拼凑了以下代码。到目前为止一切都很顺利。我目前一直坚持的是,当用户输入一个项目的库存,它不是保存它。而且,当用户想要查看库存时,他们添加的项目不会填充。任何意见或建议都要经过严格的训练

def Inventory():
    All_Inventory = {}

class Ebay_Inventory:

    def __init__(self, manufacturer, object_type, price):
        self.manufacturer = manufacturer
        self.object_type = object_type
        self.price = price

    def add_item(self):
        manufacturer = input("Enter Manufacturer: ")
        object_type = input("Enter what the item is: ")
        price = input("Enter price: ")

        item_info = Ebay_Inventory(manufacturer, object_type, price)
        All_Inventory = item_info
        print("Item added successfully")

    def delete_item(self):
        delete = input("What is the item you want to delete?: ")
        if delete in All_Inventory.keys():
            del[delete]
            print("The item entered has been deleted.")
        else:
            print("Item not found")


    def sale_status(self):
        update = input("What is the item you want to update?:")
        if update in All_Inventory.keys():
            pass
        else:
            print("Item not found")


user=True
while user:
    print("\n1. Add to item inventory")
    print("2. Remove item from inventory")
    print("3. Update sale status")
    print("4. View inventory")
    print("5. Exit program")
    user_wants=input("What would you like to do today?")
    if user_wants=="1":
        Ebay_Inventory.add_item(input)
    elif user_wants=="2":
        Ebay_Inventory.delete_item(input)
    elif user_wants=="3":
        Ebay_Inventory.sale_status(input)
    elif user_wants=="4":
        print(All_Inventory)
    elif user_wants=="5":
        print("\n Thank you for using item inventory.")
        break
    elif user_wants!="":
        print("\n Input not understood. Please try again.")

Tags: selfinputobjectdeftypeallitemdelete
2条回答

很抱歉对您的代码进行了大量的修改,但我认为这更像是您的目标:

class EbayInventory:
    def __init__(self):
        self.all_inventory = []

    def print_items(self):
        print('Current item list by index:')
        for i in range(0, len(self.all_inventory)):
            print("{} -> {}".format(i+1, self.all_inventory[i]))

    def add_item(self):
        manufacturer = input("Enter Manufacturer: ")
        object_type = input("Enter what the item is: ")
        price = input("Enter price: ")
        item = {'manufacturer': manufacturer, 'type': object_type, 'price': price}
        self.all_inventory.append(item)
        print("Item added successfully")

    def delete_item(self):
        self.print_items()
        delete = int(input("Item id you want to delete: "))
        try:
            del self.all_inventory[delete - 1]
            print("The item entered has been deleted.")
        except Exception as e:
            print("An error occurred deleting that item, details below")
            print(e)

    def sale_status(self):
        self.print_items()
        update_index = int(input("Item id you want to update: "))
        if update_index > len(self.all_inventory) or update_index <= 0:
            print("You're trying to change an item that doesn't exist!!")
            return
        print("OK. Let's get that item up to date!")
        manufacturer = input("Enter Manufacturer: ")
        object_type = input("Enter what the item is: ")
        price = input("Enter price: ")
        item = {'manufacturer': manufacturer, 'type': object_type, 'price': price}
        self.all_inventory[update_index - 1] = item
        print("OK. We got that update taken care of")

if __name__ == "__main__":
    my_app = EbayInventory()
    while True:
        print("\n1. Add to item inventory")
        print("2. Remove item from inventory")
        print("3. Update sale status")
        print("4. View inventory")
        print("5. Exit program")
        user_wants = input("Please enter the number corresponding to how you would like help: ")
        if user_wants == "1":
            my_app.add_item()
        elif user_wants == "2":
            my_app.delete_item()
        elif user_wants == "3":
            my_app.sale_status()
        elif user_wants == "4":
            my_app.print_items()
        elif user_wants == "5":
            print("Thank you for using item inventory.")
            break
        else:
            print("Input not understood. Please try again.")

你有一个变量user什么都没做。只需使用while True:进入无限循环即可。如果你想像以前那样循环,那么你可以用user = False来代替break。这有时是一个漂亮的把戏,但在这里没有意义,我想。在我看来,库存实际上是存储在类中唯一有好处的东西,然后方法可以通过self.all_inventory访问它来调整它。我将您的代码移到add_item()sale_status()方法中请求项输入,因此现在主代码块看起来干净多了。我还将它包装在if __name__ == "__main__":中,这样您就可以将这个类导入到另一个项目中,而不必运行整个程序!我用try:except:子句进行了一些基本的错误检查。我想你误解了ClassInstance之间的区别。所以在我的代码中,Class是EbayInventory,而Instancemy_app。你创建类的实例就像我对my_app = EbayInventory()所做的那样,然后self现在引用我的应用程序。这样我就可以调用my_app.add_item()。不过,您可以有多个对象实例,它们在您的计算机内存中都有自己的空间。所以你可以说:

app1 = EbayInventory()
app2 = EbayInventory()
app1.add_item()

只有app1会有任何项,而app2仍然是一个空列表,但是仍然有methods来通过app2.add_item()构建一个清单。不过,为了回答您的主要问题,您从不调用函数Inventory(),因此它不存在来保存您的信息。当您调用item_info = Ebay_Inventory(manufacturer, object_type, price)时,实际上您正在创建一个类的实例,在这里这样做是非常荒谬的,因为这意味着在下一行您可以说item_info.add_item(),这将使成为另一个实例,但是您没有将此信息保存在任何地方,因此您永远无法检索它

您需要阅读有关范围、OOP和dicts的内容:

您没有添加到Inventory.All_Inventory中-您使用All_Inventory = item_info创建了一个新的本地

将静态类属性和实例属性混合在一起,如下所示:

您正在错误地删除/访问词典-请参阅:

固定:

class Ebay_Inventory:
    Inventory = {}                                    # class property


    @staticmethod
    def print_inventory():
        for k in Ebay_Inventory.Inventory:
            for i in Ebay_Inventory.Inventory[k]:
                print(k,i)

    class Ebay_Item:
        def __init__(self, key, manufacturer, object_type, price):
            self.manufacturer = manufacturer
            self.object_type = object_type
            self.price = price 
            self.key = key

        def __str__(self):
            return f"{self.manufacturer} {self.object_type} {self.price}"

        def __repr__(self):
            return str(self)

    @staticmethod    
    def add_item(key=None, man=None, obj=None, pri=None):
        # use values if given, else ask - this is for demo purposes only
        key = key or input("Enter key: ")
        manufacturer = man or input("Enter Manufacturer: ")
        object_type = obj or input("Enter what the item is: ")
        price = pri or input("Enter price: ")

        # create new item   
        item_info = Ebay_Inventory.Ebay_Item(key, manufacturer, object_type, price)

        # add to class member, create key if need be
        Ebay_Inventory.Inventory.setdefault(item_info.key,[]).append(item_info)

    def delete_item(key=None):
        delete = key or input("What is the item you want to delete?: ")
        if delete in Ebay_Inventory.Inventory:
            del Ebay_Inventory.Inventory[delete]
            print("The item entered has been deleted.")
        else:
            print("Item not found")

    def __str__(self):
        return Ebay_Inventory.print_inventory()

# add 2 items and print
Ebay_Inventory.add_item(1,"Me","Me",1000)
Ebay_Inventory.add_item(2,"You","You",1000)
Ebay_Inventory.print_inventory()

# remove non existent and existent item and print
Ebay_Inventory.delete_item(3)
Ebay_Inventory.delete_item(2)
Ebay_Inventory.print_inventory()

输出:

1 Me Me 1000
2 You You 1000
Item not found
The item entered has been deleted.
1 Me Me 1000

相关问题 更多 >

    热门问题