每天开心一点

Python:每日一题84

2017-11-27 14:40:00    六月    655    来源: http://bbs.fishc.com/thread-95106-1-1.html

题目:
有一串从0开始的自然数0,1,2,3,4,5,6,7......
在其中间依次加上+-*/四则运算符,成为如下的算式
0 + 1 - 2 * 3 / 4 +5 - 6 * 7 ......
写一个函数fun(n),给一个n值,算出从0 到n的运算结果,结果保留两位小数。
如fun(10)返回-1.75

楼主解法


  1. 此方法是4个一段,做循环算出结果,再计算剩下的。
  2. def fun(num):
  3.     result = 0
  4.     n = num // 4
  5.     for i in range(n):
  6.         result += i * 4 + 1 - (i * 4 + 2) * (i * 4 + 3) / (i * 4 + 4)
  7.     if num - n * 4 == 1:
  8.         result += num
  9.     elif num - n * 4 == 2:
  10.         result -= 1
  11.     elif num - n * 4 == 3:
  12.         result += num - 2 - (num - 1) * num
  13.     return '%.2f'%result

  14. 此方法是模拟自然的算法,用cycle给出+-*/的循环,再添加到0~n的间隔中,形成0 + 1 - 2 * 3 / 4 +5 - 6 * 7 ......这样的算式,再用eval计算出来。
  15. def fun2(num):
  16.     import itertools
  17.     result = '0'
  18.     operator = itertools.cycle('+-*/')
  19.     for i in range(1, num + 1):
  20.         result += next(operator) + str(i)
  21.     return '%.2f'%eval(result)
复制代码