你要偷偷的学Python,然后惊呆所有人(第六天)
off999 2024-12-13 15:36 17 浏览 0 评论
标题无意冒犯,就是觉得这个广告挺好玩的
文章目录
- 前言
- 邮件群发
- 代码参考
- 伪代码1:发送一个空壳邮件
- 伪代码2:构建邮件内容
- 群发邮件
- 提高代码可复用性与可用性
- 告白气球
- 我画了个圈,欢迎大家来我们的小圈子
前言
前期回顾:你要偷偷学Python,然后惊呆所有人(第五天)
本系列文默认各位有一定的C或C++基础,因为我是学了点C++的皮毛之后入手的Python。
本系列文默认各位会百度,学习‘模块’这个模块的话,还是建议大家有自己的编辑器和编译器的,上一篇已经给大家做了推荐啦?
然后呢,本系列的目录嘛,说实话我个人比较倾向于那两本 Primer Plus,所以就跟着它们的目录结构吧。
本系列也会着重培养各位的自主动手能力,毕竟我不可能把所有知识点都给你讲到,所以自己解决需求的能力就尤为重要,所以我在文中埋得坑请不要把它们看成坑,那是我留给你们的锻炼机会,请各显神通,自行解决。
1234567
好,这是一篇“玩乐文”,看看我们今天会做几个好玩的项目呢?坐好咯,打开你们的编译器,不论是在线编译器还是PC编译器
如果大家在学习中遇到困难,想找一个python学习交流环境,可以加入我们的python裙,关注小编,并私信“01”即可进裙,领取python学习资料,会节约很多时间,减少很多遇到的难题。
这篇玩完了,下一篇就开始进爬虫咯
邮件群发
有朋友让我写邮件群发的功能,那就来呗?(此处手动补上表情包)
也学了这么些天了,应该对这套方法流程很熟悉了吧,第一步要干什么?
- 找到群发邮件所使用的模块或包
- 熟悉或了解该模块或包的使用
- 怎么了解?手册里有示例的嘛
- 修修改改,这么一个功能就出来啦
好,明确了步骤之后,我们开始吧:Python3.9库函数支持
···
代码参考
今天情绪有点不高,就直接来个代码参考,对着代码来讲吧
伪代码1:发送一个空壳邮件
我们以QQ邮箱为例(因为我只有QQ邮箱)
在干这个事情之前,我们要先干一个事情:开通QQ邮箱的第三方客户端使用授权。
我们的QQ邮箱并不是说用什么软件都能去发邮件的,这需要授权。
具体怎么弄嘞,
- 登录QQ邮箱
- 设置->账户->POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务->开通,开通前两个
- 现在是2020-10-29,如果以后界面又改版了,请搜索上面那一串英文,与时俱进
做完这些步骤之后,我们会拿到一些授权码,记住,使用最新的那个授权码。
# smtplib 用于邮件的发信动作
import smtplib #引入smtplib模块
# 发信方的信息:发信邮箱,QQ邮箱授权码
from_addr = 'xxx@qq.com'
password = '你的授权码'
# 收信方邮箱
to_addr = 'xxx@qq.com'
# 发信服务器
smtp_server = 'smtp.qq.com' #目前就是这个了,你也不用去百度啦,我当时百度了十分钟,最后确定了就是它。。。
# 开启发信服务,这里使用的是加密传输
server = smtplib.SMTP_SSL()
server.connect(smtp_server,465) #这个465是端口号,如果不是465就换587试试,实在不行就只能公共端口号25了
# 登录发信邮箱
server.login(from_addr, password)
# 发送邮件
server.sendmail(from_addr, to_addr, msg.as_string())
# 关闭服务器
server.quit()
12345678910111213141516171819202122232425
这是一段伪代码,切记,这个是不能运行的,需要你把里面缺失的信息补全了,当然,我们不急着运行,等我讲完。
伪代码2:构建邮件内容
上面那段伪代码是发送邮件的壳,而邮件的具体内容,还得靠email包来实现
这里要重新介绍一下import这个语句了。
对于email这个包
这个包的导入和模块的导入是有不一样的地方,我记得前边是用import导入哪个模块然后不行了来着(不用翻回去找,我健忘症,不知道有没有发出来),现在有结果了。
这就要谈到“模块”和“包”的区别了,模块(module)一般是一个文件,而包(package)是一个目录,一个包中可以包含很多个模块,可以说包是“模块打包”组成的。
在你看不见的地方,有一个init.py文件在暗中操控着这一切(当然,要看也有办法),init.py控制着包的导入行为。假如这个文件为空,那么我们仅仅导入包的话,就什么都做不了。所以直接import email是行不通的。
所以,我们就需要使用from … import …语句,从email包目录下的【某个文件】引入【需要的对象】。比如从email包下的text文件中引入MIMEText方法。
MIMEText(msg,type,chartset)
# msg:文本内容,可自定义
# type:文本类型,默认为plain(纯文本)
# chartset:文本编码,中文为“utf-8”
1234
步骤进行到这里,其实就已经可以发出一个邮件了(在前面的伪代码部分,会发现msg填不上,这样:msg = MIMEText('send by python','plain','utf-8'))
动手能力强的朋友可以自己试一下了,动手能力不强的朋友可以跟着我再往下。
就是你会发现这是一个无头邮件。
邮件头(header,没错它也叫header)是这一块区域,包括主题、发件人、收件人等信息:
from email.header import Header
msg['From'] = Header(from_addr)
msg['To'] = Header(to_addr)
msg['Subject'] = Header('python test')
12345
把这一块加入到你的代码里去,效果如下:
from email.mime.text import MIMEText
from email.header import Header
import smtplib
#这里的邮箱请自己填哦
msg = MIMEText('猜猜我是谁:send by python','plain','utf-8')
smtp_server = 'smtp.qq.com'
from_addr = 'FF@foxmail.com'
to_addr = 'XX@qq.com'
#to_addr = 'XX@qq.com'
msg['From'] = Header('阿喵')
msg['To'] = Header(to_addr)
msg['Subject'] = Header('这是一份Python发送的邮件哦,今天刚学的哈哈哈')
server = smtplib.SMTP_SSL(smtp_server)
server.connect(smtp_server, 465)
#server = smtplib.SMTP()
#server.connect(smtp_server,25)
server.login(from_addr, 'XXX')#授权码要选最新的
server.sendmail(from_addr, to_addr, msg.as_string())
server.quit()
1234567891011121314151617181920212223242526
这段代码里面你把那几个参数填上,就可以去发了。
群发邮件
群发的话,这里有两个办法,我讲一个,提一个,留一个吧:
第一个方法是把 to_addrs写成一个列表形式:
from email.mime.text import MIMEText
from email.header import Header
import smtplib
msg = MIMEText('猜猜我是谁:send by python','plain','utf-8')
smtp_server = 'smtp.qq.com'
from_addr = 'FF@foxmail.com'
to_addrs = ['FF@foxmail.com','XX@qq.com','XX@qq.com']
msg['From'] = Header('阿喵')
msg['To'] = Header(",".join(to_addrs))
#因为server.sendmail(from_addr, to_addrs, msg.as_string())这个函数里面接收的msg参数只能是字符串(不信你把这行去掉试试),所以我们要把这个列表变成字符串
msg['Subject'] = Header('这是一份Python发送的邮件哦,今天刚学的哈哈哈')
server = smtplib.SMTP_SSL(smtp_server)
server.connect(smtp_server, 465)
#server = smtplib.SMTP()
#server.connect(smtp_server,25)
server.login(from_addr, '填你自己的')#授权码要选最新的
server.sendmail(from_addr, to_addrs, msg.as_string())
server.quit()
12345678910111213141516171819202122232425
提一个:
这里可以做一些安全方面的优化,虽然说也没啥人要拿咱的这个代码,但是好的习惯要从小抓起。
在我刚开始学编程,做的第一个项目的时候,老师就跟我们说,这个项目的密码要做成密文的,让用户输入,不能让别看到。
那么这段代码中有什么问题呢?
1、我们的账号都是公开的(虽然上面是伪代码)
2、我们的授权码也是公开的
3、我们的代码复用程度低,可用性低(这就涉及到第二个方法了)
解决前两个问题的方法也很简单,input就好了。
不过那个列表呢?怎么办嘞?
while循环!!
to_addrs = []
while True:
a=input('请输入收件人邮箱:')
#输入收件人邮箱
to_addrs.append(a)
#写入列表
b=input('是否继续输入,n退出,任意键继续:')
#询问是否继续输入
if b == 'n':
break
12345678910
提高代码可复用性与可用性
什么叫代码可复用性呢?就是你这个代码,今天我要群发这五个人,可以,明天我要群发另外六个人呢?怎么办?进去改代码。
如果到了要改代码这一步,那这个代码的可复用性设计也就太差了。
那什么叫代码可用性呢?请问你写的东西是给会写代码的人玩吗?那还是上面那个问题,她要是想换几个人群发那怎么办?哪天想多给一个人发,哪天想少给一个人发,怎么办?
不好用呐,她不会啊。
那怎么办?
还记得我们之前操作Excel的模块吗?对头,自己试一下吧。
告白气球
上面讲的比较认真些,带着大家一步一步做,接下来大家自己来看一段代码,看看能看懂多少,看不懂的可以百度,也可以加入我们的小圈子来和大家一起聊聊,私信阿喵“01”即可进入。
我画了个圈,欢迎大家来我们的小圈子
import turtle
import time
# 画心形圆弧
def chage_angle():
for i in range(200):
turtle.right(1)
turtle.forward(2);
def move_position(x,y):
turtle.hideturtle() # 隐藏画笔(先)
turtle.up() # 提笔
turtle.goto(x,y)# 移动画笔到指定起始坐标(窗口中心为0,0)
turtle.down() # 下笔
turtle.showturtle() # 显示画笔
love = input("请输入表白语: ")
signature = input("请输入签名: ")
if love == '':
love = "I LOVE YOU"
turtle.setup(width=800, height=500) # 窗口(画布)大小
turtle.color('red', 'pink') # 画笔颜色
turtle.pensize(3) # 画笔粗细
turtle.speed(1) # 描绘速度
# 初始化画笔起始坐标
move_position(x=0,y=-180) # 移动画笔位置
turtle.left(140) # 向左旋转140度
turtle.begin_fill() # 标记背景填充位置
# 画心形直线( 左下方 )
turtle.forward(224) # 向前移动画笔,长度为224
# 画爱心圆弧
chage_angle() # 左侧圆弧
turtle.left(120) # 调整画笔角度
chage_angle() # 右侧圆弧
# 画心形直线( 右下方 )
turtle.forward(224)
turtle.end_fill() # 标记背景填充结束位置
# 在心形中写上表白话语
move_position(0,20) # 表白语位置
turtle.hideturtle() # 隐藏画笔
turtle.color('#CD5C5C', 'pink') # 字体颜色
# font:设定字体、尺寸(电脑下存在的字体都可设置)
turtle.write(love, font=('Arial', 30, 'bold'), align='center')
# 签写署名
if signature != '':
turtle.color('red', 'pink')
time.sleep(2)
move_position(180, -180)
turtle.hideturtle() # 隐藏画笔
turtle.write(signature, font=('Arial', 20), align="left")
# 点击窗口关闭程序
window = turtle.Screen()
window.exitonclick()
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
我看看能不能加视频啊
那没办法咯,不是我不加视频
可以自己去试试看哦
最后多说一句,想学习Python可联系阿喵,这里有我自己整理的整套python学习资料和路线,想要这些资料的都可以关注阿喵,并私信“01”领取。
相关推荐
- Modbus RTU 指令基本功能介绍(modbus-rtu)
-
ModbusRTU协议概述:入门级知识点ModbusRTU协议,是工业自动化领域应用广泛的串行通信协议。它简单、可靠,在各种工业设备之间建立通信桥梁,实现数据的采集和控制。ModbusRTU...
- AIOT开发选型:行空板 K10 与 M10 适用场景与选型深度解析
-
前言随着人工智能和物联网技术的飞速发展,越来越多的开发者、学生和爱好者投身于创意项目的构建。在众多的开发板中,行空板K10和M10以其独特的优势脱颖而出。本文旨在为读者提供一份详尽的行空板K...
- 程序员花了1个月时间,手搓低成本机械臂:跟着他你也能复刻一台
-
在开源硬件的广阔天地中,SO-ARM100作为一款备受瞩目的开源机械臂项目脱颖而出。它以标准化的四轴机械臂设计为核心,构建起一个开放共享的技术平台,为机械臂爱好者与开发者提供了绝佳的远程操作实践场域...
- RPC接口测试技术-Tcp 协议的接口测试
-
首先明确Tcp的概念,针对Tcp协议进行接口测试,是指基于Tcp协议的上层协议比如Http,串口,网口,Socket等。这些协议与Http测试方法类似(具体查看接口自动化测试章...
- 同事开玩笑说:你这个python程序要是外流出去了,可能会有危险
-
引言公司因为业务原因,购入了一些高灵敏高精度的振动传感器。老板说:“拿去进行测试,看看数据如何?”吭哧吭哧接入数据,一看,确实精度和灵敏度非常高。具体多高呢?将传感器固定在相关的结构物上,在办公室中人...
- STM32搭建简易环境监测站并通过网络实时上报
-
一、系统总体架构本系统以STM32F407为核心,搭建一个环境监测节点,能够采集温湿度、光照、空气质量等数据,并通过OLED屏显示,同时通过ESP8266模块实现局域网数据上报。适合室内空气监测、智慧...
- STM32通过NB-IoT模块实现远程告警推送
-
一、项目概述本系统以STM32F103C8T6作为主控核心,通过串口控制NB-IoT通信模块(移远BC26),实现对外设状态的远程监测和异常自动告警推送(如温度超限、设备震动异常等)。支持通过UDP或...
- MicroPython 玩转硬件系列3:上电执行程序
-
1.引言上一篇:MicroPython玩转硬件系列2:点灯实验我们在ESP32上实现了LED灯的闪烁,但是有一个问题,该功能的实现需要我们在串口终端里去手动执行代码,可不可以让ESP32上电后自动...
- 打标机与上位机通讯异常如何快速定位?串口工具验证流程拆解
-
打标机与上位机通信过程中出现的错误问题需要通过串口通信助手验证,主要原因在于串口通信的底层特性以及问题隔离的工程需求。以下是原理说明和验证方法:一、验证原理底层数据透明化串口通信本质上是基于二进制数据...
- 4G短信猫发送中文短信(Python)(4g短信)
-
4G短信猫发送中文短信(Python)4G短信猫发送中文短信的方式可以使用TEXT模式或者PDU模式。1.TEXT模式在TEXT模式下发送中文短信的指令序列:AT+CSCS="UCS2...
- ESP32如何刷microPython固件(esp32 固件升级)
-
目录为什么要刷microPython固件固件和工具的获取刷固件的步骤检验是否成功1.为什么要刷固件microPython是由计算机工程师DamienGeorge设计出来的,他的初衷是——用Pyth...
- CH9329双头线使用说明(双头线是干什么用的)
-
目录1.介绍说明2.测试说明3.修改为ASCII模式(CH9328字符模式)常见问题解答:1.介绍说明CH9329双头线是集成了CH9329+CH340芯片的成品线,主要作用是使用主控电脑发送串口指令...
- Windows下最简单的ESP8266_ROTS_ESP-IDF环境搭建与腾讯云SDK编译
-
前言其实也没啥可说的,只是我感觉ESP-IDF对新手来说很不友好,很容易踩坑,尤其是对业余DIY爱好者搭建环境非常困难,即使有官方文档,或者网上的其他文档,但是还是很容易踩坑,多研究,记住两点就行了,...
- CPU眼里的:Python 和 C(cpp和python)
-
“Python跟C语言有什么联系?它们在计算机系统中分别扮演着什么角色?”01提出问题Python可能是当今最热门的编程语言,凭借简洁易读的语法和强大的生态,成为许多新手程序员的首选。然而,作为一门解...
- Python在工控领域的应用与优势(python工业控制系统)
-
前言之前利用Python编写了一些S7系列的PLC调试工具和组态开发,今天就具体讲讲Python在工控领域还有哪些应用与优势。Python在工业控制工控领域的应用逐渐增多,得益于其简洁的语法、丰富的生...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- python计时 (73)
- python安装路径 (56)
- python类型转换 (93)
- python进度条 (67)
- python吧 (67)
- python字典遍历 (54)
- python的for循环 (65)
- python格式化字符串 (61)
- python静态方法 (57)
- python列表切片 (59)
- python面向对象编程 (60)
- python 代码加密 (65)
- python串口编程 (77)
- python读取文件夹下所有文件 (59)
- java调用python脚本 (56)
- python操作mysql数据库 (66)
- python获取列表的长度 (64)
- python接口 (63)
- python调用函数 (57)
- python多态 (60)
- python匿名函数 (59)
- python打印九九乘法表 (65)
- python赋值 (62)
- python异常 (69)
- python元祖 (57)