当我在IDLE中测试round(x)函数时,它工作得非常好,因为当我输入round(12.5)时它给出的数字为13。但是,在我的程序中(请参见下文),它不会这样做,因为它将12.5舍入为12。
我的程序有什么问题?谢谢您的帮助。
我的程序:
import random
interval_begin = 1
interval_end = 50
interval_half = interval_end *0.5
interval_half_to_end = interval_end - interval_half
players_pick = float(input("Pick a number between {} and {}.". format(interval_begin, interval_end) ))
computer_guess = (interval_end)/2
print("Computer guesses {}.".format(computer_guess))
while players_pick != computer_guess:
if computer_guess < players_pick:
interval_half /= 2/3
computer_guess = round(interval_half)
print("Computer guesses {}.".format(computer_guess))
else:
interval_half /= 2
computer_guess = round(interval_half)
print("Computer guesses {}.".format(computer_guess))
答案 0 :(得分:3)
Round在Python 3+中无法正常工作:
对于支持
round()
的内置类型,将值四舍五入为与功率减ndigits
的最接近的10的倍数; 如果两个倍数相等,则朝着偶数选择进行四舍五入(例如,round(0.5)
和round(-0.5)
均为0
,而{{1 }}是round(1.5)
)。任何整数值都对2
有效(正,零或负)。如果使用一个参数调用,则返回值为整数,否则返回与ndigits
相同的类型。
https://docs.python.org/3.5/library/functions.html#round
在Python 2中,四舍五入为0.5,
返回浮点值
number
,四舍五入至小数点后number
位。如果省略ndigits
,则默认为零。结果是一个浮点数。值四舍五入到与幂减ndigits
相乘的10的最接近倍数; 如果两个倍数相等,则四舍五入应从0开始(例如,ndigits
是round(0.5)
,而1.0
是round(-0.5)
)
https://docs.python.org/2.7/library/functions.html#round
因此,这是由解释器版本差异引起的。
您可能还应该意识到浮点数的局限性:https://docs.python.org/3.5/tutorial/floatingpoint.html#tut-fp-issues
答案 1 :(得分:-1)
编辑:仅当您始终想四舍五入时,以下内容才有帮助:
import math
math.ceil(2.5) #3
math.floor(2.5 #2
这件适合您的案例的作品:
def myround(n):
if n * 10 % 10 > 5:
return math.ceil(n)
return math.floor(n)