On Mon, Oct 10, 2016 at 12:41 AM, BartC <b...@freeuk.com> wrote: > The exercise says you must use an if/elif chain. The first thing that comes > to mind is: > > def min3(a,b,c): > if a<=b and a<=c: > return a > elif b<=a and b<=c: > return b > else: > return c > > The bit about numbers tying for smallest is not meaningful; the caller can't > tell if a minimum value of 42 came from a, b or c.
You assume that all equal numbers are identical. (And I say "numbers" only because the problem definition did. This code does not require numbers necessarily.) >>> min3(1, True, 1.0) 1 >>> min3(1.0, True, 1) 1.0 >>> min3(True, 1.0, 1) True >>> 1 == 1.0 == True True >>> x = 1.0 >>> y = 1.0 >>> z = 1.0 >>> min3(x, y, z) is x True >>> min3(x, y, z) is y False >>> min3(x, y, z) is z False Your function provably returns the first number if given equal numbers. That stipulation is far from meaningless; it explicitly permits any means of selection, as long as one of the input values is returned. Thus, for instance, this must always be valid: >>> assert min3(x, y, z) in (x, y, z) So this solution would NOT be valid: def min2(a, b): return (a+b)/2 - abs(a-b)/2 def min3(a, b, c): return min2(a, min2(b, c)) It's mathematically perfect but inappropriate to this challenge, as it violates the given rule. ChrisA -- https://mail.python.org/mailman/listinfo/python-list