【Python】|基础:一个reduce()的题目

Python基础:一个reduce题目


本题目来自廖雪峰老师的python教程:廖雪峰老师python教程
题目如下:

Python提供的sum()函数可以接受一个list并求和,
请编写一个prod()函数,可以接受一个list并利用reduce()求积

本题实际上很简单,主要考察python中reduce函数的应用,主代码几行就搞定:

from functools import reduuce

def prod(L):
    def fn(x, y):
        return x * y   
    return reduce(f, L)

#检测#
print('3*5*7*9', prod([3,5,7,9]))

四行代码就解决了问题,但似乎还不够智能,参考上一篇帖子,在程序中加入能够输入数字增加近列表的功能:

L1 = []
while 1:
    s = input('请往连乘数列中添加数字:\n')

    if s == 'end':
        break

    L1.append(s)

print('连乘列表为:\n',L1)
print('计算结果为:\n',prod(L1))

加入后却发现了问题报错:

#>>>TypeError: can't multiply sequence by non-int of type 'str'

原因是我们当我们往列表中加入元素时,数据类型是str,所以我们需要在列表添加完毕以后,将列表中的元素转为数字类型,这里用float()

s = float(s)

  • 完整代码为:
from functools import reduce

def prod(L):
    def f(x,y):
        return x*y
    return reduce(f, L)

L1 = []
while 1:
    s = input('请往连乘数列中添加数字:\n')

    if s == 'end':
        break

    #s = float(s)
    L1.append(s)

print('连乘列表为:\n',L1)
print('计算结果为:\n',prod(L1))

当然程序还没有加入查错机制,当列表中出现非数字类型的元素时,prod函数就不能调用了。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值