编程思想的转变

1.面条版阶段
所有的代码全部堆叠在一起
2.函数版阶段
根据功能的不同封装不同的函数
3.模块版阶段
根据功能的不同拆分成不同的py文件
"""
第一个阶段可以看成是直接将所有的数据放在C盘
视频 音频 文本 图片
第二个阶段可以看成是将C盘下的数据分类管理
视频文件夹 音频文件夹 文本文件夹 图片文件夹
第三个阶段可以看成是将C盘下的数据根据功能的不同划分到更合适的位置
系统文件夹 C盘
视频文件夹 D盘
图片文件夹 E盘
ps:类似于开公司(小作坊 小公司 上市公司)
为了资源的高效管理
"""

软件目录开发规范(重要)

1.文件及目录的名字可以变换 但是思想是不变的 分类管理
2.目录规范主要规定开发程序的过程中针对不同的文件功能需要做不同的分类
以下内容要熟练掌握,达到背诵的程度>>> myproject项目文件夹: 1.bin文件夹 主要存放项目启动文件
start.py 启动文件可以放在bin目录下 也可以直接在项目根目录
2.conf文件夹 主要存放项目配置文件
settings.py 里面存放项目的默认配置 一般都是全大写
3.core文件夹 主要存放项目核心文件
src.py 里面存放项目核心功能
4.interface文件夹 主要存放项目接口文件
goods.py 根据具体业务逻辑划分对应的文件
user.py
account.py
5.db文件夹 主要存放项目相关数据
userinfo.txt
db_handler.py 存放数据库操作相关的代码
6.log文件夹 主要存放项目日志文件
log.log
7.lib文件夹 主要存放项目公共功能
common.py
8.readme文件 主要存放项目相关说明
9.requirements.txt文件 主要存放项目所需模块及版本

内置模块:collections模块

简介

collections模块提供了一些高级的数据类型供我们使用,相当于原有python数据类型的升级版本,功能更强大。主要提供了dict、list、set、tuple这些类型的代替选择,这个模块用的不多,取常用的功能了解即可。

具名元组 namedtuple

实现二维坐标系

from collections import namedtuple  # 导入namedtuple函数

# 1.表示二维坐标系
point = namedtuple('Point', ['x', 'y']) # point是元祖的名字 x、y是元祖中元素的名字
print(type(point)) # <class 'type'>
# 2.使用point生成具名元组
p1 = point(1, 2)
print(type(p1)) # <class '__main__.Point'>
print(p1) # Point(x=1, y=2)
p2 = point(9.9,100)
print(p2) # Point(x=9.9, y=100)
# 取出具名元祖中的元素
print(p2.x, p2.y) # 9.9 100

实现扑克牌

card = namedtuple('扑克牌', ['num', 'color'])
c1 = card('A', '黑')
c2 = card('A', '红')
print(c1, c1.num, c1.color) # 扑克牌(num='A', color='黑') A 黑
print(c2, c2.num, c2.color) # 扑克牌(num='A', color='红') A 红

队列与堆栈

队列是先进先出的,类比现实生活中的排队做核酸,你先来肯定你先被捅嗓子眼= =

堆栈是先进后出,类似往箱子放东西,先放进去的东西最后才能取出来=。=

collection.deque()实现双端队列 (了解)

# 队列和堆栈都是只有一边能进出
# 双端队列是:两边都能进 两边都能出
# 1.deque实现双端队列
from collections import deque # 不常用 了解即可
q = deque([1,2,3])
print(q.pop()) # 3
print(q.popleft()) # 1 # 从左边弹出
q.appendleft('miku') # 在左边添加
print(q) # deque(['miku', 2])

有序字典 OrderedDict

from  collections import OrderedDict

od = OrderedDict([('a', 1), ('b', 2), ('c', 3), ('d', 4)])  # od现在是有序字典了!
print(od) # OrderedDict([('a', 1), ('b', 2), ('c', 3), ('d', 4)])
print(od['a']) # 用键取值
od['name'] = 'alice'
print(od) # OrderedDict([('a', 1), ('b', 2), ('c', 3), ('d', 4), ('name', 'alice')])
for i in od: # 支持for循环 只有键参与
print(i)

计数器类型 Count

