1、编写文件修改功能,调用函数时,传入三个参数(修改的文件路径,要修改的内容,修改后的内容)既可完成文件的修改
def modify(file_path, old_cont, new_cont):
import os
with open(file_path, mode='r', encoding='utf-8') as read_f, \
open(f".{file_path}.swap", mode='w', encoding='utf-8') as write_f:
for line in read_f.readlines():
data = line.replace(old_cont, new_cont)
write_f.write(data)
os.remove(file_path)
os.rename(f".{file_path}.swap",file_path)
modify("day12.txt",'帅哥','ugly')
2、编写tail工具
def tail(file_path):
import time
with open(file_path,mode='rb') as f:
f.seek(0,2)
while True:
line = f.read()
if len(line) == 0:
time.sleep(1)
else:
print(line.decode('utf-8'))
3、编写登录功能
文件内账户密码存的格式为 yang:123
def login():
username = input("请输入您的用户名:").strip()
password = input("请输入您的密码:").strip()
with open('day12.txt',mode='r',encoding='utf-8') as f:
for line in f.readlines():
list = line.strip('\n').split(':')
if username == list[0]:
if password == list[1]:
print("登录成功")
break
else:
print("密码错误")
break
else:
print("账号不存在")
4、编写注册功能
def register():
tag = True
while tag:
username = input("请输入你的注册账号:").strip()
password = input("请输入你的密码:").strip()
with open('day12.txt',mode='r',encoding='utf-8') as f:
for line in f.readlines():
list = line.strip('\n').split(':')
if list[0] == username:
print("用户名已经存在")
break
else:
with open('day12.txt',mode='a',encoding='utf-8') as f:
f.write(f'{username}:{password}\n')
print("注册成功")
register()
5、编写用户认证功能
选做题:编写ATM程序实现下述功能,数据来源于文件db.txt
1、充值功能:用户输入充值钱数,db.txt中该账号钱数完成修改
2、转账功能:用户A向用户B转账1000元,db.txt中完成用户A账号减钱,用户B账号加钱
3、提现功能:用户输入提现金额,db.txt中该账号钱数减少
4、查询余额功能:输入账号查询余额
选做题中的选做题:登录功能
用户登录成功后,内存中记录下该状态,上述功能以当前登录状态为准,必须先登录才能操作
def modify(username,m,old_cont = '0', new_cont = '0'):
import os
with open('day12.txt', mode='r', encoding='utf-8') as read_f, \
open('.day12.txt.swap', mode='w', encoding='utf-8') as write_f:
lines = read_f.readlines()
n = 0
for line in lines:
# list = line.strip('\n').split(':')
if username in line:
line = line.replace(old_cont,new_cont)
write_f.write(line)
n += 1
break
write_f.write(line)
n += 1
for i in range(n, len(lines)):
write_f.write(lines[i])
os.remove('day12.txt')
os.rename(".day12.txt.swap","day12.txt")
if m == '1':
return "充值成功"
else:
return "提现成功"
def trans(username,transto,gold):
with open('day12.txt', 'r', encoding='utf-8') as f:
for line in f.readlines():
list = line.strip('\n').split(':')
if list[0] == username:
old = list[2]
new = str(int(list[2]) - int(gold))
res1 = modify(username, '3', old, new)
with open('day12.txt', 'r', encoding='utf-8') as f:
for line in f.readlines():
list = line.strip('\n').split(':')
if list[0] == transto:
old = list[2]
new = str(int(list[2]) + int(gold))
res2 = modify(transto,'1',old,new)
if res1 == '提现成功' and res2 == '充值成功':
return "转账成功"
else:
return "转账失败"
def login():
while True:
username = input("请输入您的用户名:").strip()
password = input("请输入您的密码:").strip()
with open('day12.txt',mode='r',encoding='utf-8') as f:
for line in f.readlines():
list = line.strip('\n').split(':')
if username == list[0]:
if password == list[1]:
print("登录成功")
return username
break
else:
print("密码错误")
break
else:
print("账号不存在")
def atm():
username = login()
while username:
print(f"""欢迎{username}使用ATM机,输入指令可完成相应操作:
1.充值 2.转账 3.提现 4.查询 5.退出""")
order = input("请输入您的指令:").strip()
if order == '1':
gold = input("请输入您充值的金额:").strip()
with open('day12.txt','r',encoding='utf-8') as f:
for line in f.readlines():
list = line.strip('\n').split(':')
if list[0] == username:
old = list[2]
new = str(int(list[2])+int(gold))
res = modify(username, order, old, new)
print(res)
elif order == '2':
transto = input("请输入您要转账的用户名:").strip()
gold = input("请输入转账的金额:").strip()
res = trans(username,transto,gold)
print(res)
elif order == '3':
gold = input("请输入您提现的金额:").strip()
with open('day12.txt', 'r', encoding='utf-8') as f:
for line in f.readlines():
list = line.strip('\n').split(':')
if list[0] == username:
old = list[2]
new = str(int(list[2]) - int(gold))
res = modify(username, order, old, new)
print(res)
elif order == '4':
with open('day12.txt',mode='r',encoding='utf-8') as f:
for line in f.readlines():
list = line.strip('\n').split(':')
if username == list[0]:
print(f"您的余额为{list[2]}元")
elif order == '5':
break
else:
print("未知的指令")
atm()