上期博客我简单讲述了题目错误如何解决的方法,今天就来给大家做一个实例讲解,本期的题目是:p1250

1.代码展示

这是一个错误代码: image


提交的代码:

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里运行,让我们来看一下输出结果:

image


我们不难发现,测试结果显示有两个错误,而且还多输出了一个False,这是什么原因呢? 看过我上期博客的同学就知道,在写test_product这个函数时我们多打印了product(numbers) == result这个测试数据,所以首先就要把这个多余输出删除掉,我们来看看删除后的结果: image


还是测试失败,这次肯定不再是多余输出的问题了,因为我们已经删除掉了,还是来看看题目要求吧! image 题目要求遍历列表,然后返回这个列表所有元素的乘积, 这里题目给了我们一个思路:

  1. 先设置一个变量 s 用来存列表的乘积,注意这里 n 的初始值
  2. 遍历列表,用变量 n 保存元素的值
  3. 累乘每次的变量 n 到变量 s
  4. 循环结束后,变量 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()

输出结果: image


然后我们再提交: image AC了!


4.总结

以上就是我针对 题目错误如何解决?(新手必看)这篇博客做出的实例讲解,希望大家能够在今后的学习当中具备超强的debug技能,我们下期再见~~