Skip to main content
 首页 » 编程设计

Python 数零

2025年05月04日12kenshinobiy

我创建了一个基本上可以生成随机 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.')