python编一个通讯录_python写一个通讯录V2.0

python写一个通讯录step by step V2.0引用知识list + dict用于临时存储用户数据信息

cPickle用于格式化文件存取

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

解决问题

1、操刀开始去做原始代码 实现功能(可做模板)

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

2、调用os模块的exit功能

3、字典配合循环加上函数实现switch的功能#!/usr/bin/env python

#coding:utf8

#Author:zhuima

#Date:2015-03-22

#Version:0.1

#Function:display a list and add date

# 导入模块

import os

def menu():

'''设置munu目录,提供给用户的操作接口 '''

print '''

1.add user info

2.disp all user info

3.update user info by username

4:del user by username

5:sort user info by

0.exit program

'''

op = raw_input('Please select one >>> ')

return op

def txl_exit():

''' 退出程序 '''

os._exit(0)

def txl_error():

''' 当用户输出选项不在定义的选项内的时候,报错'''

print

print 'Unkonw options,Please try again!'

# 定义dict,配合函数实现switch功能

ops = {

# '1':txl_add,

# '2':txl_dis,

# '3':txl_update,

# '4':txl_del,

# '5':txl_sort,

'0':txl_exit,

}

def main():

'''主程序 '''

while True:

op = menu()

ops.get(op,txl_error)()

if __name__ == '__main__':

main()

2、添加用户思路

默认定义一个空list,然后嵌套dict来实现临时存储功能1、添加的代码# 导入模块

import os

txl = []

....

def txl_add():

'''添加用户'''

name = raw_input('Please Enter Your Name >>> ')

age = raw_input('Please Enter Your Age >>> ')

gender = raw_input('Please Enter Your Gender >>> ')

tel = raw_input('Please Enter Your Tel >>> ')

txl.append({'name':name,'age':age,'gender':gender,'tel':tel})

def txl_disp():

'''显示原始的txl列表 '''

print txl

.....

ops = {

'1':txl_add,

'2':txl_disp,

# '3':txl_update,

# '4':txl_del,

# '5':txl_sort,

'0':txl_exit,

}

2、测试结果[root@mysql01 day0330]# python v2_1.py

1.add user info

2.disp all user info

3.update user info by username

4:del user by username

5:sort user info by

0.exit program

Please select one >>> 2

[]

1.add user info

2.disp all user info

3.update user info by username

4:del user by username

5:sort user info by

0.exit program

Please select one >>> 1

Please Enter Your Name >>> zhuima

Please Enter Your Age >>> 28

Please Enter Your Gender >>> f

Please Enter Your Tel >>> 10086

1.add user info

2.disp all user info

3.update user info by username

4:del user by username

5:sort user info by

0.exit program

Please select one >>> 2

[{'gender': 'f', 'age': '28', 'tel': '10086', 'name': 'zhuima'}]

1.add user info

2.disp all user info

3.update user info by username

4:del user by username

5:sort user info by

0.exit program

Please select one >>> 0

3、完整代码块

3、格式化输出格式化输出,使用字典

格式化输出:print "%(name)s\t%(age)s" % dict1、添加代码片段def txl_disp():

'''显示原始的txl列表 '''

print "name\tage\tgender\ttel"

print "-----------------------"

for x in txl:

print "%(name)s\t%(age)s\t%(gender)s\t%(tel)s" % x

2、测试结果[root@mysql01 day0330]# python v2_1.py

1.add user info

2.disp all user info

3.update user info by username

4:del user by username

5:sort user info by

0.exit program

Please select one >>> 2

name age gender tel

----------------------------

1.add user info

2.disp all user info

3.update user info by username

4:del user by username

5:sort user info by

0.exit program

Please select one >>> 2

name age gender tel

----------------------------

1.add user info

2.disp all user info

3.update user info by username

4:del user by username

5:sort user info by

0.exit program

Please select one >>> 1

Please Enter Your Name >>> zhuima

Please Enter Your Age >>> 28

Please Enter Your Gender >>> f

Please Enter Your Tel >>> 10086

1.add user info

2.disp all user info

