Crossin的编程教室

标题: 【求助】round的四舍五入在(0+1)/2是取1还是0 [打印本页]

作者: zhangboran    时间: 2019-1-20 18:19
标题: 【求助】round的四舍五入在(0+1)/2是取1还是0
我按照前面的课做的一个猜数字的程序

其中有一项是把猜的数字范围的上限和下限做修改,就是设定x,y两个值,然后确定范围x = 0, y = 100。之后再根据每次猜测的大小,不断调整x,y的取值进而不断调整猜测范围。

理论上来说,当电脑设定的数为0的时候我的程序应该永远都猜不到才对。因为取值为0, 猜1 的时候得到反馈数值过大,然后y调整为1,于是再次猜测的时候就应该是(0+1)/2=0.5,然后round之后得出1。再然后y依旧等于1,然后继续(0+1)/2=1.这样一直循环下去。但是实际去试的时候并没有出现上述的循环情况,而是真的猜到了0。那这个四舍五入是什么情况?

代码如下

from random import randint
q = 0
p = 100

num = 0

print('The asked number is', num)

print('guess what is the number')

ans = randint(q,p)

print('the number is', ans)

x = q

y = p

while ans != num:

    if ans < num:
      
        print('too small')
        k = (y+ans)/2
        k = round(k)
        k=int(k)

        x = ans

        ans = k

        
   

    else:
   
        print('too big')

        w = (x+ans)/2
        w = round(w)
        w=int(w)

        y = ans

        ans = w

    print('the number is', ans)

    print('x is', x, 'y is', y)


print('bingo')




作者: TED    时间: 2019-1-21 14:52
python2里round(0.5)是1,而python3里round(0.5)是0

参考链接: https://www.cnblogs.com/anpengapple/p/6507271.html
作者: crossin先生    时间: 2019-1-21 22:35
这与python的浮点数表示方式有关,所以 round 不能用来精确计算。
这里有个简单的解决方法 https://www.jianshu.com/p/5c3774f2e06e




欢迎光临 Crossin的编程教室 (https://bbs.crossincode.com/) Powered by Discuz! X2.5