判断手机号所属运营商--课后程序(Python程序开发案例教程-黑马程序员编著-第11章-课后作业)
创始人
2024-06-02 18:24:16
0

实例1:判断手机号所属运营商

说到手机号大家并不陌生,一个手机号码由11位数字组成,前3位表示网络识别号,第4~7位表示地区编号,第8~11位表示用户编号。因此,我们可以通过手机号前3位的网络识别号辨别手机号所属运营商。在我国手机号运营商有移动、联通、电信,各大运营商的网络识别号如表1所示。

表1 运营商和网络识别号

运营商

号码段

移动

134、135、136、137、138、139、147、148、150、151、152、157、158、 159、165、178、182、183、184、187、188、198

联通

130、131、132、140、145、146、155、156、166、185、186、175、176

电信

133、149、153、180、181、189、177、173、174、191、199

本实例要求编写程序,实现判断输入的手机号码是否合法以及判断其所属的运营商的功能。

实例目标

  1. 掌握正则表达式的基本规则
  2. 掌握re模块中match()方法的用法

实例分析

判断一个手机号是否属于中国移动、中国联通、中国电信其中一家,首先需要判断用户输入的手机号码是否符合手机号码的规则,若符合规则再继续判断输入的手机号码具体属于哪个运营商。根据以上分析可整理出以下实现思路:

(1)接收用户输入的手机号码;

(2)使用if-else语句判断用户输入的手机号码是否符合规范:若符合规范,继续判断手机号码的所属运行商;若不符合规范,提示用户“请输入正确的手机号”。

以上思路中判断手机号所属运营商是程序处理的核心部分,此部分需要将用户输入的手机号码与表1中的号码段进行匹配,匹配成功则返回相应的运营商。因此,这里可以使用正则表达式进行匹配处理,即使用re模块的match()函数搜索用户输入的字符串是否有与正则表达式匹配的内容。

各运营商的号码段不同,其对应的正则表达式也不相同,具体可分为以下情况:

  1. 中国移动。中国移动的号码段按照不同的开头可分为13、14、15、16、17、18、19几种情况,每种情况对应的正则表达式为:

13[456789]\d{8}

15[012789]\d{8}

147\d{8}|178\d{8}

18[23478]\d{8}

  1. 中国联通:中国联通的号码段按不同的开头可分为13、14、15、16、17、18、几种情况,每种情况对应的正则表达式为:

13[012]\d{8}

18[56]\d{8}

15[56]\d{8}

176\d{8}

145\d{8}

  1. 中国电信:其余不匹配以上规则的字符串就是此运营商的手机号。

代码实现

import re

def phone_number():

    n = input("请输入一个手机号:")

    if re.match(r'1[34578]\d{9}', n):

        print("该号码合法:", n)

        # 中国移动:

        if re.match(r"13[456789]\d{8}", n) or \

                re.match(r"15[012789]\d{8}", n) or \

                re.match(r"147\d{8}|178\d{8}", n) or \

                re.match(r"18[23478]\d{8}", n):

            print("该号码属于:中国移动")

        # 中国联通

        elif re.match(r'13[012]\d{8}', n) or \

                re.match(r"18[56]\d{8}", n) or \

                re.match(r"15[56]\d{8}", n) or \

                re.match(r"176\d{8}", n) or \

                re.match(r"145\d{8}", n):

            print("该号码属于:中国联通")

        else:

        # 中国电信

            print("该号码属于:中国电信")

    else:

        print("请输入正确的手机号")

if __name__ == '__main__':

    phone_number()

上述代码首先使用import语句导入re模块,然后定义了查询手机运营商的函数phone_number(),在phone_number()函数中,先接收用户输入的手机号码并赋值给变量n,判断n是否符合手机号码的规则,符合规则再继续判断具体的运营商,最后在main语句中调用phone_number()函数。

代码测试

运行程序,在控制台输入“15732622380”的结果如下(号码合法):

请输入一个手机号:15732622380

该号码合法: 15732622380

该号码属于:中国移动

运行代码,在控制台输入“1573262238”的结果如下(号码不合法):

请输入一个手机号:1573262238

请输入正确的手机号

相关内容

热门资讯

监控摄像头接入GB28181平... 流程简介将监控摄像头的视频在网站和APP中直播,要解决的几个问题是:1&...
Windows10添加群晖磁盘... 在使用群晖NAS时,我们需要通过本地映射的方式把NAS映射成本地的一块磁盘使用。 通过...
protocol buffer... 目录 目录 什么是protocol buffer 1.protobuf 1.1安装  1.2使用...
Fluent中创建监测点 1 概述某些仿真问题,需要创建监测点,用于获取空间定点的数据࿰...
educoder数据结构与算法...                                                   ...
MySQL下载和安装(Wind... 前言:刚换了一台电脑,里面所有东西都需要重新配置,习惯了所...
MFC文件操作  MFC提供了一个文件操作的基类CFile,这个类提供了一个没有缓存的二进制格式的磁盘...
在Word、WPS中插入AxM... 引言 我最近需要写一些文章,在排版时发现AxMath插入的公式竟然会导致行间距异常&#...
有效的括号 一、题目 给定一个只包括 '(',')','{','}'...
【Ctfer训练计划】——(三... 作者名:Demo不是emo  主页面链接:主页传送门 创作初心ÿ...