2024-11-27 05:54:57
大家好,我是梁唐,日拱一卒。在编程之旅中,lambda表达式和高阶函数是Python中极为重要的概念,它们构成了Python语法的核心部分,是学习Python时不能绕过的知识点。无论你是通过博客还是书籍学习,实际操作的练习是掌握技术的关键。我之前自学时常常缺乏实践场景,只能自己拼凑例子来练习。如今,伯克利的公开课资料为学习者提供了宝贵的资源,不仅能够听到专业老师的讲解视频,还能亲自参与课后练习和实验,这是一个绝佳的学习机会,而且所有资源都是免费的。
本系列将持续更新,欢迎有兴趣的同学们在评论区留下学习的足迹。我们准备开始这次的实验之旅。
首先,打开原始文档并下载压缩包,或从我的GitHub获取资源。解压后,你会看到一些文件,我们只关注lab03.py和lab03_extra.py,其他文件无需改动,它们主要是测试文件。
准备工作完成后,让我们进入实验阶段。以下是本次实验的关键任务:
必做题
Q1: GCD
古希腊数学家欧几里得在公元前300年发明了计算两个数最大公约数的算法。对于正数a和b,如果a不能被b整除,那么它们的最大公约数为b。实现欧几里得算法(辗转相除法)的递归版本。递归终止的条件是a % b = 0,此时的最大公约数就是b。
代码框架如下:
使用Ok测试程序进行验证。
Q2: Hailstone
回顾作业1中“hailstone”问题。对于任意正整数n,如果n是偶数则除以2,如果是奇数则乘以3加1,重复此操作直至n等于1。实现递归版本的hailstone,打印中间步骤并返回操作次数。
代码框架如下:
完成之后,通过Ok进行测试。
Q3: WWPD: Call Expressions
解答填空题,输入代码运行结果或返回情况。
使用命令:python3 ok -q call_expressions -u 进行测试。
共有六道题,难度适中,如果遇到困难,可以尝试复制代码到Python解释器中运行。
高阶函数
Q4: I Heard You Liked Functions...
设计一个函数cycle,接收三个函数f1, f2, f3。cycle返回一个新函数,接收整数n作为参数,并返回一个函数,该函数接收参数x,根据n值循环调用f1, f2, f3并应用在x上。
代码框架如下:
测试命令:python3 ok -q cycle
Lambda 表达式
Q5: Palindrome
实现一个判断回文数的lambda函数。回文数是从前往后和从后往前读起来一样的数字。请不要修改函数框架。
完成后,使用Ok进行测试。
Environment diagrams
Q6: Doge
绘制程序执行后的函数调用图。
提供专门的网站用于逐步展示绘制过程:pythontutor.com/composi...
More Recursion Practice
Q7: Find the Bug
找出递归函数中的错误并修复。验证答案后,测试代码。
代码框架及测试命令如下:
Q8: Is Prime
实现一个递归函数is_prime,判断一个数是否为质数。
提示:使用helper函数。
测试命令:python3 ok -q is_prime
Q9: Interleaved Sum
实现一个函数interleaved_sum,计算从1到n的term和,但奇数和偶数的term函数不同。避免使用循环或判断奇偶的逻辑。
代码框架及测试命令如下:
Q10: Ten-pairs
计算一个整数n中拥有的ten-pairs数量。ten-pair指的是n中两个数加起来等于10的组合。
提示:使用helper函数计算每个数字出现的次数。
测试命令:python3 ok -q ten_pairs
通过实验和练习,我明显感觉到自己对这些概念的理解和熟练度有所提升。我建议大家亲自尝试这些练习,享受编程带来的乐趣。希望你们也能从中获益。