案例解析
最近在网上看到一个python的面试题目: 如何用Python生成1亿个手机号码?
我第一眼看到的时候心想,这个还不简单?直接 random.randint(1,999999999999)
就完事了。
但是马上就发现了这其中的错误:这个是生成1-99999999之间的随机数,可能是1,也可能是666.
但电话号码是11位的,而且前3位只有指定的号段,比如135、136。直接 random.randint(1,999999999999)
这么做并不符合条件。
那么如何生成呢?于是有了下面这段代码:
import random def create_phone_num(num): all_phone_nums = set() # 存放生成的电话号码 while True: # 因为set会自动去重,因此死循环生成电话号码,直到等于num个号码停止 start = random.choice(['135', '136', '137']) # 存放前3位的号段,从中随机取一个 end = ''.join(random.sample(string.digits, 8)) # 随机生成后面8位数字 all_phone_nums.add(f'{start}{end}') # 拼接前3位和后8位 if len(all_phone_nums) >= num: # 如果号码个数等于num,则停止 break phone_num(10000 * 10000)
经过这次写代码我才发现,原来Python的random里