鱼C论坛

 找回密码
 立即注册
查看: 4455|回复: 25

[技术交流] Python:每日一题84(答题领鱼币)

[复制链接]
发表于 2017-8-23 16:49:30 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
题目:
有一串从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

楼主解法:
游客,如果您要查看本帖隐藏内容请回复

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-8-23 21:23:05 | 显示全部楼层
先交错凑出字符串,然后eval实现它
  1. def fun(n):
  2.     lst = zip([str(i) for i in range(n+1)],list("+-*/")*(n//4+1))
  3.     return "%.2f" % eval("".join("".join(i) for i in lst)[:-1])
复制代码

评分

参与人数 1荣誉 +6 鱼币 +6 收起 理由
新手·ing + 6 + 6 膜拜大神

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-8-23 22:01:03 | 显示全部楼层
本帖最后由 jerryxjr1220 于 2017-8-23 22:02 编辑
  1. import numpy as np
  2. fun = lambda n: eval(''.join((np.concatenate((np.arange(n+1).reshape(-1,1), np.array(list('+-*/'*n)[:n+1]).reshape(-1,1)), axis=1).reshape(1,-1))[0,:-1].tolist()))
  3. print(fun(10))
复制代码

-1.75

评分

参与人数 1荣誉 +4 鱼币 +4 收起 理由
冬雪雪冬 + 4 + 4

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-8-24 10:37:45 | 显示全部楼层
  1. def fun(n):
  2.    m=n//4 if (n/4).is_integer() else n//4+1
  3.    j=0
  4.    sum=0
  5.    list0 = [i for i in range(n+1)]+[1 for i in range(n+1,(4*m+1))]
  6.    while ((4+4*j)<=(len(list0)-1)):
  7.        sum=sum+list0[1+4*j]-(list0[2+4*j])*(list0[3+4*j])/(list0[4+4*j])
  8.        j+=1
  9.    return sum

  10. import math
  11. n=int(input('请输入一个数值N:'))
  12. print(fun(n))
复制代码

==============
运行结果:
请输入一个数值N:4
-0.5
请输入一个数值N:10
-1.75

评分

参与人数 1荣誉 +4 鱼币 +4 收起 理由
冬雪雪冬 + 4 + 4

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-8-24 14:46:44 | 显示全部楼层
132
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-8-25 09:55:51 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-8-25 19:30:47 | 显示全部楼层
solomonxian 发表于 2017-8-23 21:23
先交错凑出字符串,然后eval实现它

[:-1])
能告诉我这个是什么意思吗?
谢谢啦
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-8-25 20:55:23 | 显示全部楼层
这个胖子有点丑 发表于 2017-8-25 19:30
[:-1])
能告诉我这个是什么意思吗?
谢谢啦

你先自己写一遍就知道了
因为字符串里面多了一个符号,要去掉
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-8-25 22:08:39 | 显示全部楼层
solomonxian 发表于 2017-8-25 20:55
你先自己写一遍就知道了
因为字符串里面多了一个符号,要去掉

哦哦 谢谢啦
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-8-25 22:13:51 | 显示全部楼层
  1. import itertools
  2. # 循环产生符号
  3. fh = itertools.cycle('+-*/')
  4. def fun(n):
  5.     raw_str =''
  6.     # 符号与数字交织,获取到一个字符串
  7.     for i,j in zip(range(n+1),fh):
  8.         raw_str+=str(i)
  9.         raw_str+=str(j)
  10.     string = raw_str[:-1]
  11.     # 执行字符串
  12.     res = eval(string)
  13.     print(string)
  14.     print(res)
  15. fun(10)
复制代码

评分

参与人数 1荣誉 +4 鱼币 +4 收起 理由
冬雪雪冬 + 4 + 4

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2017-9-4 14:44:08 | 显示全部楼层
  1. def f(n):
  2.     if n==0:
  3.         return 0
  4.    
  5.     if n%4==0:
  6.         return f(n-3)-(n-2)*(n-1)/n
  7.     if n%4==3:
  8.         return f(n-2)-(n-1)*n
  9.     if n%4==2:
  10.         return f(n-1)-n
  11.     if n%4==1:
  12.         return f(n-1)+n
  13. while True:
  14.     t=int(input('请输入'))
  15.     print(f(t))
  16. _______________________________
  17. 我的运行结果
  18. 请输入1
  19. 1
  20. 请输入2
  21. -1
  22. 请输入4
  23. -0.5
  24. 请输入3
  25. -5
  26. 请输入10
  27. -1.75
  28. 请输入
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-10-3 15:43:49 | 显示全部楼层
  1. def fun(n):
  2.     str_num = (i for i in range(1,n+1))
  3.     try:
  4.         a = 0
  5.         while a<1:
  6.             a+=1
  7.             result = next(str_num)
  8.         while True:
  9.             result+=next(str_num)-next(str_num)*next(str_num)/next(str_num)
  10.     except StopIteration:
  11.         pass
  12.     return result
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-12-4 13:28:29 | 显示全部楼层
本帖最后由 shigure_takimi 于 2017-12-4 13:33 编辑
  1. def fun(n):
  2.     symbolDict = {0:'+',1:'-',2:'*',3:'/'}
  3.     string = ''
  4.     for i in range(n):
  5.         string += str(i)+' '+symbolDict[i%4]+' '
  6.     string += str(n)
  7.     #print(string+' = '+'%.2f' % eval(string))
  8.     ##   此语句可打印  0+1-2*3/4+5-6*7 = -37.50
  9.     return '%.2f' % eval(string)

  10. print(fun(7))
