文章目录
语法
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()