Python中如何结合Lambda使用while循环实现求和函数
问题背景
我正在学习Python,当前正在学习while循环相关知识点,虽然觉得这个问题比较基础理应自行解决,不好意思提问,但我确实对此存在很大困惑。
待补全的代码片段如下:
def summation(n, term): """Return the sum of numbers 1 through n (including n) with term applied to each number. Implement using recursion! >>> summation(5, lambda x: x * x * x) # 1^3 + 2^3 + 3^3 + 4^3 + 5^3 225 """ assert n >= 1 "*** YOUR CODE HERE ***" counter = 1 while counter <= n:
同时需要while循环相关知识点的练习渠道推荐,之前搜索相关内容没有找到合适的资料。
代码补全方案
你现在写的是while迭代的实现框架,虽然函数注释标注了要求用递归实现,两种写法都给你参考:
基于while循环的迭代实现
你已经定义了从1开始计数的counter变量,只需要额外新增一个变量存储累加的总和,每次循环把当前计数传入term计算后的值加到总和上,再更新计数器避免死循环,循环结束后返回总和即可,补全代码如下:
def summation(n, term): assert n >= 1 total = 0 counter = 1 while counter <= n: total += term(counter) counter += 1 return total
用题目给出的测试用例运行即可得到225的正确结果。
符合注释要求的递归实现
递归实现只需要明确两个核心逻辑:
- 基线条件:当n为1时,求和范围只有1,直接返回
term(1) - 递归逻辑:1到n的求和结果,等于1到n-1的求和结果加上
term(n)
代码如下:
def summation(n, term): assert n >= 1 if n == 1: return term(1) return summation(n-1, term) + term(n)
while循环练习建议
- 先过一遍基础语法点:循环条件的判定规则、循环变量的更新逻辑、break和continue的作用差异、死循环的常见触发原因,每个知识点单独写几个最小demo验证,比如打印指定区间的奇数、计算整数阶乘、实现简单的猜数字交互小程序,先把基础逻辑摸熟
- 基础语法掌握后,从简单的编程练习题入手练循环:比如统计字符串里数字字符的个数、判断一个数是不是回文数、打印九九乘法表、打印不同规则的星形图案,这类题对循环逻辑的训练很直接
- 刚开始写循环容易漏写变量更新、写错循环边界,写之前可以先手动列2-3次循环内各个变量的变化过程,捋清楚流程再写代码,能避开大部分低级错误
内容的提问来源于stack exchange,提问作者ashton8504
相关产品推荐
相关产品推荐

