鱼C论坛

 找回密码
 立即注册
查看: 2555|回复: 4

[已解决]最新版教程第048讲动动手课后题遇到的问题

[复制链接]
发表于 2022-11-24 19:59:11 | 显示全部楼层 |阅读模式
10鱼币
动动手题目:

利用生成器定义一个支持浮点数的 frange() 函数,其功能与 range() 函数相仿

我的答案:
def frange(b,a=0.0):
    a=round(a,1)+0.0
    b=round(b,1)+0.0
    
    while b-a>round(0,1) :
        yield round(a,1)
        a+=round(0.1,1)

程序运行结果1:
for i in frange(1):
    print(i)

    
0.0
0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
0.9
1.0


程序运行结果2:
for i in frange(4,1):
    print(i)

    
1.0
1.1
1.2
1.3
1.4
1.5
1.6
1.7
1.8
1.9
2.0
2.1
2.2
2.3
2.4
2.5
2.6
2.7
2.8
2.9
3.0
3.1
3.2
3.3
3.4
3.5
3.6
3.7
3.8
3.9


我的问题:
        在未作任何改变的情况下,第二种运行结果才符合题目要求。
        为什么第一种程序运行结果会输出1.0呢?
最佳答案
2022-11-24 19:59:12
本帖最后由 jhq999 于 2022-11-25 07:45 编辑
Loafer0 发表于 2022-11-25 07:37
哇,问题确实解决了,想问这是为什么呢

def frange(b,a=0.0):
    a=round(a,1)+0.0
    b=round(b,1)+0.0
    
    while b-a>round(0,1) :
        yield round(a,1)
        a+=round(0.1,1)
        print(a)#在这里加个print(a)就明白了应该是1.0却是0.9999999999,这就是浮点不精确的表现之一,因为不能表现成0.9无限循环

最佳答案

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

使用道具 举报

发表于 2022-11-24 19:59:12 | 显示全部楼层    本楼为最佳答案   
本帖最后由 jhq999 于 2022-11-25 07:45 编辑
Loafer0 发表于 2022-11-25 07:37
哇,问题确实解决了,想问这是为什么呢

def frange(b,a=0.0):
    a=round(a,1)+0.0
    b=round(b,1)+0.0
    
    while b-a>round(0,1) :
        yield round(a,1)
        a+=round(0.1,1)
        print(a)#在这里加个print(a)就明白了应该是1.0却是0.9999999999,这就是浮点不精确的表现之一,因为不能表现成0.9无限循环
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-11-24 22:23:55 | 显示全部楼层
while b-round(a,1)>round(0,1) :
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2022-11-25 07:37:17 | 显示全部楼层

哇,问题确实解决了,想问这是为什么呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2022-11-25 07:47:36 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-25 13:18

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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