On Monday, December 28, 2015 at 11:30:18 PM UTC+1, Cameron Simpson wrote: > On 28Dec2015 01:34, Prince Udoka wrote: > >bu i have come up with a solution, that will work but encounter a problem in > >the set, giving set not manipulated correctly: > > > >def manipulate_data(kind, data): > > if kind == 'list': > > return list(data)[::-1] > > elif kind == 'set': > > return set(data) > > elif kind == 'dictionary': > > return dict.keys(data) > >manipulate_data("list", range(1,6)) > >manipulate_data("set", {"a", "b", "c", "d", "e", "ANDELA", "TIA", "AFRICA"}) > >manipulate_data("dictionary", {"apples": 23, "oranges": 15, "mangoes": 3, > >"grapes": 45}) > > > >the thing now is the function to use in adding "ANDELA", "TIA", "AFRICA" > >pls 4give my use of language > > You are very close. Let me remind you of the original task text: > > add items `"ANDELA"`, `"TIA"` and `"AFRICA"` to the set and return the > resulting set > > Your previous attempt (with hardwired values inside the function) actually > had > code to do it. > > While you have pulled out all the hardwired values from the function (good) > and > put them in the external calls, note that the task explicitly says "add items > `"ANDELA"`, `"TIA"` and `"AFRICA"` to the set". So _those_ values _are_ > supposed to be hardwired inside the function - they are a fixed part of the > task. So move them back in, as in your previous attempt. > > There is some ambiguity in that part of the question: should you return a > _new_ > set consistint of the original set plus the three new values, or simply add > the > three values to the original set? Your prior code modified the original set, > which may fit the task specification. > > However, it is a common design objective that functions do not, _normally_, > modify their arguments. So, consider this code: > > set1 = {"a", "b", "c", "d", "e"} > set2 = manipulate_data("set", set1) > > After running this, set2 should look like this: > > {"a", "b", "c", "d", "e", "ANDELA", "TIA", "AFRICA"} > > (in some order -- sets are not ordered). However, what about set1? In your > current code, set1 is modified, so it will be the same. But you can imagine > that it would be more useful for the caller if set1 were unchanged. > > In python, the convention is usually that if a function returns the new value > then it should not modify the original. So you should probably construct a > copy > of the original set and modify that: > > data = set(data) > ... add the new values ... > return data > > Cheers, > Cameron Simpson <c...@zip.com.au>
thumbs up Cameron , you and others here are really wonderful -- https://mail.python.org/mailman/listinfo/python-list