【菜gou的CS61A学习笔记 Midterm1】

【菜gou的CS61A学习笔记 Midterm1】,第1张

         这次的内容是浅写一下这门课的第一次期中考试的内容,我觉得有些题目很有意思,并且Pamela教授写了一份关于关于考试的说明,我觉得很有意思,正好可以复习一下之前学过的内容,则此期中主要包括了高阶函数、递归、函数关系等内容,接下来我会挑一些我觉得有意思的题目分享一下。

试题和答案:​​​​​​https://inst.eecs.berkeley.edu/~cs61a/sp21/exam/sp21/mt1/61a-sp21-mt1_sol.pdf

解析: Midterm 1 Walkthrough | CS 61A Spring 2021

T1

给了一个系统环境图和对应的挖空的程序,题目如下: 

 

 

其实可以理解为就是程序填空题,这个题比较好理解,因为给出了python tutor中执行情况,我们直接分析,最开始执行的是yo_函数,然后执行的是_yo函数,然后观察yo_函数的返回情况,肯定不是第二种的返回方式,可能是第一种或是第三种的返回方式,然后我们看最后额flo的传值情况,很显然第一个yo_函数的返回值还是一个函数,这是一个高阶函数的内容,所以推测其传入的值为-2和_yo,然后再根据选项中的值推断出后续的填空答案即可,这个题属于比较有趣的,需要仔细分析一下的题目;

T8

先看一下题目描述:

        简单来说就是对于一个数的每一位进行替换,digit_replacer传入的是两个函数,如果有一位的数字满足第一个函数的条件,则对该位数字进行替换,否则不改变;这个题就是一个非常简单的逐位对数 *** 作的问题,有循环和递归两种方案;

        首先是循环的写法:

def digit_replacer(predicate, transformer):
    def func(n):
        new_num = 0
        ten_times = 0
        while n > 0:
            digit = n % 10
            if predicate(digit):
                digit = transformer(digit)
            new_num += digit * (10 ** ten_times)
            ten_times += 1
            n = n // 10
        return new_num
    return func

         然后是递归的写法:

def digit_replacer(predicate, transformer):
    def func(n):
        if n == 0:
            return 0
        else:
            digit = n % 10
            if (predicate(digit)):
                digit = transformer(digit)
            return fun(n // 10) * 10 + digit)
    return func

T7

先看一下这个题:

 

         其实跟我们课上讲的一个例题很像,本质上还是给定一个数,然后在一个三个数的列表中有几个能组成该数的方案。这个题我们还是考虑递归的 *** 作。

         既然是递归 *** 作,我们就考虑一下退出条件,因为我们返回的构成所需数值的几种情况,所以当total_needed将为0时,说明这种组合方案是可以的,返回1即可,其他特殊情况则返回0;同时对于递归的选择,因为我们传入的参数total_needed和一个数的个数,所以最终的程序如下:

def measure_methods(total_needed, cup_sizes):
    def helper(total_needed, current_index):
        if total_needed == 0:
            return 1
        if total_needed < 0:
            return 0
        if len(cup_sizes) <= curr_i:
            return 0
        without_cup = helper(total_needed, curr_i + 1)
        with_cup = helper(total_needed - cup_sizes[curr_i], curr_i)
        return without_cup + with_cup
    
    return helper_method_name(total_needed, 0)

        最后这个题目挺有意思的,建议大家可以放到Python tutor里体会一下,然后消化一下相关的知识。

Online Python Tutor - Composing Programs - Python 3

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/906306.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-15
下一篇 2022-05-15

发表评论

登录后才能评论

评论列表(0条)

保存