4 回答

TA貢獻1821條經驗 獲得超5個贊
那里
你的問題的答案非常簡單。您需要糾正的只是您的邏輯或語法。
讓我們分解您的程序并嘗試了解錯誤所在。
def simpleSum(mylist):
#Write your code
number = 1
for n in mylist:
if n % 2 != 0:
return sum(mylist)
else:
number *= n
return number
print(simpleSum([1, 2, 4, 5]))
print(simpleSum([2, 4, 5, 6]))
該代碼for n in mylist一次返回列表的一個元素,而不是位置,因此當您說 時n[0],它會返回一個錯誤,因為它不是列表并且沒有任何索引。
接下來,查看您的邏輯或語法錯誤:
如果您仔細觀察,n每次都會成為列表的下一個索引。這意味著每次它都會檢查數字是奇數還是偶數。如果是奇數,則返回總和,如果是偶數,則返回數字乘以 n。由于它返回第一個條目本身,即第一個索引本身,這意味著如果數字是偶數,結果將是該數字(因為 1*n=n),如果是奇數,它將返回總和整個列表的。
為了改變這一點,使用以下邏輯。創建函數:如果列表的第一個索引即mylist[0]奇數:返回總和否則/else:返回乘積
重現此情況的代碼是:
def simpleSum(mylist):
#Write your code
if mylist[0] % 2 != 0:
return sum(mylist)
else:
number = 1
for n in mylist:
number *= n
return number
print(simpleSum([1, 2, 4, 5]))
print(simpleSum([2, 4, 5, 6]))

TA貢獻1876條經驗 獲得超6個贊
根據您所需的輸出和輸入來判斷,如果第一個元素是偶數,則您希望數字列表相乘;如果第一個元素是奇數,您希望數字列表相加。
number = 1
充當乘法的基值。number *= n
等于number = number * n
考慮以下代碼。首先,它檢查列表的第一個值是奇數還是偶數。然后它計算并返回相應的值。
def simpleSum(mylist):
if (mylist[0] % 2) == 0:
number = 1
for n in mylist:
number *= n
return number
else:
return sum(mylist)
print(simpleSum([1, 2, 4, 5]))
print(simpleSum([2, 4, 5, 6]))

TA貢獻1830條經驗 獲得超9個贊
您可以使用functools.reduce進行乘法部分
from functools import reduce
from operator import mul
def my_func(some_list):
? ? return sum(some_list) if some_list[0] % 2 else reduce(mul, some_list)
print(my_func([1, 2, 4, 5]))
print(my_func([2, 4, 5, 6]))
輸出
12
240

TA貢獻1828條經驗 獲得超3個贊
我不認為你的代碼正在做你想做的事。如果我正確地閱讀了您的描述,聽起來您想在將所有元素相加或相乘之前知道列表的第一個元素是偶數還是奇數。
在這種情況下,你想要這樣的東西:
if my_list[0] % 2 == 0:
print(sum(my_list)
else:
num = 1
for n in my_list:
num *= n
print(num)
需要設置的原因num = 1是因為num *= n乘以,如果沒有初始值,num則無法乘以!nnumn
添加回答
舉報