Bootstrap

python知识收集

语法

def声明函数

class声明类

class 子类(父类) 继承

数据结构

列表

列表(也称序列)是 Python 中最基本的数据结构。

列表操作

import operator
list = ['海尔','海信','格力','美的','小米','奥克斯']

print(list)
# 查询
print(list[0])
print(list[2])
print(list[-1])
print(list[-2])
print(list[1:3])
print(list[0:-3])

# 增加
list.append('统帅')
print(list)
#修改
list[4] = 'vivo'
print(list)

#删除
del list[-3]
print(list)

#列表比较
a = [1,2]
b = [2,3]
print("operatro.eq(a,b):",operator.eq(a,b))

#列表推导式
# [表达式 for 变量 in 列表] 
# [out_exp_res for out_exp in input_list]
# 或者 
# [表达式 for 变量 in 列表 if 条件]
# [out_exp_res for out_exp in input_list if condition]

names = ['Bob','Tom','alice','Jerry','Wendy','Smith']
new_names = [name.upper() for name in names if len(name) > 3]
print(new_names)

元组

Python 的元组与列表类似,不同之处在于元组的元素不能修改。
元组使用小括号 ( ),列表使用方括号 [ ]。

元组操作

tup = (1,2,3,4,5,6,7)

print(tup[1])
print(tup[0:3])

print(tup[-1])
print(tup[0:-3])

# 元组中的元素值不允许修改

#删除元组
del tup

#元组内置函数
# len(tuple) 元组长度
tuple1 = ('刘备','关羽','张飞','周瑜')
print(len(tuple1))

# max(tuple) 元组最大值
print(max(tuple1))

# min(tuple) 元组最小值
print(min(tuple1))

# tuple(iterable) 将可迭代的序列转换为元组
list = ['曹操','司马懿','夏侯惇']
print(tuple(list))

# 元组推导式
(expression for item in Sequence )
或
(expression for item in Sequence if conditional )

字典

字典是另一种可变容器模型,且可存储任意类型对象。
字典的每个键值 key=>value 对用冒号 : 分割,每个对之间用逗号(,)分割,整个字典包括在花括号 {} 中

遍历字典

movie = {
'猫妖传':['黄轩','染谷将太'],
'无问东西':['章子怡','王力宏','祖峰'],
'超时空同居':['雷佳音','佟丽娅'],
}

name = input('你想查询哪个演员?')
for i in movie:
    actors = movie[i]
    #取出字典的值
    if name in actors:
        print(name+'出演了电影'+i)
        
for i in movie:
	i表示key值
	movie[i]表示vlaue值

# 遍历字典values
for value in DictName.values():
# value的名字可以自行另取
# DictName是要遍历的字典的名称
# .values():是固定的用法

# 遍历字典
for k,v in DictName.items():
#遍历字典的键值对,k对应键,v对应值
#k,v 的名字可以自己取,DictName是字典名

集合

文件读写

读文件

开——读——关

file = open('D://test.txt','r',encoding='utf-8')
fileContent = file.read()
print(fileContent)
file.close()

写文件

开——写——关

# w 写入模式会清空文件再写入,a 追加写入
file = open('D://test.txt','a',encoding='utf-8')
file.write('诸葛亮\n')
file.write('赵云\n')
file.close()

# 普通写法
file1 = open('abc.txt','a') 
file1.write('张无忌') 
file1.close()

# 使用with关键字的写法
with open('abc.txt','a') as file1:
#with open('文件地址','读写模式') as 变量名:
    #格式:冒号不能丢
    file1.write('张无忌') 
    #格式:对文件的操作要缩进
    #格式:无需用close()关闭

csv模块

学习模块三问

  • 模块有哪些函数可用 ->可以通过dir()函数查询
  • 有哪些属性或方法可用->网上看文档或找教程
  • 使用格式是什么->从文档或教程中搜集案例

读入

import csv

with open('test.csv', newline = '', encoding = 'utf-8')  as f:
    #参数encoding = 'utf-8'防止出现乱码
    reader = csv.reader(f)
    for row in reader:
        print(row)
        
print('读取完毕!')

写入

import csv
with open('test.csv','a', newline='',encoding='utf-8') as f:
    writer  = csv.writer(f)
    writer.writerow(['4', '猫砂', '25', '1022', '886'])
    writer.writerow(['5', '猫罐头', '18', '2234', '3121'])

time模块

# 第一行:必不可少的调用模块。
import time

input("欢迎使用“时间管理器”!请按回车继续。")