# 1.用来统计字符串里字符的个数
res = 'mmmm uuu hhh n'
print(Counter(res)) # Counter({'m': 4, ' ': 3, 'u': 3, 'h': 3, 'n': 1})
back = Counter('你好哇')
print(back) # Counter({'你': 1, '好': 1, '哇': 1})
print(type(back)) # <class 'collections.Counter'>

内置模块:time模块

时间的三种表现形式

三种时间表现形式
1.时间戳
秒数
2.结构化时间
主要是给计算机看的 人看不适应
3.格式化时间
主要是给人看的

time.time()

# 1.时间戳
print(time.time()) # 1666164611.2037244 # 时间戳
print(type(time.time())) # <class 'float'>

time.localtime()

# 2.结构化时间
print(time.localtime()) # time.struct_time(tm_year=2022, tm_mon=10, tm_mday=19, tm_hour=15, tm_min=30, tm_sec=59, tm_wday=2, tm_yday=292, tm_isdst=0)
print(type(time.localtime())) # <class 'time.struct_time'> # 产生当前的结构化时间

time.strftime(重要)

# 3.格式化时间
print(time.strftime('%Y-%m-%d')) # 2022-10-19 # 注意:Y大写 m小写 d小写
print(time.strftime('%Y/%m/%d')) # 2022/10/19 # 分隔的部分可以改
print(type(time.strftime('%Y-%m-%d'))) # <class 'str'> # 产生str # 意思是str-format-time吗=。=
print(time.strftime(('%Y/%m/%d %H:%M:%S'))) # 2022/10/19 15:41:50 # 要背下来!!
print(time.strftime(('%Y/%m/%d %X'))) # 2022/10/19 15:42:36
# 更多尝试
print(time.strftime('%D')) # 10/19/22
print(time.strftime('%h')) # Oct
time.sleep(10) # 让程序原地阻塞指定的秒数



菜鸟教程:https://www.runoob.com/python/att-time-strftime.html

三种时间转换关系

