楼主: longkui1990
1293 4

[程序分享] 这段if elif else的代码错在哪里 [推广有奖]

  • 2关注
  • 1粉丝

副教授

71%

还不是VIP/贵宾

-

威望
0
论坛币
3487 个
通用积分
47.7000
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
11499 点
帖子
452
精华
0
在线时间
362 小时
注册时间
2010-10-9
最后登录
2024-10-10

楼主
longkui1990 发表于 2019-12-25 21:39:46 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
2019-12-25_213742.png

个人代码如下:

def verify():
    CN_mobile = [134, 135, 136, 137, 138, 139, 150, 151, 152, 157, 158, 159, 182, 183, 184,
         187, 188, 147, 178, 1705]
    CN_union = [130, 131, 132, 155, 156, 185, 186, 145, 176, 1709]
    CN_telecom = [133, 153, 180, 181, 189, 177, 1700]

    number=input('Enter you number: ')
    if len(number)!=11:
        print('Invalid length, your number should be in 11 digits')
        verify()
    elif number[0:2] in CN_mobile:
        print('Operator: China mobile')
    elif number[0:3] in CN_mobile:
        print('Operator: China mobile')
    elif number[0:2] in CN_union:
        print('Operator: China Union')
    elif number[0:3] in CN_union:
        print('Operator: China Union')
    elif number[0:2] in CN_telecom:
        print('Operator: China Telecom')
    elif number[0:3] in CN_telecom:
        print('Operator: China Telecom')
    else:
        print('No such a operator')
        verify()
verify()


但是运行之后就是下面这样

Enter you number: 123
Invalid length, your number should be in 11 digits
Enter you number: 15962332563
No such a operator
Enter you number:

不知道错在哪里
还请高手帮忙指点

谢谢


二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝


回帖推荐

quetal 发表于4楼  查看完整内容

楼主的代码有几处错: 1. number变量是字符串,它的前三或前四位任然是字符串,要将字符串转变成整数后,才能和三个LIST里的元素相比较,因为楼主定义的那三个LIST的元素都是整数; 2. 取前三位的正确写法是number[0:3],而不是number[0:2]。同理,取前四位的正确写法是number[0:4]; 3. if else那段代码的逻辑有错。楼主的本意是检查电话号码的前三或前四位,但按照楼主那段代码的逻辑,如果电话号码的前三位是170,程序会错误 ...

沙发
liuxf666 发表于 2019-12-26 11:36:15
input is a string and the lists are all lists of integers.
已有 1 人评分论坛币 收起 理由
longkui1990 + 5 热心帮助其他会员

总评分: 论坛币 + 5   查看全部评分

藤椅
zgmjs250 发表于 2020-1-8 19:28:27
input进来的是string字符串,需要转换成列表list才能判断长度吧
已有 1 人评分论坛币 收起 理由
longkui1990 + 5 精彩帖子

总评分: 论坛币 + 5   查看全部评分

板凳
quetal 发表于 2020-1-9 07:02:53
楼主的代码有几处错:
1. number变量是字符串,它的前三或前四位任然是字符串,要将字符串转变成整数后,才能和三个LIST里的元素相比较,因为楼主定义的那三个LIST的元素都是整数;
2. 取前三位的正确写法是number[0:3],而不是number[0:2]。同理,取前四位的正确写法是number[0:4];
3. if else那段代码的逻辑有错。楼主的本意是检查电话号码的前三或前四位,但按照楼主那段代码的逻辑,如果电话号码的前三位是170,程序会错误地将它归为China mobile。正确的做法是:如果前三位是170,则要检查前四位。

以下是我写的代码,在我电脑上能正确给出结果。

def verify():
    CN_mobile = [134, 135, 136, 137, 138, 139, 150, 151, 152, 157, 158, 159, 182, 183, 184, 187, 188, 147, 178, 1705]
    CN_union = [130, 131, 132, 155, 156, 185, 186, 145, 176, 1709]
    CN_telecom = [133, 153, 180, 181, 189, 177, 1700]

    number=input('Enter you number: ')
    if len(number)!=11:
        print('Invalid length, your number should be in 11 digits')
        return
    elif number[0:3] == '170':
        prefix = int(number[0:4])
    else:
        prefix = int(number[0:3])
        
    if prefix in CN_mobile:
        print('Operator: China mobile')
    elif prefix in CN_union:
        print('Operator: China Union')
    elif prefix in CN_telecom:
        print('Operator: China Telecom')
    else:
        print('No such a operator')
        
    return
   
verify()
已有 1 人评分论坛币 收起 理由
longkui1990 + 5 精彩帖子

总评分: 论坛币 + 5   查看全部评分

报纸
tianwk 发表于 2020-1-16 23:12:06
thanks for sharing

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-28 17:36