如何在列表中找到奇数索引值的乘积

我能够在“偶数”部分解决这个问题,但我陷入了奇数部分。


您将获得一组n数字。您的任务是首先反转数组(第一个数字变为最后一个,第二个数字从最后一个变为第二个,依此类推),然后打印偶数索引处的数字总和并打印奇数索引处的数字的乘积。


输入


第一行包含单个整数 N:元素的数量,后跟 N 个不同的整数,用空格分隔


输出


两个空格分隔的整数,表示偶数位数字的总和和奇数位数字的乘积。


到目前为止我的代码:


n = int(input())

arr = [int(x) for x in input().split()]

arr.reverse()


for ele in arr:

    print(ele, end=" ")

print()


sum = 0

count = 1

while count <= n:

    if count % 2 == 0:

        sum += count

    count += 1

print(sum)


慕尼黑8549860
浏览 79回答 2
2回答

一只萌萌小番薯

您提供的代码中有几个问题,我将首先解决:首先,您需要清楚奇数和偶数索引的含义。例如,在某些语言(Matlab)中,数组的第一个元素是索引位置 1。在 Python 和 Java 中,它是 0,因此,虽然您的示例假定为 1,但除非另有说明,否则它可能应该为 0。其次,在您的行中,sum+=count您是在汇总索引位置,而不是索引值,因此这不是您的问题所要求的。您的代码的最后一点是您已用作sum变量名。虽然这有效,但sum它也是一个 Python 关键字,您应该避免将它们用作变量名,就像您以后要使用该sum函数一样,您将收到错误TypeError: 'int' object is not callable,因为您已将该sum函数重新定义为整数。对于答案:考虑到上述情况,这通过修复您的代码为第 1 部分提供了答案:total = 0count = 0while count < n:&nbsp; &nbsp; if count % 2 == 0:&nbsp; &nbsp; &nbsp; &nbsp; total += arr[count]&nbsp; &nbsp; count += 1print(total)值得注意的是,当您正在寻找偶数时,您最好将其写为:total = 0count = 0while count < n:&nbsp; &nbsp; total += arr[count]&nbsp; &nbsp; count += 2print(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 = 0for even_val in arr[::2]:&nbsp; &nbsp; total += even_valprint(total)但是对于sum您可以更轻松地编写为sum列表切片上的简单命令:print(sum(arr[::2]))在 Python 3.8 之前,没有简单的sumfor product 等价物,因此如果您使用的是较低版本,您可以重用上述方法,考虑到您需要用第一个值对总数进行质数,然后相乘从下一个开始,即:total = arr[1]count = 3while count < n:&nbsp; &nbsp; total *= arr[count]&nbsp; &nbsp; count += 2print(total)或使用for循环:total = arr[1]for odd_val in arr[3::2]:&nbsp; &nbsp; total *= odd_valprint(total)但是从 Python 3.8(此处的文档)您现在可以prod从math库中导入,其工作方式与以下内容相同sum:from math import prodprint(prod(arr[1::2]))由于这是针对问题集,因此可能不是问题,因为所有示例的数组长度都可能N> 2,但上面的示例确实假设arr. 如果不是这种情况,您应该在尝试访问之前进行一些验证arr[1]

呼唤远方

这是一个可爱的小递归函数(假设基于一个的索引):# def prodSum(increment,multiplier=1,*rest): if zero based indicesdef prodSum(multiplier,increment=0,*rest):&nbsp;&nbsp;&nbsp; &nbsp; if not rest: return multiplier,increment&nbsp; &nbsp; product,total = prodSum(*rest)&nbsp; &nbsp; return (product * multiplier, total + increment)x = [1,2,3,4,5]print(prodSum(*reversed(x))) # 15,6
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python