비밀리에 파이썬을 배우고 모두에게 충격을주고 싶다 (6 일차)

여기에 사진 설명 삽입

제목은 불쾌감을주기위한 것이 아니지만이 광고가 재미 있다고 생각합니다
. 마음에 들면 위의 마인드 맵을 가져 가세요. 어차피 많이 배울 수는 없습니다.

머리말

초기 검토 : 파이썬을 비밀리에 배우고 모두에게 충격을주고 싶습니다 (5 일차)

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

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

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

좋아요, 이건 "유쾌한 에세이"입니다. 오늘 우리가 할 재미있는 프로젝트가 몇 개 있는지 보시 겠어요? 온라인 컴파일러 든 PC 컴파일러 든 앉아서 컴파일러를 엽니 다.

이 작업이 끝나면 기사를 쓸 때 크롤링을 시작합니다.


대량 메일 링

한 친구가 대량 메일 링 기능을 작성해달라고 요청한 다음 오셨습니까? (여기에서 이모티콘 패키지를 수동으로 입력하세요)

며칠 동안 배워 왔는데이 방법과 과정에 익숙해야하는데 첫 번째 단계는 무엇입니까?

  1. 대량 우편 발송에 사용되는 모듈 또는 패키지 찾기
  2. 모듈 또는 패키지 사용에 익숙하거나 이해
  3. 이해하는 방법? 매뉴얼에 예가 있습니까?
  4. 수정 및 수정하면 이러한 기능이 나옵니다.

좋습니다. 단계를 명확히 한 후 시작하겠습니다. Python3.9 라이브러리 함수 지원


···

여기에 사진 설명 삽입

여기에 사진 설명 삽입


코드 참조

오늘의 기분은 약간 낮습니다. 코드 참조로 오세요. 코드에 대해 이야기 해 보겠습니다.

의사 코드 1 : 셸 이메일 보내기

QQ 사서함을 예로 들어 보겠습니다 (QQ 사서함 만 있으므로).

이 작업을 수행하기 전에 먼저 한 가지를 수행해야합니다. QQ 사서함을 여는 타사 클라이언트에 대한 인증을 사용하는 것입니다.
우리의 QQ 사서함은 어떤 소프트웨어도 이메일을 보내는 데 사용할 수 있음을 의미하지 않으며 승인이 필요합니다.
구체적으로하는 방법,

  1. 로그인 QQ 사서함
  2. 설정-> 계정-> POP3 / IMAP / SMTP / Exchange / CardDAV / CalDAV 서비스-> 활성화, 처음 두 개 활성화
  3. 2020-10-26입니다. 향후 인터페이스가 개정 될 경우 위의 영문 문자열을 검색하여 시간을 확인하세요.

이 단계를 완료하면 몇 가지 인증 코드를 받게됩니다. 최신 인증 코드를 사용해야합니다.

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

이것은 의사 코드 조각입니다. 실행할 수 없습니다. 누락 된 정보를 입력해야합니다. 물론 완료 할 때까지 실행하기 위해 서두르지 않습니다.

의사 코드 2 : 이메일 콘텐츠 빌드

위의 의사 코드는 이메일의 셸이며 이메일의 특정 내용은 이메일 패키지에 의해 실현되어야합니다.

여기에 사진 설명 삽입

여기서 다시 import 문을 소개합니다.

이메일을 보내려면꾸러미
이 패키지의 가져 오기와 모듈 가져 오기에는 차이가 있습니다. 가져 오기를 사용하여 어떤 모듈을 가져 왔는데 작동하지 않았던 것을 기억합니다 (돌아볼 필요가 없습니다. 기억 상실증이며 전송되었는지 모르겠습니다). 이제 결과가 있습니다. 쪽으로.

모듈 (모듈)은 일반적으로 파일이고 패키지 (패키지)는 디렉토리입니다. 패키지는 여러 모듈을 포함 할 수 있습니다. 패키지는 "모듈 패키지"라고 할 수 있습니다. "로 구성됩니다.

볼 수없는 곳에는이 모든 것을 비밀리에 제어하는 ​​init.py 파일이 있으며 (물론 볼 수있는 방법이 있습니다) init.py는 패키지의 가져 오기 동작을 제어합니다. 이 파일이 비어 있으면 패키지 만 가져 오면 아무것도 할 수 없습니다. 따라서 이메일을 직접 가져 오는 것은 작동하지 않습니다.

