ट्रैक
/
Python
Python
/
अभ्यास
/
कैटर वेटर
कैटर वेटर

कैटर वेटर

सीखने का अभ्यास

परिचय

एक सेट परिवर्तनीय और अक्रमित संग्रह है, जिसमें हैश करने योग्य ऑब्जेक्ट्स होते हैं। सेट के सदस्य अलग-अलग होने चाहिए। डुप्लिकेट चीज़ों की अनुमति नहीं है। इनमें कई अलग-अलग डेटा टाइप और tuples का tuple जैसी नेस्टेड संरचनाएँ भी रखी जा सकती हैं, बशर्ते सभी एलिमेंट्स हैश करने योग्य हों। सेट का एक अपरिवर्तनीय रूप frozensets भी होता है।

सेट का सबसे आम उपयोग दूसरी डेटा संरचनाओं या चीज़ों के समूहों से डुप्लिकेट जल्दी हटाने में होता है। जब क्रम निर्धारण और डुप्लिकेट की ट्रैकिंग की ज़रूरत न हो, तो इनका उपयोग कुशल तुलना के लिए भी किया जाता है।

दूसरे संग्रह प्रकारों (डिक्शनरी, ऐरे, टपल) की तरह, sets ये सब कर सकते हैं:

  • for item in <set> से इटरेशन
  • in और not in से सदस्यता की जाँच,
  • len() से लंबाई की गणना, और
  • copy() से शैलो कॉपी

sets ये सब नहीं कर सकते:

  • किसी भी तरह की इंडेक्सिंग
  • सॉर्टिंग या इन्सर्शन से क्रम निर्धारण
  • स्लाइसिंग
  • + के ज़रिए जोड़ना

set में सदस्यता जाँचने की समय जटिलता (औसतन) स्थिर रहती है, जबकि list या string में सदस्यता जाँचने की समय जटिलता डेटा की लंबाई बढ़ने के साथ बढ़ती जाती है। <set>.union(), <set>.intersection() या <set>.difference() जैसे मेथड्स की समय जटिलता भी (औसतन) स्थिर रहती है।

सेट लिटरल

किसी set को सीधे सेट लिटरल के रूप में लिखा जा सकता है, जिसमें घुंघराले {} ब्रैकेट और एलिमेंट्स के बीच कॉमा लगाए जाते हैं। डुप्लिकेट चुपचाप छोड़ दिए जाते हैं:

>>> one_element = {'➕'}
{'➕'}

>>> multiple_elements = {'➕', '🔻', '🔹', '🔆'}
{'➕', '🔻', '🔹', '🔆'}

>>> multiple_duplicates =  {'Hello!', 'Hello!', 'Hello!', 
                            '¡Hola!','Привіт!', 'こんにちは!', 
                            '¡Hola!','Привіт!', 'こんにちは!'}
{'こんにちは!', '¡Hola!', 'Hello!', 'Привіт!'}

सेट लिटरल वही घुंघराले ब्रैकेट उपयोग करते हैं जो dict लिटरल करते हैं, इसलिए खाली set बनाने के लिए set() का उपयोग करना पड़ता है।

सेट कंस्ट्रक्टर

set() (set क्लास का कंस्ट्रक्टर) को आर्गुमेंट के रूप में दिए गए किसी भी iterable के साथ उपयोग किया जा सकता है। iterable के एलिमेंट्स पर एक-एक करके चला जाता है और उन्हें set में अलग-अलग जोड़ दिया जाता है। एलिमेंट्स का क्रम सुरक्षित नहीं रहता और डुप्लिकेट चुपचाप छोड़ दिए जाते हैं:

# To create an empty set, the constructor must be used.
>>> no_elements = set()
set()

# The tuple is unpacked & each element is added.  
# Duplicates are removed.
>>> elements_from_tuple = set(("Parrot", "Bird", 
                               334782, "Bird", "Parrot"))
{334782, 'Bird', 'Parrot'}

