def check(account,pwd):
f=open('兼职.txt','r',encoding='utf-8')
for line in f:
if account and pwd in line:
return True
else:
return False
f.close()
def save_file(accounts):
f=open('兼职.txt','w',encoding='utf-8')
f.seek(0)
f.truncate()
for k in accounts:
raw=','.join(accounts[k])
f.write("%s\n"%raw)
f.flush()
f.close()
def personinfo(account,accounts):
info='''
---------------------
Name %s
Age %s
Job %s
Filed %s
--------------------
'''%(accounts[account][0],
accounts[account][2],
accounts[account][3],
accounts[account][4],
)
print(info)
def change(account,accounts):
print(accounts[account])
info='''
--------------------
1 Name
2 Age
3 Job
4 Filed
--------------------
'''
print(info)
num=int(input())
if num<=4:
if num==1:
print('the old value:%s'%accounts[account][num-1])
new_value=input('the new value:')
accounts[account][num-1]=new_value
print(accounts[account])
save_file(accounts)
else:
print('the old value:%s'%accounts[account][num])
new_value=input('the new value:')
accounts[account][num]=new_value
print(accounts[account])
save_file(accounts)
else:
print('No result')
def main():
f=open("兼职.txt",'r',encoding='utf-8')
info = """
1, 打印个人信息
2,修改个人信息
3,修改密码
"""
accounts={}
n=0
for line in f:
line=line.strip()
items=line.split(",")
accounts[items[0]]=items
f.close()
IsUser=True
while True:
account=input('account:')
pwd=input('password:')
IsUser=check(account, pwd)
if IsUser:
while True:
print(info)
num = int(input())
if num==1:
personinfo(account,accounts)
if num==2:
change(account, accounts)
else:
if n<=3:
n+=1
print(n)
print('无此人信息')
else:
print('请下次在尝试')
break
if '__main__'==__name__:
main()
其他对比代码
def print_personal_info(account_dic,username):
"""
print user info
:param account_dic: all account's data
:param username: username
:return: None
"""
person_data = account_dic[username]
info = '''
------------------
Name: %s
Age : %s
Job : %s
Dept: %s
Phone: %s
------------------
''' %(person_data[1],
person_data[2],
person_data[3],
person_data[4],
person_data[5],
)
print(info)
def save_back_to_file(account_dic):
"""
把account dic 转成字符串格式 ,写回文件
:param account_dic:
:return:
"""
f.seek(0) #回到文件头
f.truncate() #清空原文件
for k in account_dic:
row = ",".join(account_dic[k])
f.write("%s\n"%row)
f.flush()
def change_personal_info(account_dic,username):
"""
change user info ,思路如下
1. 把这个人的每个信息打印出来, 让其选择改哪个字段,用户选择了的数字,正好是字段的索引,这样直接 把字段找出来改掉就可以了
2. 改完后,还要把这个新数据重新写回到account.txt,由于改完后的新数据 是dict类型,还需把dict转成字符串后,再写回硬盘
:param account_dic: all account's data
:param username: username
:return: None
"""
person_data = account_dic[username]
print("person data:",person_data)
column_names = ['Username','Password','Name','Age','Job','Dept','Phone']
for index,k in enumerate(person_data):
if index >1: #0 is username and 1 is password
print("%s. %s: %s" %( index, column_names[index],k) )
choice = input("[select column id to change]:").strip()
if choice.isdigit():
choice = int(choice)
if choice > 0 and choice < len(person_data): #index不能超出列表长度边界
column_data = person_data[choice] #拿到要修改的数据
print("current value>:",column_data)
new_val = input("new value>:").strip()
if new_val:#不为空
person_data[choice] = new_val
print(person_data)
save_back_to_file(account_dic) #改完写回文件
else:
print("不能为空。。。")
account_file = "account.txt"
f = open(account_file,"r+")
raw_data = f.readlines()
accounts = {}
#把账户数据从文件里读书来,变成dict,这样后面就好查询了
for line in raw_data:
line = line.strip()
if not line.startswith("#"):
items = line.split(",")
accounts[items[0]] = items
menu = '''
1. 打印个人信息
2. 修改个人信息
3. 修改密码
'''
count = 0
while count <3:
username = input("Username:").strip()
password = input("Password:").strip()
if username in accounts:
if password == accounts[username][1]: #
print("welcome %s ".center(50,'-') % username )
while True: #使用户可以一直停留在这一层
print(menu)
user_choice = input(">>>").strip()
if user_choice.isdigit():
user_choice = int(user_choice)
if user_choice == 1:
print_personal_info(accounts,username)
elif user_choice == 2:
change_personal_info(accounts,username)
elif user_choice == 'q':
exit("bye.")
else:
print("Wrong username or password!")
else:
print("Username does not exist.")
count += 1
else:
print("Too many attempts.")
来源:https://www.cnblogs.com/Kerryworld/p/11075263.html