zoukankan      html  css  js  c++  java
  • 函数对象、函数嵌套、闭包函数 练习

    # 1、函数对象优化多分支if的代码练熟
    '''
    func_dic={
    '0':'drop_out(退出)',
    '1':'login(登录)',
    '2':'transfer(转账)',
    '3':'check_banlance(查询余额)',
    '4':'withdraw(提现)',
    '5':'register(注册)'
    }
    while True:
    print("""
    0 退出
    1 登录
    2 转账
    3 查询余额
    4 提现
    5 注册
    """)
    cmd=input('请输入命令编号(纯数字):').strip()
    if not cmd.isdigit():
    print('必须输入纯数字!')
    continue
    elif cmd == '0':
    break
    elif cmd in func_dic:
    print(func_dic[cmd])
    else:
    print('输入的指令不存在!')
    '''
    '''
    def login():
    print('登录')

    def transfer():
    print('转账')

    def check_banlance():
    print('查询余额')

    def withdraw():
    print('提现')

    def register():
    print('注册')
    func_dic = {
    '0': ['退出', None],
    '1': ['登录', login],
    '2': ['转账', transfer],
    '3': ['查询余额', check_banlance],
    '4': ['提现', withdraw],
    '5': ['注册', register]
    }
    while True:
    for k in func_dic:
    print(k,func_dic[k][0])
    cmd=input('请输入命令编号(纯数字):').strip()
    if not cmd.isdigit():
    print('必须输入纯数字!')
    continue
    elif cmd == '0':
    break
    elif cmd in func_dic:
    func_dic[cmd][1]()
    else:
    print('输入的指令不存在!')
    '''
    '''
    def login():
    print('登录')

    def transfer():
    print('转账')

    def check_banlance():
    print('查询余额')

    def withdraw():
    print('提现')

    def register():
    print('注册')
    func_dic = {
    '0': ['退出', exit],
    '1': ['登录', login],
    '2': ['转账', transfer],
    '3': ['查询余额', check_banlance],
    '4': ['提现', withdraw],
    '5': ['注册', register]
    }
    while True:
    for k in func_dic:
    print(k,func_dic[k][0])
    cmd=input('请输入命令编号(纯数字):').strip()
    if not cmd.isdigit():
    print('必须输入纯数字!')
    continue
    elif cmd in func_dic:
    func_dic[cmd][1]()
    else:
    print('输入的指令不存在!')
    '''
    # 2、编写计数器功能,要求调用一次在原有的基础上加一
    # 温馨提示:
    # I: 需要用到的知识点:闭包函数 + nonlocal
    # II: 核心功能如下:
    #
    # def counter():
    # x += 1
    # return x
    #
    # 要求最终效果类似
    # print(couter()) # 1
    # print(couter()) # 2
    # print(couter()) # 3
    # print(couter()) # 4
    # print(couter()) # 5
    '''
    l = ['0']
    with open('count.txt', 'rt', encoding='utf-8') as f:
    for line in f:
    l[0]=str(line)
    def counts():
    x = int(l[0])
    def counter():
    nonlocal x
    x += 1
    return x
    counter()
    l[0]=str(x)
    with open('count.txt', 'wt', encoding='utf-8') as f1:
    for line in l:
    f1.write(line)
    print(l[0])

    counts()
    counts()
    counts()
    '''
    # ====================周末作业====================
    # 编写ATM程序实现下述功能,数据来源于文件db.txt
    # 0、注册功能:用户输入账号名、密码、金额,按照固定的格式存入文件db.txt
    '''
    def user():
    username = input('请输入用户名称: ').strip()
    password = input('请输入用户密码: ').strip()
    r_password = input('请确认用户密码: ').strip()
    if password == r_password:
    print(f'[{username}]注册成功')
    count=input('请输入存款金额:')
    with open('db.txt',mode='at',encoding='utf-8') as f1:
    f1.write('{}:{}:{}'.format(username,password,count))
    else:
    print('注册失败!')

    user()
    '''
    # 1、登录功能:用户名不存在,要求必须先注册,用户名存在&输错三次锁定,登录成功后记录下登录状态(提示:可以使用全局变量来记录)
    '''
    dic={}
    with open('db.txt', mode='rt', encoding='utf-8') as f2:
    for line in f2:
    user,word=line.strip().split(':')
    dic[user]=word
    print(dic)
    login_user=None
    def users():
    username = input('请输入用户名称: ').strip()
    if username in dic:
    password = input('请输入用户密码: ').strip()
    if password == dic[username]:
    print('登录成功!')
    global login_user
    login_user = username
    else:
    print('用户名不存在,请先注册')
    count = 0
    while count < 3:
    usernames = input('请输入用户名称: ').strip()
    password = input('请输入用户密码: ').strip()
    r_password = input('请确认用户密码: ').strip()
    if password == r_password:
    print(f'[{usernames}]注册成功')
    count = input('请输入存款金额:')
    with open('db.txt', mode='at', encoding='utf-8') as f1:
    f1.write('{}:{}:{}'.format(usernames, password, count))
    else:
    print('注册失败!')
    count += 1
    continue

    users()
    '''
    # 下述操作,要求登录后才能操作
    # 1、充值功能:用户输入充值钱数,db.txt中该账号钱数完成修改
    # 2、转账功能:用户A向用户B转账1000元,db.txt中完成用户A账号减钱,用户B账号加钱
    # 3、提现功能:用户输入提现金额,db.txt中该账号钱数减少
    # 4、查询余额功能:输入账号查询余额
    dic={}
    with open('dbs.txt', mode='rt', encoding='utf-8') as f2:
    for line in f2:
    user,word=line.strip().split(':')
    dic[user]=word
    print(dic)
    login_user=None
    def users():
    username = input('请输入用户名称: ').strip()
    if username in dic:
    password = input('请输入用户密码: ').strip()
    if password == dic[username]:
    print('登录成功!')
    global login_user
    login_user = username
    while True:
    dics = {}
    with open('db.txt', mode='rt', encoding='utf-8') as f3:
    for line2 in f3:
    user2, money = line2.strip().split(':')
    dics[user2] = int(money)
    def transfer():
    print('转账')
    while True:
    usernameb = input('请输入对方账户名称:')

    if usernameb == username:
    print('您不能给自己转账')
    continue
    if usernameb not in dics:
    print('账户不存在')
    continue
    else:
    outcount = input('请输入转账金额:')
    outcount = int(outcount)
    user3 = username
    dics[user3] -= outcount
    user4 = usernameb
    dics[user4] += outcount
    with open('db.txt', mode='wt', encoding='utf-8') as f4:
    for user2, money in dics.items():
    f4.write(f'{user2}:{money} ')
    break
    def check_banlance():
    print('查询余额')
    user2 = username
    money = dics[user2]
    print(money)
    def withdraw():
    print('提现')
    incount = input('请输入提现金额:').strip()
    incount = int(incount)
    user2 = username
    dics[user2] -= incount
    with open('db.txt', mode='wt', encoding='utf-8') as f6:
    for user2, money in dics.items():
    f6.write(f'{user2}:{money} ')
    def recharge():
    print('充值')
    incount = input('请输入充值金额:').strip()
    incount = int(incount)
    user2 = username
    dics[user2] += incount
    with open('db.txt', mode='wt', encoding='utf-8') as f5:
    for user2, money in dics.items():
    f5.write(f'{user2}:{money} ')
    while True:
    func_dic = {
    '1': ['退出', None],
    '2': ['转账', transfer],
    '3': ['查询余额', check_banlance],
    '4': ['提现', withdraw],
    '5': ['充值', recharge]
    }
    for k in func_dic:
    print(k, func_dic[k][0])
    cmd = input('请输入命令编号(纯数字):').strip()
    if not cmd.isdigit():
    print('必须输入纯数字!')
    continue
    elif cmd == '1':
    break
    elif cmd in func_dic:
    func_dic[cmd][1]()
    else:
    print('输入的指令不存在!')
    else:
    print('用户名不存在,请先注册')
    count = 0
    while count < 3:
    usernames = input('请输入用户名称: ').strip()
    password = input('请输入用户密码: ').strip()
    r_password = input('请确认用户密码: ').strip()
    if password == r_password:
    print(f'[{usernames}]注册成功')
    with open('dbs.txt', mode='at', encoding='utf-8') as f1:
    f1.write('{}:{} '.format(usernames, password))
    else:
    print('注册失败!')
    count += 1
    continue
    users()
  • 相关阅读:
    博客园小技巧【转载】
    Windows下的多线程
    【Windows】Windows中的数据类型以及命名
    【文档管理系统】【转】什么是元数据
    CentOS 安装 MariaDB 全部命令
    emacs 入门
    参考路径
    My SQL load data infile 遇到的问题总结
    oracle迁移到mysql(仅使用脚本)
    Eclipse tomcat server 无法添加项目
  • 原文地址:https://www.cnblogs.com/0B0S/p/12533315.html
Copyright © 2011-2022 走看看