# The list is unpacked & each element is added.
# Duplicates are removed.
>>> elements_from_list = set([2, 3, 2, 3, 3, 3, 5, 
                              7, 11, 7, 11, 13, 13])
{2, 3, 5, 7, 11, 13}

सेट बनाते समय आम गलतियाँ

"अनपैकिंग" व्यवहार के कारण, किसी स्ट्रिंग के साथ set() का उपयोग करना हैरान करने वाला हो सकता है:

# String elements (Unicode code points) are 
# iterated through and added *individually*.
>>> elements_string = set("Timbuktu")
{'T', 'b', 'i', 'k', 'm', 't', 'u'}

# Unicode separators and positioning code points 
# are also added *individually*.
>>> multiple_code_points_string = set('अभ्यास')
{'अ', 'भ', 'य', 'स', 'ा', '्'}

सेट अलग-अलग डेटा टाइप और नेस्टेड डेटा टाइप रख सकते हैं, लेकिन set के सभी एलिमेंट्स हैश करने योग्य होने चाहिए:

# Attempting to use a list for a set member throws a TypeError
>>> lists_as_elements = {['🌈','💦'], 
                        ['☁️','⭐️','🌍'], 
                        ['⛵️', '🚲', '🚀']}

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'list'


# Standard sets are mutable, so they cannot be hashed.
>>> sets_as_elements = {{'🌈','💦'}, 
                        {'☁️','⭐️','🌍'}, 
                        {'⛵️', '🚲', '🚀'}}

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'set'

सेट के साथ काम करना

सेट में ऐसे मेथड्स होते हैं जो आम तौर पर गणितीय सेट संक्रियाओं जैसा ही काम करते हैं। इनमें से ज़्यादातर (सभी नहीं) मेथड्स का कोई ऑपरेटर समकक्ष होता है। मेथड्स आम तौर पर कोई भी iterable आर्गुमेंट के रूप में लेते हैं, जबकि ऑपरेटरों के लिए ज़रूरी है कि संक्रिया के दोनों पक्ष sets या frozensets हों।

असंयुक्त सेट

<set>.isdisjoint(<other_collection>) मेथड यह जाँचने के लिए उपयोग होता है कि किसी set के एलिमेंट्स का दूसरे set के एलिमेंट्स के साथ कोई ओवरलैप है या नहीं। यह मेथड किसी भी iterable या set को आर्गुमेंट के रूप में स्वीकार करता है। अगर दोनों सेटों में कोई साझा एलिमेंट नहीं है तो यह True लौटाता है, और अगर एलिमेंट्स साझा हैं तो False। इसका कोई ऑपरेटर समकक्ष नहीं है:

# Both mammals and additional_animals are lists.
>>> mammals = ['squirrel','dog','cat','cow', 'tiger', 'elephant']
>>> additional_animals = ['pangolin', 'panda', 'parrot', 
                          'lemur', 'tiger', 'pangolin']

# Animals is a dict.
>>> animals = {'chicken': 'white',
               'sparrow': 'grey',
               'eagle': 'brown and white',
               'albatross': 'grey and white',
               'crow': 'black',
               'elephant': 'grey', 
               'dog': 'rust',
               'cow': 'black and white',
               'tiger': 'orange and black',
               'cat': 'grey',
               'squirrel': 'black'}
               
# Birds is a set.
>>> birds = {'crow','sparrow','eagle','chicken', 'albatross'}

# Mammals and birds don't share any elements.
>>> birds.isdisjoint(mammals)
True

# There are also no shared elements between 
# additional_animals and birds.
>>> birds.isdisjoint(additional_animals)
True

# Animals and mammals have shared elements.
# **Note** The first object needs to be a set or converted to a set
# since .isdisjoint() is a set method.
>>> set(animals).isdisjoint(mammals)
False

उपसमुच्चय और अधिसमुच्चय

