Quiero aprender Python en secreto y luego sorprender a todos (día 6)

Inserte la descripción de la imagen aquí

El título no pretende ofender, pero creo que este anuncio es divertido
. Si te gusta, toma el mapa mental anterior. No puedo aprender mucho de todos modos.

Prefacio

Revisión inicial: quiero aprender Python en secreto y luego sorprender a todos (día 5)

本系列文默认各位有一定的C或C++基础,因为我是学了点C++的皮毛之后入手的Python,这里也要感谢齐锋学长送来的支持。
本系列文默认各位会百度,学习‘模块’这个模块的话,还是建议大家有自己的编辑器和编译器的,上一篇已经给大家做了推荐啦?

我要的不多,点个关注就好啦
然后呢,本系列的目录嘛,说实话我个人比较倾向于那两本 Primer Plus,所以就跟着它们的目录结构吧。

本系列也会着重培养各位的自主动手能力,毕竟我不可能把所有知识点都给你讲到,所以自己解决需求的能力就尤为重要,所以我在文中埋得坑请不要把它们看成坑,那是我留给你们的锻炼机会,请各显神通,自行解决。

De acuerdo, este es un "ensayo divertido". ¿Ves cuántos proyectos divertidos haremos hoy? Siéntese, abra su compilador, ya sea un compilador en línea o un compilador de PC

Cuando esto termine, comenzaré a rastrear cuando escriba un artículo.


Correo masivo

Un amigo me pidió que escribiera una función de envío masivo de correos, y luego viniera? (Aquí llena manualmente el paquete emoji)

He estado aprendiendo durante tantos días. Debería estar familiarizado con este método y proceso. ¿Cuál es el primer paso?

  1. Encuentre el módulo o paquete utilizado para el envío masivo
  2. Familiarizarse o comprender el uso del módulo o paquete
  3. ¿Como entender? ¿Hay ejemplos en el manual?
  4. Revisar y modificar, tal función saldrá

Bien, después de aclarar los pasos, comencemos: compatibilidad con la función de biblioteca Python3.9


···

Inserte la descripción de la imagen aquí

Inserte la descripción de la imagen aquí


Referencia de código

El estado de ánimo de hoy es un poco desanimado, solo ve a una referencia de código, hablemos del código

Pseudocódigo 1: enviar un correo electrónico de shell

Tomemos el buzón QQ como ejemplo (porque solo tengo el buzón QQ)

Antes de hacer esto, primero tenemos que hacer una cosa: usar la autorización para clientes de terceros que abren buzones de correo QQ.
Nuestro buzón de correo QQ no significa que se pueda utilizar ningún software para enviar correos electrónicos. Esto requiere autorización.
Cómo hacerlo específicamente,

  1. Iniciar sesión en el buzón de correo de QQ
  2. Configuración -> Cuenta -> Servicio POP3 / IMAP / SMTP / Exchange / CardDAV / CalDAV -> activar, activar los dos primeros
  3. Es 2020-10-26. Si la interfaz se revisa en el futuro, busque la cadena de inglés anterior y manténgase al día.

Después de completar estos pasos, obtendremos algunos códigos de autorización. Recuerde usar el código de autorización más reciente.

# smtplib 用于邮件的发信动作
import smtplib	#引入smtplib模块

# 发信方的信息:发信邮箱,QQ邮箱授权码
from_addr = '[email protected]'	
password = '你的授权码'

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

# 发信服务器
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()

Este es un fragmento de pseudocódigo. Recuerda, esto no se puede ejecutar. Debes completar la información que falta. Por supuesto, no tenemos prisa por ejecutarlo hasta que termine.

Pseudocódigo 2: creación del contenido del correo electrónico

El pseudocódigo anterior es el caparazón del correo electrónico, y el paquete de correo electrónico debe realizar el contenido específico del correo electrónico.

Inserte la descripción de la imagen aquí

Aquí presentaremos la declaración de importación nuevamente.

Para enviar este correo electrónicopaquete
Hay una diferencia entre la importación de este paquete y la importación de módulos. Recuerdo que usé la importación para importar qué módulo y no funcionó (no es necesario que mires hacia atrás, soy amnesia, no sé si se envió), y ahora hay resultados. Arriba.

Se trata de la diferencia entre "módulo" y "paquete". Un módulo es generalmente un archivo y un paquete es un directorio. Un paquete puede contener muchos módulos. Se puede decir que un paquete es un "paquete de módulos". "consiste en.

Donde no puede ver, hay un archivo init.py que secretamente controla todo esto (por supuesto, hay formas de verlo), e init.py controla el comportamiento de importación del paquete. Si este archivo está vacío, no podemos hacer nada si solo importamos el paquete. Por lo tanto, la importación de correo electrónico directamente no funciona.

