1

我有一个作业问题,我可以使用 if/elif 解决,但这个问题需要一个 while 循环,我有点迷茫。

问:。如果所有数字的总和是 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 来修复,但不知道如何修复我的答案,但仍然有一个问题需要的 while 循环。

4

2 回答 2

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"

这还有一个额外的好处,您现在也接受信用卡号中的空格、点和破折号。

于 2013-10-06T08:03:00.717 回答
0

您应该设置一个标志validFalse然后while not valid:提示用户输入数字,将输入的数字的数字相加,然后设置valid(len(number) == 16) and ((sum % 10) == 0)no ifs required。

于 2013-10-06T08:16:41.440 回答