Category - 课堂代码

2023-02-12 08:04:16    13    0    0
  1. '''
  2. l.sort() sort不带参数, 升序排序
  3. reverse 布尔类型: true:降序排序, false: 升序排序, 默认值是false
  4. key 比较函数, 默认是按照数据类型比较(整数,默认int)
  5. '''
  6. l = [10, 0, 1, 6, 12, 8]
  7. l.sort(key=str)
  8. print(l)
  9. t = (10, 0, 1, 6, 12, 8)
  10. nt = sorted(t, reverse=True, key=str)
  11. print(nt)
  12. print(t)
  13. '''
  14. sort是列表的方法, sorted是全局方法
  15. sort会改变原有对象的数据, sorted不会改变原有数据而是返回一个新对象
  16. sort只能排序列表, sorted可以排序列表/元组
  17. sorted返回的数据类型是列表
  18. reverse 布尔类型: true:降序排序, false: 升序排序, 默认值是false
  19. key 比较函数, 默认是按照数据类型比较(整数,默认int)
  20. '''
  21. '''
  22. 10 0
  23. int: 10 0
  24. str: str(10),str(0),str(1),str(6),str(12),str(8) ==> ['10', '0', '1', '6', '12', '8'] 排序后: ['0','10']
  25. '1a' '12'
  26. '''
  27. '''
  28. ASCII表
  29. 参考地址: https://baike.baidu.com/item/ASCII/309296?fromtitle=ascii%E7%A0%81%E8%A1%A8&fromid=19660475&fr=aladdin
  30. 主要掌握知识点:
  31. 1. 0 a A 在ASCII中的编码
  32. 2. ASCII使用16进制的表示形式: 如\x01
  33. '''
  34. '''
  35. 集合的元素 只能是不可变类型, 不能是可变类型
  36. 字典的键 只能是不可变类型, 不能是可变类型
  37. 改变指的是内存中数据的改变
  38. a-> 0x001(内存空间)
  39. 不可变类型: int/float/str/tuple/bool
  40. 可变类型: list/set/dict
  41. '''
  42. '''
  43. map(映射) 将一个元素通过一种方法转换成另外一个元素
  44. - 转换函数
  45. - 待映射的数据
  46. 会对列表里的每个元素, 使用转换函数进行转换, 得到一个新的列表
  47. map(st
2022-12-25 13:07:10    11    0    0
  1. # 定义一个列表来存储所有学生信息
  2. import sqlite3
  3. conn = sqlite3.connect('student.db')
  4. conn.execute('''
  5. create table if not exists student (
  6. sid text primary key not null,
  7. name text not null,
  8. sex text not null,
  9. phone text not null
  10. )
  11. ''')
  12. # 打印功能菜单
  13. def print_menu():
  14. print('=' * 30)
  15. print('学生管理系统')
  16. print('1.添加学生信息')
  17. print('2.删除学生信息')
  18. print('3.修改学生信息')
  19. print('4.显示所有学生信息')
  20. print('0.退出系统')
  21. print('=' * 30)
  22. # 添加学生信息
  23. def add_stu_info():
  24. sid = input('请输入新学生的学号:')
  25. cursor = conn.execute("select * from student where sid=?", (sid,))
  26. if len(cursor.fetchall()) > 0:
  27. print('要添加的学生已存在')
  28. else:
  29. name = input('请输入新学生的姓名:')
  30. sex = input('请输入新学生的性别:')
  31. phone = input('请输入新学生的手机号码:')
  32. conn.execute("insert into student(sid,name,sex,phone) values (?,?,?,?)", (sid, name, sex, phone))
  33. conn.commit()
  34. # 删除学生信息
  35. def del_stu_info():
  36. sid = input('请输入要删除的学号:')
  37. cursor = conn.execute("select * from student where s
2022-12-11 13:48:20    13    0    0
  1. --创建表 create table
  2. create table 表名 (列名1 列类型,列名2 列类型, ..., 列名n 列类型);
  3. -- 分号;用户分隔多条sql语句, 多个sql语句同时执行, 分号必不可少. 如果只执行一条sql, 分号可有可无
  4. create table student_01 (student_no text, name text, birthday text, sex text);
  5. --添加数据(插入数据)
  6. insert into 表名 (列名1,列名2,...,列名n) values (数据1,数据2,...,数据n);
  7. --sql中字符串必须只能用单引号, 不能用双引号
  8. insert into student_01 (student_no, name, birthday, sex) values ('0001','张三','2000-10-11','男');
  9. --当插入的字段是表里面所有字段时, 字段列表可以省略. 条件是数据的顺序必须和字段的顺序保持一致
  10. insert into student_01 values ('0001','张三','2000-10-11','男');
  11. insert into student_01 values ('张三','0001','2000-10-11','男');
  12. -- 使用sql建一张成绩表 score_01
  13. --查询数据
  14. select 列名1,列名2,...,列名n from 表名;
  15. select student_no,name,birthday,sex from student_01;
  16. --当我们查一张表的所有字段时, 可以用*代替字段名
  17. select * from student_01;
  18. --条件查询, 列表=列值 (比较运算符) (相等: =) <><=>=!=
  19. select * from student_01 where student_no='0001';
  20. select * from student_01 where name='张三';
  21. --sql同样支持逻辑运算符, and or
  22. select * from student_01 where student_no='0001' and name='张三';
  23. s
2022-11-13 12:32:04    11    0    0
  1. import smtplib
  2. from email.header import Header
  3. from email.mime.text import MIMEText
  4. # 发送方的账号密码
  5. sender = "lou_yj@163.com"
  6. password = "EKKGWNSQKDPAIYWN"
  7. receivers = ["super_leoning@163.com"]
  8. subject = "测试邮件"
  9. # 最简单的纯文本邮件->plain
  10. # application/json, text/plain, text/xml
  11. message = MIMEText("这是一封测试邮件", "plain", "utf-8") # 邮件正文, 邮件类型, 邮件编码
  12. message["From"] = Header(sender, "utf-8") # 发件人信息
  13. message["To"] = Header(';'.join(receivers), "utf-8") # 收件人
  14. message["Subject"] = Header(subject, "utf-8") # 标题
  15. smtpObj = smtplib.SMTP("smtp.163.com", 25) # 和服务器进行连接
  16. smtpObj.login(sender, password) # 登录
  17. smtpObj.sendmail(sender, receivers, message.as_string()) # 发邮件
  18. smtpObj.quit() # 关闭
  19. print("邮件发送成功")
2022-10-30 13:22:23    25    0    0
  1. import time
  2. from selenium import webdriver
  3. # from selenium.webdriver import ActionChains
  4. from selenium.webdriver import ActionChains
  5. from selenium.webdriver.common.by import By
  6. import pyautogui
  7. driver = webdriver.Edge(executable_path="msedgedriver.exe")
  8. driver.get('https://www.baidu.com')
  9. time.sleep(2) # 等待页面加载完成
  10. # action_chains = ActionChains(driver)
  11. # body = driver.find_element_by_tag_name('body') # [name="body"]
  12. # print(body)
  13. #
  14. # action_chains.context_click(body).perform()
  15. # time.sleep(3)
  16. #
  17. # pyautogui.typewrite(['down', 'down', 'down'])
  18. # time.sleep(3)
  19. # pyautogui.typewrite(['return'])
  20. #
  21. # time.sleep(10)
  22. '''
  23. <div name="body" class="body" id="ddd"></div>
  24. <body></body> #tag
  25. '''
  26. # driver.find_element_by_link_text("新闻").click()
  27. # time.sleep(2)
  28. #
  29. # # 切换窗口
  30. # all_windows = driver.window_handles # 窗口句柄, 列表
  31. # driver.switch_to.window(all_windows[1]) # 窗口句柄
  32. #
  33. # driver.find_element_by_link_text("读懂习近平总书记二十大后首次出京活动的深意").click()
  34. # time.sleep(2)
  35. #
  36. # '''
  37. # <select>
  38. #
