Python基本语法简单应用

阅读: 评论:0

Python基本语法简单应用

Python基本语法简单应用

项目源码链接

链接:=6gnv
此链接已包含Python等项目。

Python 剪刀石头布游戏

伪代码

死循环提示进入游戏,显示时间输入密码1.密码正确进入猜拳死循环1.按Q退出2.出错招3.判断输赢用户赢用户输平局2.密码错误重新输入

示例代码

import time
import re
import random
import sys# 定义出招列表czb_list
czb_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':# 退出it('已退出')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(password)==11 and password.isdigit() and password[0]=='1' and password[1] in '3458':
if re.match(r'^1[3458]d{9}$', password):

普通方式与正则匹配,这两种判断方式等价。

return True, '密码正确'
flag, msg = judgepassword()

返回与获取返回值时,用逗号分隔就行。

使用模块与功能

time模块方法

time.time()
功能:获取时间戳
参数:无
返回值:时间戳(1970年1月1日午夜以来的秒数)

time.sleep(seconds)
功能:暂停程序指定秒数
参数:秒数
返回值:无

time.strftime(format, p_tuple=None)
功能:时间戳转格式
参数:1:格式'%Y-%m-%d %H:%M:%S'        2:时间戳(可以没有)
返回值:格式化后的时间

f-format方法

name = 'H0a2204'
age = 20

print(f'My name is {name}, age is {age}.')
引号前加f或F,变量用{}括起来

print('My name is {}, age is {}.'.format(name, age))
加{},引号后加.format并传入变量

print('my name is %s,'%name, 'age is %d.'%age)
加占位符,引号后加%变量名

占位符:%s:字符串、整数、浮点数;%d:整数、浮点数(除去小数部分);%f:浮点数、整数(默认六位小数);%.nf:n位小数。

re模块方法

re.match(pattern, string, flags=0)
功能:根据正则表达式在字符串起始位置获取一个匹配对象,获取匹配值
参数:1:pattern正则表达式        2:匹配对象        3:匹配方式(如是否区分大小写)
返回值:匹配值或者None

re.search(pattern, string, flags=0)
功能:根据正则表达式在字符串中获取一个匹配对象,获取匹配值
参数:1:pattern正则表达式        2:匹配对象        3:匹配方式(如是否区分大小写)
返回值:匹配值或者None

re.findall(pattern, string, flags=0)
功能:根据正则表达式在字符串中获取多个个匹配对象,获取匹配值
参数:1:pattern正则表达式        2:匹配对象        3:匹配方式(如是否区分大小写)
返回值:列表

random模块方法

random.random()
功能:生成0到1之间随机浮点数
参数:无
返回值:0到1之间随机浮点数

random.randint(a, b)
功能:生成a到b之间随机整数(包含a和b)
参数:1:起始值        2:结束值
返回值:a到b之间随机整数(包含a和b)

random.randrange(start, stop=None)
功能:生成start到stop之间随机整数(包含start,不包含stop)
参数:1:起始值        2:结束值
返回值:start到stop之间随机整数(包含a和b)

random.choice(seq)
功能:在序列中随机选择一个元素返回
参数:一个序列,字符串、元组、列表均可
返回值:序列中的一个值

sys模块方法

功能:退出Python解释器
参数:1:任意数量位置参数,作为元组处理        2:任意数量关键字参数,作为字典处理
返回值:参数状态码

sys.path
功能:获取模块路径
参数:无
返回值:模块路径列表

Python ATM自动取款机

目录结构设计

1.建立api文件夹 -> 处理业务逻辑
   user_interface.py 用户业务逻辑
   bank_interface.py 银行业务逻辑
2.建立config文件夹 -> 文件存储位置
   setting.py
3.建立core文件夹 -> 核心文件
   src.py 功能文件
4.建立db文件夹 -> 操作数据
   user_data 用户数据文件夹
   db_handle.py 数据处理
5.建立lib文件夹 -> 自定义模块
   common.py 常用模块
readme 项目文档
run.py 项目启动文件

示例代码

config/settings.py

# 为数据保存查询提供user_data文件夹路径
data_path = r'D:CodeKitProjectaa.PythonProjectATMdbuser_data'

Pycharm侧边栏获取文件路径快捷键:Ctrl + Shift + C。   

db/db_handle.py

from config.settings import data_path
import json
import 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 ists(user_data_path):# 打开读取用户json文件并返回with open(user_data_path, 'r', encoding='utf-8') as f:user_data = json.load(f)return user_data

settings文件中为我们保存与查询用户数据提供了user_data文件夹路径,在db_handle中与username的值拼接起来后即为用户json文件路径,因为此项目中未使用MySql数据库,所以通过with open与os的方法,为我们定义了save_data与select_data即保存查询用户数据的函数;