3.update user info by username

4:del user by username

5:sort user info by

0.exit program

Please select one >>> 1

Please Enter Your Name >>> nick

Please Enter Your Age >>> 25

Please Enter Your Gender >>> m

Please Enter Your Tel >>> 10010

1.add user info

2.disp all user info

3.update user info by username

4:del user by username

5:sort user info by

0.exit program

Please select one >>> 1

Please Enter Your Name >>> kale

Please Enter Your Age >>> 33

Please Enter Your Gender >>> f

Please Enter Your Tel >>> 10011

1.add user info

2.disp all user info

3.update user info by username

4:del user by username

5:sort user info by

0.exit program

Please select one >>> 2

name age gender tel

----------------------------

zhuima 28 f 10086

nick 25 m 10010

kale 33 f 10011

1.add user info

2.disp all user info

3.update user info by username

4:del user by username

5:sort user info by

0.exit program

Please select one >>> 0

3、完整代码

4、文件写入与读取思路:

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

cPickle的loads功能(从文件中读取文件,保证原有格式)和dumps(把相关格式的对象文件存放到文件中)功能1、添加代码块# 导入模块

import os

import cPickle

# 定义数据库文件名

fname = 'contact.db'

txl = []

...

def txl_add():

'''添加用户'''

....

#调用txl_save()模块

txl_save()

def txl_disp():

'''显示原始的txl列表

做了二次调整,如果txl为空,则打印木有文件存在,如果txl不为空

则打印出数据信息'''

if len(txl) > 0:

print "name\tage\tgender\ttel"

print '----------------------------'

for x in txl:

print "%(name)s\t%(age)s\t%(gender)s\t%(tel)s" % x

else:

print

print ">>> This is a empty file,There is no infomation! >>>"

def txl_save():

'''使用cPickle进行列表到字符串的转换 然后写入文件 '''

s = cPickle.dumps(txl)

fp = file(fname,'w')

fp.write(s)

fp.close()

def txl_load():

'''从文件读取信息,然后使用cPickle进行字符串到列表的转换'''

if os.path.exists(fname):

fp = file(fname)

s = fp.read()

fp.close()

txl.extend(cPickle.loads(s))

2、写入测试结果[root@mysql01 day0330]# ls

test.py v2_1.py v2.py

[root@mysql01 day0330]# python v2_1.py

1.add user info

2.disp all user info

3.update user info by username

4:del user by username

5:sort user info by

0.exit program

Please select one >>> 2

>>> This is a empty file,There is no infomation! >>>

1.add user info

2.disp all user info

3.update user info by username

4:del user by username

5:sort user info by

0.exit program

Please select one >>> 1

Please Enter Your Name >>> zhuima

Please Enter Your Age >>> 25

Please Enter Your Gender >>> f

Please Enter Your Tel >>> 10086

1.add user info

2.disp all user info

3.update user info by username

4:del user by username

5:sort user info by

0.exit program

Please select one >>> 2

name age gender tel

----------------------------

zhuima 25 f 10086

1.add user info

2.disp all user info

3.update user info by username

4:del user by username

5:sort user info by

0.exit program

Please select one >>> 1

Please Enter Your Name >>> nick

Please Enter Your Age >>> 22

Please Enter Your Gender >>> m

Please Enter Your Tel >>> 10010

1.add user info

2.disp all user info

3.update user info by username

4:del user by username

5:sort user info by

0.exit program

Please select one >>> 2

name age gender tel

----------------------------

zhuima 25 f 10086

nick 22 m 10010

1.add user info

2.disp all user info

3.update user info by username

4:del user by username

5:sort user info by

0.exit program

Please select one >>> 0

[root@mysql01 day0330]# ls

contact.db test.py v2_1.py v2.py

3、读取测试结果[root@mysql01 day0330]# python v2_1.py

1.add user info

2.disp all user info

3.update user info by username

4:del user by username

5:sort user info by

0.exit program

Please select one >>> 2

name age gender tel

----------------------------

zhuima 25 f 10086

nick 22 m 10010

