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

print('|--- 欢迎进入通讯录程序 ---|')
print('|--- 1:查询联系人资料 ---|')
print('|--- 2:插入新的联系人 ---|')
print('|--- 3:删除已有的联系人 ---|')
print('|--- 4:查看所有通讯录 ---|')
print('|--- 5:退出通讯录程序 ---|')

contacts = dict()

while True:
    instr = input('\n请输入指令编号:')

    if instr.isdigit():
        instr = int(instr)
    else:
        print('对不起,输入错误!请重新输入:')
#查询联系人
    if instr == 1:
        name = input('请输入要查询的联系人姓名:')
        if name in contacts:
            print(name + ':' + contacts[name])
        else:
            print('对不起,您查找的联系人不在通讯录中!')
#插入新的联系人
    if instr == 2:
        name = input('请输入联系人姓名:')
        if name in contacts:
            print('您输入的联系人已存在!')
            print(name + ':' + contacts[name])
            if input('是否修改用户资料(YES/NO):').upper() == 'YES':
                contacts[name] = input('请输入用户联系电话:')
                print('修改成功!')
        else:
            contacts[name] = input('请输入联系人电话:')
            print('添加成功!')
#删除已有的联系人
    if instr == 3:
        name = input('请输入要删除的联系人姓名:')
        if name in contacts:
            del(contacts[name])
            #contacts.clear()    清空通讯录
            print('已删除!')
        else:
            print('对不起,您要删除的联系人不在通讯录中')
#查看所有通讯录
    if instr == 4:
        print('Name\tPhoneNum')
        if len(contacts):
            for key,value in contacts.items():
                print(key,value)
        else:
            print('对不起,通讯录没有联系人!')
#退出通讯录程序
    if instr == 5:
        break
print('感谢使用通讯录')

 1.尝试编写一个用户登录程序(这次尝试将功能封装成函数)

#注册
def enroll():
    name = input('请输入用户名:')
    while name in logon:
        name = input('用户名已被使用!请重新输入用户名:')
    logon[name] = input('请输入密码:')
    print('恭喜注册成功!')
#登录
def log():
    name = input('请输入用户名:')
    while name not in logon:
        name = input('对不起,用户名不存在!请重新输入:')
    pwd = input('请输入密码:')
    while pwd != logon[name]:
        pwd = input('对不起密码错误!请重新输入密码:')
    print('欢迎成功进入程序!')
        


print('|--- 欢迎进入程序 ---|')
print('|--- N/n:注册账号 ---|')
print('|--- E/e:登录账号 ---|')
print('|--- Q/q:退出程序 ---|')   

logon = dict()

while True:
    inchar = input('\n请输入指令代码:')
    if inchar.upper() == 'N':
        enroll()
    elif inchar.upper() == 'E':
        log()
    elif inchar.upper() == 'Q':
        print('欢迎下次登录!')
        break
    else:
        print('输入错误!')

这里小甲鱼的意图应该是把整个过程封装起来,我先定义了登录和注册的函数,后面部分也尝试了定义一个loan函数从目录到分支结束,最后直接调用一个loan()函数,但是报错,关于logon这个字典的定义,决定后面再进行加工修改了。

后面可以改进的地方:1、修改密码功能;2、不能无限次输入密码

 

字典  {key:value}  所以字典是一种映射类型,如果没有映射关系有{  }也只是集合

>>> dict1 = {'李宁':'一切皆有可能','耐克':'Just do it'}   

>>> print('耐克的口号是:',dict1['耐克'])

耐克的口号是: Just do it

>>> dict2 = dict((('F',70),('i',105),('C',67)))  #可以是元组

>>> dict2

{'F': 70, 'i': 105, 'C': 67}

>>> dict3 = dict(小甲鱼='让编程改变世界')   #小甲鱼加了’’会报错

>>> dict3

{'小甲鱼': '让编程改变世界'}

>>> dict3['小甲鱼']='记得做课后练习'   #可以修改(覆盖),不支持一键key多值value

>>> dict3

{'小甲鱼': '记得做课后练习'}

>>> dict3['Lucky']='苟且偷生'   #可以直接增加,给一个不存在的键赋值,自动添加进字典

>>> dict3

{'小甲鱼': '记得做课后练习', 'Lucky': '苟且偷生'}

>>> dict1 = {}

fromkeys方法是直接创建一个新的字典,不要试图使用它来修改一个原有的字典,因为它会直接无情的用把整个字典给覆盖掉。

>>> dict1.fromkeys((1,2,3)) 

{1: None, 2: None, 3: None}

>>> dict1.fromkeys((1,2,3),'number')

{1: 'number', 2: 'number', 3: 'number'}

>>> dict1.fromkeys((1,2,3),('one','two','three'))

{1: ('one', 'two', 'three'), 2: ('one', 'two', 'three'), 3: ('one', 'two', 'three')}   #以上情查询dict1实际其仍为空{}

>>> dict1.fromkeys((1,3),'sum')   #重新创建,非单独修改13参数的值

{1: 'sum', 3: 'sum'}

访问KEY

>>> dict1 = dict1.fromkeys(range(10),'ha')

>>> dict1   #确保dict1被重新复制,不是空才能查看

{0: 'ha', 1: 'ha', 2: 'ha', 3: 'ha', 4: 'ha', 5: 'ha', 6: 'ha', 7: 'ha', 8: 'ha', 9: 'ha'}

>>> for eachkey in dict1.keys():
    print(eachkey)
0
1
2
3
4
5
6
7
8
9
>>> for eachvalue in dict1.values():
    print(eachvalue)
ha
ha
ha
ha
ha
ha
ha
ha
ha
ha
>>> for eachitem in dict1.items():
    print(eachitem)    
(0, 'ha')
(1, 'ha')
(2, 'ha')
(3, 'ha')
(4, 'ha')
(5, 'ha')
(6, 'ha')
(7, 'ha')
(8, 'ha')
(9, 'ha')

>>> print(dict1[9])  #访问第10位
ha
>>> print(dict1[10])   #不存在会报错
Traceback (most recent call last):
  File "<pyshell#25>", line 1, in <module>
    print(dict1[10])
KeyError: 10
>>> dict1.get(10)     #实际上返回None
>>> print(dict1.get(10))
None
>>> dict1.get(10,'没有值')
'没有值'
>>> 17 in dict1  #当不知道一个值是否在字典里
False
>>>dict1.clear()  #清除字典
>>>dict1
{}
>>> dict1.pop(4) 
'ha'
>>> dict1.popitem()
(9, 'ha')
>>> dict1.setdefault(88)
>>> dict1
{0: 'ha', 1: 'ha', 2: 'ha', 3: 'ha', 5: 'ha', 6: 'ha', 7: 'ha', 8: 'ha', 88: None}
>>> dict1.setdefault(5)
'ha'
>>> dict2 = {27:'huohuo'}  #update
>>> dict1.update(dict2)
>>> dict1
{0: 'ha', 1: 'ha', 2: 'ha', 3: 'ha', 5: 'ha', 6: 'ha', 7: 'ha', 8: 'ha', 88: None, 27: 'huohuo'}