def is_member(x,colle):
    for elem in colle:
        if elem == x:
            return True
    return False

s = {0, 2, 4, 6, 8, 10}
assert is_member(2, s)
assert not is_member(1, s)

# %%

def length(l):
    result = 0
    for _ in l:
        result += 1
    return result

s1 = {1, 12, 33, 20, 10, 15}
l = list(range(50))
string = "Alohomora"
ls1 = length(s1)
ll = length(l)
assert length(s1) == len(s1)
assert length(l) == len(l)
assert length(string) == len(string)

# %%

def sum_(l):
    result = 0
    for x in l:
        result += x
    return result

l = (1, 4, 7, 9, 3, 20)
assert sum_(l) == sum(l)

# %%

def prod(l):
    result = 1
    for x in l:
        result *= x
    return result

l = (1, 4, 7, 9, 3, 20)
assert prod(l) == 1*4*7*9*3*20

# %%

def map_(f, iterable):
    l = []
    for x in iterable:
        l.append(f(x))
    return type(iterable)(l)
    # return type(iterable)(f(x) for x in iterable)

def f(x):
    return x**3

assert map_(f, (1, 10, -1, 40)) == tuple(map(f, (1, 10, -1, 40)))

# %%

def filter_(f,iterable):
    return type(iterable)(x for x in iterable if f(x))
    # l = []
    # for x in iterable:
        # if f(x):
            # l.append(x)
    # if isinstance(iterable, list):
        # return l
    # if isinstance(iterable, tuple):
        # return tuple(l)
    # if isinstance(iterable, set):
        # return set(l)

assert filter_(f, {-1, -3, 0, 15, 6, -2, 11}) == {x for x in filter(f, {-1, -3, 0, 15, 6, -2, 11})}

# %%

def union(s1, s2):
    s = set()
    for x in s1:
        s.add(x)
    for x in s2:
        s.add(x)
    return s

s1 = {1, 0, 10, 31, 22, 15}
s2 = {1, 12, 33, 20, 10, 15}
assert union(s1, s2) == {1, 0, 10, 31, 22, 15, 12, 33, 20}

# %%

def intersection(s1, s2):
    s = set()
    for x in s1:
        if is_member(x, s2):
            s.add(x)
    return s

s1 = {1, 0, 10, 31, 22, 15}
s2 = {1, 12, 33, 20, 10, 15}
assert intersection(s1, s2) == {1, 10, 15}

# %%

def set_difference(s1, s2):
    s = set()
    for x in s1:
        if is_member(x, s2):
            continue
        else:
            s.add(x)
    return s

s1 = {1, 0, 10, 31, 22, 15}
s2 = {1, 12, 33, 20, 10, 15}
assert set_difference(s1, s2) == {0, 31, 22}
assert set_difference(s2, s1) == {12, 33, 20}

# %%

def count(c, l):
    result = 0
    for x in l:
        if x == c:
            result += 1
    return result

l = [0, 0, 0, 11, 2, 3, 0, 45, -1]
assert count(0, l) == l.count(0)

# %%

def extend(seq1, seq2):
    for x in seq2:
        seq1.append(x)

l1 = [1,2,3]
t1 = (4,5,6)
extend(l1, "123")
print(l1)

assert extend([], 'hello') == [].extend('hello')
assert extend([1,2,3], (4,5,6)) == [1,2,3].extend((4,5,6))
# %%
