微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

用python写一个通讯录代码

引用知识

  • list + dict用于临时存储用户数据信息

  • cPickle用于格式化文件存取

  • 依旧使用file来进行文件的存储

解决问题

1、操刀开始去做

原始代码 实现功能(可做模板)

1、判断输入内容是否在给出的menu目录内,在的话,返回对应结果,不在就报错

2、调用os模块的exit功能

3、字典配合循环加上函数实现switch的功能

#!/usr/bin/envpython #coding:utf8 #Author:zhuima #Date:2015-03-22 #Version:0.1 #Function:displayalistandadddate #导入模块 importos defmenu(): '''设置munu目录,提供给用户的操作接口''' print''' 1.adduserinfo 2.dispalluserinfo 3.updateuserinfobyusername 4:deluserbyusername 5:sortuserinfoby 0.exitprogram ''' op=raw_input('Pleaseselectone>>>') returnop deftxl_exit(): '''退出程序''' os._exit(0) deftxl_error(): '''当用户输出选项不在定义的选项内的时候,报错''' print print'Unkonwoptions,Pleasetryagain!' #定义dict,配合函数实现switch功能 ops={ #'1':txl_add,#'2':txl_dis,#'3':txl_update,#'4':txl_del,#'5':txl_sort,'0':txl_exit,} defmain(): '''主程序''' whileTrue: op=menu() ops.get(op,txl_error)() if__name__=='__main__': main()

2、添加用户

思路

认定义一个空list,然后嵌套dict来实现临时存储功能

  • 1、添加代码

    #导入模块 importos txl=[] .... deftxl_add(): '''添加用户''' name=raw_input('PleaseEnterYourName>>>') age=raw_input('PleaseEnterYourAge>>>') gender=raw_input('PleaseEnterYourGender>>>') tel=raw_input('PleaseEnterYourTel>>>') txl.append({'name':name,'age':age,'gender':gender,'tel':tel}) deftxl_disp(): '''显示原始的txl列表''' printtxl ..... ops={ '1':txl_add,'2':txl_disp,}

  • 2、测试结果

    [root@MysqL01day0330]#pythonv2_1.py 1.adduserinfo 2.dispalluserinfo 3.updateuserinfobyusername 4:deluserbyusername 5:sortuserinfoby 0.exitprogram Pleaseselectone>>>2 [] 1.adduserinfo 2.dispalluserinfo 3.updateuserinfobyusername 4:deluserbyusername 5:sortuserinfoby 0.exitprogram Pleaseselectone>>>1 PleaseEnterYourName>>>zhuima PleaseEnterYourAge>>>28 PleaseEnterYourGender>>>f PleaseEnterYourTel>>>10086 1.adduserinfo 2.dispalluserinfo 3.updateuserinfobyusername 4:deluserbyusername 5:sortuserinfoby 0.exitprogram Pleaseselectone>>>2 [{'gender':'f','age':'28','tel':'10086','name':'zhuima'}] 1.adduserinfo 2.dispalluserinfo 3.updateuserinfobyusername 4:deluserbyusername 5:sortuserinfoby 0.exitprogram Pleaseselectone>>>0

  • 3、完整代码

3、格式化输出

格式化输出,使用字典

