我创建了一个小游戏,让电脑猜出我选择的数字(在1到100之间)。为了提高效率,我让它的第一次猜测总是50,然后它试图通过猜测他最后一次猜测和他能猜到的“更高”或“更低”数字之间的中点来猜测(我知道,这不是一个很好的解释,但你会看到下面的代码)。你知道吗
不管怎样,我注意到它总是能在最多7次尝试中找到答案,至少在我选择的几个数字的情况下。为了验证这个假设,我写了下面的代码:
def take_guess(lower, higher):
return lower + (higher - lower)/2
lower = 0
higher = 100
t = 1
l = []
for i in range(1,100):
while True:
guess = take_guess(lower, higher)
if guess == i:
l.append(t)
t = 1
break
elif guess > i:
higher = guess
t += 1
continue
elif guess < i:
lower = guess
t += 1
continue
print sorted(l)[-1]
问题是,它只能在范围(1,2)或范围(1,3)下运行。如果射程再大,它就跑不动了。有什么原因吗?你知道吗
您的代码也在将猜测与i进行比较。让我们跟随它完成循环:
第一次猜测=50;i=1
二次猜测=25;i=2
三次猜测=12.5;i=3
在这一点上,猜测不再是一个整数,它永远不会匹配。你知道吗
您可能应该先定义它猜测的数字,或者将其设置为随机数,然后重试:
你的代码非常正确。您只是忘记了在递增
i
时重置higher
和lower
的值。你知道吗下面是代码的工作版本(用于python2)
当i的值变为3时,lower=1,higher=3,所以guess=2。现在由于guess小于i,guess=lower=2。但是,guess仍然是2,因为2+1/2=2,所以它进入无限循环,因为guess的值永远不会改变,也就是说guess<;我和你被困在相同的条件下,因为guess总是2,我总是3。你知道吗
相关问题 更多 >
编程相关推荐