当前位置: 首页 > news >正文

python通讯录的算法_python写一个通讯录之step by step

编写过程:

第一步:手动代码堆积

第二步:函数复用

第三步:数据持久化之数据保存

第四步:数据持久化之数据读取

第五步:数据持久化之数据删除

第六步:数据持久化之数据更新

初稿—》数据持久化之保存数据—–》数据持久化之加载数据—–》数据持久化之删除数据—-》数据持久化之检索数据—》数据持久化之数据更新

本演示不为堆积代码,仅为梳理一个编码的概念过程~希望对你有所帮助

第一步:手工代码堆积#!/usr/bin/env python

#coding:utf8

#Author:zhuima

#Email:993182876@qq.com

#Date:2015-03-23

#Function:Create the address book step by step

#Version:0.1

#Initialized variables

msg = '''

1. Add information

2. Display information

0. Exit

'''

#txl content like this tex = [['name','gender','telphone'],['name','gender','telphone']]

txl = []

#define Add

#define display

while True:

print msg

op = raw_input('Please Select >>> ')

if op == '1':

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

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

tel = raw_input('Please Enter Your Telphone Number >>> ')

txl.append([name,gender,tel])

elif op == '2':

for list in txl:

for info in list:

print info,

print ''

elif op == '0':

break

else:

print ''

print 'Unkonw Choose,Please Select again!'

print ''

用到的python功能:while循环:实现循环输入

if判断:判断输入内容并进行调用相关函数

break:跳槽循环

列表:在当前会话中保存数据

三引号的使用

测试结果:

Note:

print打印时,不换行使用’,’来实现,但是针对嵌套列表来说,很可能出现下面的情况,这个时候在跳出当前循环print空白行即可。

第二步:函数复用

如此我们也能实现我们想要的功能,但是总感觉有点别扭,要不要来点高大上的,来来来,叫来函数来一发~

代码如下:#!/usr/bin/env python

#coding:utf8

#Author:zhuima

#Email:993182876@qq.com

#Date:2015-03-23

#Function:Create the address book step by step

#

#Initialized variables

msg = '''

1. Add information

2. Display information

0. Exit

'''

#txl content like this tex = [['name','gender','telphone'],['name','gender','telphone']]

txl = []

#define Add

def Add():

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

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

tel = raw_input('Please Enter Your Telphone Number >>> ')

txl.append([name,gender,tel])

#define display

def Disp():

for list in txl:

for info in list:

print info,

while True:

print msg

op = raw_input('Please Select >>> ')

if op == '1':

Add()

elif op == '2':

Disp()

elif op == '0':

break

else:

print ''

print 'Unkonw Choose,Please Select again!'

print ''

引入新功能:

python函数功能

测试结果:

测试结果其实和第一步是一样的,没有什么区别~

第三步:数据持久化之保存数据

这里我们用函数来实现了格式化代码,复用等功能,但是我关闭了当前会话,所有的东西又都没了,那这就是闹玩呗,没有实际意义啊~

所以这里我们要引入数据持久化的概念~(这里仅讨论文件保存形式的数据持久化,不涉及数据库相关)

引入功能:

字符串和列表转换,将列表转成字符串,然后写入文件

代码如下:

#define save

def Save():

temp = []

for info in txl:

temp.append(','.join(info))

s = '\n'.join(temp)

fp = file('txl.db','w')

fp.write(s)

fp.close()

while True:

print msg

op = raw_input('Please Select >>> ')

if op == '1':

Add()

Save()

....

测试效果:

第四步:数据持久化之数据读取

引入功能:

字符串和列表转换,将字符串传换成列表,然后追加到列表中

代码如下:#define load

def Load():

fp = file('txl.db','r')

content = fp.read()

temp = content.split('\n')

for info in temp:

txl.append(info.split(','))

Load()

while True:

....

测试效果:

第五步:数据持久化之删除数据

引入功能:

检索账号,找到账号对应的子列表所在的索引,进行删除操作

如何在嵌套列表中找到value对应的索引?

代码片段如下:....

