Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 试图计算校验和,但最终陷入无限循环-请解释?_Python 3.x_While Loop_Infinite Loop - Fatal编程技术网

Python 3.x 试图计算校验和,但最终陷入无限循环-请解释?

Python 3.x 试图计算校验和,但最终陷入无限循环-请解释?,python-3.x,while-loop,infinite-loop,Python 3.x,While Loop,Infinite Loop,我试图根据给定的卡号计算校验和。我知道有很多现成的性能更好的算法。我想知道的是,为什么我会陷入一个无限循环,我就是不明白 “number”是字符串中的字符列表,例如(“4000002345326738”) 让我们看看,每一次迭代的校验和增加1,和增加校验和。这意味着在迭代次数n时,和u等于 求和=求和首字母+1+2+…+n=初始值+n*(n+1)/2之和 你相信在某一点上,和可以被10整除。事实并非如此。模10的n(n+1)/2的余数仅取决于n%20,因此很容易看出n(n+1)/2%10的可能值

我试图根据给定的卡号计算校验和。我知道有很多现成的性能更好的算法。我想知道的是,为什么我会陷入一个无限循环,我就是不明白

“number”是字符串中的字符列表,例如(“4000002345326738”)


让我们看看,每一次迭代的校验和增加1,和增加校验和。这意味着在迭代次数n时,和u等于

求和=求和首字母+1+2+…+n=初始值+n*(n+1)/2之和

你相信在某一点上,和可以被10整除。事实并非如此。模10的n(n+1)/2的余数仅取决于n%20,因此很容易看出n(n+1)/2%10的可能值为:

0,1,3,6,5,8

所以,如果初始和是1,3,6,或8模10,和永远不会被2整除,你会陷入一个无限循环

顺便说一句,因为
found
变量没有在任何地方使用,所以您可以只编写
为True时:

查看if语句。有一个回报在那里。修正你的答案。“返回校验和”不会自动停止循环,因为我们要离开函数吗?超级马来西亚!你搞定了。你正在向sum添加校验和,但校验和一直在增加。你只需要返回sum。我知道while循环与校验和变量无关
def get_checksum(numbers):
sum_ = 0
for n in numbers:
    x = int(n)
    sum_ += x
found = False
checksum = 0
while not found:
    if sum_ % 10 == 0:
        return checksum
    else:
        checksum += 1
        sum_ += checksum