2 回答
TA贡献1795条经验 获得超7个赞
您提供的代码中有几个问题,我将首先解决:
首先,您需要清楚奇数和偶数索引的含义。例如,在某些语言(Matlab)中,数组的第一个元素是索引位置 1。在 Python 和 Java 中,它是 0,因此,虽然您的示例假定为 1,但除非另有说明,否则它可能应该为 0。
其次,在您的行中,sum+=count您是在汇总索引位置,而不是索引值,因此这不是您的问题所要求的。
您的代码的最后一点是您已用作sum变量名。虽然这有效,但sum它也是一个 Python 关键字,您应该避免将它们用作变量名,就像您以后要使用该sum函数一样,您将收到错误TypeError: 'int' object is not callable,因为您已将该sum函数重新定义为整数。
对于答案:
考虑到上述情况,这通过修复您的代码为第 1 部分提供了答案:
total = 0
count = 0
while count < n:
if count % 2 == 0:
total += arr[count]
count += 1
print(total)
值得注意的是,当您正在寻找偶数时,您最好将其写为:
total = 0
count = 0
while count < n:
total += arr[count]
count += 2
print(total)
然而,还有更简单的方法可以用更少的代码做到这一点,它们涉及列表切片。您可以通过指定 对列表进行切片[start: end: step],因此arr[::2]指定位置 0 的开始(默认值),列表末尾的默认值)和步长 2。这意味着如果arr包含[1,2,3,4,5,6],arr[::2]则将是[1,3,5](即值在所有偶数索引处)或者如果您指定1ie的起始位置,arr[1::2]您将获得[2,4,6](即所有偶数索引处的值)。
所以,而不是使用一个while循环。您可以仅对偶数值使用for循环:
total = 0
for even_val in arr[::2]:
total += even_val
print(total)
但是对于sum您可以更轻松地编写为sum列表切片上的简单命令:
print(sum(arr[::2]))
在 Python 3.8 之前,没有简单的sumfor product 等价物,因此如果您使用的是较低版本,您可以重用上述方法,考虑到您需要用第一个值对总数进行质数,然后相乘从下一个开始,即:
total = arr[1]
count = 3
while count < n:
total *= arr[count]
count += 2
print(total)
或使用for循环:
total = arr[1]
for odd_val in arr[3::2]:
total *= odd_val
print(total)
但是从 Python 3.8(此处的文档)您现在可以prod从math库中导入,其工作方式与以下内容相同sum:
from math import prod
print(prod(arr[1::2]))
由于这是针对问题集,因此可能不是问题,因为所有示例的数组长度都可能N> 2,但上面的示例确实假设arr. 如果不是这种情况,您应该在尝试访问之前进行一些验证arr[1]
TA贡献1856条经验 获得超11个赞
这是一个可爱的小递归函数(假设基于一个的索引):
# def prodSum(increment,multiplier=1,*rest): if zero based indices
def prodSum(multiplier,increment=0,*rest):
if not rest: return multiplier,increment
product,total = prodSum(*rest)
return (product * multiplier, total + increment)
x = [1,2,3,4,5]
print(prodSum(*reversed(x))) # 15,6
添加回答
举报