- 龙涵杰 的博客
附:题目错误如何解决?(新手必看)的实例讲解
- 2023-1-27 11:42:36 @
上期博客我简单讲述了题目错误如何解决的方法,今天就来给大家做一个实例讲解,本期的题目是:p1250
1.代码展示
这是一个错误代码:
提交的代码:
log = print
def product(number_list):
s = 0
for i in range(len(number_list)):
n = number_list[i]
s = s * n
return s
def ensure(condition, message):
if condition:
log('*** 测试成功')
else:
log('*** 测试失败:', message)
def test_product():
numbers = [1, 2, 3, 4]
result = 24
ensure(product(numbers) == result, 'error product 1')
log(product(numbers) == result)
ensure(product([0, 7, 9]) == 0, 'error product 2')
ensure(product([]) == 1, 'error product 3')
log('$$$ product 测试完成')
test_product()
2.自行debug(重点!)
首先我们要弄清楚这个题为什么错,按照我上期博客讲的步骤,就是先把代码复制到pycharm里运行,让我们来看一下输出结果:
我们不难发现,测试结果显示有两个错误,而且还多输出了一个False,这是什么原因呢? 看过我上期博客的同学就知道,在写test_product这个函数时我们多打印了product(numbers) == result这个测试数据,所以首先就要把这个多余输出删除掉,我们来看看删除后的结果:
还是测试失败,这次肯定不再是多余输出的问题了,因为我们已经删除掉了,还是来看看题目要求吧! 题目要求遍历列表,然后返回这个列表所有元素的乘积, 这里题目给了我们一个思路:
- 先设置一个变量 s 用来存列表的乘积,注意这里 n 的初始值
- 遍历列表,用变量 n 保存元素的值
- 累乘每次的变量 n 到变量 s
- 循环结束后,变量 s 里面存的是列表中所有元素的乘积, 返回变量 s(很重要,一定要 return s)
- 其中在第一条里题目重点强调注意这里 n 的初始值,所以这个n的值不能设错
- 因为这里涉及到乘法运算,并且还是连乘,所以还要牵扯到一个数学知识:0乘以任何数都等于0,因此不能像加法一样把n的初始值设为0
log = print
def product(number_list):
s = 0
for i in range(len(number_list)):
n = number_list[i]
s = s * n
return s
def ensure(condition, message):
if condition:
log('*** 测试成功')
else:
log('*** 测试失败:', message)
def test_product():
numbers = [1, 2, 3, 4]
result = 24
ensure(product(numbers) == result, 'error product 1')
ensure(product([0, 7, 9]) == 0, 'error product 2')
ensure(product([]) == 1, 'error product 3')
log('$$$ product 测试完成')
test_product()
- 再看看我们的代码,定义product函数时,我们将n的初始值设为了0,这导致后面列表的元素相乘的结果一直是0!
3.修改代码
现在我们按照刚才的发现来修改代码 修改好的代码:
log = print
def product(number_list):
s = 1
for i in range(len(number_list)):
n = number_list[i]
s = s * n
return s
def ensure(condition, message):
if condition:
log('*** 测试成功')
else:
log('*** 测试失败:', message)
def test_product():
numbers = [1, 2, 3, 4]
result = 24
ensure(product(numbers) == result, 'error product 1')
ensure(product([0, 7, 9]) == 0, 'error product 2')
ensure(product([]) == 1, 'error product 3')
log('$$$ product 测试完成')
test_product()
输出结果:
然后我们再提交: AC了!
4.总结
以上就是我针对 题目错误如何解决?(新手必看)这篇博客做出的实例讲解,希望大家能够在今后的学习当中具备超强的debug技能,我们下期再见~~