msg = '''

1. Add information

2. Display information

3. Delete by name

0. Exit

'''

#define del

def Del():

name = raw_input('Please Enter which one name you want to delete >>> ')

for sub in txl:

if sub[0] == name:

txl.remove(sub)

break

Load()

while True:

print msg

op = raw_input('Please Select >>> ')

if op == '1':

Add()

Save()

elif op == '2':

Disp()

elif op == '3':

Del()

Save()

....

测试效果:

第六步:数据持久化之更新数据

引入功能:

和删除数据同理,检索账号,找到账号对应的子列表所在的索引,进行相关value的更新操作

代码片段如下:

#Initialized variables

msg = '''

1. Add information

2. Display information

3. Delete by name

4. Update by name

0. Exit

'''

info = '''

001. name

002. gender

003. tel

004. all

'''

#define change

def Change():

xingming = raw_input('Please Enter which one name you want to change >>> ')

print info

op = raw_input('Please select which one you want to change: ')

for sub in txl:

if sub[0] == xingming:

if op == '001':

name = raw_input('Please Enter Your name: ')

txl[txl.index(sub)][0] = name

elif op == '002':

gender= raw_input('Please Enter Your gender: ')

txl[txl.index(sub)][1] = gender

elif op == '003':

tel = raw_input('Please Enter Your tel: ')

txl[txl.index(sub)][2] = tel

else:

name = raw_input('Please Enter Your name: ')

gender= raw_input('Please Enter Your gender: ')

tel = raw_input('Please Enter Your tel: ')

txl[txl.index(sub)] = [name,gender,tel]

break

Load()

while True:

print msg

op = raw_input('Please Select >>> ')

if op == '1':

Add()

Save()

elif op == '2':

Disp()

elif op == '3':

Del()

Save()

elif op == '4':

Change()

Save()

....

测试效果:

整体思路:

完成一个通讯录的增删查改,局限于列表,完善自己的组建代码的一个思路,搭建起一套框架。

你要思考的问题:初始化数据

如何增加数据

数据如何写入到文件

如何从文件中读取数据到列表

如何删除数据并同步到文件

如何更新数据并同步到文件

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

#coding:utf8

#Author:zhuima

#Email:993182876@qq.com

#Date:2015-03-23

#Function:Create the address book step by step

#

#Initialized variables

msg = '''

1. Add information

2. Display information

3. Delete by name

4. Update by name

0. Exit

'''

info = '''

001. name

002. gender

003. tel

004. all

'''

#txl content like this tex = [['name','gender','telphone'],['name','gender','telphone']]

txl = []

#define Add

def Add():

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

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

tel = raw_input('Please Enter Your Telphone Number >>> ')

txl.append([name,gender,tel])

#define display

def Disp():

for list in txl:

for info in list:

print info,

print ''

#define save

def Save():

temp = []

for info in txl:

temp.append(','.join(info))

s = '\n'.join(temp)

fp = file('txl.db','w')

fp.write(s+'\n')

fp.close()

#define load

def Load():

import os

if  os.path.exists('txl.db'):

fp = file('txl.db','r')

content = fp.read()

fp.close()

temp = content.split('\n')

for info in temp:

txl.append(info.split(','))

else:

fp = file('txl.db','w')

fp.close()

#define del

def Del():

name = raw_input('Please Enter which one name you want to delete >>> ')

for sub in txl:

if sub[0] == name:

txl.remove(sub)

break

#define change

def Change():

xingming = raw_input('Please Enter which one name you want to change >>> ')

print info

op = raw_input('Please select which one you want to change: ')

for sub in txl:

if sub[0] == xingming:

if op == '001':

name = raw_input('Please Enter Your name: ')

txl[txl.index(sub)][0] = name

elif op == '002':

gender= raw_input('Please Enter Your gender: ')

txl[txl.index(sub)][1] = gender

elif op == '003':

tel = raw_input('Please Enter Your tel: ')

txl[txl.index(sub)][2] = tel

else:

name = raw_input('Please Enter Your name: ')

gender= raw_input('Please Enter Your gender: ')

