Python随机生成n个满足如下要求的手机号码

python练习题:随机生成n个满足如下要求的手机号码:

  1. 手机号码必须是13、15、17、18开头
  2. 手机号码相同数字出现的次数不能大于5次
  3. 任意两个手机号不能重复
  4. 生成的手机号码需保存在列表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

欢迎批评指正!!

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值