crazy-anonymous 2021-08-21 11:49 采纳率: 100%
浏览 41
已结题

一个关于python 中 if_elif 的问题

最近写了一个练习题,代码如下:

information = []
a = '-' * 30
func = '''
1:添加名片
2:删除名片
3:修改名片
4:查询名片
5:显示所有名片
6:退出系统'''
flag = True


# def business_card_all():
#     for i in information
#     pass


def add(x, y, z):
    global information
    business_card = {'name': x, 'telephone_number': y, 'QQ_number': z}
    information.append(business_card)
    print(information)


def delete(x):
    global information
    location = information.index(x[0])
    del information[location]


def revise(w, x, y, z):
    global information
    location = information.index(w[0])
    information[location] = {'name': x, 'telephone_number': y, 'QQ_number': z}


def inquire(x):
    global information
    print(x[0])


def dir():
    print(information)


def management_system(function):
    if 1 <= function <= 4 and type(function) == int:
        if function == 1:
            name = input('请输入姓名:')
        elif function == 2:
            name = input('输入删除名片的姓名:')
        elif function == 3:
            name = input('请输入修改名片的姓名:')
        else:
            name = input('请输入查询名片的姓名:')
        check_duplicate = filter(lambda a: a['name'] == name, information)
        examine = list(check_duplicate)
        if examine:
            if function == 1:
                print('用户名被占用, 请重新输入!')
                return
            elif function == 2:
                delete(examine)
                print('用户名: {} 已删除'.format(examine[0]['name']))
                return
            elif function == 4:
                inquire(examine)
        elif (not examine) and (2 <= function <= 4 and type(function) == int):
            print('用户名不存在!')
            return
        elif (bool(examine) == False) or function == 3:
            telephone_number = input('请输入手机号:')
            QQ_number = input('请输入QQ号:')
            if function == 3:
                revise(examine, name, telephone_number, QQ_number)
            else:
                add(name, telephone_number, QQ_number)
    elif function == 5:
        dir()
    elif function == 6:
        global flag
        exit = input('亲, 你确认要退出么?~~~~(> _ <)~~~~(yes or no)')
        if exit == 'yes':
            flag = False
            return
        else:
            print('谢谢亲对此软件的支持!')
            return
    else:
        return


while flag:
    print(a, '\n', ' ' * 6, '名片管理系统 V1.0', func, '\n', a)
    function = int(input('请输入要进行的操作(数字)'))
    management_system(function)


先添加一个名片:

img

然后 , 修改名片:

img

发现, 控制台并没让我输入手机号和QQ号

img

使用pycharm的代码调试发现代码执行到67行的elif时就结束了
然而, 当我们在修改名片时输入一个没有使用过的用户名时, 我发现第68行的elif执行了

img

后来, 我把第68和71行的 elif 改成 if 代码竟然又正常运行下去了:

img

我想知道第二次代码执行到66行的elif时, 代码就结束了.

  • 写回答

2条回答 默认 最新

  • Pliosauroidea 2021-08-21 11:59
    关注

    每组互斥的if,elif,else每次至多只会执行其中一个

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 8月29日
  • 已采纳回答 8月21日
  • 创建了问题 8月21日

悬赏问题

  • ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
  • ¥16 mybatis的代理对象无法通过@Autowired装填
  • ¥15 可见光定位matlab仿真
  • ¥15 arduino 四自由度机械臂
  • ¥15 wordpress 产品图片 GIF 没法显示
  • ¥15 求三国群英传pl国战时间的修改方法
  • ¥15 matlab代码代写,需写出详细代码,代价私
  • ¥15 ROS系统搭建请教(跨境电商用途)
  • ¥15 AIC3204的示例代码有吗,想用AIC3204测量血氧,找不到相关的代码。
  • ¥20 CST怎么把天线放在座椅环境中并仿真