gpt4 book ai didi

Python while 循环永远不会停止,即使它应该

转载 作者:太空狗 更新时间:2023-10-30 02:43:51 25 4
gpt4 key购买 nike

我一直在学习一本关于算法的书(重点是 Python)中的一些练习,当我尝试解决某个问题时,我遇到了奇怪的行为。这个练习相当简单,目标是从 range(n) 生成一个随机整数 k,然后通过一系列“是/否”来定位这个数字问题。只要 n 不是太大,下面的代码就可以工作,但是当它太大时,我会得到一个无限循环。但这不应该发生,因为在最坏的情况下 step_size 最终将等于 1,并且 position 将爬向 k 的值直到 位置 == k

当我同时打印 step_sizeposition 时,似乎 position 在变得太大时没有更新,所以我猜它与被近似和截断的值有关(这就是为什么我试图将其显式地转换为 long,这实际上可能没有做任何事情)。代码的某些次要部分是不必要的,但我想让它适用于一般的 n。关于正在发生的事情的任何想法(您可能必须增加 n 才能获得我正在谈论的行为)?

from random import randrange
from math import ceil

n = 10**15
k = randrange(n)

success = False
step_size = ceil(n / 2.0)
position = long(ceil(n / 2.0))

print(k)

while success == False:
if position == k:
success = True
print(str(int(position)) + ' is the value of k.')
elif k < position:
step_size = ceil(step_size / 2.0)
position -= step_size
print(step_size, position)
else:
step_size = ceil(step_size / 2.0)
position += step_size
print(step_size, position)

最佳答案

您需要使用position += long(step_size)position -= long(step_size)

  if position == k:
success = True
print(str((position)) + ' is the value of k.')
elif k < position:
step_size = ceil(step_size / 2.0)
position -= long(step_size)
print(step_size, position,k)
else:
step_size = ceil(step_size / 2.0)
position += long(step_size)
print(step_size, position)

如果你不这样做,position 将是一个不是 long 的 float 。

随着 n = 10 ** 200 的变化,我们得到一个值:

11008769984569663730780658772914869218303604494435631537943840906720756507580926318660187453313745419228469341648307070867052432521026422402953409000922062458195678772749579263632191432518529106302726
11008769984569663730780658772914869218303604494435631537943840906720756507580926318660187453313745419228469341648307070867052432521026422402953409000922062458195678772749579263632191432518529106302726 is the value of k.

关于Python while 循环永远不会停止,即使它应该,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31887732/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com