我创建了一个基本上可以生成随机 20 位数字的代码。代码如下:
import random
from random import randint
n=20
def digit(n):
range_start = 10**(n-1)
range_end = (10**n)-1
return randint(range_start, range_end+1)
print(digit(n))
例如,这段代码的输出是:
49690101904335902069
现在给出这段代码,我只是想知道如何计算输出中零的数量,所以基本上我正在尝试创建一个名为 count_zero() 的新函数: ,但我不知道该为我的参数放什么,不放什么。
请您参考如下方法:
将数字转成字符串,统计'0'个字符的个数:
def count_zeros(number):
return str(number).count('0')
演示:
>>> def count_zeros(number):
... return str(number).count('0')
...
>>> count_zeros(49690101904335902069)
5
或者不把它变成字符串:
def count_zeros(number):
count = 0
while number > 9:
count += int(number % 10 == 0)
number //= 10
return count
不过,后一种方法很多较慢:
>>> import random
>>> import timeit
>>> test_numbers = [random.randrange(10 ** 6) for _ in xrange(1000)]
>>> def count_zeros_str(number):
... return str(number).count('0')
...
>>> def count_zeros_division(number):
... count = 0
... while number > 9:
... count += int(number % 10 == 0)
... number //= 10
... return count
...
>>> timeit.timeit('[c(n) for n in test_numbers]',
... 'from __main__ import test_numbers, count_zeros_str as c', number=5000)
2.4459421634674072
>>> timeit.timeit('[c(n) for n in test_numbers]',
... 'from __main__ import test_numbers, count_zeros_division as c', number=5000)
7.91981315612793
要将它与您的代码结合起来,只需添加函数,然后单独调用;可以直接传入digit()的结果,也可以先存储结果,再传入:
print(count_zeros(digit(n)))
或单独(这也允许您显示生成的随机数):
result = digit(n)
zeros = count_zeros(result)
print('result', result, 'contains', zeros, 'zeros.')
