1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 判断手机号所属运营商--课后程序(Python程序开发案例教程-黑马程序员编著-第11章-课后作业)

判断手机号所属运营商--课后程序(Python程序开发案例教程-黑马程序员编著-第11章-课后作业)

时间:2022-03-24 11:47:53

相关推荐

判断手机号所属运营商--课后程序(Python程序开发案例教程-黑马程序员编著-第11章-课后作业)

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

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

表1 运营商和网络识别号

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

实例目标

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

实例分析

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

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

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

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

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

中国移动。中国移动的号码段按照不同的开头可分为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}

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

13[012]\d{8}

18[56]\d{8}

15[56]\d{8}

176\d{8}

145\d{8}

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

代码实现

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

请输入正确的手机号

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。