따라서 이메일 패키지 디렉토리의 [파일]에서 [필요한 개체]를 가져 오려면 from… import… 문을 사용해야합니다. 예를 들어 이메일 패키지의 텍스트 파일에서 MIMEText 메서드를 가져옵니다.

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

실제로 여기 단계에서는 다음과 같은 메시지를 발행 할 수 있습니다. (의사 코드 부분 앞에는 다음과 같은 메시지가 채워지지 않습니다. msg = MIMEText('send by python','plain','utf-8'))

실습 능력이 강한 친구는 혼자서도 할 수 있고, 실습 능력이 약한 친구는 나를 따라갈 수 있습니다.
이것은 헤드리스 이메일이라는 것을 알게 될 것입니다.

메시지 헤더 (헤더, 예, 헤더라고도 함)는 제목, 보낸 사람,받는 사람 및 기타 정보를 포함하는이 영역입니다.

from email.header import Header

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

이 부분을 코드에 추가하면 효과는 다음과 같습니다.

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

이 코드에 몇 가지 매개 변수를 입력하면 보낼 수 있습니다.


그룹 이메일

그룹 게시에는 두 가지 방법이 있습니다. 하나에 대해 이야기하고 하나를 언급하고 하나를 남겨 두겠습니다.

첫 번째 방법은 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 = '[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()

한 가지 언급 : 여기서
몇 가지 보안 최적화를 수행 할 수 있습니다. 아무도 우리 코드를 받아들이고 싶지 않지만 좋은 습관은 어린 시절부터 시작해야합니다.

내가 처음 프로그래밍을 배우기 시작하고 첫 번째 프로젝트를했을 때 선생님은이 프로젝트의 암호를 사용자가 입력 할 수있는 암호 텍스트로 만들어야하지만 보이지는 않는다고 말했습니다.
이 코드에서 무엇이 잘못 되었습니까?

1. 우리의 계정은 모두 공개입니다 (위는 의사 코드 임)
2. 인증 코드도 공개입니다.
3. 우리의 코드는 재사용이 적고 사용성이 낮습니다 (두 번째 방법이 포함됨).

처음 두 문제에 대한 해결책도 매우 간단합니다. 입력 만하면됩니다.
하지만 그 목록은 어떻습니까? 어떻게해야합니까?
while 루프! !

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

코드 재사용 및 유용성 향상

코드 재사용 성이란 무엇입니까? 이것이 당신의 코드입니다. 오늘은이 다섯 명을 한 그룹으로 보내고 싶습니다. 네, 내일 다른 여섯 명을 한 그룹으로 보낼까요? 수행하는 방법? 들어가서 코드를 변경하십시오.
코드를 변경해야한다면이 코드의 재사용 성 디자인이 너무 나쁩니다.

그렇다면 코드 가용성이란 무엇입니까? 코드를 작성할 수있는 사람을 위해 글을 쓰고 있습니까? 여전히 위의 질문입니다. 게시 할 몇 명을 변경하려면 어떻게해야하나요? 언젠가 한 사람에게 더 보내거나 한 사람이 적은 사람에게 보내려면 어떻게해야합니까?

사용하기가 쉽지 않습니다.

그러면 무엇을해야합니까?
이전에 Excel을 작동 할 때 사용한 모듈을 기억하십니까? 예, 직접 시도해보십시오.


고백 풍선

위의 내용이 더 심각합니다. 모든 사람이 한 단계 씩 수행하도록합니다. 다음으로 모든 사람이 코드를보고 얼마나 이해할 수 있는지 확인합니다. 이해하지 못하는 경우 Baidu를 사용할 수 있습니다. 또한 작은 서클에 가입하여 채팅 할 수도 있습니다.

나는 원을 그렸고 우리의 작은 원에 모두를 환영합니다

저는 Python Q & A 그룹을 만들었습니다. 관심있는 친구들은 다음을 확인할 수 있습니다. 이것은 어떤 종류의 그룹입니까?

그룹을 통한 포털 : 포털

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

동영상을 추가 할 수 있는지 확인해 보겠습니다.
여기에 사진 설명 삽입

그건 아니야, 내가 비디오를 추가하지 않는 게 아니야

여기에 사진 설명 삽입

직접 시도해 볼 수 있습니다.


긴 꼬리 흐름 최적화

여기에 사진 설명 삽입
여기에 사진 설명 삽입

추천

출처blog.csdn.net/qq_43762191/article/details/109282813