<set>.issubset(<other_collection>) यह जाँचने के लिए उपयोग होता है कि <set> का हर एलिमेंट <other_collection> में भी है या नहीं। इसका ऑपरेटर रूप <set> <= <other_set> है:

# Both mammals and additional_animals are lists.
>>> mammals = ['squirrel','dog','cat','cow', 'tiger', 'elephant']
>>> additional_animals = ['pangolin', 'panda', 'parrot', 
                          'lemur', 'tiger', 'pangolin']

# Animals is a dict.
>>> animals = {'chicken': 'white',
               'sparrow': 'grey',
               'eagle': 'brown and white',
               'albatross': 'grey and white',
               'crow': 'black',
               'elephant': 'grey', 
               'dog': 'rust',
               'cow': 'black and white',
               'tiger': 'orange and black',
               'cat': 'grey',
               'squirrel': 'black'}

# Birds is a set.
>>> birds = {'crow','sparrow','eagle','chicken', 'albatross'}

# Set methods will take any iterable as an argument.
# All members of birds are also members of animals.
>>> birds.issubset(animals)
True

# All members of mammals also appear in animals.
# **Note** The first object needs to be a set or converted to a set
# since .issubset() is a set method.
>>> set(mammals).issubset(animals)
True

# Both objects need to be sets to use a set operator
>>> birds <= set(mammals)
False

# A set is always a loose subset of itself.
>>> set(additional_animals) <= set(additional_animals)
True

<set>.issuperset(<other_collection>) .issubset() का उल्टा है। यह जाँचने के लिए उपयोग होता है कि <other_collection> का हर एलिमेंट <set> में भी है या नहीं। इसका ऑपरेटर रूप <set> >= <other_set> है:

# All members of mammals also appear in animals.
# **Note** The first object needs to be a set or converted to a set
# since .issuperset() is a set method.
>>> set(animals).issuperset(mammals)
True

# All members of animals do not show up as members of birds.
>>> birds.issuperset(animals)
False

# Both objects need to be sets to use a set operator
>>> birds >= set(mammals)
False

# A set is always a loose superset of itself.
>>> set(animals) >= set(animals)
True

सेट का सर्वनिष्ठ

<set>.intersection(*<other iterables>) एक नया set लौटाता है जिसमें मूल set और सभी <others> के साझा एलिमेंट्स होते हैं (दूसरे शब्दों में, वह set जहाँ सब कुछ सर्वनिष्ठ होता है)। इस मेथड का ऑपरेटर रूप <set> & <other set> & <other set 2> & ... <other set n> है:

>>> perennials = {'Annatto','Asafetida','Asparagus','Azalea',
                 'Winter Savory', 'Broccoli','Curry Leaf','Fennel', 
                 'Kaffir Lime','Kale','Lavender','Mint','Oranges',
                 'Oregano', 'Tarragon', 'Wild Bergamot'}

>>> annuals = {'Corn', 'Zucchini', 'Sweet Peas', 'Marjoram', 
              'Summer Squash', 'Okra','Shallots', 'Basil', 
              'Cilantro', 'Cumin', 'Sunflower', 'Chervil', 
              'Summer Savory'}

>>> herbs = ['Annatto','Asafetida','Basil','Chervil','Cilantro',
            'Curry Leaf','Fennel','Kaffir Lime','Lavender',
            'Marjoram','Mint','Oregano','Summer Savory', 
            'Tarragon','Wild Bergamot','Wild Celery',
            'Winter Savory']


# Methods will take any iterable as an argument.
>>> perennial_herbs = perennials.intersection(herbs)
{'Annatto', 'Asafetida', 'Curry Leaf', 'Fennel', 'Kaffir Lime',
 'Lavender', 'Mint', 'Oregano', 'Wild Bergamot','Winter Savory'}

# Operators require both groups be sets.
>>> annuals & set(herbs)
 {'Basil', 'Chervil', 'Marjoram', 'Cilantro'}

सेट का संघ

