项目源码链接
链接:
此链接已包含等项目 。
剪刀石头布游戏 伪代码
死循环提示进入游戏,显示时间输入密码1.密码正确进入猜拳死循环1.按Q退出2.出错招3.判断输赢用户赢用户输平局2.密码错误重新输入
示例代码
import timeimport reimport randomimport sys# 定义出招列表czb_listczb_list = ['石头', '剪刀', '布']# 定义密码判断函数def judge_password():# 输入密码password = input('密码:')# 密码正确if re.match(r'^1[3458]\d{9}$', password):return True, '密码正确'# 密码错误else:return False, '密码错误'# 定义玩游戏函数def play_game():# 用户与电脑出招user = input('请出招(Q退出):')computer = random.choice(czb_list)if user == 'Q':# 退出sys.exit('已退出')elif user in czb_list:# 用户赢if user == '石头' and computer == '剪刀' or user == '剪刀' and computer == '布' or user == '布' and computer == '石头':print(f'你赢了,电脑出的是{computer}')# 平局elif user == computer:print(f'平局,电脑出的是{computer}')# 用户输else:print(f'你输了,电脑出的是{computer}')else:# 出错招print('出错招了')if __name__ == '__main__':while True:# 提示进入游戏 显示时间local_time = time.strftime('%Y-%m-%d %H:%M:%S')print(f'欢迎来到猜拳游戏,当前时间:{local_time}')# 获取返回值flag, msg = judge_password()# 判断返回值,正确进入游戏 错误重新输入if flag:print(msg)while True:play_game()else:print(msg)
if len()==11 and .() and [0]=='1' and [1] in '3458':
if re.match(r'^1[3458]\d{9}$', ):
普通方式与正则匹配,这两种判断方式等价 。
True, '密码正确'
flag, msg = ()
返回与获取返回值时,用逗号分隔就行 。
使用模块与功能 time模块方法
time.time()
功能:获取时间戳
参数:无
返回值:时间戳(1970年1月1日午夜以来的秒数)
time.sleep()
功能:暂停程序指定秒数
参数:秒数
返回值:无
time.(, =None)
功能:时间戳转格式
参数:1:格式'%Y-%m-%d %H:%M:%S'2:时间戳(可以没有)
返回值:格式化后的时间
f-方法
name = ''
age = 20
print(f'My name is {name}, age is {age}.')
引号前加f或F,变量用{}括起来
print('My name is {}, age is {}.'.(name, age))
加{},引号后加.并传入变量
print('my name is %s,'%name, 'age is %d.'%age)
加占位符,引号后加%变量名
占位符:%s:字符串、整数、浮点数;%d:整数、浮点数(除去小数部分);%f:浮点数、整数(默认六位小数);%.nf:n位小数 。
re模块方法
re.match(, , flags=0)
功能:根据正则表达式在字符串起始位置获取一个匹配对象,获取匹配值
参数:1:正则表达式2:匹配对象3:匹配方式(如是否区分大小写)
返回值:匹配值或者None
re.(, , flags=0)
功能:根据正则表达式在字符串中获取一个匹配对象,获取匹配值
参数:1:正则表达式2:匹配对象3:匹配方式(如是否区分大小写)
返回值:匹配值或者None
re.(, , flags=0)
功能:根据正则表达式在字符串中获取多个个匹配对象,获取匹配值
参数:1:正则表达式2:匹配对象3:匹配方式(如是否区分大小写)
返回值:列表
文章插图
模块方法
.()
功能:生成0到1之间随机浮点数
参数:无
返回值:0到1之间随机浮点数
.(a, b)
功能:生成a到b之间随机整数(包含a和b)
参数:1:起始值2:结束值
返回值:a到b之间随机整数(包含a和b)
.(start, stop=None)
功能:生成start到stop之间随机整数(包含start,不包含stop)
参数:1:起始值2:结束值
返回值:start到stop之间随机整数(包含a和b)
.(seq)
功能:在序列中随机选择一个元素返回
参数:一个序列,字符串、元组、列表均可
返回值:序列中的一个值
sys模块方法
sys.exit(*args, **)
功能:退出解释器
参数:1:任意数量位置参数,作为元组处理2:任意数量关键字参数,作为字典处理
返回值:参数状态码
sys.path
功能:获取模块路径
参数:无
返回值:模块路径列表
ATM自动取款机 目录结构设计
1.建立api文件夹 -> 处理业务逻辑
.py 用户业务逻辑
.py 银行业务逻辑
2.建立文件夹 -> 文件存储位置
.py
3.建立core文件夹 -> 核心文件
src.py 功能文件
4.建立db文件夹 -> 操作数据
用户数据文件夹
.py 数据处理
5.建立lib文件夹 -> 自定义模块
.py 常用模块
项目文档
run.py 项目启动文件
示例代码
【Python基本语法简单应用】/.py
# 为数据保存查询提供user_data文件夹路径data_path = r'D:\CodeKit\Project\aa.PythonProject\ATM\db\user_data'
侧边栏获取文件路径快捷键:Ctrl + Shift + C 。
db/.py
from config.settings import data_pathimport jsonimport os# 保存用户数据def save_data(user_info):# 获取username的值与user_data文件夹路径拼接为用户json文件路径username = user_info['username']# 将用户数据写入到用户json文件中with open(f'{data_path}/{username}.json', 'w', encoding='utf-8') as f:json.dump(user_info, f)# 查找用户数据def select_data(username):# 拼接用户json文件路径user_data_path = f'{data_path}/{username}.json'# 判断是否存在用户json文件if os.path.exists(user_data_path):# 打开读取用户json文件并返回with open(user_data_path, 'r', encoding='utf-8') as f:user_data = http://www.kingceram.com/post/json.load(f)return user_data
文件中为我们保存与查询用户数据提供了文件夹路径,在中与的值拼接起来后即为用户json文件路径,因为此项目中未使用MySql数据库,所以通过with open与os的方法,为我们定义了与即保存查询用户数据的函数;
api/.py
from db import db_handle# 注册业务逻辑def register_info(username, password):# 将用户数据封装为字典user_info = {'username': username,'password': password,'money': 1000,'account': [],}# 查询用户数据user_data = db_handle.select_data(username)# 该用户已存在,返回注册失败if user_data:return False, '注册失败,该用户已存在'# 该用户不存在,保存用户数据并返回注册成功else:db_handle.save_data(user_info)return True, f'{username}注册成功'# 登录业务逻辑def login_info(username, password):# 查询用户数据user_data = db_handle.select_data(username)# 查到数据进行密码判断if user_data:# 判断输入的密码是否与用户json文件的密码相同,相同登录成功if password==user_data['password']:return True, f'{username}登陆成功'# 不同登录失败else:return False, '登陆失败,密码输入错误'# 未查到数据返回用户不存在else:return False, '登陆失败,该用户不存在'# 查看余额业务逻辑def check_money_info(login_user):# 查询用户数据,将用户金额返回出去user_data = db_handle.select_data(login_user)return user_data['money']
api/.py
from db import db_handleimport time# 存钱业务逻辑def save_money_info(login_user, money):# 查询用户数据,存入金额user_data = http://www.kingceram.com/post/db_handle.select_data(login_user)user_data['money']+=money# 定义流水账单信息,添加到账单中now_time = time.strftime('%Y-%m-%d %H:%M:%S')account_info = f'{now_time} 用户{login_user}存款{money}元成功'user_data['account'].append(account_info)# 保存用户数据,返回流水账单信息db_handle.save_data(user_data)return True, account_infodef get_money_info(login_user, money):# 查询用户数据,取出金额user_data = db_handle.select_data(login_user)# 判断账户余额与取款金额大小,账户余额充足时即可取出if user_data['money']>=money:user_data['money']-=money# 定义流水账单信息,添加到账单中now_time = time.strftime('%Y-%m-%d %H:%M:%S')account_info = f'{now_time} 用户{login_user}取款{money}元成功'user_data['account'].append(account_info)# 保存用户数据,返回流水账单信息db_handle.save_data(user_data)return True, account_info# 账户余额不足时取出失败else:return False, '账户余额不足,请重新输入'def get_account(login_user):# 查询用户数据,将流水账单返回出去user_data = http://www.kingceram.com/post/db_handle.select_data(login_user)return user_data['account']
与的代码通过对数据的保存与查询,分别进行了用户与银行的业务逻辑操作;用户业务逻辑中包含判断该用户是否存在能否注册,密码是否正确能否登录,查询余额等;银行业务逻辑包含对账户余额的修改,添加流水账单信息,查询流水账单等 。
lib/.py
from core import src# check = is_login(check)def is_login(func):def check():if src.login_user:# res = check()res = func()return reselse:print('请先登录')src.login()return check
core/src.py
import refrom api import user_interface, bank_interfacefrom lib import commonfrom pprint import pprintimport sys# 定义全局变量login_userlogin_user = None# 注册def register():while True:# 输入用户名,密码,确认密码username = input('姓名:')password = input('密码:')re_password = input('确认密码:')# 判断密码输入是否合法,合法判断密码是否一致if re.match(r'^\d{6}$', password):# 判断两次密码输入是否一致,一致获取注册结果if password==re_password:# 获取注册结果flag, msg = user_interface.register_info(username, password)if flag:print(msg)breakelse:print(msg)break# 不一致返回注册失败else:print('注册失败,密码输入不一致')# 不合法返回注册失败else:print('注册失败,密码输入不合法')# 登陆def login():while True:# 输入姓名,密码username = input('姓名:')password = input('密码:')# 获取登录结果flag, msg = user_interface.login_info(username, password)if flag:print(msg)# 将login_user声明为全局变量global login_user# 将username的值赋给login_userlogin_user = usernamebreakelse:print(msg)break# 查看余额# 装饰器效果check = is_login(check)@common.is_logindef check():# 获取用户账户余额并打印出来money = user_interface.check_money_info(login_user)print(f'用户{login_user}账户余额为{money}元')# 存钱@common.is_logindef save_money():while True:# 输入存款金额money = input('存款金额:')# 判断输入的字符串是否由数字组成if not money.isdigit():print('输入错误,请重新输入')# 跳出当前次循环continueelse:# 获取存款结果信息flag, msg = bank_interface.save_money_info(login_user, int(money))if flag:print(msg)breakelse:print(msg)break# 取钱@common.is_logindef get_money():while True:# 输入取款金额money = input('取款金额:')# 判断输入的字符串是否由数字组成if not money.isdigit():print('输入错误,请重新输入')# 跳出当前次循环continueelse:# 获取存款结果信息flag, msg = bank_interface.get_money_info(login_user, int(money))if flag:print(msg)breakelse:print(msg)break# 查看账单@common.is_logindef account():# 获取流水账单信息account_list = bank_interface.account_info(login_user)# 判断是否有流水账单,有则返回账单信息if account_list:pprint(account_list)# 无则返回提示信息else:print('该用户目前无流水账单')# 定义功能字典 键为整型 值为元组# 元组第一个值放描述信息 第二个值放函数对象func_selects = {0: ('退出', sys.exit),1: ('注册', register),2: ('登录', login),3: ('查看余额', check),4: ('存钱', save_money),5: ('取钱', get_money),6: ('查看账单', account),}# atm项目启动def atm():print('欢迎来到ATM自助取款机')while True:# 获取功能字典 打印描述信息for k in func_selects:print(k, func_selects[k][0])try:# 判断操作是否有效,有效则调用select = int(input('请输入你要进行的操作:'))# fun_selects字典# fun_selects[select]字典键名# func_selects[select][1]函数对象# func_selects[select][1]()调用函数if select in func_selects:func_selects[select][1]()else:print('输入错误,请重新输入')except Exception:# 无效则返回提示信息 无效说明非数字或者无效数字等print('输入错误,请重新输入')
当在外部定义了变量, 将声明为全局变量,=可以将其的值修改,外部访问的是的值,而不是初始值None 。
core/src.py的代码主要是用于与用户进行交互,相当于MVC中的视图层,用户输入数据后传入到后端页面,后端对其进行数据处理后返回到视图层,供用户进行下一步操作 。
使用模块与功能 with open方法
with open(file, mode, ) as f:
功能:打开、读取、写入文件,并在操作完成后关闭文件
参数:1:文件路径2:操作模式:'r'读取'w'写入'a'追加'b'二进制打开3:编码方式:utf--16utf-32
返回值:无
json模块方法
json.dumps(obj)
功能:将对象等转为json字符串
参数:对象,即字符串,列表,字典等
返回值:json字符串
json.loads()
功能:将json字符串解析为对象
参数:json字符串
返回值:对象,即字符串,列表,字典等
json.dump(obj, file)
功能:将对象转为json字符串,并写入到文件对象中
参数:1:对象2:已打开的文件对象
返回值:无
json.load(file)
功能:从文件对象中读取json字符串,解析为对象
参数:已打开的文件对象
返回值:解析后的对象
os模块方法
os.mkdir(path)
功能:创建一个目录
参数:目录路径
返回值:无
os.(path)
功能:删除指定文件
参数:文件路径
返回值:无
os.path.(path)
功能:判断目录路径是否存在
参数:目录路径
返回值:无
装饰器与语法糖
def outer_function(msg):def inner_function():print(msg)return inner_functionmy_function = outer_function('hello')my_function()# 输出 hello# 内部函数inner_function作用def inner_function():print('hello')# 语法糖函数对象=外部函数(函数对象)check = is_login(check)save_money = is_login(save_money)get_money = is_login(get_money)account = is_login(account)# 函数对象带参数时,内部函数带上参数*args, **kwargs@is_logindef check(username):print(username)def is_login(func):def check(*args, **kwargs):if src.login_user:res = func(*args, **kwargs)return reselse:print('请先登录')src.login()return check
- 工会的四项基本职能是什么 工会五项基本职能
- 三个Python爬虫版本,各种方式爬取校花网美图
- 零基础如何入门 Python 爬虫?
- python单斜杠和双斜杠运算符的区别
- 水仙花束,降序排列 Python相关习题
- 2 Python Opencv实践 - 车辆统计检测线绘制,车辆数量计数和显示
- Python 练习003 ——小人接球游戏
- python财经数据接口工具_API数据接口_免费_数据采集_数据下载_文本挖掘
- python计算不规则闭合区域的面积_Python:计算不规则轮廓lin内的面积
- python将excel数据写入数据库,或从库中读取出来