4 回答
TA贡献1821条经验 获得超4个赞
那里
你的问题的答案非常简单。您需要纠正的只是您的逻辑或语法。
让我们分解您的程序并尝试了解错误所在。
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
添加回答
举报