题目:
有一串从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
楼主解法
- 此方法是4个一段,做循环算出结果,再计算剩下的。
- def fun(num):
- result = 0
- n = num // 4
- for i in range(n):
- result += i * 4 + 1 - (i * 4 + 2) * (i * 4 + 3) / (i * 4 + 4)
- if num - n * 4 == 1:
- result += num
- elif num - n * 4 == 2:
- result -= 1
- elif num - n * 4 == 3:
- result += num - 2 - (num - 1) * num
- return '%.2f'%result
- 此方法是模拟自然的算法,用cycle给出+-*/的循环,再添加到0~n的间隔中,形成0 + 1 - 2 * 3 / 4 +5 - 6 * 7 ......这样的算式,再用eval计算出来。
- def fun2(num):
- import itertools
- result = '0'
- operator = itertools.cycle('+-*/')
- for i in range(1, num + 1):
- result += next(operator) + str(i)
- return '%.2f'%eval(result)
复制代码
|