Python 3.x 试图计算校验和,但最终陷入无限循环-请解释?
我试图根据给定的卡号计算校验和。我知道有很多现成的性能更好的算法。我想知道的是,为什么我会陷入一个无限循环,我就是不明白 “number”是字符串中的字符列表,例如(“4000002345326738”)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的可能值
让我们看看,每一次迭代的校验和增加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