1.add user info

2.disp all user info

3.update user info by username

4:del user by username

5:sort user info by

0.exit program

Please select one >>> 0

[root@mysql01 day0330]#

4、完整代码

5、删除用户思路:

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

先来看一个演示案例演示如何删除嵌套列表字典In [6]: s

Out[6]: [{'age': 25, 'name': 'zhuima'}, {'age': 33, 'name': 'nick'}]

#第一个思路就是要使用del来进行字典的删除,但是针对嵌套不生效

In [7]: for x in s:

if x['name'] == 'zhuima':

del x

...: print s

...:

[{'age': 25, 'name': 'zhuima'}, {'age': 33, 'name': 'nick'}]

# 后来使用列表的remove来进行删除,成功

In [10]: for x in s:

if x['name'] == 'zhuima':

s.remove(x)

....:

In [11]: s

Out[11]: [{'age': 33, 'name': 'nick'}]

1、代码片段def txl_del():

'''根据用户名进行删除用户相应的信息,并进行数据存储,如果用户不输人该如何'''

name = raw_input('Please Enter Your Want To Delete name >>> ')

for line in txl:

if line['name'] == name:

txl.remove(line)

break

#最后记得调用存入的函数,要不然删除仅针对当前会话,没有写入文件

txl_save()

2、测试效果[root@mysql01 day0330]# python v2_1.py

1.add user info

2.disp all user info

3.update user info by username

4:del user by username

5:sort user info by

0.exit program

Please select one >>> 2

name age gender tel

----------------------------

zhuima 25 f 10086

nick 22 m 10010

1.add user info

2.disp all user info

3.update user info by username

4:del user by username

5:sort user info by

0.exit program

Please select one >>> 4

Please Enter Your Want To Delete name >>> nick

1.add user info

2.disp all user info

3.update user info by username

4:del user by username

5:sort user info by

0.exit program

Please select one >>> 2

name age gender tel

----------------------------

zhuima 25 f 10086

1.add user info

2.disp all user info

3.update user info by username

4:del user by username

5:sort user info by

0.exit program

Please select one >>> 0

[root@mysql01 day0330]# python v2_1.py

1.add user info

2.disp all user info

3.update user info by username

4:del user by username

5:sort user info by

0.exit program

Please select one >>> 2

name age gender tel

----------------------------

zhuima 25 f 10086

1.add user info

2.disp all user info

3.update user info by username

4:del user by username

5:sort user info by

0.exit program

Please select one >>>

3、完整代码

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

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

引入功能,就是lambda txl.sort(key=lambda x : x[op])1、代码片段def txl_sort():

'''根据用户的输入对数据进行排序,用到了lambda函数,有bug的,应该提供一个默认值出来进行排序'''

op = raw_input('Order By [name | age | gender | tel ] Display >>> ')

txl.sort(key=lambda x : x[op])

txl_disp()

2、测试结果[root@mysql01 day0330]# python v2_1.py

1.add user info

2.disp all user info

3.update user info by username

4:del user by username

5:sort user info by

0.exit program

Please select one >>> 2

name age gender tel

----------------------------

zhuima 25 f 10086

nick 22 m 10011

kale 29 f 10093

tony 18 m 10010

1.add user info

2.disp all user info

3.update user info by username

4:del user by username

5:sort user info by

0.exit program

Please select one >>> 5

Order By [name | age | gender | tel ] Display >>> name

name age gender tel

----------------------------

kale 29 f 10093

nick 22 m 10011

tony 18 m 10010

zhuima 25 f 10086

1.add user info

2.disp all user info

3.update user info by username

4:del user by username

5:sort user info by

0.exit program

Please select one >>> 5

Order By [name | age | gender | tel ] Display >>> age

name age gender tel

----------------------------

tony 18 m 10010

nick 22 m 10011

zhuima 25 f 10086

kale 29 f 10093

1.add user info

2.disp all user info

3.update user info by username

4:del user by username

5:sort user info by

0.exit program

Please select one >>>

3、完整代码

7、更新数据思路:

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

