python练习题:随机生成n个满足如下要求的手机号码:
- 手机号码必须是13、15、17、18开头
- 手机号码相同数字出现的次数不能大于5次
- 任意两个手机号不能重复
- 生成的手机号码需保存在列表tels中,并且按照升序进行排列
import random
n = int(input("请输入n值:")) #n就是要生成的手机号个数
tels = []
begin = [3,5,7,8]
i = 1 #计数
while i <= n:
last9 = [random.choice(range(10)) for _ in range(9)] #剩下的九个数字
tel = [1] + [random.choice(begin)] + last9 #按顺序生成11个数字,储存在tel列表里
if tel not in tels: #将不重复的tel存进tels列表中
tels.append(tel)
i += 1
for m in tel:
if tel.count(m) > 5: #判断有无重复出现5次以上的数字
tels.remove(tel) #若有,从tels列表里删除该tel
i -= 1 #删除后计数减一,继续返回循环
A = '' #定义一个空串方便将列表形式的11个独立数字合并为一个字符串
for x in range(0, len(tels)):
for s in tels[x]:
a = str(s)
A = A + a
tels[x] = A #按顺序存进题目要求的tels列表
A = '' #前一个合并完之后,A清零进行下一个字符串的处理
tels.sort() #升序排序
print(tels)
import random
n = int(input("请输入n:"))
starts = [13, 15, 17, 18] # 前两位
tels = [] # 保存生成的手机号码
# 遍历
while True:
tel = "" # 保存每一次生成的手机号
tel += str(starts[random.randint(0, 3)]) # 随机选择前两位
tmp = [] # 随机选择数字序列
for i in range(10):
if str(i) in tel:
tmp = tmp + [i] * 3
else:
tmp = tmp + [i] * 4
random.shuffle(tmp) #打乱顺序
for _ in range(9): # 随机从选择序列中
i = random.randint(0, len(tmp) - 1)
tel += str(tmp[i])
del tmp[i]
if tel not in tels: # 去除重复
tels.append(tel)
if len(tels) > n:# 生成n个数后跳出循环
break
print(tels)
以上是学校python入门课的一道小题,附自己琢磨出的解决办法(第一个)和老师给的代码(第二个)。自己的方法更多侧重每一个数字生成和处理的过程,老师的更偏向于建立一个大的数集,然后从中取数组成电话号,私以为各有所长所短。但是黑猫白猫,抓到耗子就算好猫!
如有需要供参考,立个小博客记录hhhhh
欢迎批评指正!!