Por lo tanto, necesitamos usar la instrucción from… import… para importar el [objeto necesario] de [un archivo] en el directorio del paquete de correo electrónico. Por ejemplo, introduzca el método MIMEText del archivo de texto en el paquete de correo electrónico.

MIMEText(msg,type,chartset)
# msg:文本内容,可自定义
# type:文本类型,默认为plain(纯文本)
# chartset:文本编码,中文为“utf-8”

Paso aquí, de hecho, sería capaz de emitir un mensaje de (en frente de las porciones de pseudo-código no llenar msg conocer en esto: msg = MIMEText('send by python','plain','utf-8'))

Los amigos con habilidades prácticas sólidas pueden probarlo por sí mismos, y los amigos con habilidades prácticas débiles pueden seguirme.
Verá que este es un correo electrónico sin cabeza.

El encabezado del correo (encabezado, sí, también se llama encabezado) es esta área, que incluye el asunto, el remitente, el destinatario y otra información:

from email.header import Header

msg['From'] = Header(from_addr)
msg['To'] = Header(to_addr)
msg['Subject'] = Header('python test')

Agregue esta pieza a su código, el efecto es el siguiente:

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 = '[email protected]'
to_addr = '[email protected]'
#to_addr = '[email protected]'

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()

Complete esos pocos parámetros en este código y puede enviarlo.


correo electrónico grupal

Para las publicaciones grupales, hay dos formas, hablaré de una, mencionaré una y dejaré una:

El primer método es escribir to_addrs como una lista:

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 = '[email protected]'
to_addrs = ['[email protected]','[email protected]','[email protected]']

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()

Una mención:
aquí se pueden hacer algunas optimizaciones de seguridad. Aunque nadie quiere tomar nuestro código, los buenos hábitos deben iniciarse desde una edad temprana.

Cuando comencé a aprender a programar e hice el primer proyecto, el maestro nos dijo que la contraseña de este proyecto debería convertirse en texto cifrado para que el usuario ingrese, pero no para que lo vea.
Entonces, ¿qué hay de malo en este código?

1. Nuestras cuentas son todas públicas (aunque lo anterior es un pseudocódigo)
2. Nuestro código de autorización también es público
3. Nuestro código tiene poca reutilización y poca disponibilidad (esto implica el segundo método)

La solución a los dos primeros problemas también es muy simple, solo ingrese.
Pero ¿qué pasa con esa lista? ¿Qué tengo que hacer?
while loop! !

to_addrs = []
while True:
    a=input('请输入收件人邮箱:')
    #输入收件人邮箱
    to_addrs.append(a)
    #写入列表
    b=input('是否继续输入,n退出,任意键继续:')
    #询问是否继续输入
    if b == 'n':
        break

Mejore la reutilización y usabilidad del código

¿Qué es la reutilización de código? Este es tu código. Hoy quiero enviar a estas cinco personas en un grupo. Sí, mañana quiero enviar a las otras seis personas en un grupo. ¿Cómo hacer? Entra y cambia el código.
Si tiene que cambiar el código, el diseño de reutilización de este código es una lástima.

Entonces, ¿qué es la disponibilidad de código? ¿Estás escribiendo para alguien que pueda escribir código? Esa sigue siendo la pregunta anterior. ¿Qué pasa si quiere cambiar algunas personas para publicar? ¿Qué debo hacer si quiero enviárselo a una persona más algún día o enviarlo a una persona menos?

No es fácil de usar, no puede.

¿Qué hacer entonces?
¿Recuerda los módulos que usamos para operar Excel antes? Sí, pruébalo tú mismo.


Globo de confesión

Lo anterior es más serio. Deje que todos lo hagan paso a paso. A continuación, echemos un vistazo a un fragmento de código para ver cuánto puede comprender. Si no comprende, puede usar Baidu. También puede unirse a nuestro pequeño círculo para chatear con usted.

Dibujé un círculo, bienvenidos a todos a nuestro pequeño círculo.

He creado un grupo de preguntas y respuestas de Python, los amigos que estén interesados ​​pueden averiguarlo: ¿Qué tipo de grupo es este?

Portal a través del grupo: Portal

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()

Déjame ver si puedo agregar un video
Inserte la descripción de la imagen aquí

Eso no es posible, no es que no agregue videos

Inserte la descripción de la imagen aquí

Puedes probarlo tu mismo


Optimización del flujo de cola larga

Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/qq_43762191/article/details/109282813
Recomendado
Clasificación