创建一个新的文本,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--个人信息修改程序的更多相关文章

  1. python 校招信息爬虫程序

    发现一个爬虫程序,正在学习中: https://github.com/lizherui/spider_python

  2. python作业员工信息表程序(第四周)

    作业需求: 1. 员工信息表程序,实现增删改查操作: 2. 可进行模糊查询,语法至少支持下面3种: select name,age from staff_table where age > 22 ...

  3. linux下面升级 Python版本并修改yum属性信息

    最近需要在linux下使用python,故需要升级一下python版本,上网查询了一下相关资料,更新了一下linux下面的python环境,记录如下: linux下面升级 Python版本并修改yum ...

  4. [python]用profile协助程序性能优化

    转自:http://blog.csdn.net/gzlaiyonghao/article/details/1483728 本文最初发表于恋花蝶的博客http://blog.csdn.net/lanph ...

  5. 使用Python实现Hadoop MapReduce程序

    转自:使用Python实现Hadoop MapReduce程序 英文原文:Writing an Hadoop MapReduce Program in Python 根据上面两篇文章,下面是我在自己的 ...

  6. python学习1:程序元素和基本使用方法(跟随mooc学习)

    程序元素: 注释,缩进,变量,常量,表达式 输入,输出,分支,循环 示例程序,温度转换程序: #TempConvert.pyval=input("请输入带温度表示符号发温度值(例如:32C) ...

  7. Python编写守护进程程序

    Python编写守护进程程序思路 1. fork子进程,父进程退出通常,我们执行服务端程序的时候都会通过终端连接到服务器,成功连接后会加载shell环境,终端和shell都是进程,shell进程是终端 ...

  8. 【转】Python用数据说明程序员需要掌握的技能

    [转]Python用数据说明程序员需要掌握的技能 https://blog.csdn.net/HuangZhang_123/article/details/80497951 当下是一个大数据的时代,各 ...

  9. Python - 使用Setuptools进行程序打包

    1- Setuptools简介 通过Setuptools可以更方便的创建和发布Python包,特别是那些对其它包具有依赖性的状况: Python打包用户指南(Python Packaging User ...

随机推荐

  1. get_class __class__ get_called_class 分析记录

    首先看代码: class A { use T { T::say as aTsay; } public function say() { echo 'a__class__:' . __CLASS__ . ...

  2. padding和margin

    padding (内边距) 语法: (1)padding-left:10px; 左内边距 (2)padding-right:10px; 右内边距 (3)padding-top:10px; 上内边距 ( ...

  3. 认识.net

    .NET多指NET Framework,Visual Studio.NET及其开发的应用程序.NET Framework是一个开发和执行环境,允许不同的程序语言和库无缝结合基于Window的应用程序. ...

  4. OxyPlot Controller OxyPlot控制器

    Default input bindings The default input bindings in the PlotController are: Action Gesture Pan* Rig ...

  5. laravel blog edit

    模板复制create的模板 主要修改的地方 <form action="{{ url('admin/article/'.$article->id) }}" method ...

  6. Java面试题整理---网络篇

    1.BIO.AIO和NIO的概念及区别? 2.什么是长连接和短连接? 3.http1.0.http1.1和http2.0的区别? 4.https和http的区别?   5.https的工作原理?   ...

  7. python中sorted()和set()去重,排序

    前言 在看一个聊天机器人的神经网络模型训练前准备训练数据,需要对训练材料做处理(转化成张量)需要先提炼词干,然后对词干做去重和排序 words = sorted(list(set(words))) 对 ...

  8. 中文编码错误,Error output could not be translated from the native locale to UTF-8.

    假如使用http访问仓库,用户配置的pre-commit钩子里面如果有中文,可能会出现"Error output could not be translated from the nativ ...

  9. python的对象 变量

    对象 所有的数据类型都是对象 字符串 数字:整数.数字 列表.字典 函数.类.模块.方法 print(type(20)) # 查看对象的数据类型 python整型: int  浮点型 :float 精 ...

  10. decimal(19,6)什么意思

    decimal(19,6)什么意思 数字长度19位,精确到小数点后6位例如0.123456 mysql中varchar(50)最多能存多少个汉字 首先要确定mysql版本4.0版本以下,varchar ...