方法二: 根据索引找到对应的用户所在的dict,然后对整个dict进行更新根据索引找到对应的dict进行更新的案例演示In [38]: s

Out[38]: [{'age': 44, 'name': 'zhuima'}, {'age': 33, 'name': 'nick'}]

In [39]: for x in s:

....: if x['name'] == 'zhuima':

....: s[s.index(x)] = {'name':'zhuima521','age':28}

....:

In [40]: s

Out[40]: [{'age': 28, 'name': 'zhuima521'}, {'age': 33, 'name': 'nick'}]

In [41]:

1、代码片段def txl_update(status=True):

'''根据用户名对该用户的相关数据进行更新操作,用户名不可变,如果选项不更新,则保留默认值,否则更新'''

txl_disp()

name = raw_input('Select One Update By Name >>> ')

for line in txl:

if line['name'] == name:

status = False

old_age = line['age']

old_gender = line['gender']

old_tel = line['tel']

age = raw_input('Please Enter Your Age for %s >>> ' % name)

gender = raw_input('Please Enter Your Gender for %s >>> ' % name)

tel = raw_input('Please Enter Your Tel for %s >>> ' % name)

if len(age) == 0:

line['age'] = old_age

else:

line['age'] = age

if len(gender) == 0:

line['gender'] = old_gender

else:

line['gender'] = gender

if len(tel) == 0:

line['tel'] = old_tel

else:

line['tel'] = tel

break

if status:

print "Unkonw User,Try Again!"

txl_save()

2、测试结果[root@mysql01 day0330]# python v2_1.py

1.add user info

2.disp all user info

3.update user info by username

4:del user by username

5:sort user info by

0.exit program

Please select one >>> 2

name age gender tel

----------------------------

fuck 30 m 90000

kale 33 f 10093

tony 18 m 10010

zhuima 25 f 10086

max 32 f 20000

1.add user info

2.disp all user info

3.update user info by username

4:del user by username

5:sort user info by

0.exit program

Please select one >>> 3

name age gender tel

----------------------------

fuck 30 m 90000

kale 33 f 10093

tony 18 m 10010

zhuima 25 f 10086

max 32 f 20000

Select One Update By Name >>> kale

Please Enter Your Age for kale >>>

Please Enter Your Gender for kale >>>

Please Enter Your Tel for kale >>> 99999

1.add user info

2.disp all user info

3.update user info by username

4:del user by username

5:sort user info by

0.exit program

Please select one >>> 2

name age gender tel

----------------------------

fuck 30 m 90000

kale 33 f 99999

tony 18 m 10010

zhuima 25 f 10086

max 32 f 20000

1.add user info

2.disp all user info

3.update user info by username

4:del user by username

5:sort user info by

0.exit program

Please select one >>> 3

name age gender tel

----------------------------

fuck 30 m 90000

kale 33 f 99999

tony 18 m 10010

zhuima 25 f 10086

max 32 f 20000

Select One Update By Name >>> min

Unkonw User,Try Again!

1.add user info

2.disp all user info

3.update user info by username

4:del user by username

5:sort user info by

0.exit program

Please select one >>>

3、完整代码

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

完整代码#!/usr/bin/env python

#coding:utf8

#Author:zhuima

#Date:2015-03-22

#Version:0.1

#Function:display a list and add date

# 导入模块

import os

import cPickle

fname = 'contact.db'

txl = []

def menu():

'''设置munu目录,提供给用户的操作接口 '''

print '''

1.add user info

2.disp all user info

3.update user info by username

4:del user by username

5:sort user info by

0.exit program

'''

op = raw_input('Please select one >>> ')

return op

def txl_add():

'''添加用户'''

name = raw_input('Please Enter Your Name >>> ')

age = raw_input('Please Enter Your Age >>> ')

gender = raw_input('Please Enter Your Gender >>> ')

tel = raw_input('Please Enter Your Tel >>> ')

txl.append({'name':name,'age':age,'gender':gender,'tel':tel})

txl_save()

def txl_disp():