复制代码

  1. def fun(n):
  2.     symbolDict = {0:'+',1:'-',2:'*',3:'/'}
  3.     string = ''
  4.     for i in range(n):
  5.         string += str(i)+' '+symbolDict[i%4]+' '
  6.     string += str(n)
  7.     print(string+' = '+'%.2f' % eval(string))
  8.   
  9.     ##return '%.2f' % eval(string)

  10. for i in range(20):
  11.     fun(i)
  12. ##    直接输出,不return,结果如下:
  13. ##    0 = 0.00
  14. ##    0 + 1 = 1.00
  15. ##    0 + 1 - 2 = -1.00
  16. ##    0 + 1 - 2 * 3 = -5.00
  17. ##    0 + 1 - 2 * 3 / 4 = -0.50
  18. ##    0 + 1 - 2 * 3 / 4 + 5 = 4.50
  19. ##    0 + 1 - 2 * 3 / 4 + 5 - 6 = -1.50
  20. ##    0 + 1 - 2 * 3 / 4 + 5 - 6 * 7 = -37.50
  21. ##    0 + 1 - 2 * 3 / 4 + 5 - 6 * 7 / 8 = -0.75
  22. ##    0 + 1 - 2 * 3 / 4 + 5 - 6 * 7 / 8 + 9 = 8.25
  23. ##    0 + 1 - 2 * 3 / 4 + 5 - 6 * 7 / 8 + 9 - 10 = -1.75
  24. ##    0 + 1 - 2 * 3 / 4 + 5 - 6 * 7 / 8 + 9 - 10 * 11 = -101.75
  25. ##    0 + 1 - 2 * 3 / 4 + 5 - 6 * 7 / 8 + 9 - 10 * 11 / 12 = -0.92
  26. ##    0 + 1 - 2 * 3 / 4 + 5 - 6 * 7 / 8 + 9 - 10 * 11 / 12 + 13 = 12.08
  27. ##    0 + 1 - 2 * 3 / 4 + 5 - 6 * 7 / 8 + 9 - 10 * 11 / 12 + 13 - 14 = -1.92
  28. ##    0 + 1 - 2 * 3 / 4 + 5 - 6 * 7 / 8 + 9 - 10 * 11 / 12 + 13 - 14 * 15 = -197.92
  29. ##    0 + 1 - 2 * 3 / 4 + 5 - 6 * 7 / 8 + 9 - 10 * 11 / 12 + 13 - 14 * 15 / 16 = -1.04
  30. ##    0 + 1 - 2 * 3 / 4 + 5 - 6 * 7 / 8 + 9 - 10 * 11 / 12 + 13 - 14 * 15 / 16 + 17 = 15.96
  31. ##    0 + 1 - 2 * 3 / 4 + 5 - 6 * 7 / 8 + 9 - 10 * 11 / 12 + 13 - 14 * 15 / 16 + 17 - 18 = -2.04
  32. ##    0 + 1 - 2 * 3 / 4 + 5 - 6 * 7 / 8 + 9 - 10 * 11 / 12 + 13 - 14 * 15 / 16 + 17 - 18 * 19 = -326.04
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-2-8 19:55:48 | 显示全部楼层
...................................................
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-3-1 16:21:39 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-7-20 15:45:59 | 显示全部楼层
学习
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-2-28 12:52:08 | 显示全部楼层
kankna
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-8-22 11:15:48 | 显示全部楼层
  1. dic={0: '+', 1: '-', 2: '*', 3: '/'}
  2. func=lambda n:float('%.2f'%eval(''.join((str(i)+dic[i%4]for i in range(n+1)))[:-1]))
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-16 18:30:49 | 显示全部楼层
  1. def f_84(n: int):
  2.     operator = '+-*/' * (n // 4) + '+-*/'[:n % 4]
  3.     num = ['0'] + [operator[i] + str(i+1) for i in range(n)]
  4.     string = ''.join(num)
  5.     return round(eval(string), 2)

  6. print(f_84(12))
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-31 18:23:58 | 显示全部楼层
  1. def arithmetic(n):
  2.     num_list = [str(i) for i in range(n + 1)]
  3.     fu_hao = ["+", "-", "*", "/"]

  4.     for i in range(n):
  5.         num_list.insert(2 * i + 1, fu_hao[i % 4])

  6.     formula = " ".join(num_list)
  7.     print(formula)
  8.     result = "%.2f" % eval(formula)

  9.     return result
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-24 03:03

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表