在解决Project Euler问题时,我遇到了以下与n更新有关的逻辑错误。
while(n<1000):
#update n
#do something with n
#do stuff
vs
while(n<1000):
#do something with n
#do stuff
#update n
在第一个实例中,即使违反了n <1000的条件,我最终还是用n进行了操作。
此逻辑错误有名字吗?这个错误有多普遍?
我试图寻找它,确实找到了有关变量递增和递减的信息。尽管这接近错误,但这并不是这里发生的一切。我在SO answer about for loop vs while loop的部分中找到了对此的引用,描述了与while循环相比,for循环如何更简洁直接。本质上,在使用while循环的情况下,我们在变量更新后最终会运行代码,该更新可能会埋在代码中的某个地方。
答案 0 :(得分:1)
这并不总是一个错误:它取决于算法。在某些情况下,您知道n
的原始值是合法的(因此您可以进入循环),但是您想在处理过程中更新并使用新值。您需要将代码与算法匹配。您的第二个代码块是规范的for
等效代码,并且更为常见。
这属于“错误减1”的总标题。