题目如下:
输入一个嵌套列表,嵌套层次不限,根据层次,求列表元素的加权和。也就是说,每一层的数字元素都要乘以他所在的层数。
例如:
输入:[1,2,[3,4,[5,6],7],8]
输出:72
过程:72=1x1+2x1+3x2+4x2+5x3+6x3+7x2+8x1
正确做法如下:
def f(l, p):
s = 0
if type(l) == int:
s += p*l
if type(l) == list:
p += 1
for i in l:
s += f(i, p)
return s
l = eval(input())
print(f(l, 0))
我的做法如下:
def f(l, p):
s = 0
for i in l:
if type(i) == int:
s += i*p
if type(i) == list:
p += 1
s += f(i, p)
return s
l = eval(input())
print(f(l, 1))
请问为什么我把循环放在外面结果就是错误的?这两种写法有什么区别吗?
(以输入样例为例,不考虑其它输入,错误做法不会抛出错误,结果为87)
因为有bug,p+1应该写在这里s += f(i, p+1),不然在一个子元素是列表时p的值加了1,下一个子元素是int时的乘的p是加了1的p
因为你放在判断外后无法确定l
是整数还是列表,只有列表才需要循环,如果是数字的话就直接计算(数字不能使用for循环)