格式化输出:print "%(name)s\t%(age)s" % dict

  • 1、添加代码片段

    deftxl_disp(): '''显示原始的txl列表''' print"name\tage\tgender\ttel" print"-----------------------" forxintxl: print"%(name)s\t%(age)s\t%(gender)s\t%(tel)s"%x

  • 2、测试结果

    [root@MysqL01day0330]#pythonv2_1.py 1.adduserinfo 2.dispalluserinfo 3.updateuserinfobyusername 4:deluserbyusername 5:sortuserinfoby 0.exitprogram Pleaseselectone>>>2 nameagegendertel ---------------------------- 1.adduserinfo 2.dispalluserinfo 3.updateuserinfobyusername 4:deluserbyusername 5:sortuserinfoby 0.exitprogram Pleaseselectone>>>2 nameagegendertel ---------------------------- 1.adduserinfo 2.dispalluserinfo 3.updateuserinfobyusername 4:deluserbyusername 5:sortuserinfoby 0.exitprogram Pleaseselectone>>>1 PleaseEnterYourName>>>zhuima PleaseEnterYourAge>>>28 PleaseEnterYourGender>>>f PleaseEnterYourTel>>>10086 1.adduserinfo 2.dispalluserinfo 3.updateuserinfobyusername 4:deluserbyusername 5:sortuserinfoby 0.exitprogram Pleaseselectone>>>1 PleaseEnterYourName>>>nick PleaseEnterYourAge>>>25 PleaseEnterYourGender>>>m PleaseEnterYourTel>>>10010 1.adduserinfo 2.dispalluserinfo 3.updateuserinfobyusername 4:deluserbyusername 5:sortuserinfoby 0.exitprogram Pleaseselectone>>>1 PleaseEnterYourName>>>kale PleaseEnterYourAge>>>33 PleaseEnterYourGender>>>f PleaseEnterYourTel>>>10011 1.adduserinfo 2.dispalluserinfo 3.updateuserinfobyusername 4:deluserbyusername 5:sortuserinfoby 0.exitprogram Pleaseselectone>>>2 nameagegendertel ---------------------------- zhuima28f10086 nick25m10010 kale33f10011 1.adduserinfo 2.dispalluserinfo 3.updateuserinfobyusername 4:deluserbyusername 5:sortuserinfoby 0.exitprogram Pleaseselectone>>>0

  • 3、完整代码

4、文件写入与读取

思路:

引入cPickle概念,cPickle对文件进行读取与存入的格式化操作,

cPickle的loads功能(从文件中读取文件,保证原有格式)和dumps(把相关格式的对象文件存放到文件中)功能

  • 1、添加代码

    #导入模块 importos importcPickle #定义数据库文件名 fname='contact.db' txl=[] ... deftxl_add(): '''添加用户''' .... #调用txl_save()模块 txl_save() deftxl_disp(): '''显示原始的txl列表 做了二次调整,如果txl为空,则打印木有文件存在,如果txl不为空 则打印出数据信息''' iflen(txl)>0: print"name\tage\tgender\ttel" print'----------------------------' forxintxl: print"%(name)s\t%(age)s\t%(gender)s\t%(tel)s"%x else: print print">>>ThisiSAEmptyfile,Thereisnoinfomation!>>>" deftxl_save(): '''使用cPickle进行列表到字符串的转换然后写入文件''' s=cPickle.dumps(txl) fp=file(fname,'w') fp.write(s) fp.close() deftxl_load(): '''从文件读取信息,然后使用cPickle进行字符串到列表的转换''' ifos.path.exists(fname): fp=file(fname) s=fp.read() fp.close() txl.extend(cPickle.loads(s))

  • 2、写入测试结果

    [root@MysqL01day0330]#ls test.pyv2_1.pyv2.py [root@MysqL01day0330]#pythonv2_1.py 1.adduserinfo 2.dispalluserinfo 3.updateuserinfobyusername 4:deluserbyusername 5:sortuserinfoby 0.exitprogram Pleaseselectone>>>2 >>>ThisiSAEmptyfile,Thereisnoinfomation!>>> 1.adduserinfo 2.dispalluserinfo 3.updateuserinfobyusername 4:deluserbyusername 5:sortuserinfoby 0.exitprogram Pleaseselectone>>>1 PleaseEnterYourName>>>zhuima PleaseEnterYourAge>>>25 PleaseEnterYourGender>>>f PleaseEnterYourTel>>>10086 1.adduserinfo 2.dispalluserinfo 3.updateuserinfobyusername 4:deluserbyusername 5:sortuserinfoby 0.exitprogram Pleaseselectone>>>2 nameagegendertel ---------------------------- zhuima25f10086 1.adduserinfo 2.dispalluserinfo 3.updateuserinfobyusername 4:deluserbyusername 5:sortuserinfoby 0.exitprogram Pleaseselectone>>>1 PleaseEnterYourName>>>nick PleaseEnterYourAge>>>22 PleaseEnterYourGender>>>m PleaseEnterYourTel>>>10010 1.adduserinfo 2.dispalluserinfo 3.updateuserinfobyusername 4:deluserbyusername 5:sortuserinfoby 0.exitprogram Pleaseselectone>>>2 nameagegendertel ---------------------------- zhuima25f10086 nick22m10010 1.adduserinfo 2.dispalluserinfo 3.updateuserinfobyusername 4:deluserbyusername 5:sortuserinfoby 0.exitprogram Pleaseselectone>>>0 [root@MysqL01day0330]#ls contact.dbtest.pyv2_1.pyv2.py

  • 3、读取测试结果

    [root@MysqL01day0330]#pythonv2_1.py 1.adduserinfo 2.dispalluserinfo 3.updateuserinfobyusername 4:deluserbyusername 5:sortuserinfoby 0.exitprogram Pleaseselectone>>>2 nameagegendertel ---------------------------- zhuima25f10086 nick22m10010 1.adduserinfo 2.dispalluserinfo 3.updateuserinfobyusername 4:deluserbyusername 5:sortuserinfoby 0.exitprogram Pleaseselectone>>>0 [root@MysqL01day0330]#

  • 4、完整代码

