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

Python 如何在列表中查找奇数索引值的乘积,python,arrays,list,reverse,Python,Arrays,List,Reverse,我能在“偶数”部分解决这个问题,但我却陷入了“奇数”部分 您将获得一个由n个数字组成的数组。您的任务是首先反转数组,第一个数字变为最后一个,第二个数字变为最后一个的第二个,依此类推,然后在偶数索引处打印数字的总和,并在奇数索引处打印数字的乘积 输入 第一行包含单个整数N:元素数 后跟由空格分隔的N个不同整数 输出 两个空格分隔的整数,表示偶数处的数之和和和奇数处数的乘积 到目前为止,我的代码是: n=初始输入 arr=[input.split中x的intx] 反向排列 对于arr中的ele: 打

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

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

输入

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

输出

两个空格分隔的整数,表示偶数处的数之和和和奇数处数的乘积

到目前为止,我的代码是:

n=初始输入 arr=[input.split中x的intx] 反向排列 对于arr中的ele: 打印元素,结束= 打印 总和=0 计数=1
虽然count在您提供的代码中有几个问题,我将首先解决这些问题:

首先,你需要清楚什么是奇数和偶数指数。例如,在某些语言中,数组的第一个元素是索引位置1。在Python和Java中,它是0,因此,尽管您的示例假设为1,但除非另有指定,否则它可能应该是0

第二,在sum+=count行中,您是对索引位置求和,而不是对索引值求和,因此这不是您的问题所要求的

代码的最后一点是使用了sum作为变量名。虽然这样做有效,但是sum也是一个Python关键字,您应该避免将它们用作变量名,就像您以后要使用sum函数一样,您将得到错误TypeError:“int”对象不可调用,因为您已将sum函数重新定义为整数

答案如下:

考虑到上述情况,这通过修复代码为第1部分提供了答案:

总数=0 计数=0 当计数 总数=0 计数=0 当计数 因此,使用while循环。您可以在偶数值上使用for循环:

总数=0 对于arr[::2]中的偶数值: 合计+=偶数 打印总数 但对于sum,您可以更轻松地将其作为列表切片上的简单sum命令写入:

printsumarr[::2] 在Python3.8之前,没有简单的“积和”等价物,因此如果您使用的是较低版本,您可以重用上述方法,考虑到您需要使用第一个值来初始化总和,然后从下一个值开始相乘,即:

总计=arr[1] 计数=3 当计数 总计=arr[1] 对于arr[3::2]中的奇数值: 总计*=奇数 打印总数 但从Python 3.8文档中,您现在可以从数学库中导入prod,其工作方式与sum相同:

从数学导入产品 printprodarr[1::2] [感谢@HeapOverflow的轻推]


因为这是一个问题集,所以可能不是问题,因为所有示例的数组长度都可能大于2,但上面的示例确实假设arr中至少有两个条目。如果不是这样,您应该在尝试访问arr[1]之前进行一些验证

这里有一个可爱的小递归函数,假设基于一个索引:

# 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

我正在附加代码,直到偶数索引n=intinput arr=[intx for x in input.split]arr.reverse for ele in arr:printele,end=print sum=0 count=1而count请不要在注释中发布代码。把它加到问题上。