Alan Gauld wrote:

> On 12/01/14 08:12, Roelof Wobben wrote:
> 
>> # Write a Python procedure fix_machine to take 2 string inputs
>> # and returns the 2nd input string as the output if all of its
>> # characters can be found in the 1st input string and "Give me
>> # something that's not useless next time." if it's impossible.
> 
> OK< So there is nothing here about the orders being the same.
> That makes it much easier.
> 
>> # 5***** #  If you've graduated from CS101,
>> #  Gold  #  try solving this in one line.
> 
> Its not too hard to do in one line.
> I think a filtered list comprehension and the all() function
> would be one way.
> 
>> print "Test case 1: ", fix_machine('UdaciousUdacitee', 'Udacity') ==
>> "Give me something that's not useless next time."
>> print "Test case 2: ", fix_machine('buy me dat Unicorn', 'Udacity') ==
>> 'Udacity'
>> print "Test case 3: ", fix_machine('AEIOU and sometimes y... c',
>> 'Udacity') == 'Udacity'
>> print "Test case 4: ", fix_machine('wsx0-=mttrhix', 't-shirt') ==
>> 't-shirt'
> 
> I'd not use the while loop personally, I'd go for a for loop over b
> and use the in operation on a. So Something like
> 
> for letter in b:
>     if letter not in a:
>         return   ....
> return b

The test cases are not explicit about what to do with multiple occurences of 
the same letter. I'd expect that debris must contain two 't's for 't-shirt' 
to match. So:

print "Test case 5: ", fix_machine('wsx0-=mtrhix', 't-shirt') == "Give me 
something that's not useless next time."

If my assumption is correct a containment test is not sufficient; you need 
to count the characters:

def fix_machine(debris, product):
    return (product
            if all(debris.count(c) >= product.count(c) for c in 
set(product))
            else "Give me something that's not useless next time.")

OP: You'll get bonus points (from me, so they're pointless points, but 
still) if you can solve this (including the fifth apocryphal test case) 
using the collections.Counter class.

_______________________________________________
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
https://mail.python.org/mailman/listinfo/tutor

Reply via email to