鱼C论坛

 找回密码
 立即注册
查看: 1389|回复: 13

[已解决]请问各位大佬一个问题,有关循环的

[复制链接]
发表于 2021-3-10 16:24:58 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 GlacierGao 于 2021-3-10 16:58 编辑

遇到了一道小题,题目是这样的:
工作日模式要努力到什么水平,才能与每天努力1%一样?
A君: 一年365天,每天进步1%,不停歇
B君: 一年365天,每周工作5天休息2天,休息日下降1%,要多努力呢?


标答的代码是这样的:
  1. def dayUP(df):
  2.     dayup = 1.0
  3.     for i in range(365):
  4.         if i % 7 in [6, 0]:
  5.             dayup = dayup * (1 - 0.01)
  6.         else:
  7.             dayup = dayup * (1 + df)
  8.     return dayup
  9. dayfactor = 0.01
  10. while (dayUP(dayfactor)<37.78):
  11.     dayfactor += 0.001
  12. print("每天的努力参数是: %.3f."%dayfactor)
复制代码

(37.78就是算出来的A君的“努力成果”,标答结果是0.019)
想对标答稍作改动,我的答案是这样的:
  1. def dayup(x):
  2.     dream = 1
  3.     for i in range(365):
  4.         if i % 7 in [6, 0]:
  5.             dream *= 0.99
  6.         else:
  7.             dream *= (x + 1)
  8.     return dream

  9. a = 1
  10. for i in range(365):
  11.     a *= 1.01

  12. df = 0.01
  13. while df <= 0.03:
  14.     if dayup(df) == a:
  15.         break
  16.     else:
  17.         df += 0.001

  18. print('每天的努力参数是: %.3f' % df)
复制代码

但是结果出来是0.030;我试了很多遍,while条件小于等于多少,就输出多少。感觉应该是最后的循环里有问题
跪谢各位大佬
最佳答案
2021-3-10 17:12:38
GlacierGao 发表于 2021-3-10 17:08
标答里不也是浮点数和浮点数比嘛

答案那个是小于,
浮点数和浮点数比较是不推荐判断他们是否相等的,因为你看着相等,在计算机中存储时是不相等的,涉及精度了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-3-10 16:38:24 | 显示全部楼层
列个方程式   

x^5*0.99^2 == 1.01^7

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

使用道具 举报

发表于 2021-3-10 16:50:14 | 显示全部楼层
你确定要让浮点数和浮点数比较?
我记得这个题就是求得最少,是个近似值
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-3-10 17:08:41 | 显示全部楼层
巴巴鲁 发表于 2021-3-10 16:50
你确定要让浮点数和浮点数比较?
我记得这个题就是求得最少,是个近似值

标答里不也是浮点数和浮点数比嘛
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-3-10 17:09:40 | 显示全部楼层
qq1151985918 发表于 2021-3-10 16:38
列个方程式   

x^5*0.99^2 == 1.01^7

这个方程的原理我应该懂,但是解的方式是和标答一样,用循环一点一点试吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-3-10 17:12:38 | 显示全部楼层    本楼为最佳答案   
GlacierGao 发表于 2021-3-10 17:08
标答里不也是浮点数和浮点数比嘛

答案那个是小于,
浮点数和浮点数比较是不推荐判断他们是否相等的,因为你看着相等,在计算机中存储时是不相等的,涉及精度了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-3-10 17:15:49 | 显示全部楼层
巴巴鲁 发表于 2021-3-10 17:12
答案那个是小于,
浮点数和浮点数比较是不推荐判断他们是否相等的,因为你看着相等,在计算机中存储时是 ...

噢,那我比不出来的原因,可能就是因为这个?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-3-10 17:18:40 | 显示全部楼层
GlacierGao 发表于 2021-3-10 17:15
噢,那我比不出来的原因,可能就是因为这个?


还有可能就是计算出来的值和1.01^365不相等
但是能不用浮点数==浮点数这种操作尽量别用
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-3-10 17:35:15 | 显示全部楼层
GlacierGao 发表于 2021-3-10 17:09
这个方程的原理我应该懂,但是解的方式是和标答一样,用循环一点一点试吗?
  1. import math
  2. print(math.pow((1.01**7)/(0.99**2), 1.0/5))
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-3-10 18:22:50 | 显示全部楼层
巴巴鲁 发表于 2021-3-10 17:18
还有可能就是计算出来的值和1.01^365不相等
但是能不用浮点数==浮点数这种操作尽量别用

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

使用道具 举报

 楼主| 发表于 2021-3-10 18:23:22 | 显示全部楼层

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

使用道具 举报

发表于 2021-3-10 18:38:42 | 显示全部楼层
11
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-3-10 19:23:51 | 显示全部楼层

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

使用道具 举报

发表于 2021-3-11 08:55:45 | 显示全部楼层
学习了!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-25 15:26

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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