'''显示原始的txl列表 '''

if len(txl) > 0:

print "name\tage\tgender\ttel"

print '----------------------------'

for x in txl:

print "%(name)s\t%(age)s\t%(gender)s\t%(tel)s" % x

else:

print

print ">>> This is a empty file,There is no infomation! >>>"

def txl_save():

'''对数据进行写操作,写之前进行格式转换'''

s = cPickle.dumps(txl)

fp = file(fname,'w')

fp.write(s)

fp.close()

def txl_load():

'''对文件进行读取,如果文件存在的情况下 '''

if os.path.exists(fname):

fp = file(fname)

s = fp.read()

fp.close()

txl.extend(cPickle.loads(s))

def txl_update(status=True):

'''根据用户名对该用户的相关数据进行更新操作,用户名不可变,如果选项不更新,则保留默认值,否则更新'''

txl_disp()

name = raw_input('Select One Update By Name >>> ')

for line in txl:

if line['name'] == name:

status = False

old_age = line['age']

old_gender = line['gender']

old_tel = line['tel']

age = raw_input('Please Enter Your Age for %s >>> ' % name)

gender = raw_input('Please Enter Your Gender for %s >>> ' % name)

tel = raw_input('Please Enter Your Tel for %s >>> ' % name)

if len(age) == 0:

line['age'] = old_age

else:

line['age'] = age

if len(gender) == 0:

line['gender'] = old_gender

else:

line['gender'] = gender

if len(tel) == 0:

line['tel'] = old_tel

else:

line['tel'] = tel

break

if status:

print "Unkonw User,Try Again!"

txl_save()

def txl_del():

'''根据用户名进行删除用户相应的信息,并进行数据存储'''

name = raw_input('Please Enter Your Want To Delete name >>> ')

for line in txl:

if line['name'] == name:

txl.remove(line)

break

txl_save()

def txl_sort():

'''根据用户的输入对数据进行排序,用到了lambda函数 '''

op = raw_input('Order By [name | age | gender | tel ] Display >>> ')

txl.sort(key=lambda x : x[op])

txl_disp()

def txl_exit():

''' 退出程序 '''

os._exit(0)

def txl_error():

''' 当用户输出选项不在定义的选项内的时候,报错'''

print

print 'Unkonw options,Please try again!'

# 定义dict,配合函数实现switch功能

ops = {

'1':txl_add,

'2':txl_disp,

'3':txl_update,

'4':txl_del,

'5':txl_sort,

'0':txl_exit,

}

txl_load()

def main():

'''主程序 '''

while True:

op = menu()

ops.get(op,txl_error)()

if __name__ == '__main__':

main()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当然可以!以下是一个简单的 Python 通讯录的示例代码: ```python contacts = {} def add_contact(): name = input("请输入联系人姓名:") number = input("请输入联系人电话号码:") contacts[name] = number print("联系人添加成功!") def search_contact(): name = input("请输入要查找的联系人姓名:") if name in contacts: print(f"{name}的电话号码是:{contacts[name]}") else: print("未找到该联系人!") def delete_contact(): name = input("请输入要删除的联系人姓名:") if name in contacts: del contacts[name] print("联系人删除成功!") else: print("未找到该联系人!") def show_all_contacts(): if contacts: print("所有联系人:") for name, number in contacts.items(): print(f"{name}:{number}") else: print("通讯录为空!") while True: print("\n请选择操作:") print("1. 添加联系人") print("2. 查找联系人") print("3. 删除联系人") print("4. 显示所有联系人") print("5. 退出程序") choice = input("请输入选项:") if choice == '1': add_contact() elif choice == '2': search_contact() elif choice == '3': delete_contact() elif choice == '4': show_all_contacts() elif choice == '5': break else: print("无效的选项,请重新输入!") ``` 这个通讯录程序使用字典来存储联系人的姓名和电话号码。通过不同的选项,你可以添加、查找、删除联系人,以及显示所有联系人。选择退出程序会结束程序的运行。运行代码后,按照提示进行操作即可。希望对你有所帮助!

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值