亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在列表中找到奇數索引值的乘積

如何在列表中找到奇數索引值的乘積

慕尼黑8549860 2022-07-19 15:39:03
我能夠在“偶數”部分解決這個問題,但我陷入了奇數部分。您將獲得一組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 = 0count = 1while count <= n:    if count % 2 == 0:        sum += count    count += 1print(sum)
查看完整描述

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]


查看完整回答
反對 回復 2022-07-19
?
呼喚遠方

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


查看完整回答
反對 回復 2022-07-19
  • 2 回答
  • 0 關注
  • 107 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號