5、删除用户

思路:

根据用户名来进行数据的删除

先来看一个演示

  • 案例演示如何删除嵌套列表字典

    In[6]:s Out[6]:[{'age':25,'name':'zhuima'},{'age':33,'name':'nick'}] #第一个思路就是要使用del来进行字典的删除,但是针对嵌套不生效 In[7]:forxins: ifx['name']=='zhuima': delx ...:prints ...: [{'age':25,'name':'nick'}] #后来使用列表的remove来进行删除,成功 In[10]:forxins: ifx['name']=='zhuima': s.remove(x) ....: In[11]:s Out[11]:[{'age':33,'name':'nick'}]

  • 1、代码片段

    deftxl_del(): '''根据用户名进行删除用户相应的信息,并进行数据存储,如果用户不输人该如何''' name=raw_input('PleaseEnterYourWantToDeletename>>>') forlineintxl: ifline['name']==name: txl.remove(line) break #最后记得调用存入的函数,要不然删除仅针对当前会话,没有写入文件 txl_save()

  • 2、测试效果

    [root@MysqL01day0330]#pythonv2_1.py 1.adduserinfo 2.dispalluserinfo 3.updateuserinfobyusername 4:deluserbyusername 5:sortuserinfoby 0.exitprogram Pleaseselectone>>>2 nameagegendertel ---------------------------- zhuima25f10086 nick22m10010 1.adduserinfo 2.dispalluserinfo 3.updateuserinfobyusername 4:deluserbyusername 5:sortuserinfoby 0.exitprogram Pleaseselectone>>>4 PleaseEnterYourWantToDeletename>>>nick 1.adduserinfo 2.dispalluserinfo 3.updateuserinfobyusername 4:deluserbyusername 5:sortuserinfoby 0.exitprogram Pleaseselectone>>>2 nameagegendertel ---------------------------- zhuima25f10086 1.adduserinfo 2.dispalluserinfo 3.updateuserinfobyusername 4:deluserbyusername 5:sortuserinfoby 0.exitprogram Pleaseselectone>>>0 [root@MysqL01day0330]#pythonv2_1.py 1.adduserinfo 2.dispalluserinfo 3.updateuserinfobyusername 4:deluserbyusername 5:sortuserinfoby 0.exitprogram Pleaseselectone>>>2 nameagegendertel ---------------------------- zhuima25f10086 1.adduserinfo 2.dispalluserinfo 3.updateuserinfobyusername 4:deluserbyusername 5:sortuserinfoby 0.exitprogram Pleaseselectone>>>

  • 3、完整代码