2022-10-23 08:59:09    7    0    0
  1. '''
  2. find_element_by(查找单个元素的)->高版本: find_element
  3. find_elements_by(查找多个元素的)->高版本: find_elements
  4. find_element(By.TAG_NAME,'tag01')
  5. find_element_by_tag_name('tag01') -> find_element_by_css_selector('tag01')
  6. find_element(By.CLASS_NAME,'class01')
  7. find_element_by_class_name('class01') -> find_element_by_css_selector('.class01')
  8. find_element(By.ID,'id01')
  9. find_element_by_id('id01') -> find_element_by_css_selector('#id01')
  10. find_element(By.NAME,'name01')
  11. find_element_by_name('name01') -> find_element_by_css_selector('[name="name01"]')
  12. find_element_by_css_selector('[id="id01"]')
  13. find_element_by_css_selector('[class="class01"]')
  14. find_element(By.LINK_TEXT,'新闻')
  15. find_element_by_link_text('新闻') # 全部文本
  16. find_element(By.PARTIAL_LINK_TEXT,'新')
  17. find_element_by_partial_link_text('新') # 部分文件
  18. 页面有两个class01的元素, 使用find_element_by得到的结果是两个中的第一个
  19. value=find_element(By.NAME,'name01').get_attribute('class
2022-08-07 08:30:28    39    0    0
  1. import json
  2. import os
  3. import urllib.request
  4. import re
  5. response = urllib.request.urlopen(
  6. 'https://image.baidu.com/search/albumsdetail?tn=albumsdetail&word=%E5%9F%8E%E5%B8%82%E5%BB%BA%E7%AD%91%E6%91%84%E5%BD%B1%E4%B8%93%E9%A2%98&fr=searchindex_album%20&album_tab=%E5%BB%BA%E7%AD%91&album_id=7&rn=30')
  7. html = response.read().decode()
  8. # print(html)
  9. # https://t7.baidu.com/it/u=1595072465,3644073269&fm=193&f=GIF
  10. '''
  11. - 目标明确: 要什么东西
  12. - 抓取网页到本地进行分析(规律)
  13. - 爬取
  14. result = re.findall('src="(.+?)"', content)
  15. print(result)
  16. '''
  17. # linkData开头, 单引号中间的字符串, linkData: ('要找的内容')
  18. result = re.findall("linkData: ('.+?')", html)
  19. image_list = json.loads(eval(result[0]))
  20. if not os.path.exists("images"):
  21. os.mkdir("images")
  22. index = 0
  23. for image_item in image_list:
  24. image_url = image_item['thumbnailUrl'].replace('\/', '/')
  25. urllib.request.urlretrieve(image_url, "images/image-" + str(index) + '.gif')
  26. index = index + 1
  27. print(image_url)
  28. # json.dumps() # python对象(list,di
2022-06-19 09:25:55    8    0    0

网络聊天室

服务端代码

  1. # 1. 服务器要有多个线程, 分别负责每个客户端
  2. # 2. 客户端一个线程
  3. '''
  4. 功能:
  5. 1. 退出当前用户聊天窗口 (:unselect)
  6. 服务器阻塞点:
  7. recvfrom: 接受所有用户消息的, 当recvfrom阻塞时, 意味着所有客户端都没有消息过来
  8. 客户端阻塞点:
  9. 1. input等待用户输入, 阻塞时服务器推送消息就无法处理啦
  10. 2. 接收服务器消息:
  11. 消息类型:
  12. - 登录
  13. - 聊天
  14. - 退出
  15. - 新用户上线
  16. - 用户下线
  17. xx={"type":"chat","to_user": "user01", "message":"xxxx"}
  18. xxx['key']=value
  19. {"type":"login","user": "user01"}
  20. python: {"type": True}
  21. json: {"type": true}
  22. 1. 实现用户登录功能
  23. 客户端: {"type":"login","user": "user01"}
  24. 服务器: 收到login消息->在线用户列表->所有用户发送用户上线消息
  25. {"type":"online","new_user":"user001","all_users":{"user01":"127.0.0.1:8888"}}
  26. '''
  27. import json
  28. import socket
  29. def encode_msg(msg):
  30. return json.dumps(msg).encode('utf-8') # dict->str->bytes
  31. def decode_msg(msg):
  32. return json.loads(msg.decode('utf-8')) # bytes->str->dict
  33. online_users = {}
  34. server_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
  35. server_socket.bind(('localhost', 8888))
  36. while True:
  37. recv_message, recv_address = server_socket.recvfrom(1024)
  38. print("
2022-05-22 08:18:21    10    0    0

udp_server.py

  1. import socket
  2. # 1. 初始化socket
  3. s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # SOCK_DGRAM指定UDP协议
  4. # 2. 绑定地址(ip+端口)
  5. host = '127.0.0.1'
  6. port = 50000
  7. s.bind((host, port))
  8. # 3. 收发数据
  9. message, address = s.recvfrom(1024)
  10. print("收到客户端消息: " + message.decode('utf-8'))
  11. s.sendto(b'hello', address)
  12. # 4. 结束交互
  13. s.close()
  14. '''
  15. cpu / 内存 / 磁盘 文件10G->内存(8G)
  16. 2行-->操作系统认为后2行->操作把后2行读到cache LRU cache满了,
  17. 会把最近没有使用的缓存给清掉
  18. 1. 内存-> 磁盘缓存
  19. 2. cpu-->寄存器-->高速缓存 -> 内存
  20. 3. redis缓存系统, memcache 缓存
  21. android --> linux
  22. '''

udp_client.py

  1. import socket
  2. # 1. 初始化socket
  3. s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # SOCK_DGRAM指定UDP协议
  4. # 2. 收发数据
  5. host = '127.0.0.1'
  6. port = 50000
  7. s.sendto(b'hello', (host, port))
  8. message, address = s.recvfrom(1024)
  9. print("收到服务器的消息: " + message.decode('utf-8'))
  10. # 3. 结束交互
  11. s.close()
2022-05-15 08:36:39    18    0    0

socketserver.py

  1. import socket
  2. # 1.初始化socket对象
  3. import time
  4. server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  5. # SOCK_STREAM: TCP面向连接的, 流式传输; 可靠,性能有损失.
  6. # SOCK_DGRAM: UDP,面向于非连接的, 数据报文的传输; 不可靠, 性能非常好.
  7. # www.baidu.com(ip)
  8. # 2. 选址
  9. ip = "127.0.0.1"
  10. port = 50000 # 0-65535
  11. server_socket.bind((ip, port))
  12. # 3. 监听/建商店
  13. # backlog 可以同时接受的等待连接数有多少
  14. server_socket.listen(5)
  15. # 4.接受客户端连接/开门营业
  16. # client_socket专门负责与客户端通信的socket连接(导购员)
  17. # address 客户端地址
  18. # 这个方法是阻塞的 (blocked), 直到有客户端进来才会执行后续的代码
  19. client_socket, address = server_socket.accept()
  20. # 5. 数据传输
  21. # 字符串->字节数组 1. b'' 2. encode方法,编码
  22. # 字节数组转字符串: decode 解码
  23. # ascii 0-9 a-b A-B $%^&*
  24. # gbk/gb2312 中文
  25. # 'utf-8'
  26. client_socket.send("欢迎来超市购物".encode('utf-8')) # bytes而不是字符串
  27. data = client_socket.recv(1024)
  28. print("收到来自客户端的消息:" + data.decode('utf-8'))
  29. # 6. 传输结束
  30. client_socket.close()
  31. server_socket.close()

socketclient.py

  1. import socket
  2. # 1.初始化socket对象, 客户端必须和服务端参数保持一致
  3. client_socket = socket.socket(socket.AF_INET, socket.SOCK_STR
1/2