मैं एक रेस्तरां मेनू प्रोजेक्ट पर काम कर रहा हूं, अब तक मैंने अपना मुख्य व्यंजन मेनू बनाया है .. लेकिन एक चीज के साथ संघर्ष कर रहा हूं, जो दोहराव है (कृपया नीचे दिए गए कोड को चलाएं और देखें कि मेरा क्या मतलब है); मैं डुप्लिकेट आइटम को हटाना चाहता हूं, लेकिन मैं सूची में संबंधित आइटम में दर्ज की गई मात्रा को भी जोड़ना चाहता हूं, उदाहरण के लिए:

[1.Pesto Pasta, 2.Pizza, 3.Risto]

यदि उपयोगकर्ता दर्ज किया गया है: 1 पहला आइटम MyOrder नामक एक नई सूची में जोड़ा जाएगा, सूची MyOrder आइटम, मूल्य और मात्रा (बिल के लिए आवश्यक) को इनकैप्सुलेट करती है, तो प्रोग्राम उपयोगकर्ता से मात्रा के बारे में पूछेगा। मान लें कि उसने प्रवेश किया है: 2

और फिर उपयोगकर्ता ने एक दूसरा आइटम जोड़ा जो 1 भी था, और मात्रा 5 दर्ज की गई। MyOrder सूची इस प्रकार होगी:

[(1.Pesto Pasta, 2),(1.Pesto Pasta, 5)]

लेकिन, मैं जो चाहता हूं वह 2+5 जोड़ना है और डुप्लिकेट आइटम को इस तरह से हटाना है remove

[(1.Pesto Pasta, 7)]

मैं वह कैसे कर सकता हूं? कृपया सहायता कीजिए :(

global items
items = []
global OriginalPrice 
OriginalPrice = []
global numOfItems
numOfItems =[]
global MyOrder
MyOrder = []

def maindish():
dishes = {'1.Pink Sauce Chicken Pasta':2.950,'2.Cheesy Garlic Bread':0.850,'3.Pesto 
Pasta':3.250}
print("\n")
for key,val in dishes.items():
    print(f"{key} - {val}KD")

while True:
    choise = int(input('Enter dish: '))
    quantity = int(input('Enter how many dishes'))
    
    item = list(dishes)[choise-1] #extracting the key
    DishPrice = dishes[item] #extracting value
    
    items.append(item)
    numOfItems.append(quantity)
    OriginalPrice.append(DishPrice)
    a = str(input('N/Y'))
    if(a == 'n'):
        break
    else:
        return maindish()
    

   maindish()
   for i in zip(items,numOfItems):
   MyOrder.append(i)
   print(MyOrder)
0
user13619472 12 जुलाई 2021, 22:16

3 जवाब

टुपल्स निश्चित रूप से डेटा के लिए एक खराब विकल्प हैं जिन्हें लगातार अपडेट करने की आवश्यकता होती है। मेरा सुझाव है कि पकवान के नाम (key) को संबंधित मात्रा (value) के साथ स्टोर करने के लिए dictionary का उपयोग करें।

तो सबसे पहले, items और num_of_items को जोड़ने के बजाय, मैं item:quantity जोड़े का एक शब्दकोश बनाऊंगा। मैं इसे कैसे कार्यान्वित करूंगा इसका एक सरल उदाहरण यहां दिया गया है।

# replace this:
items.append(item)
numOfItems.append(quantity)

# with this (assuming items as the dict):
if item in items:
    items[item] += quantity
else:
    items[item] = quantity

इसी तरह मैं my_order एक ही तर्क के साथ एक शब्दकोश बनाउंगा, इस प्रकार maindish() परिभाषा को निम्नानुसार बदल दूंगा:

for dish, quantity in items.items():
    if dish in my_order:
        my_order[dish] += quantity
    else:
        my_order[dish] = quantity

जब आप अपनी जानकारी पर बहुत सारे अपडेट कर रहे हों तो हमेशा परिवर्तनीय डेटा प्रकार चुनें।

एक साइड नोट के रूप में, मेरा सुझाव है कि आप PEP8 अच्छी प्रथाओं का पालन करने का प्रयास करें, कम से कम जब यह चर नामों की बात आती है, अर्थात शब्दों को अलग करने के लिए मिश्रित मामले के बजाय अंडरस्कोर का उपयोग करें।

1
Max Shouman 12 जुलाई 2021, 19:37

आप ऑर्डर ऑब्जेक्ट्स को उसी तरह आउटपुट कर सकते हैं जैसे आप डिक्ट्स प्रिंट करते हैं और सूची आप ऑब्जेक्ट्स के साथ __str__() विधि को ओवरराइड करके भी कर सकते हैं, जो एक स्ट्रिंग देता है", जो कि पाइथन में सभी ऑब्जेक्ट्स में बनाया गया है।

class Food:
# previous code and methods 
    def __str__(self):
        return self.name + str(self.price) + str(self.quantity) 
                + str(self.quantity*self.price)
class Order:
# previous code and methods 
    def __str__(self):
        output = "name | price | quantity | total \n"
        for key, value in self.orders.items():
            output += str(value) + "\n"
        return output

आप बदल सकते हैं कि आउटपुट कैसा दिखता है, यह सिर्फ स्ट्रिंग मैनिपुलेशन के रूप में दिखता है।

मुख्य कार्यक्रम में

person1 = # an order object with all their orders already added
print(person1) #will output result of ```__str__()```:
1
Issac Abraham 12 जुलाई 2021, 20:56

आप आइटम को अपडेट नहीं कर सकते क्योंकि आप एक टपल का उपयोग कर रहे हैं जिसे संपादित नहीं किया जा सकता है। आप दूसरी सूची का उपयोग कर सकते हैं, जिसे संपादित किया जा सकता है।

मैं एक 2d सूची के बजाय एक शब्दकोश का उपयोग करने की सलाह देता हूं।

एक ऑब्जेक्ट के रूप में ऑर्डर बनाने के लिए ओओपी का उपयोग करके एक बेहतर तरीका यह है कि यह आपको कई लोगों के लिए कई ऑर्डर बनाने की अनुमति देता है आपको एक सामान्य खाद्य वर्ग भी बनाना चाहिए या विशिष्ट खाद्य पदार्थ बनाने के लिए विरासत का उपयोग करना चाहिए।

class Food:
    def __init__(self, name, price, quantity):
        self.name =  name
        self.price = price
        self.quantity = quantity

    def increase_quantity(self, quantity):
        self.quantity += quantity
class Order:
    def __init__(self):
        self.order = {}
    
    def add_order(name, price, quantity):
        if name in self.orders:
            self.orders[name].increase_quantity(quantity)
        else:
            self.food1 = Food(name, price, qauntity)
        

मुख्य कोड में, आप जितने चाहें उतने ऑर्डर बना सकते हैं

person1 = Order()
person2 = Order()
person1.add_order("pesto pasta" , 2.95, 1)
person1.add_order("pesto pasta" , 2.95, 5)
# now this person has order 6 pesto pastas
person2.add_order("chicken pasta" , 1.5, 2)
1
Issac Abraham 12 जुलाई 2021, 19:58