我能够在“偶数”部分解决此问题,但我陷入了奇数部分。
您将获得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)
您提供的代码中有两个问题,我将首先解决:
首先,您需要清楚奇数和偶数索引的含义。例如,在某些语言中(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]
(即所有偶数索引处的值),或者如果您指定1
的开始位置(即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]))
产品的sum
没有简单的等价物,因此您可以重用上述方法,从而需要将总数与第一个值相乘,然后从下一个乘以,即得出这样的事实:
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)