timestamp = time.time()  # 生成时间戳
print(timestamp) # 1666176687.4902158 struct_time = time.localtime(timestamp) # 时间戳 ——localtime——> 结构化时间
print(struct_time) # time.struct_time(tm_year=2022, tm_mon=10, tm_mday=19, tm_hour=18, tm_min=51, tm_sec=27, tm_wday=2, tm_yday=292, tm_isdst=0) format_time = time.strftime('%Y/%m/%d %H:%M:%S',struct_time) # 2022/10/19 19:08:36  # 结构化时间 ——strftime——> 格式化时间
print(format_time) # 2022/10/19 19:24:04 new_struct = time.strptime(format_time,'%Y/%m/%d %H:%M:%S') # 把格式化时间转为结构化时间了 这里参数要反一下
print(new_struct) # time.struct_time(tm_year=2022, tm_mon=10, tm_mday=19, tm_hour=19, tm_min=18, tm_sec=14, tm_wday=2, tm_yday=292, tm_isdst=-1) new_stamp = time.mktime(struct_time)
print(new_stamp) # 1666178401.0 # 一通转换下来 时间戳小数点后面的都没了 神奇喔 =。=
# 1.struct_time参数含义:
'''time.struct_time(tm_year=2022, tm_mon=10, tm_mday=19, tm_hour=19, tm_min=18, tm_sec=14,
tm_wday=2, tm_yday=292, tm_isdst=-1)''' int tm_sec; /* 秒 – 取值区间为[0,59] */
int tm_min; /* 分 - 取值区间为[0,59] */
int tm_hour; /* 时 - 取值区间为[0,23] */
int tm_mday; /* 一个月中的日期 - 取值区间为[1,31] */
int tm_mon; /* 月份(从一月开始,0代表一月) - 取值区间为[0,11] */
int tm_year; /* 年份,其值等于实际年份减去1900 */
int tm_wday; /* 星期 – 取值区间为[0,6],其中0代表星期一,1代表星期二,以此类推 */
int tm_yday; /* 从每年的1月1日开始的天数 – 取值区间为[0,365],其中0代表1月1日,1代表1月2日,以此类推 */
int tm_isdst; /* 夏令时标识符,实行夏令时的时候,tm_isdst为正。不实行夏令时的时候,tm_isdst为0;不了解情况时,tm_isdst()为负。

内置模块:datetime模块

导入

from datetime import date,datetime  # 导入date类,datetime类
# 1.date、datetime是什么?
# 实际上用的就是datetime.py文件 里面的两个类:date类 datetime类
print(date) # <class 'datetime.date'>
print(datetime) # <class 'datetime.datetime'>

datetime类

datetime.now()/datetime.today()

# now today都是返回当前时间
print(datetime.now()) # 2022-10-19 15:52:23.323534
print(datetime.today()) # 2022-10-19 15:54:06.581871
print(type(datetime.now())) # <class 'datetime.datetime'> # 返回一个datetime对象

datetime.utcnow()

print(datetime.utcnow())  # 2022-10-19 08:04:06.799263 # 慢8个小时 # 协调通用时间(UTC)
c = datetime(2017, 5, 23, 12, 20)

datetime.strptime()

# 1.给datetime传入数字 会自动帮你格式化时间
c = datetime(2017, 5, 23, 12, 20)
print('指定日期: %s'% c) # 指定日期: 2017-05-23 12:20:00 # 2.包含时间信息的字符串 通过一些匹配 生成标准的时间格式
d=datetime.strptime('2017/9/30','%Y/%m/%d')
print(d) # 2017-09-30 00:00:00
e=datetime.strptime('2017年9月30日星期六','%Y年%m月%d日星期六')
print(e) # 2017-09-30 00:00:00
f=datetime.strptime('2017年9月30日星期六8时42分24秒','%Y年%m月%d日星期六%H时%M分%S秒')
print(f) # 2017-09-30 08:42:24

timedelta()

# 1.用于完成延时任务
ctime = date.today() # 获取当前时间
print(ctime) # 2022-10-19
time_del = timedelta(days=3)
print(time_del,type(time_del)) # 3 days, 0:00:00 # <class 'datetime.timedelta'>
print(ctime + time_del) # 2022-10-22
print(timedelta(minutes=20)) # 0:20:00 # 分钟也支持

date.today()

# 1.date类中的方法
print(date.today()) # 2022-10-19 # 返回今天日期
print(type(date.today())) # <class 'datetime.date'>

规律总结

'''
不同的方法 最后输出的时间格式不相同:
datetime 年月日 时分秒
date 年月日
time 时分秒(后续会有此规律)
'''

内置模块:random模块

基本使用

print(random.random())  # 0.7713324417976831 # 随机产生0到1之间的小数
print(random.randint(1, 6)) # 3 # 随机产生1到6之间的整数
print(random.randrange(1, 6)) # 随机产生指定的整数 # 支持步长=。= 服从range左开右闭的特点
print(random.choice(['一等奖', '二等奖', '三等奖', '谢谢惠顾'])) # 随机抽取一个样本 '二等奖'
print(random.choices(['一等奖', '二等奖', '三等奖', '谢谢惠顾'])) # 随机抽取一个样本 ['二等奖']
# 保留原来的数据类型 传入一个列表 输出一个列表
print(random.sample(['jason', 'kevin', 'tony', 'oscar', 'jerry', 'tom'], 2)) # 随机抽指定样本数 ['tom', 'jerry']
l1 = [2, 3, 4, 5, 6, 7, 8, 9, 10, 'J', 'Q', 'K', 'A']
random.shuffle(l1) # 随机打乱数据集
print(l1) # ['Q', 'J', 7, 2, 3, 9, 'K', 'A', 10, 5, 4, 6, 8]

random模块实现图片验证码

'''产生图片验证码: 每一位都可以是大写字母 小写字母 数字  4位'''
'''产生图片验证码: 每一位都可以是大写字母 小写字母 数字 4位'''
def get_code(n):
code = ''
for i in range(n):
# 1.先产生随机的大写字母 小写字母 数字
random_upper = chr(random.randint(65, 90))
random_lower = chr(random.randint(97, 122))
random_int = str(random.randint(0, 9))
# 2.随机三选一
temp = random.choice([random_upper, random_lower, random_int])
code += temp
return code res = get_code(10) # 产生一个十位的验证码
print(res) # vD82pl4BLH
res = get_code(4) # 产生一个四位的验证码
print(res) # zC2n

补充

Queue实现队列(常用)

# 1.基本使用
from multiprocessing import Queue
list_q = Queue(3) # 产生一个可以容纳三个数据的队列 # 不是可迭代对象
list_q.put('alice')
list_q.put('tifa')
list_q.put('cloud')
print(list_q.get()) # alice
print(list_q.get()) # tifa
print(list_q.get()) # cloud # 满足先进先出
# 2.阻塞
from multiprocessing import Queue
list_q = Queue(3) # 产生一个可以容纳三个数据的队列 # 不是可迭代对象
list_q.put('alice')
list_q.put('tifa')
list_q.put('cloud')
list_q.put('oshio') # 由于这是一个只能容纳3个元素的队列 # 所以这个oshio插不进去
# 程序会阻塞在这里 # 在等待有人从队列出来 # 3.解决
from multiprocessing import Queue
list_q = Queue(3) # 产生一个可以容纳三个数据的队列 # 不是可迭代对象
list_q.put('alice')
list_q.put('tifa')
list_q.put('cloud')
list_q.get()
list_q.put('oshio')
print(list_q.get()) # tifa
print(list_q.get()) # cloud
print(list_q.get()) # oshio

做题

# 1.将2020-11-11 转成时间戳
str_time = '2020-11-11'
struct_time = time.strptime('2020-11-11','%Y-%m-%d') # 匹配的时候要写全
print(time.mktime(struct_time)) # 1605024000.0 # 2.根据年月日判断是那一年的第几天
now_time = '2022年10月19日'
struct_time = time.strptime(now_time,'%Y年%m月%d日') # 格式化时间————>结构化时间
print(struct_time)
print(struct_time.tm_yday) # 通过结构化时间取值 今天是今年的第292天
print(365-struct_time.tm_yday) # 今年还剩73天 # 3.查看时间戳200000000对应的年月日
time_stamp = 2000000000 # 时间戳得是个数字 # 不能是字符串
s_time = time.localtime(time_stamp) # 时间戳转结构化时间
f_time = time.strftime('%Y/%m/%d',s_time) # 结构化时间转格式化时间
print(f_time) # 2033/05/18 # 4.批量生成11位手机号码
# 手机号以135 137 189开头
# 后8位是随机生成的8个数字
third = [135,137,189][random.randint(0,2)]
suffix = random.randint(9999999,100000000)
print(str(second)+str(suffix))

编程思想的转变 软件开发目录规范 collections、time、datetime、 random模块的更多相关文章

  1. Python 浅谈编程规范和软件开发目录规范的重要性

    最近参加了一个比赛,然后看到队友编程的代码,我觉得真的是觉得注释和命名规范的重要性了,因为几乎每个字符都要咨询他,用老师的话来说,这就是命名不规范的后续反应.所以此时的我意识到写一篇关于注释程序的重要 ...

  2. python浅谈编程规范和软件开发目录规范的重要性

    前言 我们这些初学者,目前要做的就是遵守代码规范,这是最基本的,而且每个团队的规范可能还不一样,以后工作了,尽可能和团队保持一致,目前初学者就按照官方的要求即可 新人进入一个企业,不会接触到核心的架构 ...

  3. Python记录13:软件开发目录规范

    软件开发目录规范 开发一个软件,一个工程项目,一般应该具备以下的几个基本的文件夹和模块,当然,这并不是一成不变的,根据项目的不同会有一定的差异,不过作为一个入门级的新手,建议暂时按照以下的规范编写: ...

  4. python 之 软件开发目录规范 、logging模块

    6.4 软件开发目录规范 软件(例如:ATM)目录应该包含: 文件名 存放 备注 bin start.py,用于起动程序   core src.py,程序核心功能代码   conf settings. ...

  5. Python模块:Re模块、附软件开发目录规范

    Re模块:(正则表达式) 正则表达式就是字符串的匹配规则 正则表达式在多数编程语言里都有相应的支持,Python里面对应的模块时re 常用的表达式规则:(都需要记住) “ . ”   #  默认匹配除 ...

  6. python模块导入-软件开发目录规范-01

    模块 模块的基本概念 模块: # 一系列功能的结合体 模块的三种来源 """ 模块的三种来源 1.python解释器内置的模块(os.sys....) 2.第三方的别人写 ...

  7. py 包和模块,软件开发目录规范

    目录 py 包和模块,软件开发目录规范 什么是包? 什么是模块? 软件开发目录规范 py 包和模块,软件开发目录规范 什么是包? 包指的是内部包__init__.py的文件夹 包的作用: 存放模块,包 ...

  8. python基础语法10 函数递归,模块,软件开发目录规范

    函数递归: 函数递归指的是重复 “直接调用或间接调用” 函数本身, 这是一种函数嵌套调用的表现形式. 直接调用: 指的是在函数内置,直接调用函数本身. 间接调用: 两个函数之间相互调用间接造成递归. ...

  9. day21 模块与包+软件开发目录规范

    目录 一.导入模块的两种方式 二.模块搜索的路径的优先级 三.循环导入 四.区分py文件的两种用途 五.编写一个规范的模板 五.包 1 什么是包 2 为什么要有包 3 包的相关使用 3.1 在当前文件 ...

  10. 软件开发目录规范 ATM框架构建

    软件开发的目录规范 建立文件夹 为了提高程序的可读性与可维护性,我们应该为软件设计良好的目录结构,这与规范的编码风格同等重要.软件的目录规范并无硬性标准,只要清晰可读即可 以ATM购物车项目为例: 首 ...

随机推荐

  1. 第二周python作业

    print("今有不知其数,三三数之剩二,五五数之剩三,七七数之剩二,问几何?\n") number=int(input("请输入您认为符合条件的数: ")) ...

  2. CPS攻击案例(一)——基于脉冲宽度调制PWM的无人机攻击

    ​  本文系原创,转载请说明出处 Please Subscribe Wechat Official Account:信安科研人,获取更多的原创安全资讯 原论文链接:sec22-dayanikli.pd ...

  3. java常用注解校验参数

    validation中内置的constraints 注解 描述 @AssertFalse 所注解的元素必须是Boolean类型,且值为false @AssertTrue 所注解的元素必须是Boolea ...

  4. Java递归查找层级文件夹下特定内容的文件

    递归查找文件 引言 或许是文件太多,想找某个文件又忘记放哪了;又或者是项目改造,需要将外部调用接口进行改造,项目太多,又无法排查.那么怎么快速找到自己想要的内容就是一件值得思考的事情了. 根据特定内容 ...

  5. Python凯撒密码加解密

    #凯撒密码第一个版本 #加密 pxpt=input("请输入明文文本:") for p in pxpt: if 'a'<=p<='z': print(chr(ord(' ...

  6. NLP之基于Seq2Seq和注意力机制的句子翻译

    Seq2Seq(Attention) @ 目录 Seq2Seq(Attention) 1.理论 1.1 机器翻译 1.1.1 模型输出结果处理 1.1.2 BLEU得分 1.2 注意力模型 1.2.1 ...

  7. Sprint产品待办列表的优先级要怎么排?

    在梳理产品待办事项列表的过程中,产品负责人需要先做优先级排列,保证我们 在一定的时间盒内能够交付需要优先级最高.最具价值的用户故事. 那这个用户故事的优先级要怎么排列,我们怎样选择用户故事的实现顺序? ...

  8. CSP-J/S 2021 游记

    \(\large\texttt{Day -1}\) 晚上好累啊,去集训了,回来之后发现十一点了还码了一会儿,只能祈求上帝明天不会打瞌睡. \(\large\texttt{Day 0}\) 意料中的事情 ...

  9. Git配置和使用?Git你真的会用么?Git与SVN的主要区别

    1.Git环境配置    在学习Git之前,首先要知道什么是版本控制 1.1 版本控制:版本迭代.新的版本!版本管理器 版本控制是开发过程中用于管理我们的文件.目录或工程内容的修改内容,查看修改历史记 ...

  10. Sqlite 安装操作使用

    一.什么是 SQLite 数据库 SQLite 是嵌入式SQL数据库引擎.与大多数其他 SQL 数据库不同,SQLite 没有单独的服务器进程.SQLite 直接读取和写入普通磁盘文件.具有多个表,索 ...