day13 笔记

文件修改方式:
方式一:读全部,写全部 占内存 省硬盘
方式二:一行行读入,做完更改之后用心的文件来覆盖旧的文件 删除 重命名 省内存 废硬盘
os os.remove() os.rename()
什么是函数?相当于一种具备某种功能的工具,先定义后调用
为什么要用? 1.代码冗余,组织结构不清晰,可读性差
2.可维护性,可扩展性
如何用 先定义:
def 函数名(参数):
'''描述'''
函数体
return 1
三种形式 1.无参数的
2.有参数的
3.空函数
def add(x):
pass
def login(x):
pass
后调用:函数名类比变量名:内存地址
1.根据函数名来寻找函数的内存地址
2.根据括号内参数来执行程序内容
函数调用可以当做参数:res(fun())
函数返回值:return 是函数用来结束的标志,一旦函数运行到return位置是就会立即终止,并且返回值,默认返回值是None
1.返回none的情况 1.没有return 2.return后面没有加任何值
2.返回一个值 res=fun()#1
3.返回多个值 会用,隔开并且以元组的形式返回这些值

简易atm

import os
def login():
    '''登录模块,用户名密码存在aaa.txt中,形式为name:password'''
    tag = True
    while tag:
        username = input('请输入账号: ').strip()
        with open('aa.txt', 'r', encoding='utf-8') as f:
            for user_pwd in f:
                user, pwd = user_pwd.strip().split(':')
                if username == user:
                    while True:
                        password = input('请输入密码: ').strip()
                        if password == pwd:
                            print('登录成功!')
                            tag = False
                            break
                        else:
                            print('登录失败!')
    return 1,username
def method_txt(username,new):
    '''文件更改模块,用来修改金额,文件是db.txt,格式为name:余额'''
    with open("db.txt",mode="r",encoding="utf-8")as f1,\
        open("bb.txt",mode="w",encoding="utf-8")as f2:
        for i in f1:
            userdata =i.strip().split(":")
            if username == userdata[0]:
                f2.write('%s:%s\n' % (username, new))
            else:
                f2.write(i)
    os.remove("db.txt")
    os.rename("bb.txt","db.txt")
def add(username):
    '''存款模块,可以吧打开文件搜索相应账户的过程单独拿出来在写一个函数,但是交作业来不及了'''
    add_M = input("请输入你要存入的金额")
    with open("db.txt",mode="rt",encoding="utf-8")as f:
        for i in f:
            user_data = i.strip().split(":")
            if username == user_data[0]:
                break
    user_data[1]=int(add_M)+int(user_data[1])
    method_txt(username,user_data[1])
    print("添加成功")
def transfer(username):
    '''转账模块'''
    remove_U = input("请输入你要转入的账户")
    remove_M = input("请输入你要存入的金额")
    with open("db.txt",mode="rt",encoding="utf-8")as f:
        for i in f:
            user_data = i.strip().split(":")
            if username == user_data[0]:
                break
    user_data[1]=int(user_data[1])-int(remove_M)
    method_txt(username,user_data[1])
    with open("db.txt",mode="rt",encoding="utf-8")as f:
        for i in f:
            user_data2 = i.strip().split(":")
            if remove_U == user_data2[0]:
                break
    user_data2[1]=int(remove_M)+int(user_data2[1])
    method_txt(user_data2[0],user_data2[1])
    print("转账成功")
def withdrawal(username):
    '''提现模块'''
    remove_M = input("请输入你要提现的金额")
    with open("db.txt", mode="rt", encoding="utf-8")as f:
        for i in f:
            user_data = i.strip().split(":")
            if username == user_data[0]:
                break
    user_data[1] = int(user_data[1]) - int(remove_M)
    method_txt(username, user_data[1])
    print("提现成功")
def select(username):
    '''查询模块'''
    with open("db.txt", mode="rt", encoding="utf-8")as f:
        for i in f:
            user_data = i.strip().split(":")
            if username == user_data[0]:
                print(user_data)
def main_atm():
    '''程序主函数'''
    res = login()
    while 1 in res:
        print("请选择命令:"
              "1.充值"
              "2.转账"
              "3.提现"
              "4.查询")
        cmd = int(input("请输入操作命令"))
        if cmd ==1:
            add(res[1])
        elif cmd == 2:
            transfer(res[1])
        elif cmd == 3:
            withdrawal(res[1])
        elif cmd == 4:
            select(res[1])
        else:
            print("请输入有效命令")
main_atm()

  

posted @ 2020-03-17 22:30  TopJocker  阅读(135)  评论(0编辑  收藏  举报