为了账号安全,请及时绑定邮箱和手机立即绑定

获取一个基于列表第一个元素进行乘法或求和的函数

获取一个基于列表第一个元素进行乘法或求和的函数

慕无忌1623718 2023-12-12 15:27:27
我在编写一个函数时遇到一些麻烦,该函数将根据列表的第一个元素是奇数还是偶数对列表的所有元素求和或将列表的所有元素相乘。我想要得到这样的东西。def simpleSum(mylist):    #Write your code    number = 1    for n in mylist:        if n % 2 != 0:            return sum(mylist)        else:            number *= n            return numberprint(simpleSum([1, 2, 4, 5]))print(simpleSum([2, 4, 5, 6]))我根据我在互联网上看到的内容添加了number = 1和number *= n,但我不太明白为什么我必须使用number = 1以及number *= n正在做什么。我希望我的输出是12240但到目前为止我一直在得到122对 python 很陌生,我不确定我做错了什么。我最初尝试使用for n in mylist:        if n[0] % 2 != 0:但我一直收到一条错误消息,告诉我这n[0]是不可编写脚本的。任何简短的解释都会对我有很大帮助。先感谢您。
查看完整描述

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]))


查看完整回答
反对 回复 2023-12-12
?
HUX布斯

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]))


查看完整回答
反对 回复 2023-12-12
?
慕标琳琳

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


查看完整回答
反对 回复 2023-12-12
?
倚天杖

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


查看完整回答
反对 回复 2023-12-12
  • 4 回答
  • 0 关注
  • 152 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信