设为首页收藏本站

Crossin的编程教室

 找回密码
 立即加入
查看: 20370|回复: 2
打印 上一主题 下一主题

【求助】round的四舍五入在(0+1)/2是取1还是0

[复制链接]

1

主题

0

好友

9

积分

新手上路

Rank: 1

跳转到指定楼层
楼主
发表于 2019-1-20 18:19:54 |只看该作者 |正序浏览
我按照前面的课做的一个猜数字的程序

其中有一项是把猜的数字范围的上限和下限做修改,就是设定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')



回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

板凳
发表于 2019-1-21 22:35:18 |只看该作者
这与python的浮点数表示方式有关,所以 round 不能用来精确计算。
这里有个简单的解决方法 https://www.jianshu.com/p/5c3774f2e06e
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

6

主题

2

好友

654

积分

实习版主

Rank: 7Rank: 7Rank: 7

沙发
发表于 2019-1-21 14:52:43 |只看该作者
python2里round(0.5)是1,而python3里round(0.5)是0

参考链接: https://www.cnblogs.com/anpengapple/p/6507271.html
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即加入

QQ|手机版|Archiver|Crossin的编程教室 ( 苏ICP备15063769号  

GMT+8, 2024-11-22 15:20 , Processed in 0.016191 second(s), 21 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部