api/user_interface.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/bank_interface.py

from db import db_handle
import time# 存钱业务逻辑
def save_money_info(login_user, money):# 查询用户数据,存入金额user_data = 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 = db_handle.select_data(login_user)return user_data['account']

user_interface与bank_interface的代码通过对数据的保存与查询,分别进行了用户与银行的业务逻辑操作;用户业务逻辑中包含判断该用户是否存在能否注册,密码是否正确能否登录,查询余额等;银行业务逻辑包含对账户余额的修改,添加流水账单信息,查询流水账单等。

lib/common.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 re
from api import user_interface, bank_interface
from lib import common
from pprint import pprint
import sys# 定义全局变量login_user
login_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 = ister_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_login
def check():# 获取用户账户余额并打印出来money = user_interface.check_money_info(login_user)print(f'用户{login_user}账户余额为{money}元')# 存钱
@common.is_login
def 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_login
def get_money():while True:# 输入取款金额money = input('取款金额:')# 判断输入的字符串是否由数字组成if not money.isdigit():print('输入错误,请重新输入')# 跳出当前次循环continueelse:# 获取存款结果信息flag, msg = _money_info(login_user, int(money))if flag:print(msg)breakelse:print(msg)break# 查看账单
@common.is_login
def account():# 获取流水账单信息account_list = bank_interface.account_info(login_user)# 判断是否有流水账单,有则返回账单信息if account_list:pprint(account_list)# 无则返回提示信息else:print('该用户目前无流水账单')# 定义功能字典 键为整型 值为元组
# 元组第一个值放描述信息 第二个值放函数对象
func_selects = {0: ('退出', it),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('输入错误,请重新输入')

当在外部定义了变量login_user,global login_user将login_user声明为全局变量,login_user=username可以将其login_user的值修改,外部访问的是username的值,而不是login_user初始值None。

core/src.py的代码主要是用于与用户进行交互,相当于MVC中的视图层,用户输入数据后传入到后端页面,后端对其进行数据处理后返回到视图层,供用户进行下一步操作。

使用模块与功能

with open方法

with open(file, mode, encoding) as f:
功能:打开、读取、写入文件,并在操作完成后关闭文件
参数:1:文件路径        2:操作模式:'r'读取        'w'写入        'a'追加        'b'二进制打开        3:编码方式:utf-8        ASCLL        utf-16        utf-32
返回值:无

json模块方法

json.dumps(obj)
功能:将Python对象等转为json字符串
参数:Python对象,即字符串,列表,字典等
返回值:json字符串

json.loads(json_string)
功能:将json字符串解析为Python对象
参数:json字符串
返回值:Python对象,即字符串,列表,字典等

json.dump(obj, file)
功能:将Python对象转为json字符串,并写入到文件对象中
参数:1:Python对象        2:已打开的文件对象
返回值:无

json.load(file)
功能:从文件对象中读取json字符串,解析为Python对象
参数:已打开的文件对象
返回值:解析后的Python对象

os模块方法

os.mkdir(path)
功能:创建一个目录
参数:目录路径
返回值:无

功能:删除指定文件
参数:文件路径
返回值:无

ists(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_login
def 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

关注点:参数,返回值。

当调用闭包函数outer_function('hello')时,先将值hello带入到内部函数中,观察内部函数inner_function的作用,再为outer_function('hello')添加上小括号即outer_function('hello')(),返回值是inner_function,此时即可将outer_function('hello')换成inner_function,最后即inner_function(),打印hello。

外部函数参数带入内部函数,观察其作用;将外部函数调用换成内部函数()即可。

语法糖:函数对象=外部函数(函数对象)

try-except方法

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('输入错误,请重新输入')

try-except语句可以捕获处理异常,常见报错类型:SyntaxError,TypeError,ValueError,IndexError,AttributeError;这些报错类型可以更改为Exception,即处理所有的报错类型。

ATM项目中用户可能会输入无效数字与非数字,因此用tre-except进行处理。

Pycharm设置源文件夹

当在此工程下创建了一个子工程,有时会出现导入出错的问题。此时就要将子工程设置为一个源文件夹。

第一步:右击子工程;

第二步:点击Mark Directory as里的Sources Root即可。

只有文件夹能设置为源文件夹,不可对文件进行相同操作,操作后文件夹会变蓝。

Pycharm更换背景图片

第一步:点击File找到settings;        

 第二步:找到Appearance,点击Background Image;

第三步:找到图片路径,点击OK确定更换。

本文发布于:2024-02-02 10:34:38,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170684127943228.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:语法   简单   Python
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23