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') #重新创建,非单独修改1,3参数的值
{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'}