<set>.union(*<other iterables>) एक नया set लौटाता है जिसमें <set> और सभी <other iterables> के एलिमेंट्स होते हैं। इस मेथड का ऑपरेटर रूप <set> | <other set 1> | <other set 2> | ... | <other set n> है:

>>> perennials = {'Asparagus', 'Broccoli', 'Sweet Potato', 'Kale'}
>>> annuals = {'Corn', 'Zucchini', 'Sweet Peas', 'Summer Squash'}
>>> more_perennials = ['Radicchio', 'Rhubarb', 
                      'Spinach', 'Watercress']

# Methods will take any iterable as an argument.
>>> perennials.union(more_perennials)
{'Asparagus','Broccoli','Kale','Radicchio','Rhubarb',
'Spinach','Sweet Potato','Watercress'}

# Operators require sets.
>>> set(more_perennials) | perennials
{'Asparagus',
 'Broccoli',
 'Kale',
 'Radicchio',
 'Rhubarb',
 'Spinach',
 'Sweet Potato',
 'Watercress'}

सेट का अंतर

<set>.difference(*<other iterables>) एक नया set लौटाता है जिसमें मूल set के वे एलिमेंट्स होते हैं जो <others> में नहीं हैं। इस मेथड का ऑपरेटर रूप <set> - <other set 1> - <other set 2> - ...<other set n> है।

>>> berries_and_veggies = {'Asparagus', 
                          'Broccoli', 
                          'Watercress', 
                          'Goji Berries', 
                          'Goose Berries', 
                          'Ramps', 
                          'Walking Onions', 
                          'Blackberries', 
                          'Strawberries', 
                          'Rhubarb', 
                          'Kale', 
                          'Artichokes', 
                          'Currants'}

>>> veggies = ('Asparagus', 'Broccoli', 'Watercress', 'Ramps',
               'Walking Onions', 'Rhubarb', 'Kale', 'Artichokes')

# Methods will take any iterable as an argument.
>>> berries = berries_and_veggies.difference(veggies)
{'Blackberries','Currants','Goji Berries',
 'Goose Berries', 'Strawberries'}

# Operators require sets.
>>> berries_and_veggies - berries
{'Artichokes','Asparagus','Broccoli','Kale',
'Ramps','Rhubarb','Walking Onions','Watercress'}

<set>.symmetric_difference(<other iterable>) एक नया set लौटाता है जिसमें वे एलिमेंट्स होते हैं जो <set> या <other> में हैं, लेकिन दोनों में नहीं। इस मेथड का ऑपरेटर रूप <set> ^ <other set> है:

>>> plants_1 = {'🌲','🍈','🌵', '🥑','🌴', '🥭'}
>>> plants_2 = ('🌸','🌴', '🌺', '🌲', '🌻', '🌵')


# Methods will take any iterable as an argument.
>>> fruit_and_flowers = plants_1.symmetric_difference(plants_2)
>>> fruit_and_flowers
{'🌸', '🌺', '🍈', '🥑', '🥭','🌻' }


# Operators require both groups be sets.
>>> fruit_and_flowers ^ plants_1
{'🌲',  '🌸', '🌴', '🌵','🌺', '🌻'}

>>> fruit_and_flowers ^ set(plants_2)
{'🥭', '🌴', '🌵', '🍈', '🌲', '🥑'}
Note

दो से ज़्यादा सेटों के सममित अंतर का परिणाम ऐसा set होगा जिसमें हर set के अद्वितीय एलिमेंट्स और श्रृंखला के दो से ज़्यादा सेटों के बीच साझा एलिमेंट्स, दोनों शामिल होंगे (विवरण सममित अंतर पर विकिपीडिया लेख में)।

श्रृंखला के हर set के सिर्फ अद्वितीय आइटम्स पाने के लिए, सभी 2-सेट संयोजनों के बीच के सर्वनिष्ठों को एक अलग चरण में जोड़ना और फिर हटाना पड़ता है:

>>> one = {'black pepper','breadcrumbs','celeriac','chickpea flour',
           'flour','lemon','parsley','salt','soy sauce',
           'sunflower oil','water'}

>>> two = {'black pepper','cornstarch','garlic','ginger',
           'lemon juice','lemon zest','salt','soy sauce','sugar',
           'tofu','vegetable oil','vegetable stock','water'}

>>> three = {'black pepper','garlic','lemon juice','mixed herbs',
             'nutritional yeast', 'olive oil','salt','silken tofu',
             'smoked tofu','soy sauce','spaghetti','turmeric'}

>>> four = {'barley malt','bell pepper','cashews','flour',
            'fresh basil','garlic','garlic powder', 'honey',
            'mushrooms','nutritional yeast','olive oil','oregano',
            'red onion', 'red pepper flakes','rosemary','salt',
            'sugar','tomatoes','water','yeast'}

>>> intersections = (one & two | one & three | one & four | 
                     two & three | two & four | three & four)
...
{'black pepper','flour','garlic','lemon juice','nutritional yeast', 
'olive oil','salt','soy sauce', 'sugar','water'}

# The ^ operation will include some of the items in intersections, 
# which means it is not a "clean" symmetric difference - there
# are overlapping members.
>>> (one ^ two ^ three ^ four) & intersections
{'black pepper', 'garlic', 'soy sauce', 'water'}

# Overlapping members need to be removed in a separate step
# when there are more than two sets that need symmetric difference.
>>> (one ^ two ^ three ^ four) - intersections
...
{'barley malt','bell pepper','breadcrumbs', 'cashews','celeriac',
  'chickpea flour','cornstarch','fresh basil', 'garlic powder',
  'ginger','honey','lemon','lemon zest','mixed herbs','mushrooms',
  'oregano','parsley','red onion','red pepper flakes','rosemary',
  'silken tofu','smoked tofu','spaghetti','sunflower oil', 'tofu', 
  'tomatoes','turmeric','vegetable oil','vegetable stock','yeast'}

निर्देश

आप और आपके बिज़नेस पार्टनर मिलकर एक छोटी कैटरिंग कंपनी चलाते हैं। आपने अभी-अभी एक स्थानीय कुकिंग क्लब के लिए इवेंट कराना तय किया है, जिसमें "क्लब के पसंदीदा" व्यंजन परोसे जाएँगे। क्लब को इतने बड़े इवेंट कराने का अनुभव नहीं है, और उसे आयोजन, खरीदारी, तैयारी और परोसने में मदद चाहिए। आपने पूरी योजना को तेज़ करने के लिए कुछ छोटी Python स्क्रिप्ट लिखने का फैसला किया है।

1. व्यंजन की सामग्री साफ़ कीजिए

इवेंट की रेसिपियाँ अलग-अलग स्रोतों से जोड़ी गई थीं और उनकी सामग्रियों में एक ही चीज़ कई बार (या उससे भी अधिक बार) दर्ज दिखती है। आप अतिरिक्त चीज़ें खरीदने से बचना चाहते हैं! खरीदारी और खाना बनाना शुरू करने से पहले हर व्यंजन की सामग्री सूची को "साफ़" करना ज़रूरी है।

clean_ingredients(<dish_name>, <dish_ingredients>) फंक्शन बनाइए, जो एक व्यंजन का नाम और सामग्रियों की एक list लेता है। यह फंक्शन एक tuple लौटाता है, जिसमें पहले व्यंजन का नाम होता है और उसके बाद दोहराव हटाकर बनाया गया सामग्रियों का set।

>>> clean_ingredients('Punjabi-Style Chole', ['onions', 'tomatoes', 'ginger paste', 'garlic paste', 'ginger paste', 'vegetable oil', 'bay leaves', 'cloves', 'cardamom', 'cilantro', 'peppercorns', 'cumin powder', 'chickpeas', 'coriander powder', 'red chili powder', 'ground turmeric', 'garam masala', 'chickpeas', 'ginger', 'cilantro'])

