python--个人信息修改程序
创建一个新的文本,account.txt,输入以下个人信息内容,
lanyinhua,lanyinhua,蓝银花,22,Model,PR,22
alex,123,华仔 Li,222,CEO,IT,1333
rain,rain,刘峰,27, Engineer ,IT ,133542453453
要求
1. 输入用户名密码,正确后登陆系统,打印
1.修改个人信息
2.打印个人信息
3.修改密码
2 .每个选项写一个方法 3. 登录时输错3次退出程序 一 :修改个人信息
def change_user_info(p_user):
"""
修改用户信息
:param p_user: 用户名
:return:
"""
user_info = STAFF_INFO[p_user]
for ind, val in enumerate(user_info):
if ind > 1:
msg = '%s, %s, %s'%(ind, COLUMN_NAME[ind], val)
print_log(msg) while True:
choice = input("输入要修改的列的序号").strip()
if choice.isdigit():
choice = int(choice)
# if choice > len(user_info) and choice < 2:
if 2 < choice < len(user_info):
print_log('输入要的序号不存在', 'error')
else:
curr_val = user_info[choice]
print_log('当前值为'+curr_val)
new_val = input('input new_value->').strip()
user_info[choice] = new_val
STAFF_INFO[p_user] = user_info
save_db()
msg = '%s修改成功'%COLUMN_NAME[choice]
print_log(msg)
break else:
print_log('输入错误,请输入2-6的数字', 'error')
二:打印个人信息
def print_user_info(p_user):
"""
打印用户信息
:param user: 用户名
:return:
"""
person_data = STAFF_INFO[p_user]
# 使用切片把username,Password过滤掉
# 相当于深拷贝,如果数据量大,会占用大量内存空间
# person_data = person_data[COLUMN_NAME.index('Name'):]
for i in range (0, COLUMN_NAME.index('Name')):
person_data.pop(0)
# print(person_data)
info = '''
------------------
Name: {}
Age : {}
Job : {}
Dept: {}
Phone: {}
------------------
''' .format(*person_data)
print_log(info)
三: 修改个人密码
def change_user_pwd(p_user):
"""
修改密码
:param p_user:
:return:
"""
while True:
pwd1 = input("输入新密码->").strip()
pwd2 = input("再输一次新密码->").strip()
if pwd1 == pwd2:
pwd_ind = COLUMN_NAME.index('Password') # 得到密码索引
STAFF_INFO[user][pwd_ind] = pwd2
save_db()
print_log('你的密码修改成功')
break
else:
print_log('密码两次输入不一致','error')
四: 个人用户登录
def login_auth(username, pwd):
"""
用户名密码验证
:param username:
:param pwd:
:return:
"""
if username in STAFF_INFO:
if pwd == STAFF_INFO[username][1]:
return True
else:
print_log('用户名与密码不一致','error')
return False
else:
print_log('用户名不存在','error')
return False
五:保存到文件
def save_db():
"""
保存到文件中
:return:
"""
f = open(DB_FILE, "r+", encoding='utf-8')
f.seek(0)
f.truncate() # 清空文件
for v_data in STAFF_INFO.values():
row_data = ','.join(v_data)
f.write('%s\n'% row_data) f.close()
全部代码
DB_FILE = 'account.txt'
COLUMN_NAME =['Username','Password','Name','Age','Job','Dept','Phone']
MENU = '''
1. 打印个人信息
2. 修改个人信息
3. 修改密码
''' # 打印信息
def print_log(msg, log_type="info"):
if log_type == 'info':
print("\033[32;1m%s\033[0m" %msg)
elif log_type == 'error':
print("\033[31;1m%s\033[0m" %msg) def load_db():
"""
载入人员信息
:return:
"""
staff_data = {}
# 构建字典空列表
#{'Username': ['username','Password','Name','Age','Job','Dept','Phone'}
# for d in COLUMN_NAME:
# staff_data[d] = [] with open(DB_FILE, 'r', encoding='utf-8') as f:
for line in f:
datas = line.split(",")
# 构建员工信息字典
datas[-1] = datas[-1].strip() # 去掉回车 staff_data[datas[0]] = datas return staff_data def print_user_info(p_user):
"""
打印用户信息
:param user: 用户名
:return:
"""
person_data = STAFF_INFO[p_user]
# 使用切片把username,Password过滤掉
# 相当于深拷贝,如果数据量大,会占用大量内存空间
# person_data = person_data[COLUMN_NAME.index('Name'):]
for i in range (0, COLUMN_NAME.index('Name')):
person_data.pop(0)
# print(person_data)
info = '''
------------------
Name: {}
Age : {}
Job : {}
Dept: {}
Phone: {}
------------------
''' .format(*person_data)
print_log(info) def save_db():
"""
保存到文件中
:return:
"""
f = open(DB_FILE, "r+", encoding='utf-8')
f.seek(0)
f.truncate() # 清空文件
for v_data in STAFF_INFO.values():
row_data = ','.join(v_data)
f.write('%s\n'% row_data) f.close() def change_user_info(p_user):
"""
修改用户信息
:param p_user: 用户名
:return:
"""
user_info = STAFF_INFO[p_user]
for ind, val in enumerate(user_info):
if ind > 1:
msg = '%s, %s, %s'%(ind, COLUMN_NAME[ind], val)
print_log(msg) while True:
choice = input("输入要修改的列的序号").strip()
if choice.isdigit():
choice = int(choice)
# if choice > len(user_info) and choice < 2:
if 2 < choice < len(user_info):
print_log('输入要的序号不存在', 'error')
else:
curr_val = user_info[choice]
print_log('当前值为'+curr_val)
new_val = input('input new_value->').strip()
user_info[choice] = new_val
STAFF_INFO[p_user] = user_info
save_db()
msg = '%s修改成功'%COLUMN_NAME[choice]
print_log(msg)
break else:
print_log('输入错误,请输入2-6的数字', 'error') def change_user_pwd(p_user):
"""
修改密码
:param p_user:
:return:
"""
while True:
pwd1 = input("输入新密码->").strip()
pwd2 = input("再输一次新密码->").strip()
if pwd1 == pwd2:
pwd_ind = COLUMN_NAME.index('Password') # 得到密码索引
STAFF_INFO[user][pwd_ind] = pwd2
save_db()
print_log('密码修改成功')
break
else:
print_log('密码两次输入不一致','error') def login_auth(username, pwd):
"""
用户名密码验证
:param username:
:param pwd:
:return:
"""
if username in STAFF_INFO:
if pwd == STAFF_INFO[username][1]:
return True
else:
print_log('用户名与密码不一致','error')
return False
else:
print_log('用户名不存在','error')
return False if __name__ == '__main__':
STAFF_INFO = load_db()
# print(STAFF_INFO)
count = 0
while count < 3:
user = input('用户名:->')
pwd = input('密码:->')
if login_auth(user, pwd):
print('welcome %s'.center(50,'-') % user)
while True: # 用户停留这一层
print(MENU)
user_choice = input(">>>").strip()
if user_choice.isdigit():
user_choice = int(user_choice)
if user_choice == 1:
# 用户登录成功打印用户信息
print_user_info(user)
elif user_choice == 2:
change_user_info(user)
elif user_choice == 3:
change_user_pwd(user)
elif user_choice == 'q':
break else:
count += 1
else:
print_log("Too many attempts.", 'error')
来源:http://www.cnblogs.com/xiao-apple36/p/8624143.html
来源:
python--个人信息修改程序的更多相关文章
- python 校招信息爬虫程序
发现一个爬虫程序,正在学习中: https://github.com/lizherui/spider_python
- python作业员工信息表程序(第四周)
作业需求: 1. 员工信息表程序,实现增删改查操作: 2. 可进行模糊查询,语法至少支持下面3种: select name,age from staff_table where age > 22 ...
- linux下面升级 Python版本并修改yum属性信息
最近需要在linux下使用python,故需要升级一下python版本,上网查询了一下相关资料,更新了一下linux下面的python环境,记录如下: linux下面升级 Python版本并修改yum ...
- [python]用profile协助程序性能优化
转自:http://blog.csdn.net/gzlaiyonghao/article/details/1483728 本文最初发表于恋花蝶的博客http://blog.csdn.net/lanph ...
- 使用Python实现Hadoop MapReduce程序
转自:使用Python实现Hadoop MapReduce程序 英文原文:Writing an Hadoop MapReduce Program in Python 根据上面两篇文章,下面是我在自己的 ...
- python学习1:程序元素和基本使用方法(跟随mooc学习)
程序元素: 注释,缩进,变量,常量,表达式 输入,输出,分支,循环 示例程序,温度转换程序: #TempConvert.pyval=input("请输入带温度表示符号发温度值(例如:32C) ...
- Python编写守护进程程序
Python编写守护进程程序思路 1. fork子进程,父进程退出通常,我们执行服务端程序的时候都会通过终端连接到服务器,成功连接后会加载shell环境,终端和shell都是进程,shell进程是终端 ...
- 【转】Python用数据说明程序员需要掌握的技能
[转]Python用数据说明程序员需要掌握的技能 https://blog.csdn.net/HuangZhang_123/article/details/80497951 当下是一个大数据的时代,各 ...
- Python - 使用Setuptools进行程序打包
1- Setuptools简介 通过Setuptools可以更方便的创建和发布Python包,特别是那些对其它包具有依赖性的状况: Python打包用户指南(Python Packaging User ...
随机推荐
- logback 指定每隔一段时间创建一个日志文件
我使用的logback版本是1.2.3 目前logback支持根据时间来配置产生日志文件,但是只支持每周,每天,每个小时,每分钟等创建一个文件,配置如下: <appender name=&quo ...
- android 开发设计模式---Strategy模式
假设我们要出去旅游,而去旅游出行的方式有很多,有步行,有坐火车,有坐飞机等等.而如果不使用任何模式,我们的代码可能就是这样子的. 12345678910111213141516171819202122 ...
- css3 box-flex
应用地址:http://www.jb51.net/css/467291.html box-flex是css3新添加的盒子模型属性,它的出现打破了我们经常使用的浮动布局,实现垂直等高.水平均分.按比例划 ...
- javascript----数组的方法
1---join() //1----->join()方法将数组中所有元素都转化<<字符串>> //并连接在一起 //array.join()方法是string.split ...
- Solr中在使用过程中遇到的"与"和"或"的问题
在进行全文检索的过程中,如果使用三星和手机,两个一块进行搜索的时候,关于三星的会被搜索出来,关于手机的信息也会被搜索出来,然后,需要将一些配置文件进行配置, <!-- DEPRECATED: T ...
- 高级shell 脚本
1.函数 函数是一个脚本代码块,你可以为其命名并在代码中任何位置重用.要在脚本中使用该代码块时,只要使用所起的函数名就行了(这个过程称为调用函数).本节将会介绍如何在shell脚本中创建和使用函数 创 ...
- Python模块1
序列化模块: 将原本的字典.列表等内容转换成一个字符串的过程就叫做序列化. 序列化的目的 1.以某种存储形式使自定义对象持久化: 2.将对象从一个地方传递到另一个地方. 3.使程序更具维护性. jso ...
- c#操作json的两种方式
总结一下C#操作json的两种方式,都是将对象和json格式相转. 1.JavaScriptSerializer,继承自System.Web.Script.Serialization private ...
- Eclipse使用Maven,创建项目出现:Could not calculate build plan: Plugin org.apache.maven.plugins:maven-resour
使用maven创建简单的项目时候经常会遇到 Could not calculate build plan: Plugin org.apache.maven.plugins:maven-resource ...
- redis 执行操作时提示(error) NOAUTH Authentication required.
(error) NOAUTH Authentication required. 出现认证问题,设置了认证密码,输入密码即可 127.0.0.1:6379> auth 123456