在信用卡验证练习中循环 - python2.7

时间:2013-10-06 08:01:18

标签: python python-2.7

我有一个可以使用if / elif解决的赋值问题,但问题需要一个while循环,而且我有点迷失。

  

q:的如果所有数字的总和是10的倍数,则信用卡号有效。编写一个接受存储在变量num中的16位信用卡号的程序。您的程序还应验证用户在验证前是否输入了正确的位数数字。

我有:

num = raw_input("Please enter a credit card number: ")
total = 0
while len(num) == 16:
    for i in num:
        total = total + int(i)
    print total
    if total % 10 == 0:
        print "ok"
    else:
        print " not ok"
else:
    print " not long enough"

我可以看到为什么我陷入了一个永无止境的循环,我可以通过完全摆脱时间来修复,但不确定如何修复我的答案但仍然有一个问题需要的while循环。

2 个答案:

答案 0 :(得分:2)

使用if代替while

if len(num) == 16:
    for i in num:
        total = total + int(i)
    print total
    if total % 10 == 0:
        print "ok"
    else:
        print " not ok"
else:
    print " not long enough"

您不应该使用while循环来处理简单条件; if更适合那里。

您可以使用while循环代替for循环:

i = count = total = 0
while i < len(num):
    digit = num[i]
    i += 1
    if digit in ' -.':
        # spaces, dashes and dots are fine
        continue
    if not digit.isdigit():
        # Oops, not a digit, bail out, not valid
        break
    total += int(digit)
    count += 1

if count != 16 or total % 10 != 0:
    print "Not a valid credit card number!"
else:
    print "Ok"

这有额外的好处,你现在也接受信用卡号码中的空格,点和破折号。

答案 1 :(得分:0)

您应该设置一个标记validFalse,然后while not valid:提示用户输入数字,将输入数字的数字相加,然后将valid设置为{ {1}}不需要(len(number) == 16) and ((sum % 10) == 0)