while True:
    task_name = input('请输入任务名:')
    task_time = int(input('你觉得自己至少可以专注这个任务多少分钟?输入 N 分钟'))
    input('此次任务信息:\n我要完成的任务:%s\n我至少要专注:%d分钟\n按回车开始专注:'%(task_name,task_time))
    # 下面应该要有两行代码,自动记录可以计算以及可以打印的开始时间。
    start = time.time()
    start_time = time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time()))
    print(start_time)


    # 这里可以加一个倒计时,实时显示还剩多少时间,可参考左侧提供的资料。代码量大概有5行。
    for i in range(task_time * 60,0,-1):
        info = '任务开始,请保持专注,还需要专注'+str(i)+'秒哦!'
        print(info,end="")
        print("\b"*(len(info)*2),end="",flush=True)
        time.sleep(1)
    print('你已经专注了{}分钟,很棒~再加把劲,完成任务!!!'.format(task_time))

    task_status = input('请在任务完成后按输入y:')
    actual_time = input('该任务实际用时为几分钟?')
    if task_status == 'y':
        # 下面应该要有两行代码,自动记录可以计算以及可以打印的结束时间。
        # 有了自动记录的始末时间后,记录的代码也需要随之改变。
        with open('timelog2.txt','a', encoding = 'utf-8') as f:
            f.write(task_name + ' 的预计时长为:' + str(task_time) + '分钟\n')
            f.write(task_name + ' 的实际时长为:' + str(actual_time) + '分钟\n')
        again = input('建立一个新任务请按 y, 退出时间日志记录器请按 q:')
        if again == 'q':            
            break
    else:
        print('抱歉,你的输入有误。请重启时间记录器。')

print('愿被你善待的时光,予你美好的回赠。')

发送邮件

import smtplib
import csv
from email.mime.text import MIMEText
from email.mime.image import MIMEImage
from email.mime.multipart import MIMEMultipart
from email.utils import formataddr
from email.header import Header

# 邮件内容
text = '''一个人的一生只有三天,昨天,今天和明天。
昨天已经过去永不复返,我们要及时汲取昨天的经验和教训;
今天已经和我们在一起,我们要倍加珍惜,脚踏实地做事情;
明天将要到来,我们要提前规划,仰望星空!
'''
# 接收人姓名邮箱数据
data = [['wangcheng1','[email protected]'],['wangcheng','[email protected]']]

#写入收件人数据
with open('D://to_addrs.csv','w',newline='') as f:
      writer = csv.writer(f)
      for row in data:
            writer.writerow(row)

# 发信方的信息:发送邮件,授权码
from_addr = '[email protected]'
password = 'osmoycuqfgvobddd'

# 收信方邮箱
to_addr = '[email protected]'

#发信服务器
smtp_server = 'smtp.qq.com'

# 读取收件人数据,并启动写信和发信流程
with open('D://to_addrs.csv','r') as f:
      reader = csv.reader(f)
      for row in reader:
            to_addrs=row[1]
            msg = MIMEText(text,'plain','utf-8')
            msg['From'] = formataddr((str(Header('冉成科技','utf-8')),'[email protected]'))
            msg['To'] = Header(to_addrs)
            msg['Subject'] = Header('测试Python发送邮件','utf-8')
            #开启发信服务,这里使用加密传输
            server = smtplib.SMTP()
            server.connect(smtp_server,25)
            server.login(from_addr,password)
            try:
                  server.sendmail(from_addr,to_addrs,msg.as_string())
                  print('恭喜,发送成功')
            except:
                  print('发送是被,请重试')


# 关闭服务器
server.quit()

制作二维码

from MyQR import myqr
myqr.run('https://www.baidu.com',colorized=True,save_name=r'D:\demo_png.gif',picture='she.gif',contrast=1.5)

滚动广告

# 运行前可将第8行改为 for i in range(20) 控制一下循环次数。
# 或者,可以直接运行,然后用“刷新网页”这种方法强行打断程序。

import os, time

def main():  # 用函数封装,可复用性会高一些(可在其他的.py文件里调用该函数。)
    content = ' 风变编程,陪你一起学Python '  # 广告词可自定义。
    while True:
        os.system('clear')  # 完成清屏:清屏和打印结合起来,形成滚动效果。
        print(content)
        content = content[1:] + content[0]  # 这行代码相当于:将字符串中第一个元素移到了最后一个。
        time.sleep(0.25)  # 你可以改下时间,体会“循环周期”和“滚动速度”之间的关联。


if __name__ == '__main__':  # 类里面学到的检测方法,在函数中其实也可以用。
    main()
;