025 26:字典 当索引不好用时

#笔记

字典是Python中唯一的映射类型,字典也被称为hash(哈希),关系数组

创建字典的5种方法:

a = {"one":1,"two":2,"three":3}
b = dict(zip(["one","two","three"],[1,2,3]))
c = dict([("one",1),("two",2),("three",3)])
d = dict(one=1,two=2,three=3)
e = dict({"one":1,"two":2,"three":3})
print(a==b==c==d==e)
    

字典的各种内置方法:

fromkeys() 创建并返回一个新的字典 有两个参数,第一个是字典的键,第二个是键对应的值,是可选的,若不提供,默认为None

dict1={}
dict1.fromkeys((1,2,3),("one","two","three"))

访问字典的方法keys() value() items() 分别返回字典中的键 值和项(键值对)

get() 当键不存在时,并不会报错 返回None

判断一个键是否在字典中可以用成员操作符(in或者not in)

pop()和popitem() pop是给定键弹出对应的值 popitem()弹出一个项

setdefault() 和get()方法类似 但当在字典中找不到对应的键时会自动添加

尝试利用字典特性写一个通讯录程序

print("丨---欢迎进入通讯录程序---丨")
print("丨--- 1:查询联系人资料 ---丨")
print("丨--- 2:插入新的联系人 ---丨")
print("丨--- 3:删除已有联系人 ---丨")
print("丨--- 4:退出通讯录程序 ---丨")
tel = {"小甲鱼":"123456"}
while 1:
    temp =int(input("请输入相关指定代码:"))
    if temp==1:
        name = input("请输入联系人姓名:")
        if name in tel:
            print(name+":"+tel.get(name))
        else:
            print("联系人不存在~")   
    elif temp==2:
        name = input("请输入联系人姓名:")
        if name in tel:
            print("您输入的姓名在通讯录中已存在-->>"+name+":"+tel.get(name))
            choice=input("是否需要修改(Yes/No):")
            if choice =="Yes":
                phone= input("请输入联系人电话:")
                tel[name]=phone
        else:
            
            phone= input("请输入联系人电话:")
            tel[name]=phone
    elif temp==3:
        dele=input("请输入要删除的联系人姓名:")
        tel.pop(dele)
        print("联系人已删除")
    elif temp==4:
        print("丨--- 感谢使用通讯录程序---丨")
        break
    else :
        temp=int(input("指定代码有误,请重新输入:"))

def login():
    user={}
    while 1:
        temp=input('''丨---新建用户:N/n---丨
丨---登录账号:E/e---丨
丨---退出程序:Q/q---丨
丨---请输入指令代码:''')
        if temp in ["N","n"]:
            name=input("请输入用户名:")
            if name in user:
                name=input("此用户名已被使用,请重新输入:")
                sec=input("请输入密码:")
            else:
                sec=input("请输入密码:")
            
            print("注册成功,赶紧试试登录吧~")
            user[name]=sec
            print(user)
        if temp in ["E","e"]:
            name=input("请输入用户名:")
            if name not in user:
                name = input("您输入的用户名不存在请重新输入:")
                sec1 =input("请输入密码:")
            else:
                sec1 =input("请输入密码:")
            while sec1!=user[name]:
                sec1=input("密码错误,请重新输入:")
                if sec1==user[name]:
                    break
            print("欢迎进入系统,退出程序请输入Q")
        if temp in ["Q","q"]:
            break
login()

print("==================论坛答案==============")

user_data = {}

def new_user():
    prompt = '请输入用户名:'
    while True:
        name = input(prompt)
        if name in user_data:
            prompt = '此用户名已经被使用,请重新输入:'
            continue
        else:
            break

    passwd = input('请输入密码:')
    user_data[name] = passwd
    print('注册成功,赶紧试试登录吧^_^')

def old_user():
    prompt = '请输入用户名:'
    while True:
        name = input(prompt)
        if name not in user_data:
            prompt = '您输入的用户名不存在,请重新输入:'
            continue
        else:
            break
    
    passwd = input('请输入密码:')
    pwd = user_data.get(name)
    if passwd == pwd:
        print('欢迎进入XXOO系统,请点右上角的X结束程序!')
    else:
        print('密码错误!')

def showmenu():
    prompt = '''
|--- 新建用户:N/n ---|
|--- 登录账号:E/e ---|
|--- 推出程序:Q/q ---|
|--- 请输入指令代码:'''

    while True:
        chosen = False
        while not chosen:
            choice = input(prompt)
            if choice not in 'NnEeQq':
                print('您输入的指令代码错误,请重新输入:')
            else:
                chosen = True

        if choice == 'q' or choice == 'Q':
            break
        if choice == 'n' or choice == 'N':
            new_user()
        if choice == 'e' or choice == 'E':
            old_user()

showmenu()



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值