cs61a 2020fall lab2

网址 https://inst.eecs.berkeley.edu/~cs61a/fa20/lab/lab02/
Problem1:
test如果不会可以用python解释器运行一遍试一下,注意 Function Error nothing都可以是答案

    def lambda_curry2(func):
        """
        Returns a Curried version of a two-argument function FUNC.
        >>> from operator import add, mul, mod
        >>> curried_add = lambda_curry2(add)
        >>> add_three = curried_add(3)
        >>> add_three(5)
        8
        >>> curried_mul = lambda_curry2(mul)
        >>> mul_5 = curried_mul(5)
        >>> mul_5(42)
        210
        >>> lambda_curry2(mod)(123)(10)
        3
        """
        "*** YOUR CODE HERE ***"
        def curry(avg):
            a = func(avg)
            return a
        return curry

Problem2:
部分test:

Problem3: 运行problem1的代码

Problem4:

    def count_cond(condition):
        """Returns a function with one parameter N that counts all the numbers from
        1 to N that satisfy the two-argument predicate function Condition, where
        the first argument for Condition is N and the second argument is the
        number from 1 to N.

        >>> count_factors = count_cond(lambda n, i: n % i == 0)
        >>> count_factors(2)   # 1, 2
        2
        >>> count_factors(4)   # 1, 2, 4
        3
        >>> count_factors(12)  # 1, 2, 3, 4, 6, 12
        6

        >>> is_prime = lambda n, i: count_factors(i) == 2
        >>> count_primes = count_cond(is_prime)
        >>> count_primes(2)    # 2
        1
        >>> count_primes(3)    # 2, 3
        2
        >>> count_primes(4)    # 2, 3
        2
        >>> count_primes(5)    # 2, 3, 5
        3
        >>> count_primes(20)   # 2, 3, 5, 7, 11, 13, 17, 19
        8
        """
        "*** YOUR CODE HERE ***"
        def cond(n):
            count = 0
            for i in range(1, n+1):
                if condition(n, i):
                    count += 1
            return count
        return cond

Problem7:没什么难度

    def composite_identity(f, g):
        """
        Return a function with one parameter x that returns True if f(g(x)) is
        equal to g(f(x)). You can assume the result of g(x) is a valid input for f
        and vice versa.

        >>> add_one = lambda x: x + 1        # adds one to x
        >>> square = lambda x: x**2
        >>> b1 = composite_identity(square, add_one)
        >>> b1(0)                            # (0 + 1)^2 == 0^2 + 1
        True
        >>> b1(4)                            # (4 + 1)^2 != 4^2 + 1
        False
        """
        "*** YOUR CODE HERE ***"
        def k(a):
            if compose1(f,g)(a) == compose1(g, f)(a):
                return True
            else:
                return False
        return k

Problem8:弄清楚传进来的参数具体用在那个函数就可以了

    def cycle(f1, f2, f3):
        """Returns a function that is itself a higher-order function.

        >>> def add1(x):
        ...     return x + 1
        >>> def times2(x):
        ...     return x * 2
        >>> def add3(x):
        ...     return x + 3
        >>> my_cycle = cycle(add1, times2, add3)
        >>> identity = my_cycle(0)
        >>> identity(5)
        5
        >>> add_one_then_double = my_cycle(2)
        >>> add_one_then_double(1)
        4
        >>> do_all_functions = my_cycle(3)
        >>> do_all_functions(2)
        9
        >>> do_more_than_a_cycle = my_cycle(4)
        >>> do_more_than_a_cycle(2)
        10
        >>> do_two_cycles = my_cycle(6)
        >>> do_two_cycles(1)
        19
        """
        "*** YOUR CODE HERE ***"
        fun = [f1, f2, f3]
        def k(n):
            def f(avg):
                for i in range(0,n):
                    num = i % 3
                    avg = fun[num ](avg)
                return avg
            return f
        return k
posted @ 2022-03-13 23:42  天然气之子  阅读(375)  评论(0编辑  收藏  举报