Loafer0 发表于 2022-11-24 19:59:11

最新版教程第048讲动动手课后题遇到的问题

动动手题目:

利用生成器定义一个支持浮点数的 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呢?{:10_285:}

jhq999 发表于 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无限循环

jhq999 发表于 2022-11-24 22:23:55

while b-round(a,1)>round(0,1) :

Loafer0 发表于 2022-11-25 07:37:17

jhq999 发表于 2022-11-24 22:23


哇,问题确实解决了,想问这是为什么呢{:10_291:}

Loafer0 发表于 2022-11-25 07:47:36

jhq999 发表于 2022-11-24 19:59


{:10_254:}谢谢!
页: [1]
查看完整版本: 最新版教程第048讲动动手课后题遇到的问题