一道Python题

大学的Python课程有一道期中考试例题,要求用Python实现如下功能:

给定一列表,内含变量皆为浮点数。

无论其具有奇数项或偶数项,返回奇数项之和与偶数项之和的差。

起初思路如下:

  1. 使用n = len(x)判断列表的项数
  2. pair = n // 2判断奇偶对的数量
  3. ……
  4. 然而,出问题了——如果列表包含奇数项,则奇数项的个数和偶数项不等。

于是,不得不改变了思路——先(通过求模)判断列表项数,若是奇数项,在末尾补一个0将其变为偶数项,且不影响计算结果。

由此可得如下代码:

x = [2, -3.1, 4.2, 6.7, 5.5, 3.4] 

def q4_func(x): 
  if (len(x) % 2 == 1): 
    x.append(0) n = len(x) // 2 
    a = 0 
    b = 0 
  for i in range(0, n, 1): 
    a += x[(i * 2)] 
    b += x[(i * 2) + 1] 
    result = a - b 
  return result

后记:

其实在考试的45分钟里,我用了近30分钟来应付这道题(前三题没有太高难度)。如果没有一个更简便的思路来解决这个问题,恐怕再有30分钟也不够……