2 回答

TA貢獻1795條經(jīng)驗 獲得超7個贊
您提供的代碼中有幾個問題,我將首先解決:
首先,您需要清楚奇數(shù)和偶數(shù)索引的含義。例如,在某些語言(Matlab)中,數(shù)組的第一個元素是索引位置 1。在 Python 和 Java 中,它是 0,因此,雖然您的示例假定為 1,但除非另有說明,否則它可能應(yīng)該為 0。
其次,在您的行中,sum+=count您是在匯總索引位置,而不是索引值,因此這不是您的問題所要求的。
您的代碼的最后一點是您已用作sum變量名。雖然這有效,但sum它也是一個 Python 關(guān)鍵字,您應(yīng)該避免將它們用作變量名,就像您以后要使用該sum函數(shù)一樣,您將收到錯誤TypeError: 'int' object is not callable,因為您已將該sum函數(shù)重新定義為整數(shù)。
對于答案:
考慮到上述情況,這通過修復(fù)您的代碼為第 1 部分提供了答案:
total = 0
count = 0
while count < n:
if count % 2 == 0:
total += arr[count]
count += 1
print(total)
值得注意的是,當(dāng)您正在尋找偶數(shù)時,您最好將其寫為:
total = 0
count = 0
while count < n:
total += arr[count]
count += 2
print(total)
然而,還有更簡單的方法可以用更少的代碼做到這一點,它們涉及列表切片。您可以通過指定 對列表進行切片[start: end: step],因此arr[::2]指定位置 0 的開始(默認(rèn)值),列表末尾的默認(rèn)值)和步長 2。這意味著如果arr包含[1,2,3,4,5,6],arr[::2]則將是[1,3,5](即值在所有偶數(shù)索引處)或者如果您指定1ie的起始位置,arr[1::2]您將獲得[2,4,6](即所有偶數(shù)索引處的值)。
所以,而不是使用一個while循環(huán)。您可以僅對偶數(shù)值使用for循環(huán):
total = 0
for even_val in arr[::2]:
total += even_val
print(total)
但是對于sum您可以更輕松地編寫為sum列表切片上的簡單命令:
print(sum(arr[::2]))
在 Python 3.8 之前,沒有簡單的sumfor product 等價物,因此如果您使用的是較低版本,您可以重用上述方法,考慮到您需要用第一個值對總數(shù)進行質(zhì)數(shù),然后相乘從下一個開始,即:
total = arr[1]
count = 3
while count < n:
total *= arr[count]
count += 2
print(total)
或使用for循環(huán):
total = arr[1]
for odd_val in arr[3::2]:
total *= odd_val
print(total)
但是從 Python 3.8(此處的文檔)您現(xiàn)在可以prod從math庫中導(dǎo)入,其工作方式與以下內(nèi)容相同sum:
from math import prod
print(prod(arr[1::2]))
由于這是針對問題集,因此可能不是問題,因為所有示例的數(shù)組長度都可能N> 2,但上面的示例確實假設(shè)arr. 如果不是這種情況,您應(yīng)該在嘗試訪問之前進行一些驗證arr[1]

TA貢獻1856條經(jīng)驗 獲得超11個贊
這是一個可愛的小遞歸函數(shù)(假設(shè)基于一個的索引):
# 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
添加回答
舉報