Python 学习时犯了低级错误!!! 把整数和字符串进行比较前没有强转类型..

Liu-Vegetable · 2020年10月31日 · 最后由 elva 回复于 2020年11月02日 · 2197 次阅读
num = input('用户请输入电话号')
if not num.isdigit():
    print('你输入的不是数字')

else:
    if len(num) != 11
        print(输入不正确)

    else:
        tel = num[:3]
        if 130<= int(tel) <=150:

        # if 130<=tel<=150:     # Str和int比较前必须转为int, 否则报错!!!
            print('这是移动号')

        elif 150<= int(tel) <=170:
        # elif 150<=tel<=170:
            print('这是联通号')

        elif 170<= int(tel) <=199:
        # elif 170<=tel<=199:
            print('这是电信号')

        else:
            print('该手机号不属于任何运营商')
共收到 4 条回复 时间 点赞

看不起我国外手机?

直接通过正则表达式来判断的,if else 很难覆盖

提个优化建议,int(tel) 写那么多次不是太方便,建议弄一个 tel_int 的变量存起来,后面比较的时候直接用这个变量,会更方便。

另外,不知道你是纯练习 if else 用还是什么用途?对于判定电话是否有效和运营商这个场景,一般建议用正则表达式。一个 dictionary 存储运营商和正则表配置(key 是运营商,value 是正则表达式),然后 for 循环遍历这个 dictionary ,正则匹配上则返回 key,全部不匹配就认为电话号码无效。会省很多代码,方便扩展,而且也不会出现你这里提到的类型转换错误。

手机号前三位和运营商的关系是否不太准确
我的手机号 189 开头的但是移动的

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册