>>> ('Punjabi-Style Chole', {'garam masala', 'bay leaves', 'ground turmeric', 'ginger', 'garlic paste', 'peppercorns', 'ginger paste', 'red chili powder', 'cardamom', 'chickpeas', 'cumin powder', 'vegetable oil', 'tomatoes', 'coriander powder', 'onions', 'cilantro', 'cloves'})

2. कॉकटेल और मॉकटेल

इवेंट में कॉकटेल और "मॉकटेल" दोनों शामिल होंगे, यानी बिना अल्कोहल वाले मिक्स्ड ड्रिंक। आपको यह पक्का करना है कि "मॉकटेल" वाकई बिना अल्कोहल हों और कॉकटेल में सचमुच अल्कोहल हो।

check_drinks(<drink_name>, <drink_ingredients>) फंक्शन बनाइए, जो एक ड्रिंक का नाम और सामग्रियों की एक list लेता है। अगर ड्रिंक में अल्कोहल वाली कोई सामग्री न हो तो फंक्शन को ड्रिंक का नाम लौटाना चाहिए और उसके बाद "Mocktail", और अगर ड्रिंक में अल्कोहल हो तो ड्रिंक का नाम और उसके बाद "Cocktail"। इस अभ्यास के लिए यह मानिए कि कॉकटेल में सिर्फ़ sets_categories_data.py के ALCOHOLS कॉन्स्टेंट में दिए गए अल्कोहल ही शामिल होंगे:

>>> from sets_categories_data import ALCOHOLS 

>>> check_drinks('Honeydew Cucumber', ['honeydew', 'coconut water', 'mint leaves', 'lime juice', 'salt', 'english cucumber'])
...
'Honeydew Cucumber Mocktail'

>>> check_drinks('Shirley Tonic', ['cinnamon stick', 'scotch', 'whole cloves', 'ginger', 'pomegranate juice', 'sugar', 'club soda'])
...
'Shirley Tonic Cocktail'

3. व्यंजनों को श्रेणियों में बाँटिए

मेहमानों की सूची में अलग-अलग आहार संबंधी ज़रूरतों वाले लोग शामिल हैं, और आपके स्टाफ को व्यंजनों को Vegan, Vegetarian, Paleo, Keto और Omnivore में बाँटना होगा। कोई व्यंजन किसी श्रेणी में तभी गिना जाएगा जब उसकी सारी सामग्रियाँ उस श्रेणी के सामग्री सेट में मौजूद हों।

categorize_dish(<dish_name>, <dish_ingredients>) फंक्शन बनाइए, जो व्यंजन का नाम और उस व्यंजन की सामग्रियों का एक set लेता है। फंक्शन को dish name: <CATEGORY> वाली एक स्ट्रिंग लौटानी चाहिए (यानी व्यंजन किस भोजन श्रेणी में आता है)। दिए गए सभी व्यंजन sets_categories_data.py से इम्पोर्ट की गई किसी एक श्रेणी (VEGAN, VEGETARIAN, PALEO, KETO या OMNIVORE) में "फ़िट" होंगे।

>>> from sets_categories_data import VEGAN, VEGETARIAN, PALEO, KETO, OMNIVORE


>>> categorize_dish('Sticky Lemon Tofu', {'tofu', 'soy sauce', 'salt', 'black pepper', 'cornstarch', 'vegetable oil', 'garlic', 'ginger', 'water', 'vegetable stock', 'lemon juice', 'lemon zest', 'sugar'})
...
'Sticky Lemon Tofu: VEGAN'

>>> categorize_dish('Shrimp Bacon and Crispy Chickpea Tacos with Salsa de Guacamole', {'shrimp', 'bacon', 'avocado', 'chickpeas', 'fresh tortillas', 'sea salt', 'guajillo chile', 'slivered almonds', 'olive oil', 'butter', 'black pepper', 'garlic', 'onion'})
...
'Shrimp Bacon and Crispy Chickpea Tacos with Salsa de Guacamole: OMNIVORE'

