我必须为我的课程计算思维做一个作业,但是当我输入这个有效的信用卡号码作为输入时,它总是说这个号码无效,有人知道为什么吗?
def ask_user():
string = (str(input("Please input your credit card number")))
numbers = list(map(int, string.split()))
if card_length(numbers):
validation(numbers)
else:
print("The credit card number you entered is invalid")“此函数将信用卡号作为参数,并检查信用卡号的长度以查看其是否有效。”
def card_length(numbers):
for i in numbers:
if 13 <= i <= 16:
if numbers[0] == 4 or numbers[0] == 5 or numbers[0] == 6 or (numbers[0] == 3 and numbers[1] == 7):
return True
else:
return False“此方法接受数字列表,并告诉用户它是否是与print语句的有效组合”
def validation(numbers):
odd_results = odd_digits(numbers)
even_results = even_digits(numbers)
sum_of_results = odd_results + even_results
if sum_of_results % 10 == 0:
print("This credit card number is valid")
else:
print("This credit card number is invalid")“此函数将信用卡号作为字符串列表参数,并将其中的所有偶数位相加。”
def even_digits(numbers):
length = len(numbers)
sumEven = 0
for i in range(length - 2, -1, -2):
num = eval(numbers[i])
num = num * 2
if num > 9:
strNum = str(num)
num = eval(strNum[0] + strNum[1])
sumEven += num
return sumEven“此函数将信用卡号作为字符串列表参数,并将其中的所有奇数位相加。”
def odd_digits(numbers):
length = len(numbers)
sumOdd = 0
for i in range(length - 1, -1, -2):
numbers += sumOdd
return sumOdd“这是定义第一个名为ask_user的函数的主函数”
def main():
ask_user()
if __name__ == '__main__':
main()发布于 2020-10-02 04:27:57
方法的作用是:通过指定的分隔符将给定的字符串断开,然后返回一个字符串列表。
语法:str.split(分隔符,最大拆分符)
由于您将信用卡号作为一个字符串,两个数字之间没有任何空格,因此在拆分信用卡号时,您将得到一个列表,其中包含整个信用卡号作为列表的单个元素(数字)。因此,数字列表的长度将始终为1,并且卡片长度函数将始终返回False。我建议你这样做:
string = (str(input("Please input your credit card number")))
numbers = list(map(int, list(string)))接下来,让我解释一下Luhn算法是如何工作的:
将数字中的最后一位作为校验和。从校验和数字旁边(左侧)的数字开始的备用数字是双倍的。如果数字在加倍时变成两位数,则添加单个数字: 14 --> 1+4 =5 (或者)我们也可以从数字中减去9,这将得到相同的答案: 14-9 =5。所有数字(不包括校验和数字)现在都已相加。这些数字的总和乘以9,取该数字的mod 10。如果该数字的mod 10的结果等于校验和数字,则该数字是有效的。
这是为算法编写代码的一种方法:
card_number = list(map(int, list(input('Enter the credit card number : '))))
card_number.reverse()
checksum = card_number.pop(0)
for i in range(len(card_number)):
if i % 2 == 0:
x = card_number[i] * 2
if len(str(x)) == 2:
x -= 9
card_number[i] = x
total = sum(card_number) * 9
total %= 10
if total == checksum:
print('It is a valid number')
else:
print('It is not a valid number')https://stackoverflow.com/questions/64161183
复制相似问题