我有一个可以使用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循环。
答案 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)
您应该设置一个标记valid
至False
,然后while not valid:
提示用户输入数字,将输入数字的数字相加,然后将valid
设置为{ {1}}不需要(len(number) == 16) and ((sum % 10) == 0)
。