为何我的for循环提前终止?——函数求导代码问题
问题原因及修复方案
嗨,我一眼就看到问题所在啦——你把结果列表的初始化放在了for循环里面!
看你写的find_derivative函数:
def find_derivative(function_terms): for term in function_terms: new_function = [] # 这里每次循环都会重置列表 new_term = find_term_derivative(term) new_function.append(new_term) return new_function
每次循环处理一个项的时候,new_function = []都会重新创建一个空列表,把之前存储的结果完全覆盖掉。比如处理第一个项时,列表里有了(12,2),但处理第二个项时,又新建了空列表,只加入(-3,0),最后返回的自然只有最后一个项的导数(你说返回第一个项可能是测试时的小疏漏,但核心问题就是这个)。
修复方法很简单:
把列表初始化移到for循环外面,让整个循环复用同一个列表:
def find_derivative(function_terms): new_function = [] # 初始化放在循环外 for term in function_terms: new_term = find_term_derivative(term) new_function.append(new_term) return new_function
更简洁的写法(列表推导式):
如果你喜欢紧凑的代码,用列表推导式一行就能搞定,可读性也很强:
def find_derivative(function_terms): return [find_term_derivative(term) for term in function_terms]
现在测试一下,输入[(4, 3), (-3, 1)],就能得到预期的[(12, 2), (-3, 0)]啦!
内容的提问来源于stack exchange,提问作者CarterB
相关产品推荐
相关产品推荐