6、根据用户输入自定义排序

思路:

根据用户的选择进行排序操作

引入功能,就是lambda txl.sort(key=lambda x : x[op])

  • 1、代码片段

    deftxl_sort(): '''根据用户的输入对数据进行排序,用到了lambda函数,有bug的,应该提供一个认值出来进行排序''' op=raw_input('OrderBy[name|age|gender|tel]display>>>') txl.sort(key=lambdax:x[op]) txl_disp()

  • 2、测试结果

    [root@MysqL01day0330]#pythonv2_1.py 1.adduserinfo 2.dispalluserinfo 3.updateuserinfobyusername 4:deluserbyusername 5:sortuserinfoby 0.exitprogram Pleaseselectone>>>2 nameagegendertel ---------------------------- zhuima25f10086 nick22m10011 kale29f10093 tony18m10010 1.adduserinfo 2.dispalluserinfo 3.updateuserinfobyusername 4:deluserbyusername 5:sortuserinfoby 0.exitprogram Pleaseselectone>>>5 OrderBy[name|age|gender|tel]display>>>name nameagegendertel ---------------------------- kale29f10093 nick22m10011 tony18m10010 zhuima25f10086 1.adduserinfo 2.dispalluserinfo 3.updateuserinfobyusername 4:deluserbyusername 5:sortuserinfoby 0.exitprogram Pleaseselectone>>>5 OrderBy[name|age|gender|tel]display>>>age nameagegendertel ---------------------------- tony18m10010 nick22m10011 zhuima25f10086 kale29f10093 1.adduserinfo 2.dispalluserinfo 3.updateuserinfobyusername 4:deluserbyusername 5:sortuserinfoby 0.exitprogram Pleaseselectone>>>

  • 3、完整代码

7、更新数据

思路:
方法一: 使用字典重新赋值即可实现更新(本案例演示采用的第一种方式)

方法二: 根据索引找到对应的用户所在的dict,然后对整个dict进行更新

  • 根据索引找到对应的dict进行更新的案例演示

    In[38]:s Out[38]:[{'age':44,'name':'nick'}] In[39]:forxins: ....:ifx['name']=='zhuima': ....:s[s.index(x)]={'name':'zhuima521','age':28} ....: In[40]:s Out[40]:[{'age':28,'name':'zhuima521'},'name':'nick'}] In[41]:

  • 1、代码片段

    deftxl_update(status=True): '''根据用户名对该用户的相关数据进行更新操作,用户名不可变,如果选项不更新,则保留认值,否则更新''' txl_disp() name=raw_input('SelectOneUpdateByName>>>') forlineintxl: ifline['name']==name: status=False old_age=line['age'] old_gender=line['gender'] old_tel=line['tel'] age=raw_input('PleaseEnterYourAgefor%s>>>'%name) gender=raw_input('PleaseEnterYourGenderfor%s>>>'%name) tel=raw_input('PleaseEnterYourTelfor%s>>>'%name) iflen(age)==0: line['age']=old_age else: line['age']=age iflen(gender)==0: line['gender']=old_gender else: line['gender']=gender iflen(tel)==0: line['tel']=old_tel else: line['tel']=tel break ifstatus: print"UnkonwUser,TryAgain!" txl_save()

  • 2、测试结果

    [root@MysqL01day0330]#pythonv2_1.py 1.adduserinfo 2.dispalluserinfo 3.updateuserinfobyusername 4:deluserbyusername 5:sortuserinfoby 0.exitprogram Pleaseselectone>>>2 nameagegendertel ---------------------------- fuck30m90000 kale33f10093 tony18m10010 zhuima25f10086 max32f20000 1.adduserinfo 2.dispalluserinfo 3.updateuserinfobyusername 4:deluserbyusername 5:sortuserinfoby 0.exitprogram Pleaseselectone>>>3 nameagegendertel ---------------------------- fuck30m90000 kale33f10093 tony18m10010 zhuima25f10086 max32f20000 SelectOneUpdateByName>>>kale PleaseEnterYourAgeforkale>>> PleaseEnterYourGenderforkale>>> PleaseEnterYourTelforkale>>>99999 1.adduserinfo 2.dispalluserinfo 3.updateuserinfobyusername 4:deluserbyusername 5:sortuserinfoby 0.exitprogram Pleaseselectone>>>2 nameagegendertel ---------------------------- fuck30m90000 kale33f99999 tony18m10010 zhuima25f10086 max32f20000 1.adduserinfo 2.dispalluserinfo 3.updateuserinfobyusername 4:deluserbyusername 5:sortuserinfoby 0.exitprogram Pleaseselectone>>>3 nameagegendertel ---------------------------- fuck30m90000 kale33f99999 tony18m10010 zhuima25f10086 max32f20000 SelectOneUpdateByName>>>min UnkonwUser,TryAgain! 1.adduserinfo 2.dispalluserinfo 3.updateuserinfobyusername 4:deluserbyusername 5:sortuserinfoby 0.exitprogram Pleaseselectone>>>

  • 3、完整代码