tel = raw_input('Please Enter Your tel: ')

txl[txl.index(sub)] = [name,gender,tel]

break

Load()

while True:

print msg

op = raw_input('Please Select >>> ')

if op == '1':

Add()

Save()

elif op == '2':

Disp()

elif op == '3':

Del()

Save()

elif op == '4':

Change()

Save()

elif op == '0':

break

else:

print ''

print 'Unkonw Choose,Please Select again!'

print ''

作者:追马

相关文章:

  • java 及时释放内存_Java内存优化和性能优化的几点建议
  • python tell函数_十二 —— python的内置函数
  • go java对比_Java微服务 vs Go微服务,究竟谁更强?
  • 万兆单模模块_华为万兆单模模块 OEM光模块 全面兼容OSX010000
  • mysql查询重复记录中最新的一条_MySQL查询重复数据(删除重复数据保留id最小的一条为唯一数据)...
  • yum mysql centos7_Centos7 yum安装 mysql
  • mysql隔离级别命令_MySQl事务隔离级别(命令及简单理解)
  • mysql更改隔离级别_MySQL修改事务隔离级别的暗门
  • mysql alter user语法_MySQL 最基本的语法/语句
  • percona mysql 同步_Percona MySQL5.6 半同步复制
  • mysql-FONT备份数据库_mysql-FONT备份数据库
  • mysql 批量替换表前缀_如何批量修改mysql的表前缀名称
  • mysql datadir 目录权限不够_MySQL数据目录更改及相关问题解决方案
  • windows mysql开启慢查询日志_mysql开启慢查询日志的方法
  • jsp数据添加乱码mysql_JSP插入MySQL数据库中文乱码问题解决
  • [NodeJS] 关于Buffer
  • [Vue CLI 3] 配置解析之 css.extract
  • 《微软的软件测试之道》成书始末、出版宣告、补充致谢名单及相关信息
  • Angular数据绑定机制
  • DataBase in Android
  • k8s 面向应用开发者的基础命令
  • mockjs让前端开发独立于后端
  • python docx文档转html页面
  • Python3爬取英雄联盟英雄皮肤大图
  • Python代码面试必读 - Data Structures and Algorithms in Python
  • Sass Day-01
  • Synchronized 关键字使用、底层原理、JDK1.6 之后的底层优化以及 和ReenTrantLock 的对比...
  • tweak 支持第三方库
  • 纯 javascript 半自动式下滑一定高度,导航栏固定
  • 入职第二天:使用koa搭建node server是种怎样的体验
  • 掌握面试——弹出框的实现(一道题中包含布局/js设计模式)
  • 走向全栈之MongoDB的使用
  • ​LeetCode解法汇总2670. 找出不同元素数目差数组
  • # Swust 12th acm 邀请赛# [ K ] 三角形判定 [题解]
  • (7)STL算法之交换赋值
  • (C)一些题4
  • (附源码)计算机毕业设计ssm高校《大学语文》课程作业在线管理系统
  • (转)四层和七层负载均衡的区别
  • ./include/caffe/util/cudnn.hpp: In function ‘const char* cudnnGetErrorString(cudnnStatus_t)’: ./incl
  • .net 7 上传文件踩坑
  • .NET Framework 服务实现监控可观测性最佳实践
  • .NET Standard 支持的 .NET Framework 和 .NET Core
  • .Net Web项目创建比较不错的参考文章
  • .NET 药厂业务系统 CPU爆高分析
  • .NET:自动将请求参数绑定到ASPX、ASHX和MVC(菜鸟必看)
  • .NET建议使用的大小写命名原则
  • .考试倒计时43天!来提分啦!
  • /*在DataTable中更新、删除数据*/
  • @RequestMapping-占位符映射
  • [ 转载 ] SharePoint 资料
  • [23] 4K4D: Real-Time 4D View Synthesis at 4K Resolution
  • [51nod1610]路径计数
  • [8481302]博弈论 斯坦福game theory stanford week 1
  • [AIGC] 开源流程引擎哪个好,如何选型?
  • [Android 数据通信] android cmwap接入点