day16---作业

1、函数对象优化多分支if的代码练熟

示例1:用户功能选择优化

#!/usr/bin/env python
# -*- coding:utf-8 -*-

from prettytable import PrettyTable


def login():
    print('登录功能!')


def save():
    print('存钱功能!')


def transfer():
    print('转账功能!')


def withdraw():
    print('取钱功能!')


def check_banlance():
    print('查询余额功能!')


def register():
    print('注册功能!')


func_choice= {
    '0': ('退出', None),
    '1': ('登录', login),
    '2': ('存钱', save),
    '3': ('转账', transfer),
    '4': ('取钱', withdraw),
    '5': ('查询余额', check_banlance),
    '6': ('注册', register)
}


def atm_interface():
    while True:
        tb = PrettyTable(field_names=['功能编号', '功能名称'])
        for k in func_choice:
            tb.add_row([k, func_choice[k][0]])
        print(tb)
        user_choice = input('请输入功能编号:').strip()
        if not user_choice.isdigit():
            print('请输入一个正整数!')
            continue
        elif user_choice == '0':
            break
        elif user_choice in func_choice:
            func_choice[k][1]()
        else:
            print('该功能尚未支持!')
            _continue = input('是否继续(y,n):').strip().lower()
            if _continue == 'y':
                continue
            else:
                break


atm_interface()

示例2:求圆的周长和面积

#!/usr/bin/env python
#-*- coding:utf-8 -*-

from math import pi

def circle(radius,action=0):
    """
      action参数:(0,1)
             0 -->求圆的周长 2*pi*radius
             1 -->求圆的面积 pi*(radius**2)
    """
    def perimeter():return 2*pi*radius
    def area():return pi*(radius**2)

    if action == 0:
        res = perimeter()
    else:res = area()
    return res
print('半径为4的圆的周长为:{:.2f}'.format(circle(4)))
print('半径为6的圆的面积为:{:.2f}'.format(circle(6,action=1)))

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

实现:

#!/usr/bin/env python
#-*- coding:utf-8 -*-

"""
计数器功能
"""

from random import randint

def outter():
    ct = 0
    def count():
        nonlocal ct
        ct += 1
        print('当前计数次数:{}'.format(ct))
    return count
count = outter()

for i in range(randint(0,5)):
    count()

周末大作业:

功能需求:
# 编写ATM程序实现下述功能,数据来源于文件db.txt
# 0、注册功能:用户输入账号名、密码、金额,按照固定的格式存入文件db.txt
# 1、登录功能:用户名不存在,要求必须先注册,用户名存在&输错三次锁定,登录成功后记录下登录状态(提示:可以使用全局变量来记录)

下述操作,要求登录后才能操作
# 1、充值功能:用户输入充值钱数,db.txt中该账号钱数完成修改
# 2、转账功能:用户A向用户B转账1000元,db.txt中完成用户A账号减钱,用户B账号加钱
# 3、提现功能:用户输入提现金额,db.txt中该账号钱数减少
# 4、查询余额功能:输入账号查询余额
原文地址:https://www.cnblogs.com/surpass123/p/12531969.html