总结

至此,我们使用dict完成了数据库的增、删、改、查、排序等操作

完整代码

 #!/usr/bin/envpython #coding:utf8 #Author:zhuima #Date:2015-03-22 #Version:0.1 #Function:displayalistandadddate #导入模块 importos importcPickle fname='contact.db' txl=[] defmenu(): '''设置munu目录,提供给用户的操作接口''' print''' 1.adduserinfo 2.dispalluserinfo 3.updateuserinfobyusername 4:deluserbyusername 5:sortuserinfoby 0.exitprogram ''' op=raw_input('Pleaseselectone>>>') returnop deftxl_add(): '''添加用户''' name=raw_input('PleaseEnterYourName>>>') age=raw_input('PleaseEnterYourAge>>>') gender=raw_input('PleaseEnterYourGender>>>') tel=raw_input('PleaseEnterYourTel>>>') txl.append({'name':name,'tel':tel}) txl_save() deftxl_disp(): '''显示原始的txl列表''' iflen(txl)>0: print"name\tage\tgender\ttel" print'----------------------------' forxintxl: print"%(name)s\t%(age)s\t%(gender)s\t%(tel)s"%x else: print print">>>ThisiSAEmptyfile,Thereisnoinfomation!>>>" deftxl_save(): '''对数据进行写操作,写之前进行格式转换''' s=cPickle.dumps(txl) fp=file(fname,'w') fp.write(s) fp.close() deftxl_load(): '''对文件进行读取,如果文件存在的情况下''' ifos.path.exists(fname): fp=file(fname) s=fp.read() fp.close() txl.extend(cPickle.loads(s)) deftxl_update(status=True): '''根据用户名对该用户的相关数据进行更新操作,TryAgain!" txl_save() deftxl_del(): '''根据用户名进行删除用户相应的信息,并进行数据存储''' name=raw_input('PleaseEnterYourWantToDeletename>>>') forlineintxl: ifline['name']==name: txl.remove(line) break txl_save() deftxl_sort(): '''根据用户的输入对数据进行排序,用到了lambda函数''' op=raw_input('OrderBy[name|age|gender|tel]display>>>') txl.sort(key=lambdax:x[op]) txl_disp() deftxl_exit(): '''退出程序''' os._exit(0) deftxl_error(): '''当用户输出选项不在定义的选项内的时候,报错''' print print'Unkonwoptions,Pleasetryagain!' #定义dict,配合函数实现switch功能 ops={ '1':txl_add,'3':txl_update,'4':txl_del,'5':txl_sort,} txl_load() defmain(): '''主程序''' whileTrue: op=menu() ops.get(op,txl_error)() if__name__=='__main__': main()

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。