猿问

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

我在编写一个函数时遇到一些麻烦,该函数将根据列表的第一个元素是奇数还是偶数对列表的所有元素求和或将列表的所有元素相乘。我想要得到这样的东西。


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

我根据我在互联网上看到的内容添加了number = 1和number *= n,但我不太明白为什么我必须使用number = 1以及number *= n正在做什么。


我希望我的输出是


12

240

但到目前为止我一直在得到


12

2

对 python 很陌生,我不确定我做错了什么。我最初尝试使用


for n in mylist:

        if n[0] % 2 != 0:

但我一直收到一条错误消息,告诉我这n[0]是不可编写脚本的。


任何简短的解释都会对我有很大帮助。先感谢您。


慕无忌1623718
浏览 153回答 4
4回答

收到一只叮咚

那里你的问题的答案非常简单。您需要纠正的只是您的逻辑或语法。让我们分解您的程序并尝试了解错误所在。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]))该代码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]))

HUX布斯

根据您所需的输出和输入来判断,如果第一个元素是偶数,则您希望数字列表相乘;如果第一个元素是奇数,您希望数字列表相加。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]))

慕标琳琳

您可以使用functools.reduce进行乘法部分from functools import reducefrom operator import muldef 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]))输出12240

倚天杖

我不认为你的代码正在做你想做的事。如果我正确地阅读了您的描述,听起来您想在将所有元素相加或相乘之前知道列表的第一个元素是偶数还是奇数。在这种情况下,你想要这样的东西: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
随时随地看视频慕课网APP

相关分类

Python
我要回答