4. एलर्जी और प्रतिबंधित चीज़ों को लेबल कीजिए

कुछ मेहमानों को एलर्जी है और उनके आहार पर कुछ और प्रतिबंध भी हैं। हर व्यंजन के लिए ऐसी सामग्रियों पर टैग लगाना या नोट करना ज़रूरी है, ताकि इनसे कोई दिक्कत न हो।

tag_special_ingredients(<dish>) फंक्शन बनाइए, जो एक tuple लेता है, जिसकी पहली जगह पर व्यंजन का नाम होता है और दूसरी जगह पर उस व्यंजन की सामग्रियों की list या set। व्यंजन का नाम लौटाइए और उसके बाद उन सामग्रियों का set, जिन्हें व्यंजन के विवरण में खास नोट की ज़रूरत है। किसी list के अंदर की सामग्रियों में दोहराव हो भी सकता है और नहीं भी। इस अभ्यास के लिए वे सभी एलर्जी या खास सामग्रियाँ, जिन पर लेबल लगाना है, sets_categories_data.py से इम्पोर्ट किए गए SPECIAL_INGREDIENTS कॉन्स्टेंट में मौजूद हैं।

>>> from sets_categories_data import SPECIAL_INGREDIENTS

>>> tag_special_ingredients(('Ginger Glazed Tofu Cutlets', ['tofu', 'soy sauce', 'ginger', 'corn starch', 'garlic', 'brown sugar', 'sesame seeds', 'lemon juice']))
...
('Ginger Glazed Tofu Cutlets', {'garlic','soy sauce','tofu'})

>>> tag_special_ingredients(('Arugula and Roasted Pork Salad', ['pork tenderloin', 'arugula', 'pears', 'blue cheese', 'pine nuts', 'balsamic vinegar', 'onions', 'black pepper']))
...
('Arugula and Roasted Pork Salad', {'pork tenderloin', 'blue cheese', 'pine nuts', 'onions'})

5. सामग्रियों की "मुख्य सूची" बनाइए

ऑर्डर देने और खरीदारी की तैयारी के लिए आपको मेन्यू की हर चीज़ की सामग्रियों की एक "मुख्य सूची" बनानी होगी (मात्राएँ बाद में भरी जाएँगी)।

compile_ingredients(<dishes>) फंक्शन बनाइए, जो व्यंजनों की एक list लेता है और सूची में दिए सभी व्यंजनों की सारी सामग्रियों का एक set लौटाता है। हर व्यंजन को उसकी सामग्रियों के set से दर्शाया गया है।

dishes = [ {'tofu', 'soy sauce', 'ginger', 'corn starch', 'garlic', 'brown sugar', 'sesame seeds', 'lemon juice'},
           {'pork tenderloin', 'arugula', 'pears', 'blue cheese', 'pine nuts',
           'balsamic vinegar', 'onions', 'black pepper'},
           {'honeydew', 'coconut water', 'mint leaves', 'lime juice', 'salt', 'english cucumber'}]

>>> compile_ingredients(dishes)
...
{'arugula', 'brown sugar', 'honeydew', 'coconut water', 'english cucumber', 'balsamic vinegar', 'mint leaves', 'pears', 'pork tenderloin', 'ginger', 'blue cheese', 'soy sauce', 'sesame seeds', 'black pepper', 'garlic', 'lime juice', 'corn starch', 'pine nuts', 'lemon juice', 'onions', 'salt', 'tofu'}

6. ट्रे पर परोसने के लिए अपेटाइज़र अलग कीजिए

मेज़बानों ने आपको उन व्यंजनों की सूची दी है जिन्हें ट्रे पर परोसने के लिए "एक-एक कौर" वाले अपेटाइज़र के रूप में तैयार करना है। आपको इन्हें उन मुख्य व्यंजनों की सूची से अलग करना है जो बड़ी प्लेटों के लिए बन रहे हैं।

