我是Python初学者。我正在尝试解决这个算法问题。
您将获得一个整数数组。您应该找到具有偶数索引(0th,2nd,4th ...)的元素之和,然后将此求和数与数组的最终元素相乘。不要忘记第一个元素的索引为0.对于空数组,结果将始终为0(零)。
注意:这一切都在一个函数中,输入会自动调用它,在一个名为array的列表中。
length = len(array) / 2
if len(array) % 2 == 1 :
length = length + 1
a= length
q= 0
for x in xrange (length):
if x % 2 == 0 :
q = q + a[x] #This may have the problem.
sum = q
answer = sum * array[len(array)]
return answer
它给出了这个错误: TypeError:' int'对象没有属性' getitem ' checkio,13 ,23
13指的是注释行。
感谢您的帮助。
答案 0 :(得分:1)
你应该使用数组而不是a。 a是一个int。
您应该使用array[-1]
代替array[len(array)]
,这会告诉您索引超出范围。
试试这个:
#!/usr/bin/env python
#-*- coding:utf-8 -*-
array = [1,2,3,4,5,6,7,8,9, 10]
length = len(array) / 2
if len(array) % 2 == 1 :
length = length + 1
a= length
q= 0
for x in xrange (length):
if x % 2 == 0 :
q = q + array[x] #This may have the problem.
sum = q
answer = sum * array[-1]
print answer
告诉我它是否符合您的要求。
答案 1 :(得分:1)
首先,您要将整数length
分配给变量a
。那么你自然就无法对该整数使用索引表示法。我认为这只是你的一个错字,你可能想说a = array
。
更有趣的是,使用Python slice notation可以更简单地解决整个问题。例如,
def alternate_summiply(array):
return sum(array[::2]) * array[-1]
将是解决它的紧凑方式。 (注意切片array[start:end:step]
,-1
索引是序列中的最后一个元素。)
修改:此外,当您尝试访问array[len(array)]
时,您将获得IndexError
。请记住,"第一个元素的索引为0",这意味着最终元素的索引为len(array) - 1
。
答案 2 :(得分:1)
感谢Matthias和Tarjei解决我的问题。这是解决方案,简单就是让人难以置信 -
if len(array) == 0:
return 0
else:
return sum(array[::2]) * array[-1]