既然你也希望能够计算浮点数的数字,那么仅仅做 n/10 是不够的 . 使用浮点值,您的循环将最终变为无限,因为它将执行浮点除法而不是int除法 . (例如 16.3 / 10 = 1.63 - > 1.63 / 10 = .163 等 - 它永远不会达到 0 )
为避免此问题,我建议将数字作为字符串处理,并计算字符串中的数字字符数 .
def num_digits(n):
count = 0
curr = n # remaining string you're currently evaluating
while (curr != ''):
digit = curr[len(curr)-1] # get final char
curr = curr[:len(curr)-1] # trim last char off the string
if (not digit.isdigit()):
# ignore things like decimal points or negative signs
continue
count += 1
return count
while True:
value = raw_input('Enter a number:\n') # keep it in string form
try:
convert = float(value) # if it's a valid float, then it's also a valid int
break
except:
print "not a number. enter a valid number"
nd = num_digits(value)
print('{} has {} digits'.format(value, nd))
样本输出:
# float number, ignores negative sign and decimal point
$ python script.py
Enter a number:
-16.3
-16.3 has 3 digits
# asks for input until it has a valid number
$ python script.py
Enter a number:
foo
not a number. enter a valid number
Enter a number:
blah3
not a number. enter a valid number
Enter a number:
89
89 has 2 digits