控制台ATM机项目是一个python
入门项目,主要是用于熟悉python
语法和常用模块的初级项目,它使用面向过程的编程方式,只要懂了python
语法就可以完成这个项目,非常适合初学python者练手。整个项目的功能有:注册,登录,查看余额流水,存款取款等操作。涉及到python
的知识点包括且不限于:list
的使用,dict
的使用,常用内置模块os、time、json
,文件操作,闭包与装饰器等。
gitee 克隆项目
下载源代码后,选择使用pycharm打开,配置好python解释器,我当前使用的版本为:3.9.0 ,导入完成后运行 main.py即可。
目录结构如下:
使用字典数据类型,避免了大量的 if-else
分支,使得功能选择变得简单清楚,注意 choose = int(input('请选择你需要进行的操作>>>'))
这里如果输入了非数字的话会报错,读者可以适当优化。
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('输入错误,请重新选择功能...')
在保存数据为json时,经常要获取路径,因为json要保存到指定的目录,因此使用了 os.getcwd()
获取当前路径,但是要注意的是,因为项目是从main.py
启动的,因此不管在哪个文件中调用 os.getcwd()
,得到的都是mian.py对应的目录。考虑到不同的操作系统,所以路径分隔符使用 os.sep
而不要写死。
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}注册成功'
笔者也是刚接触phthon
不到两周,对于这门语言的博大精深仅略知皮毛,本人当前是一名Java
工程师。根据效果来看,phthon
是的装饰器非常类似java
中的动态代理,简单的说,装饰器可以对函数进行加强,本项目中的装饰器用的恰到好处,装饰器 is_login
可以判断当前用户是否登录,只需将它装饰到需要判断是否登录的函数上,就立即见效,装饰的效果也特别简单 @is_login
即可。
# 判断是否为登录状态的装饰器
def is_login(fun):
def check(*args, **kwargs):
if src.login_user:
res = fun(*args, **kwargs)
return res
else:
print('你还没有登录,请登录后再使用该功能')
src.login()
return check
@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
设计之禅来结尾,越来越能理解其中之深义了。
美丽优于丑陋。
清楚优于含糊。
简单优于复杂。
复杂优于繁琐。
平坦优于曲折。
宽松优于密集。
重要的是可读性。
特殊的案例不足以特殊到破坏规则。
尽管实践可以打破真理。
错误却不可置之不理。
除非另有明确要求。
面对模棱两可,拒绝猜测。
总会有一个 —— 最好是只有一个 —— 显而易见的方式来明辨。
哪怕这种方式在开始的时候可能并不明显。
现在有比没有好。
尽管没有经常好于现在。
如果如何实现很难被解释清楚,那么这个想法就是一个坏想法。
如果如何实现可以被很好的解释,那么这是一个好想法。