Luhn算法如何求解
How to solve Luhn algoritm
有很多关于如何编写 Luhn 算法的信息。我也在尝试,我认为我非常接近成功,但我的代码中有一些错误,不知道在哪里。测试卡是有效卡,但我的算法另有说明。你不知道为什么吗?感谢帮助
test = "5573497266530355"
kazde_druhe = []
ostatni = []
for i in test:
if int(i) % 2 == 0:
double_digit = int(i) * 2
if double_digit > 9:
p = double_digit - 9
kazde_druhe.append(p)
else:
kazde_druhe.append(double_digit)
else:
ostatni.append(int(i))
o = sum(ostatni)
k = sum(kazde_druhe)
total = o+k
if total % 10 == 0:
print(f"Your card is valid ")
else:
print(f"Your card is invalid ")
终于!感谢大家的帮助。现在它正在工作:-)
test = "5573497266530355" kazde_druhe = [] ostatni = []
for index, digit in enumerate(test):
if index % 2 == 0:
double_digit = int(digit) * 2
print(double_digit)
if double_digit > 9:
double_digit = double_digit - 9
kazde_druhe.append(double_digit)
else:
kazde_druhe.append(double_digit)
else:
ostatni.append(int(digit))
o = sum(ostatni)
k = sum(kazde_druhe)
total = o+k if total % 10 == 0:
print(f"Your card is valid ")
else:
print(f"Your card is invalid ")
2。对于有效载荷,从最右边的数字开始。向左移动,每隔一个数字(包括最右边的数字)的值加倍。
您必须检查数字位置,而不是数字本身。
改为:
for i in range(len(test)):
if i % 2 == 0:
此代码有效。 :)
我尽可能多地修复了你的代码。
test = "5573497266530355"
#test = "3379513561108795"
nums = []
for i in range(len(test)):
if (i % 2) == 0:
num = int(test[i]) * 2
if num > 9:
num -= 9
nums.append(num)
else:
nums.append(int(test[i]))
print(nums)
print((sum(nums) % 10) == 0)
我找到你的代码哪里出错了。
在线:
for i in test:
if int(i) % 2 == 0:
应该是:
for i in range(len(test)):
if i % 2 == 0:
你不应该使用字符串的元素你应该使用元素的索引。
有很多关于如何编写 Luhn 算法的信息。我也在尝试,我认为我非常接近成功,但我的代码中有一些错误,不知道在哪里。测试卡是有效卡,但我的算法另有说明。你不知道为什么吗?感谢帮助
test = "5573497266530355"
kazde_druhe = []
ostatni = []
for i in test:
if int(i) % 2 == 0:
double_digit = int(i) * 2
if double_digit > 9:
p = double_digit - 9
kazde_druhe.append(p)
else:
kazde_druhe.append(double_digit)
else:
ostatni.append(int(i))
o = sum(ostatni)
k = sum(kazde_druhe)
total = o+k
if total % 10 == 0:
print(f"Your card is valid ")
else:
print(f"Your card is invalid ")
终于!感谢大家的帮助。现在它正在工作:-)
test = "5573497266530355" kazde_druhe = [] ostatni = []
for index, digit in enumerate(test):
if index % 2 == 0:
double_digit = int(digit) * 2
print(double_digit)
if double_digit > 9:
double_digit = double_digit - 9
kazde_druhe.append(double_digit)
else:
kazde_druhe.append(double_digit)
else:
ostatni.append(int(digit))
o = sum(ostatni)
k = sum(kazde_druhe)
total = o+k if total % 10 == 0:
print(f"Your card is valid ")
else:
print(f"Your card is invalid ")
2。对于有效载荷,从最右边的数字开始。向左移动,每隔一个数字(包括最右边的数字)的值加倍。
您必须检查数字位置,而不是数字本身。
改为:
for i in range(len(test)):
if i % 2 == 0:
此代码有效。 :)
我尽可能多地修复了你的代码。
test = "5573497266530355"
#test = "3379513561108795"
nums = []
for i in range(len(test)):
if (i % 2) == 0:
num = int(test[i]) * 2
if num > 9:
num -= 9
nums.append(num)
else:
nums.append(int(test[i]))
print(nums)
print((sum(nums) % 10) == 0)
我找到你的代码哪里出错了。
在线:
for i in test:
if int(i) % 2 == 0:
应该是:
for i in range(len(test)):
if i % 2 == 0:
你不应该使用字符串的元素你应该使用元素的索引。