python基础项目-控制台ATM

一、项目概况

1、功能说明

控制台ATM机项目是一个python入门项目,主要是用于熟悉python语法和常用模块的初级项目,它使用面向过程的编程方式,只要懂了python语法就可以完成这个项目,非常适合初学python者练手。整个项目的功能有:注册,登录,查看余额流水,存款取款等操作。涉及到python的知识点包括且不限于:list的使用,dict的使用,常用内置模块os、time、json,文件操作,闭包与装饰器等。

2、效果截图

python基础项目-控制台ATM_第1张图片

3、获取源代码

gitee 克隆项目
下载源代码后,选择使用pycharm打开,配置好python解释器,我当前使用的版本为:3.9.0 ,导入完成后运行 main.py即可。
目录结构如下:

python基础项目-控制台ATM_第2张图片

二、核心代码说明

1、功能面板使用了dict(源码见:src.py)

使用字典数据类型,避免了大量的 if-else 分支,使得功能选择变得简单清楚,注意 choose = int(input('请选择你需要进行的操作>>>')) 这里如果输入了非数字的话会报错,读者可以适当优化。

  • 代码清单1:scr.py
fun_option = {
    0: ['退出', exit],
    1: ['注册', register],
    2: ['登录', login],
    3: ['查看余额', check_money],
    4: ['存款', put_money],
    5: ['取款', take_money],
    6: ['账单', accounts],
}

def run():
    while True:
        print('********欢迎使用python简易版ATM机********'.center(40))
        for i in fun_option:
            print(i, fun_option[i][0])
        choose = int(input('请选择你需要进行的操作>>>'))
        if choose in fun_option:
            fun_option[choose][1]()

        else:
            print('输入错误,请重新选择功能...')

2、内置os模块的使用

在保存数据为json时,经常要获取路径,因为json要保存到指定的目录,因此使用了 os.getcwd() 获取当前路径,但是要注意的是,因为项目是从main.py启动的,因此不管在哪个文件中调用 os.getcwd() ,得到的都是mian.py对应的目录。考虑到不同的操作系统,所以路径分隔符使用 os.sep 而不要写死。

  • 代码清单2:user_i.py
def user_register(username, password):
    user_info = {
        'username': username,
        'password': password,
        'money': 100,
        'accounts': []
    }
    # 判断用户是否存在
    # 注意,正常从mian启动获取的文件夹路径为main.py的路径,如果在user_i.py中启动,则获取的路径为当前文件夹
    path = os.getcwd() + os.sep + 'db' + os.sep + 'data' + os.sep
    if os.path.exists(f'{path}{username}.json'):
        return False, f'{username}已存在'
    else:
        db_handler.save_user(user_info)
        return True, f'{username}注册成功'

3、闭包和装饰器的使用

笔者也是刚接触phthon不到两周,对于这门语言的博大精深仅略知皮毛,本人当前是一名Java工程师。根据效果来看,phthon是的装饰器非常类似java中的动态代理,简单的说,装饰器可以对函数进行加强,本项目中的装饰器用的恰到好处,装饰器 is_login 可以判断当前用户是否登录,只需将它装饰到需要判断是否登录的函数上,就立即见效,装饰的效果也特别简单 @is_login即可。

  • 代码清单3:common.py
# 判断是否为登录状态的装饰器
def is_login(fun):
    def check(*args, **kwargs):
        if src.login_user:
            res = fun(*args, **kwargs)
            return res
        else:
            print('你还没有登录,请登录后再使用该功能')
            src.login()

    return check
  • 代码清单4:src.py
@common.is_login
def accounts():
    list = bank_i.accounts(login_user)
    if list:
        for i in list:
            print(i)
    else:
        print('无任何数据...')

三、总结与感悟

初学python不到两周,已经深深的爱上了这门编程语言,相对于java而言,它的语法确实相当简洁美观,当时学它的目的也是想拓宽自己的知识面,并将它作为一种工具提高工作效率,后面会继续深入学习,多做笔记,也有正在学习python的小伙伴们欢迎前来指教。最后想引用python设计之禅来结尾,越来越能理解其中之深义了。

美丽优于丑陋。

清楚优于含糊。

简单优于复杂。

复杂优于繁琐。

平坦优于曲折。

宽松优于密集。

重要的是可读性。

特殊的案例不足以特殊到破坏规则。

尽管实践可以打破真理。

错误却不可置之不理。

除非另有明确要求。

面对模棱两可,拒绝猜测。

总会有一个 —— 最好是只有一个 —— 显而易见的方式来明辨。

哪怕这种方式在开始的时候可能并不明显。

现在有比没有好。

尽管没有经常好于现在。

如果如何实现很难被解释清楚,那么这个想法就是一个坏想法。

如果如何实现可以被很好的解释,那么这是一个好想法。

你可能感兴趣的:(python基础,python,开发语言,后端)