Light Mode
Dark Mode
Cannot pass : abs(i) for i in range(-10, 10)

Hello,

I recently started checkio and am trying the task "Min and Max". For the test of "min(abs(i) for i in range(-10, 10))", I got following error message.

TypeError: <class 'dict'> is wrong data type

In this case, I understand the args was passed as generator object. I expected that each element (10, 9, 8, 7, ....) in the generator object was picked up in the block for statement (for elem in args: in my code), however, it seemed that the local variable (elem) stored generator object itself. One strange thing is that the code works fine when I simulated in my local python 3.5.2 environment.

Can anyone give me some hints to moving forward?

Best regards,

My source code is here:

def min(*args, **kwargs):

    key = kwargs.get("key", None)

    if type(args[0]) is list:
        args = tuple(args[0])
    elif type(args[0]) is str or type(args[0]) is range:
        args = tuple(list(args[0]))
    elif type(args[0]) is tuple:
        args = args[0]

    temp_min = None

    for elem in args:
        if key is not None:
            if temp_min == None:
                temp_min = elem
            elif key(temp_min) > key(elem):
                temp_min = elem
        else:
            if temp_min == None:
                temp_min = elem
            elif temp_min > elem:
                temp_min = elem

    return temp_min


def max(*args, **kwargs):
    key = kwargs.get("key", None)

    if type(args[0]) is list:
        args = tuple(args[0])
    elif type(args[0]) is str or type(args[0]) is range:
        args = tuple(list(args[0]))
    elif type(args[0]) is tuple:
        args = args[0]

    temp_max = None

    for elem in args:
        if key is not None:
            if temp_max == None:
                temp_max = elem
            elif key(temp_max) < key(elem):
                temp_max = elem
        else:
            if temp_max == None:
                temp_max = elem
            elif temp_max < elem:
                temp_max = elem

    return temp_max


if __name__ == '__main__':
    #These "asserts" using only for self-checking and not necessary for auto-testing
    assert max(3, 2) == 3, "Simple case max"
    assert min(3, 2) == 2, "Simple case min"
    assert max([1, 2, 0, 3, 4]) == 4, "From a list"
    assert min("hello") == "e", "From string"
    assert max(2.2, 5.6, 5.9, key=int) == 5.6, "Two maximal items"
    assert min([[1, 2], [3, 4], [9, 0]], key=lambda x: x[1]) == [9, 0], "lambda key"
    print("Coding complete? Click 'Check' to review your tests and earn cool rewards!")
Created: March 25, 2018, 12:11 a.m.
Updated: March 25, 2018, 10:02 p.m.
0
9
User avatar
Ken_m