Discuss / Python / 【练习】以下函数允许计算两个数的乘积,请稍加改造,变成可接收一个或多个数并计算乘积:

【练习】以下函数允许计算两个数的乘积,请稍加改造,变成可接收一个或多个数并计算乘积:

Topic source

哎呀博雅

#1 Created at ... [Delete] [Delete and Lock User]

最初是这么写的

题目是

以下函数允许计算两个数的乘积,请稍加改造,变成可接收一个或多个数并计算乘积:

# -*- coding: utf-8 -*-
def product(x=1, *y):
    sum = x
    for i in y:
        sum =sum*i
    return (sum)
# 测试
print('product(5) =', product(5))
print('product(5, 6) =', product(5, 6))
print('product(5, 6, 7) =', product(5, 6, 7))
print('product(5, 6, 7, 9) =', product(5, 6, 7, 9))
if product(5) != 5:
    print('测试失败!')
elif product(5, 6) != 30:
    print('测试失败!')
elif product(5, 6, 7) != 210:
    print('测试失败!')
elif product(5, 6, 7, 9) != 1890:
    print('测试失败!')
else:
    try:
        product()
        print('测试失败!')
    except TypeError:
        print('测试成功!')

但是这个结果是‘测试失败’,但是结果和对比的结果都相同,然后发现,是没有定义异常,看下面的#测试,发现,接口perdict()判断是空值,我定义的是def product(x=1, *y)多了一个默认参数1,自然是无法通过,那就给接口的默认参数干掉

# -*- coding: utf-8 -*-
def product(x, *y):
    sum = x
    for i in y:
        sum =sum*i
    return (sum)
# 测试
print('product(5) =', product(5))
print('product(5, 6) =', product(5, 6))
print('product(5, 6, 7) =', product(5, 6, 7))
print('product(5, 6, 7, 9) =', product(5, 6, 7, 9))
if product(5) != 5:
    print('测试失败!')
elif product(5, 6) != 30:
    print('测试失败!')
elif product(5, 6, 7) != 210:
    print('测试失败!')
elif product(5, 6, 7, 9) != 1890:
    print('测试失败!')
else:
    try:
        product()
        print('测试失败!')
    except TypeError:
        print('测试成功!')


这样就测试通过了,但是发现好多多余的地方,比如多余创建一个sum,就有了一下更改,四行代码搞定。
# -*- coding: utf-8 -*-
def product(x, *y):
    for i in y:
        x *=i
    return (x)
# 测试
print('product(5) =', product(5))
print('product(5, 6) =', product(5, 6))
print('product(5, 6, 7) =', product(5, 6, 7))
print('product(5, 6, 7, 9) =', product(5, 6, 7, 9))
if product(5) != 5:
    print('测试失败!')
elif product(5, 6) != 30:
    print('测试失败!')
elif product(5, 6, 7) != 210:
    print('测试失败!')
elif product(5, 6, 7, 9) != 1890:
    print('测试失败!')
else:
    try:
        product()
        print('测试失败!')
    except TypeError:
        print('测试成功!')

思路是:定义一个变量i 让它遍历y,按照题目改一下代码让其可接受一个或多个数的乘积,则x *=i 意思是吧x*变量i后的结果赋值给x,函数体结束返回x的值

哎呀博雅

#2 Created at ... [Delete] [Delete and Lock User]

廖大大比较坏,做了一个没有讲过的

异常处理try/except 语句。

try:
    product()
    print('测试失败!')
except TypeError:
    print('测试成功!')

来判断我们是否传入了一个合法参数或按题目要求修改的接口

我也是查了帮助文档才知道的这个用法的

比如我们做了一个判断年龄的程序,就有调皮捣蛋的人不输入数字,或葬爱家族的变异数字,这样,我们就用到这个这个错误和异常,使用方法如下:

try:
    x = int(input("请输入一个数字: "))
    break #结束函数体
except ValueError:
    print("您输入的不是数字,请再次尝试输入!")

那么我们后面修改的这个代码加了一个*号y就可以通过条件判断了,我是这么理解这段,y作为接口并没有被赋予实际的参数,加一个*号我们只是改变了它接收的类型变成了可变参数,可变参数是可以为空值的,这章讲过,所以答案就通过了

 product(5)

不知道理解对不对。


  • 1

Reply