创建一个函数来计算列表的奇数和偶数之和并将结果存储在元组中

Create a function that calculate the sum of odd and even values of a list and store the result within a tuple

我正在尝试解决这个功能。 我必须用这个列表的偶数和奇数的总和创建一个元组。 所以输出应该是 (9,12) 但我的函数不起作用。 我必须使用函数

number_list = [1, 2, 3, 4, 5, 6]

def calculate_odd_even(odd_number, even_number):
    odd_number = 0
    even_number = 0
    t1 = tuple()
    for i in number_list:
        if i % 2 == 0:
            even_number = even_number + number_list[i]
            t1.append(i)
            
        else:
            odd_number = odd_number + number_list[i]
            t1.append(i)
    
    return odd_number
    return even_number

my_tuple = calculate_odd_even(odd_number, even_number)

您需要对代码进行一些更改:

  1. 在这种情况下不需要函数参数。

    • def calculate_odd_even(odd_number, even_number):
    • +def calculate_odd_even():
  2. 你遍历列表的元素,而不是indices.So没有必要使用number_list[i],只需i就可以了 工作。

    • even_number = even_number + number_list[i]
    • odd_number = odd_number + number_list[i]
    • even_number = even_number + i
    • odd_number = odd_number + i
  3. 第二个 retrun 不会到达 ever.So 相反,return 一个元组。

  •      return odd_number
         retrun even_number # Wont be reached
    
  • return (odd_number, even_number) # currect way

最终代码

number_list = [1, 2, 3, 4, 5, 6]

def calculate_odd_even():
    odd_number = 0
    even_number = 0
    for i in number_list:
        if i % 2 == 0:
            even_number = even_number + i
        else:
            odd_number = odd_number + i
    
    return (odd_number, even_number)

my_tuple = calculate_odd_even()
print(my_tuple) # prints (9, 12)
def Cal_sum(list):
    odd,even=0,0
    for i in list:
        if i%2==0:
           even+=i
        else:
           odd+=i
    return odd,even

number_list = [1, 2, 3, 4, 5, 6]
tuple_value=tuple(Cal_sum(number_list))
print(tuple_value)

一般的想法是好的,那就是你浏览列表看看数字本身是否是偶数(如果 %2 == 0)然后将它添加到一个或另一个组中。

尽管在 python 中有很多事情根本无法以这种方式工作。

calculate_odd_even(odd_number, even_number):

您希望作为参数传递给函数的值是数字列表。在这里使用 odd_number 和 even_number 尤其没用,因为您在下一行直接将它们设置为 0。因此,传递给函数的任何值都将被删除。

t1 = tuple()

您似乎想将号码添加到此处的列表中。但是 a) 元组是 immutable 所以向它们添加东西根本不起作用 b) 即使你用 [] 或 list() 替换它你仍然是剩下一个列表,但你想要一个总和。所以你最后还是需要取sum(t1)。

下一个:

for i in number_list:

遍历列表的元素,因此在第一次迭代中 i 将是 1,然后是 2,依此类推。所以它是 NOT 您在这一行中使用它的方式的索引:

even_number = even_number + number_list[i]

那么让我们看一下循环的第一次迭代。在那种情况下,我将是 1。这将触发 else 路径(1%2=1 不等于 0)。然后您将尝试附加 odd_number+number_list[i]。您附加的值(如果可能的话)将是 0+2 = 2。为什么是 2?因为 i=1 因此,当您开始计数 0 时,您会在 number_list 中取第二个值。因此,即使所有这些都有效,您也会从您的列表中获取完全相反的数字,并且它会崩溃的最后一个数字,因为长度为 6 的列表没有索引 6(再次从 0 开始计数)。

再说一次,即使那会奏效,odd_number+number_list[i] 基本上只会将 number_list 中的下一个数字添加到新的数字列表中。更不用说 odd_number 部分是多余的,因为它是 0 并且保持原样。

最后但并非最不重要的一点是 return 语句存在于函数中,因此在 return 语句之后发生的任何事情都将被忽略。因此,您的第二个 return 语句被视为不存在。对你来说幸运的是,你不必对元组中的 return 2 个值做任何麻烦,只需使用:

return [valueA] [valueB]

到 return 元组中的 2 个值。所以例如 return 2, 3 会 return (2,3).

尽管您一开始就可以使这一切变得容易得多:

number_list = [1, 2, 3, 4, 5, 6]

def calculate_odd_even(num_list):
    odd_number = 0
    even_number= 0
    for i in num_list:
        if i%2 ==0:
            even_number = even_number + i
        else:
            odd_number = odd_number + i
    return even_number, odd_number


my_tuple = calculate_odd_even(number_list)