separate_appetizers(<dishes>, <appetizers>) फंक्शन बनाइए, जो व्यंजनों के नामों की एक list और अपेटाइज़रों के नामों की एक list लेता है। फंक्शन को व्यंजनों के नामों की वह list लौटानी चाहिए जिसमें से अपेटाइज़रों के नाम हटा दिए गए हों। <dishes> या <appetizers> में से किसी भी list में दोहराव हो सकता है, और दोहराव हटाना पड़ सकता है।

dishes =    ['Avocado Deviled Eggs','Flank Steak with Chimichurri and Asparagus', 'Kingfish Lettuce Cups',
             'Grilled Flank Steak with Caesar Salad','Vegetarian Khoresh Bademjan','Avocado Deviled Eggs',
             'Barley Risotto','Kingfish Lettuce Cups']
          
appetizers = ['Kingfish Lettuce Cups','Avocado Deviled Eggs','Satay Steak Skewers',
              'Dahi Puri with Black Chickpeas','Avocado Deviled Eggs','Asparagus Puffs',
              'Asparagus Puffs']
              
>>> separate_appetizers(dishes, appetizers)
...
['Vegetarian Khoresh Bademjan', 'Barley Risotto', 'Flank Steak with Chimichurri and Asparagus', 
 'Grilled Flank Steak with Caesar Salad']

7. सिर्फ़ एक रेसिपी में इस्तेमाल हुई सामग्रियाँ ढूँढ़िए

हर श्रेणी (Vegan, Vegetarian, Paleo, Keto, Omnivore) में आप वे सामग्रियाँ अलग करेंगे जो सिर्फ़ एक व्यंजन में आती हैं। इन "सिंगलटन" सामग्रियों के लिए एक खास खरीदार तय किया जाएगा, ताकि बाकी सब काम की जल्दबाज़ी में ये भूल न जाएँ।

singleton_ingredients(<dishes>, <INTERSECTIONS>) फंक्शन बनाइए, जो व्यंजनों की एक list और उसी श्रेणी का <CATEGORY>_INTERSECTIONS कॉन्स्टेंट लेता है। हर व्यंजन को उसकी सामग्रियों के set से दर्शाया गया है। हर <CATEGORY>_INTERSECTIONS उन सामग्रियों का set है जो श्रेणी में एक से अधिक व्यंजनों में आती हैं। सेट ऑपरेशन इस्तेमाल करके आपके फंक्शन को "सिंगलटन" सामग्रियों का एक set लौटाना चाहिए (वे सामग्रियाँ जो श्रेणी में सिर्फ़ एक व्यंजन में आती हैं)।

from sets_categories_data import example_dishes, EXAMPLE_INTERSECTION

>>> singleton_ingredients(example_dishes, EXAMPLE_INTERSECTION)
...
{'garlic powder', 'sunflower oil', 'mixed herbs', 'cornstarch', 'celeriac', 'honey', 'mushrooms', 'bell pepper', 'rosemary', 'parsley', 'lemon', 'yeast', 'vegetable oil', 'vegetable stock', 'silken tofu', 'tofu', 'cashews', 'lemon zest', 'smoked tofu', 'spaghetti', 'ginger', 'breadcrumbs', 'tomatoes', 'barley malt', 'red pepper flakes', 'oregano', 'red onion', 'fresh basil'}
GitHub के ज़रिए संपादित करें यह लिंक एक नई विंडो या टैब में खुलता है
Python Exercism

कैटर वेटर शुरू करने के लिए तैयार हैं?

Exercism पर साइन अप कीजिए और Python को 17 कॉन्सेप्ट146 अभ्यास तथा असली इंसानों से मिलने वाली मेंटरिंग के साथ सीखिए और उसमें महारत हासिल कीजिए, वह भी बिल्कुल मुफ्त।