本题目来自廖雪峰老师的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函数就不能调用了。