Python 题目

课程1

程序的定义

郑东成 2021-08-10

程序 = 数据类型 + 算法

基础数据类型
# coding:utf-8
字符串 = ""
布尔型 = True
整数 = 1
浮点数 = 0.1
if __name__ == '__main__':
    print(type(字符串))
    print(type(布尔型))
    print(type(整数))
    print(type(浮点数))
数据类型转换
# coding:utf-8
字符串 = "2"
布尔型 = True
整数 = 1
浮点数 = 0.5
if __name__ == '__main__':
    print(int(布尔型))
    print(bool(整数))
    print(bool(浮点数))
    print(bool("false"))
    print(int(字符串))
    print(float(字符串))
数据类型运算
# coding:utf-8
字符串 = "1"+"2"*3
布尔型 = True + False + False
整数 = 1 + 2
浮点数 = 0.5 + 1
if __name__ == '__main__':
    print(字符串)
    print(布尔型)
    print(整数)
    print(浮点数)
数字类型运算
# coding:utf-8
加减乘除 = 1+2-3*4/5
次方 = 2**3
取整 = 7//2
取余 = 3%2
if __name__ == '__main__':
    print(加减乘除)
    print(次方)
    print(取整)
    print(取余)
条件
# coding:utf-8
if __name__ == '__main__':
    if True == 1:
        print("yes")
    if 1 > 0.5:
        print("yes")
    if 2**2 <= 4:
        print("yes")
循环
# coding:utf-8
if __name__ == '__main__':
    for i in range(100):
        print(i)
循环嵌套
# coding:utf-8
if __name__ == '__main__':
    for 行 in range(0, 5):
        for 列 in range(0, 10):
            print(" * ",end="")
        print("")

题目

#100 内整数和
sum = 0
for i in range(101):
    sum = sum + i
print(sum)
# 100以内偶数和减奇数和
# coding:utf-8
if __name__ == '__main__':
    sum偶数 = 0
    sum奇数 = 0
    for i in range(101):
        if i%2 == 0:
            sum偶数 = sum偶数 + i
        if i%2 != 0:
            sum奇数 = sum奇数 + i
    print(sum偶数 - sum奇数)
# 56个学生去划船,共乘10只船恰好坐满,其中大船坐6人小船坐4人,问大船小船各几只?
# coding:utf-8
if __name__ == '__main__':
    for i in range(11):
        大船 = i
        小船 = 10-i
        if 大船*6 + 小船*4 == 56:
            print("大船:", 大船)
            print("小船:", 小船)
# 100以内的质数 (仅被自身和1整除的数)
# coding:utf-8
if __name__ == '__main__':
    for i in range(2,101):
        res = True
        for j in range(2,i):
            if i%j == 0:
                res = False
        if res:
            print(i)
# 99 乘法表
# coding:utf-8
if __name__ == '__main__':
    for i in range(1,10):
        for j in range(1,i+1):
            t = str(i) + "*"+ str(j) +"="+ str(i*j)
            print(t,end="\t")
print("")

课程2-容器类数据类型

郑东成 2021-08-11

元组
# coding:utf-8
# 定义
t1 = ('a', 'b', 'c')
t2 = 1,2,3
t3 = tuple()
if __name__ == '__main__':
    # 读取
    print(t1[0])
    print(t2)
    print(len(t2))
    # 运算
    print(t1+t2+t3)
    print('b' in t1)
列表
# coding:utf-8
# 定义
t1 = list()
t2 = ['a','b','c']
if __name__ == '__main__':
    # 增值
    t1.append('a')
    t1.append('b')
    t1.append('c')
    # 改值
    t2[0] = 0
    t2[1] = 1
    t2[2] = 2
    # 删值
    t1.remove(t1[1])
    del t1[1]
    # 查
    print(t1)
    print(t2)
集合
# coding:utf-8
# 创建
集合1 = set()
集合2 = {'蔡文姬','李清照','上官婉儿','班昭','卓文君'}
# 新增
集合1.add('蔡文姬')
集合1.update({'李清照','上官婉儿','卓文君'})
# 删除
集合2.remove('卓文君')
# 运算
print('集合1:',集合1)
print('集合2:',集合2)
print('交:',集合1 & 集合2)
print('并:',集合1 | 集合2)
print('差:',集合1 - 集合2)
print('补:',集合1 ^ 集合2)
类型转换
# coding:utf-8
t1 = ['a','b','c']
t2 = (1, 2, 3)
t3= {'蔡文姬','李清照','上官婉儿','班昭','卓文君'}
if __name__ == '__main__':
    print('转list',list(t2))
    print('转tuple',tuple(t3))
    print('转set',set(t1))
数据类型的内存空间
# coding:utf-8
import sys
t1 = list()
t2 = ['a','b','c']
if __name__ == '__main__':
    print(sys.getsizeof(t1))
    print(sys.getsizeof(t2))
元组例子
# coding:utf-8
import winsound
低音 = (262, 294, 330, 349, 392, 440, 494)
中音 = (523, 587, 659, 698, 784, 880, 988)
高音 = (1047, 1175, 1319, 1397, 1568, 1760, 1967)
def beep(Beep):
    winsound.Beep(Beep, 1000)
if __name__ == '__main__':
    for i in range(len(中音)):
        beep(中音[i])
列表例子
# coding:utf-8
# 冒泡
nums = [5, 4, 3, 2, 1]
leng = len(nums)-1
for i in range(leng):
    for j in range(leng):
        if nums[j]>nums[j+1]:
            print(j, j + 1, nums)
            nums[j], nums[j+1] = nums[j+1], nums[j]

题目

求最大值
# coding:utf-8
nums = [5, 4, 3, 2, 1]
max = 0
for i in nums:
    if i > max:
        max = i
print(max)
求平均值
# coding:utf-8
nums = [5, 4, 3, 2, 1]
sum = 0
for i in nums:
    sum = sum + i
print(sum/len(nums))
求啥都会的小朋友,求啥都不会的小朋友
小朋友们 = ['蔡文姬','李清照','上官婉儿','班昭','卓文君']
游泳 = ['蔡文姬','李清照','上官婉儿']
打球 = ['李清照','上官婉儿','班昭']

# coding:utf-8
小朋友们 = ['蔡文姬','李清照','上官婉儿','班昭','卓文君']
游泳 = ['蔡文姬','李清照','上官婉儿']
打球 = ['李清照','上官婉儿','班昭']
if __name__ == '__main__':
    啥都会的 = set(游泳) & set(打球)
    print(啥都会的)
    啥都不会的 = set(小朋友们) - set(游泳) - set(打球)
    print(啥都不会的)

课程3-系统化

郑东成 2020-08-12

字典
# coding:utf-8
#定义
d1 = dict()
d1 = {}
d1 = {'a': 1, 'b': 2, 'c': 3}
#增 / 改
d1['d'] = 5
d1['c'] = 6
#操作
print(d1.items())
print(d1.keys())
print(d1.values())
Json
(JavaScript Object Notation, JS 对象简谱)
# coding:utf-8
import json
# json 转 python
js = """{"a": 1, "b": 2, "c": 3, "d": 4, "e": 5}"""
load = json.loads(js)
print(type(load))
# python 转 json
js = [{"a": 1, "b": 2, "c": 3, "d": 4, "e": 5}]
js = json.dumps(load)
print(type(js))

题目

# coding:utf-8
import json
js = """[{
        "user":1,
        "语文":90,
        "数学":20,
        "英语":30
    },{
        "user":2,
        "语文":40,
        "数学":60,
        "英语":30
    },{
        "user":3,
        "语文":20,
        "数学":60,
        "英语":70
    },{
        "user":4,
        "语文":50,
        "数学":70,
        "英语":60
    }]"""
d1 = json.loads(js)
全场最低分
全场最低分 = {"user":None,"科目":None,"分数":100}
for d in d1:
    user,语文,数学,英语 = d.values()
    if 全场最低分["分数"] > 语文:
        全场最低分["user"] = user
        全场最低分["科目"] = "语文"
        全场最低分["分数"] = 语文
    if 全场最低分["分数"] > 数学:
        全场最低分["user"] = user
        全场最低分["科目"] = "数学"
        全场最低分["分数"] = 数学
    if 全场最低分["分数"] > 英语:
        全场最低分["user"] = user
        全场最低分["科目"] = "英语"
        全场最低分["分数"] = 英语
print(全场最低分)
每人平均分
from decimal import Decimal,getcontext
getcontext().prec = 30
for d in d1:
    d['平均分'] = str(Decimal(d['语文'] + d['数学'] + d['英语'])/3)
    print({'user':d['user'],'平均分':d['平均分']})
班级每科平均分
from decimal import Decimal,getcontext
getcontext().prec = 30
leng = len(d1)
平均语文 = 0
平均数学 = 0
平均英语 = 0
for d in d1:
    平均语文 = 平均语文 + d['语文']
    平均数学 = 平均数学 + d['数学']
    平均英语 = 平均英语 + d['英语']

print("平均语文:",平均语文/leng)
print("平均数学:",平均数学/leng)
print("平均英语:",平均英语/leng)
人机械交互
var1 = input("请输入")
print("var1",var1)
例题
# coding:utf-8
import json
学生们 = []

def 新增():
    user = input("新增: ")
    user = json.loads(user)
    学生们.append(user)

def 删除():
    user = input("删除: ")
    user = json.loads(user)
    for i in 学生们:
        if i["uid"] == user["uid"]:
            学生们.remove(i)
def 改():
    user = input("修改: ")
    user = json.loads(user)
    for i in range(len(学生们)):
        if 学生们[i]["uid"] == user["uid"]:
            学生们[i] = user
def 查():
    print(学生们)

if __name__ == '__main__':

    print({"新增": 1, "删除": 2, "修改": 3, "查看": 4})
    while True:
        com = input("待输入: ")
        if com == "1":
            # 增加 {"uid":4,"语文":50,"数学":70,"英语":60}
            新增()
        if com == "2":
            # 删  {"uid":4}
            删除()
        if com == "3":
            # 改 {"uid":4,"语文":60}
            改()
        if com == "4":
            # 查 空
            查()
题目1
def inser_user(user:dict)->bool:
    sql = F"""insert into user_table values ('{user['user']}','{user['语文']}','{user['数学']}','{user['英语']}'); """
    print(sql)
if __name__ == '__main__':
    inser_user(d1[0])
题目2
js = """[{
        "章节":1,
        "内容":"软件测试的背景"
    },{
        "章节":2,
        "内容":"软件开发的过程"
    },{
        "章节":3,
        "内容":"软件测试的实质"
    },{
        "章节":4,
        "内容":"检查产品说明书"
    }]"""
d1 = json.loads(js)
当前章节 = 0

def 读取章节():
    print(d1[当前章节])

def 下一章节():
    global 当前章节
    当前章节 = 当前章节 + 1

def 上一章节():
    global 当前章节
    当前章节 = 当前章节 - 1

if __name__ == '__main__':

    读取章节()
    下一章节()
    读取章节()
    上一章节()
    读取章节()

值类型引用类型

引用类型
d1 = {'a':1}
d2 = d1
d2['a'] = 2
print(d1)
print(d2)
值类型
d1 = {'a':1}
d2 = d1.copy()
d2['a'] = 2
print(d1)
print(d2)
值的类型也是引用
d1 = {'a':1}
d2 = {'b':d1}
d3 = d2.copy()
d1['a'] = 2
print(d2)
print(d3)

课件4-时间与界面

郑东成 2020-08-12

时间
时间datetime.datetime
初始化时间
# -*- coding:utf-8 -*-
from datetime import datetime
d1 = datetime(year=1,month=1,day=1)
print(d1.date().year)
print(d1.date().month)
print(d1.date().day)
print(d1.time().hour)
print(d1.time().minute)
print(d1.time().second)
当前时间转字符串
# -*- coding:utf-8 -*-
import datetime
now = datetime.datetime.now()
t1 = now.strftime('%Y-%m-%d %H:%M:%S')
print(t1)
字符串转时间
t_str = '2012-03-05 16:26:23'
t2 = datetime.datetime.strptime(t_str, '%Y-%m-%d %H:%M:%S')
print(t2)
时间运算
# -*- coding:utf-8 -*-
from datetime import datetime
from datetime import timedelta
d1 = datetime(year=1,month=1,day=1)
d2 = datetime(year=2,month=2,day=2)
d3 = d2 - d1
print("timedelta:",d3)
print(d2<d1)
时差datetime.timedelta
时差运算
# -*- coding:utf-8 -*-
from datetime import datetime
from datetime import timedelta
now = datetime.now()
days = timedelta(days=-1)
hours = timedelta(hours=10)
delta = days-hours
print(delta)
时间加时差
# -*- coding:utf-8 -*-
from datetime import datetime
from datetime import timedelta
now = datetime.now()
delta = timedelta(days=999,hours=999,minutes=999)
print(now+delta)

题目

求函数运行耗时
# -*- coding:utf-8 -*-
import datetime
for i in range(200000):
    1+1
t1 = datetime.datetime.now()
t2 = datetime.datetime.now()
print(t2-t1)
求上个月最后一天是几号
# -*- coding:utf-8 -*-
import datetime
now = datetime.datetime.now()
t = datetime.datetime(year=now.year,month=now.month,day=1)
t2 = t-datetime.timedelta(days=1)
print(t2.day)
求赤壁之战建安13年,公元208年12月17日是星期几
# -*- coding:utf-8 -*-
import datetime
t1 = datetime.datetime(year=208,month=12,day=17)
t_str2 = '2021-08-15 00:00:00'  # 这天是星期天
t2 = datetime.datetime.strptime(t_str2, '%Y-%m-%d %H:%M:%S')
day = (t2-t1).days
day = day%7
if day == 0:
    day = 7
    print("星期",day)
else:
    day = 7 -day
    print("星期",day)
求小朋友全家活了多少天
小朋友家 = {"爸爸生日":"2000-05-15","妈妈生日":"201-06-10","宝宝生日":"2021-08-01"}
# -*- coding:utf-8 -*-
import datetime
小朋友家 = {"爸爸":"2000-05-15","妈妈":"2001-06-10","宝宝":"2021-08-01"}
now = datetime.datetime.now()
t1 = datetime.datetime.strptime("2000-05-15", '%Y-%m-%d')
t2 = datetime.datetime.strptime("2001-06-10", '%Y-%m-%d')
t3 = datetime.datetime.strptime("2021-08-01", '%Y-%m-%d')
d1 = (now - t1).days
d2 = (now - t2).days
d3 = (now - t3).days
print(d1+d2+d3)

GUI

#tkinter python(图形开发界面) - 小田学Python - 博客园

​
# -*- coding:utf-8 -*-
import tkinter
win = tkinter.Tk()
# 主界面配置
win.title("标题")
win.geometry("500x400")
#输入框布局
账号Label = tkinter.Label(win, text="账号:")
账号Label.place(x=10,y=10)
账号text  = tkinter.Entry(win)
账号text.place(x=50,y=15)
#多选框布局
r = tkinter.IntVar()
增 = tkinter.Radiobutton(win, text="增", value=1, variable=r)
增.place(x=10,y=55)
删 = tkinter.Radiobutton(win, text="删", value=2, variable=r)
删.place(x=50,y=55)
改 = tkinter.Radiobutton(win, text="改", value=3, variable=r)
改.place(x=100,y=55)
查 = tkinter.Radiobutton(win, text="查", value=4, variable=r)
查.place(x=150,y=55)
# 按钮布局
def click_button():
    """{"账号":"user1","密码":123456}"""
    com = tkinter.INSERT,r.get()
    if com[1] == 1:
        输出text.insert(tkinter.INSERT, "增: "+账号text.get()+"\n")
    if com[1] == 2:
        输出text.insert(tkinter.INSERT, "删: "+账号text.get()+"\n")
    if com[1] == 3:
        输出text.insert(tkinter.INSERT, "改: "+账号text.get()+"\n")
    if com[1] == 4:
        输出text.insert(tkinter.INSERT, "查: "+账号text.get()+"\n")
按钮 = tkinter.Button(win, text="按钮", command=click_button)
按钮.place(x=10,y=95)
# 输出框布局
输出text  = tkinter.Text(win, width=60 , height=10)
输出text.place(x=10,y=150)
win.mainloop()
# coding:utf-8

def aligns(string,length=25):
    difference = length - len(string)  # 计算限定长度为20时需要补齐多少个空格
    if difference == 0:  # 若差值为0则不需要补
        return string
    elif difference < 0:
        print('错误:限定的对齐长度小于字符串长度!')
        return None
    new_string = ''
    space = ' '
    for i in string:
        codes = ord(i)  # 将字符转为ASCII或UNICODE编码
        if codes <= 126:  # 若是半角字符
            new_string = new_string + chr(codes+65248) # 则转为全角
        else:
            new_string = new_string + i  # 若是全角,则不转换
    return new_string + space*(difference)  # 返回补齐空格后的字符串


def 查看表头(表格:list):
    表头 = {}
    for 列数 in range(len(表格[0])):
        list1 = []
        列名 = ""
        for 行数 in range(len(表格)):
            列名 = 表格[0][列数]
            内容长度 = len(str(表格[行数][列数]))
            list1.append(内容长度)
        表头[列名] = max(list1)
    return 表头


def 查看全表(表格:list):
    表头 = 查看表头(表格)
    for i in range(len(表格)):
        for j in range(len(表格[0])):
            列宽 = list(表头.values())[j]
            value = 表格[i][j]
            value = str(value)
            print(aligns(value,列宽+5),end="")
        print()


if __name__ == '__main__':

    表头 = ["迭代版本","功能","子功能","业务","产品","前端","后端"]
    行1  = ["2021-09-09","报表","分析","toly","lee","carl","mike"]
    行2  = ["2021-09-10","配置","二级分类","ethan","hopper","sam","lear"]
    表格 = [表头,行1,行2]
    查看全表(表格)

第5课 持久化

郑东成 2020-09-09

编码
# -*- coding:utf-8 -*-
# 文字转字节
# 注意长度
# res = '哈哈'.encode('utf-8')
# print(res)
# res = '哈哈'.encode('unicode_escape')
# print(res)
# res = '哈哈'.encode('gb2312')
# print(res)
# 字节转文字
# print(res.decode('utf-8'))

#文字转字码  Unicode个符号集
print(ord("a"))
print(ord("A"))
#字码转文字
print(chr(ord("Q")+32))

#coding:utf-8
print(ord("汉"))
print(ord("漢")+729)
print(chr(ord("汉")+729))
print(chr(ord("漢")-729))
持久化 ============================================
#notepad
# {a+:追加文字,w+:打开文件时清空原文件_再追加文字,r:读文字}
# file = "my.txt"
# file = open(file, mode='a+',encoding='utf-8')
# file.write("哈哈哈哈")
# file.close()

# file = "my.txt"
# file = open(file, mode='r',encoding='utf-8')
# lines = file.readlines()
# print(lines)
# file.close()

# {rb:读字节,ab+:写字节 }
# file = "组长大人.png"
# file = open(file, mode='rb')
# lines = file.readlines()
# for i in lines:
#     img = "经理大人.png"
#     img = open(img,mode='ab+')
#     img.write(i)
#     img.close()
# file.close()
数据库tinydb ===============================
#coding:utf-8
#pip install tinydb
#https://tinydb.readthedocs.io/en/latest/index.html
from tinydb import TinyDB, Query
db = TinyDB(path='db.json')
user = db.table('user')
user.insert({'user_id': 1,'pass':"管理员"})
goods = db.table('goods')
goods.insert({'goods_id': 2,'user_id':1})
Q = Query()
res = goods.search((Q.goods_id==2) & (Q.user_id==1))
print(res)
for g in goods:
    for u in user:
        if g['user_id'] == u['user_id']:
            print(dict(set(g.items())|set(u.items())))
数据库sqlite3 ================================
数据类型
INT,FLOAT,TEXT,DATETIME
日期格式为 "YYYY-MM-DD HH:MM:SS.SSS"
创建/链接数据库
connection = sqlite3.connect('test.db')
cursor = connection.cursor()
关闭数据库
connection.close()
执行语句/新建
sql = '''CREATE TABLE COMPANY
               (ID INT PRIMARY KEY     NOT NULL,
                NAME           TEXT    NOT NULL,
                AGE            INT     NOT NULL,
                ADDRESS        CHAR(50),
                SALARY         REAL);'''
cursor.execute(sql)
connection.commit()
执行语句/插入
cursor.execute("INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) VALUES (1, 'Paul', 32, 'California', 20000.00 )")
cursor.execute("INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) VALUES (2, 'Allen', 25, 'Texas', 15000.00 )")
cursor.execute("INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) VALUES (3, 'Teddy', 23, 'Norway', 20000.00 )")
cursor.execute("INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) VALUES (4, 'Mark', 25, 'Rich-Mond ', 65000.00 )")
connection.commit()
查询
cursor = cursor.execute("SELECT id, name, address, salary  from COMPANY")
Print(cursor .fetchall())
Mysql =====================================

import pymysql
from 表格输出 import 查看全表

# 'mysql_native_password'
class mysql_class():

    def __init__(self,host,username,password,database,port):
        self.host = host
        self.username = username
        self.password = password
        self.database = database
        self.port = port
        self.db = pymysql.connect(self.host,self.username,self.password,self.database,self.port,charset='utf8')

    def closeDb(self):
        # self.db.cursor.close()
        self.db.close()

    def execute_sql(self,sql):
        self.db.cursor().execute(sql)
        self.db.commit()

    def select_table(self,sql):
        self.cursor = self.db.cursor()
        self.cursor.execute(sql)
        field_names = [col[0] for col in self.cursor.description]
        data = self.cursor.fetchall()
        table = []
        table.append(field_names)
        for row in data:
            table.append(list(row))
        return table

    def show_databases(self):
        sql = "show databases ;"
        return self.select_table(sql)

    def use_database(self,database_name):
        sql = "use " + database_name + " ;"
        self.execute_sql(sql)

    def show_tables(self):
        sql = F"SELECT TABLE_NAME,TABLE_COMMENT FROM information_schema.TABLES WHERE table_schema='{self.database}';"
        return self.select_table(sql)

    def show_tables_like(self,likes):
        sql = F"SELECT TABLE_NAME,TABLE_COMMENT FROM information_schema.TABLES WHERE table_schema='{self.database}' and TABLE_COMMENT like '%{likes}%' ;"
        return self.select_table(sql)

    def show_tables_col(self,table_name):
        sql = F"select column_key 约束,data_type 数据类型,is_nullable 允许为空,COLUMN_NAME 字段名,column_comment 字段说明 from information_schema.columns where table_schema = '{self.database}' and table_name = '{table_name}' ; "
        return self.select_table(sql)

第六课 python 操作excel

郑东成 2021-9-14 

#coding:utf-8
# https://zhuanlan.zhihu.com/p/237583143
import xlwings as xw
import datetime
import random
import json
from 表格输出 import 查看全表


class my_xlwings():

    def __init__(self,文件名:str):
        self.文件名 = 文件名+".xlsx"
        self.app = xw.App(visible=True, add_book=False)
        try:
            self.wb = self.app.books.open(self.文件名)
        except:
            print(F"没找到{self.文件名},已经创建新文件!")
            self.wb = self.app.books.add()
            self.wb.save(self.文件名)
        self.表头行数 = 0
        self.ws = self.wb.sheets.active

    def 选择sheet(self,Sheet="Sheet1"):
        try:
            self.ws = self.wb.sheets[Sheet]
        except:
            print(F"没好到{Sheet},已经创建工资表")
            self.wb.sheets.add(Sheet)
            self.ws = self.wb.sheets[Sheet]
        self.获取表格宽高()

    def 获取表格宽高(self):
        cell = self.ws.used_range.last_cell
        self.最大行数 = cell.row
        self.最大列数 = cell.column

    def close(self):
        self.wb.save()
        self.wb.close()
        self.app.quit()

    def 查看全表(self):
        表格 = []
        for i in range(1,self.最大行数+1):
            当前行 = []
            for j in range(1,self.最大列数+1):
                value = self.ws.range(i, j).value
                当前行.append(str(value))
            表格.append(当前行)
        return 表格

    def 查看一行(self,行号:int):
        全表 = self.查看全表()
        return dict(zip(全表[0],全表[行号]))

    def 查看一列(self,列):
        if type(列) == int:
            全表 = self.查看全表()
            res = []
            for i in range(1,len(全表)):
                res.append(全表[i][列])
            return {全表[0][列]:res}
        if type(列) == str:
            全表 = self.查看全表()
            for i in range(len(全表[0])):
                if str(全表[0][i]).split() == 列.split():
                    return self.查看一列(i)

    def 查看某列(self,列:list):
        res = [self.查看一列(str(i)) for i in 列]
        return res


    def 写入一格(self,line:int,cell:int,value):
        self.ws.range(line,cell).value = value

    def 写入一行(self,line:int,value:list):
        for i in range(len(value)):
            self.写入一格(line+1,i+1,value[i])

    def 写入多行(self,line:int,value:list):
        for i in range(len(value)):
            self.写入一行(line+i,value[i])


if __name__ == '__main__':
    excel = my_xlwings("记录")

    小朋友们 = ['唐寅','祝枝山','文徵明']
    罪名 = ['杀人','放火','拐骗']
    善举 = ['带小朋友过马路', '父老大爷起来', '公园捡垃圾']
    day = [datetime.datetime.now() - datetime.timedelta(days=i) for i in range(10)]
    table = [[random.choice(小朋友们),random.choice(罪名),i] for i in day]
    excel.选择sheet("衙门记录")
    excel.写入一行(0, ['小朋友', '犯罪', '时间'])
    excel.写入多行(1,table)

    小朋友们 = ['祝枝山', '文徵明', '徐祯卿']
    善举 = ['带小朋友过马路', '父老大爷起来', '公园捡垃圾']
    day = [datetime.datetime.now() - datetime.timedelta(days=i+4) for i in range(10)]
    table = [[random.choice(小朋友们), random.choice(善举), i] for i in day]
    excel.选择sheet("街道办记录")
    excel.写入一行(0,['小朋友','善举','时间'])
    excel.写入多行(1, table)

    小朋友们 = ['唐寅','祝枝山','文徵明','徐祯卿']
    账簿 = ['进账', '出账']
    day = [datetime.datetime.now() - datetime.timedelta(days=i + 7) for i in range(10)]
    table = [[random.choice(小朋友们), random.choice(账簿),random.randint(100,1000), i] for i in day]
    excel.选择sheet("申记银号")
    excel.写入一行(0,['小朋友','账簿','金额','时间'])
    excel.写入多行(1, table)

    excel.选择sheet("申记银号")
    res = excel.查看全表()
    查看全表(res)
    excel.close()
#coding:utf-8
# https://zhuanlan.zhihu.com/p/237583143
import xlwings as xw
import datetime
import random
import json

class my_xlwings():

    def __init__(self,文件名:str):
        self.文件名 = 文件名+".xlsx"
        self.app = xw.App(visible=False, add_book=False)
        try:
            self.wb = self.app.books.open(self.文件名)
        except:
            print(F"没找到{self.文件名},已经创建新文件")
            self.wb = self.app.books.add()
            self.wb.save(self.文件名)
        self.表头行数 = 0
        self.ws = self.wb.sheets.active

    def 选择sheet(self,Sheet="Sheet1"):
        try:
            self.ws = self.wb.sheets[Sheet]
        except:
            print(F"没好到{Sheet},已经创建工资表")
            self.wb.sheets.add(Sheet)
            self.ws = self.wb.sheets[Sheet]
        self.获取表格宽高()

    def 获取表格宽高(self):
        cell = self.ws.used_range.last_cell
        self.最大行数 = cell.row
        self.最大列数 = cell.column

    def close(self):
        self.wb.save()
        self.wb.close()
        self.app.quit()

    def 查看全表(self):
        表格 = []
        for i in range(1,self.最大行数+1):
            当前行 = []
            for j in range(1,self.最大列数+1):
                value = self.ws.range(i, j).value
                当前行.append(str(value))
            表格.append(当前行)
        return 表格

    def 查看一行(self,行号:int):
        全表 = self.查看全表()
        return dict(zip(全表[0],全表[行号]))

    def 查看一列(self,列):
        if type(列) == int:
            全表 = self.查看全表()
            res = []
            for i in range(1,len(全表)):
                try:
                    res.append(int(全表[i][列]))
                except:
                    res.append(全表[i][列])
            return res
        if type(列) == str:
            全表 = self.查看全表()
            for i in range(len(全表[0])):
                if str(全表[0][i]).split() == 列.split():
                    return self.查看一列(i)


    def 写入一格(self,line:int,cell:int,value):
        self.ws.range(line,cell).value = value

    def 写入一行(self,line:int,value:list):
        for i in range(len(value)):
            self.写入一格(line+1,i+1,value[i])

    def 写入多行(self,line:int,value:list):
        for i in range(len(value)):
            self.写入一行(line+i,value[i])

def 初始化数据():
    excel = my_xlwings("记录")
    day = [datetime.datetime(year=1000, month=1, day=15) + datetime.timedelta(days=30 * i) for i in range(5)]
    table = [[random.randint(1000, 5000), random.randint(500, 1700), random.randint(1000, 1500),random.randint(100, 500), i] for i in day]
    excel.选择sheet("银行系统_月收入")
    excel.写入一行(0, ['唐寅', '祝枝山', '文徵明', '徐祯卿', '时间'])
    excel.写入多行(1, table)

    day = [datetime.datetime(year=1000, month=1, day=15) + datetime.timedelta(days=30 * i) for i in range(5)]
    table = [[random.randint(10, 50), random.randint(100, 1500), random.randint(10, 500), random.randint(50, 150), i] for i in day]
    excel.选择sheet("抖音系统_刷礼物")
    excel.写入一行(0, ['唐寅', '祝枝山', '文徵明', '徐祯卿', '时间'])
    excel.写入多行(1, table)

    day = [datetime.datetime(year=1000, month=1, day=15) + datetime.timedelta(days=30 * i) for i in range(3)]
    table = [[random.randint(0, 1), random.randint(0, 0), random.randint(0, 2), random.randint(1, 2), i] for i in day]
    excel.选择sheet("真爱系统_牵手记录")
    excel.写入一行(0, ['唐寅', '祝枝山', '文徵明', '徐祯卿', '时间'])
    excel.写入多行(1, table)
    excel.选择sheet("银行系统")
    excel.close()

if __name__ == '__main__':

    # ['唐寅', '祝枝山', '文徵明', '徐祯卿', '时间']
    # 初始化数据()
    xl = my_xlwings("记录")
    xl.选择sheet("真爱系统_牵手记录")
    唐寅牵手 = xl.查看一列('唐寅')
    祝枝山牵手 = xl.查看一列('祝枝山')
    文徵明牵手 = xl.查看一列('文徵明')
    徐祯卿牵手 = xl.查看一列('徐祯卿')
    时间牵手 = xl.查看一列('时间')

    xl.选择sheet("抖音系统_刷礼物")
    唐寅礼物 = xl.查看一列('唐寅')
    祝枝山礼物 = xl.查看一列('祝枝山')
    文徵明礼物 = xl.查看一列('文徵明')
    徐祯卿礼物 = xl.查看一列('徐祯卿')
    时间礼物 = xl.查看一列('时间')

    xl.选择sheet("银行系统_月收入")
    唐寅收入 = xl.查看一列('唐寅')
    祝枝山收入 = xl.查看一列('祝枝山')
    文徵明收入 = xl.查看一列('文徵明')
    徐祯卿收入 = xl.查看一列('徐祯卿')
    时间收入 = xl.查看一列('时间')

    xl.close()

    用户画像 = {
        '唐寅': {'牵手记录': dict(zip(时间牵手,list(map(float,唐寅牵手)))),
                '刷礼物记录':dict(zip(时间礼物,list(map(float,唐寅礼物)))),
                '月收入': dict(zip(时间收入, list(map(float, 唐寅收入)))),
               },
        '祝枝山': {'牵手记录': dict(zip(时间牵手,list(map(float,祝枝山牵手)))),
                '刷礼物记录': dict(zip(时间礼物,list(map(float,祝枝山礼物)))),
                '月收入': dict(zip(时间收入, list(map(float, 祝枝山收入)))),
                },
        '文徵明': {'牵手记录': dict(zip(时间牵手,list(map(float,文徵明牵手)))),
                '刷礼物记录': dict(zip(时间礼物,list(map(float,文徵明礼物)))),
                '月收入': dict(zip(时间收入, list(map(float, 文徵明收入)))),
                },
        '徐祯卿': {'牵手记录': dict(zip(时间牵手,list(map(float,徐祯卿牵手)))),
                '刷礼物记录': dict(zip(时间礼物,list(map(float,徐祯卿礼物)))),
                '月收入': dict(zip(时间收入, list(map(float, 徐祯卿收入)))),
                },
            }

    用户画像1 = json.dumps(用户画像,ensure_ascii=False,indent=4)
    print(用户画像1)

    def 大哥(用户):
        if sum(list(用户['牵手记录'].values())) == 0 and sum(list(用户['刷礼物记录'].values())) > 3000:
            return True
        return False

    print("谁是直播间大哥")
    print('唐寅',大哥(用户画像['唐寅']))
    print('祝枝山',大哥(用户画像['祝枝山']))
    print('文徵明',大哥(用户画像['文徵明']))
    print('徐祯卿',大哥(用户画像['徐祯卿']))

    print("=====================")

    def 好男人(用户):
        if sum(list(用户['月收入'].values())) > 10000 and sum(list(用户['牵手记录'].values())) <2:
            return True
        return False


    print("谁是好男人")
    print('唐寅',好男人(用户画像['唐寅']))
    print('祝枝山',好男人(用户画像['祝枝山']))
    print('文徵明',好男人(用户画像['文徵明']))
    print('徐祯卿',好男人(用户画像['徐祯卿']))
# 代码远程传输
#coding:utf-8
import pickle
from selenium import webdriver

def say():
    print("hello")

class web():

    def open(self):
        say()
        self.gg = webdriver.Chrome("d:/chromedriver.exe")
        self.gg.get("http://www.163.com")

f1 = open("temp.txt","wb")
pickle.dump(web,f1)
f1.close()

f2 = open("temp.txt","rb")
all = f2.read()
f2.close()


web2 = pickle.loads(all)
web3 = web2()
web3.open()

产生excel 数据 

郑东成  2021.11.22

#coding:utf-8
import multiprocessing.dummy as mp
from openpyxl import Workbook

class my_xlwings():

    def __init__(self):
        self.wb = Workbook()

    def 选择sheet(self):
        self.ws = self.wb.active

    def 写入一格(self,line:int,cell:int,value):
        self.ws.cell(column=cell, row=line, value=value)

    def 写入一行(self,line:int,value:list):
        for i in range(len(value)):
            self.写入一格(line+1,i+1,value[i])

    def 退出excel(self):
        self.wb.save(filename="excel_data.xlsx")

def excel(title,data):
    pool = mp.Pool(10)
    excel = my_xlwings()
    excel.选择sheet()
    excel.写入一行(0,title)
    for i in range(len(data)):
        pool.apply(excel.写入一行,(i+1,data[i],))
    excel.退出excel()


if __name__ == '__main__':

    title = ["name", "age", "sex"]
    data = []
    for i in range(1,100000):
        data.append(["peter", i, "man"])
    excel(title,data)

 拿浏览器接口记录

郑东成 2021.12.2 

#coding:utf-8
import json
from selenium import webdriver

caps = {
    'browserName': 'chrome',
    'loggingPrefs': {
        'browser': 'ALL',
        'driver': 'ALL',
        'performance': 'ALL',
    },
    'goog:chromeOptions': {
        'perfLoggingPrefs': {
            'enableNetwork': True,
        },
        'w3c': False,
    },
}
driver = webdriver.Chrome(desired_capabilities=caps)
driver.get('https://www.baidu.com')
logs = [json.loads(log['message'])['message'] for log in driver.get_log('performance')]
with open('log.txt', 'w+', encoding="utf_8_sig") as f:
    for log in logs:
        f.write(str(log)+"\n")
driver.close()

结果示例 

{'documentURL': 'https://www.huamengtech.com/', 'frameId': '2A9C6980E1ED1B093ACDF094E499A2CD', 'hasUserGesture': False, 'initiator': {'columnNumber': 286, 'line

selenium 集群 + docker

郑东成 2021.12.6

原文
https://www.jianshu.com/p/ff30e40491d2


docker network create grid
docker run -d -p 4444:4444 --net grid --name selenium-hub selenium/hub:3.141.59-zirconium
docker run -d --net grid -e HUB_HOST=selenium-hub -v /dev/shm:/dev/shm selenium/node-chrome:3.141.59-zirconium
docker run -d --net grid -e HUB_HOST=selenium-hub -v /dev/shm:/dev/shm selenium/node-firefox:3.141.59-zirconium
docker run -d --net grid -e HUB_HOST=selenium-hub -v /dev/shm:/dev/shm selenium/node-opera:3.141.59-zirconium



from selenium import webdriver
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities

driver = webdriver.Remote(
    command_executor="http://127.0.0.1:4444/wd/hub",
    desired_capabilities=DesiredCapabilities.CHROME
)

driver.get("http://www.baidu.com")
print(driver.title)
driver.close()

docker网络 

不指定网络驱动时默认创建的bridge网络

docker network create default_network

查看网络内部信息

docker network inspect default_network

列所有列表的网络

docker network  ls

移除指定的网络

docker network rm default_network

 读取邮箱验证码

郑东成 2021.12.6

def getcode():

    from selenium.webdriver import ActionChains
    import re
    from email.parser import Parser
    from email.header import decode_header
    from email.utils import parseaddr
    from urllib.parse import unquote
    import poplib
    import base64

    def decode_str(s):
        value, charset = decode_header(s)[0]
        if charset:
            value = value.decode(charset)
        return value

    def get_header(msg):
        test_value = msg.get('Content-Transfer-Encoding', '')
        for header in ['From', 'To', 'Subject']:
            value = msg.get(header, '')
            if value:
                if header == 'Subject':
                    value = decode_str(value)
                elif header in ['From', 'To']:
                    hdr, addr = parseaddr(value)
                    name = decode_str(addr)
                    # value = name + ' < ' + addr + ' > '
                    value = name
            # print(header + ':' + value)

    # 头部信息已取出
    def get_body(msg):
        value = msg.get_payload()[0].get_payload()[0].get_payload()
        print(value)
        return value

    # 获取邮件的字符编码,首先在message中寻找编码,如果没有,就在header的Content-Type中寻找
    def guess_charset(msg):
        charset = msg.get_charset()
        if charset is None:
            content_type = msg.get('Content-Type', '').lower()
            pos = content_type.find('charset=')
            if pos >= 0:
                charset = content_type[pos + 8:].strip()
        return charset

    # 输入邮件地址, 口令和POP3服务器地址:
    from_email = ""
    from_email_pwd = ""
    pop_server = "pop.qiye.aliyun.com"

    server = poplib.POP3(pop_server)
    server.set_debuglevel(0)
    # 设置实例的调试级别。这控制打印的调试输出量。默认值0不产生调试输出。值1产生适量的调试输出,通常每个请求都有一行。值2或更高会产生最大调试输出量,记录在控制连接上发送和接收的每行。
    # print(server.getwelcome().decode("utf-8"))
    # 欢迎信息
    # 登录
    server.user(from_email)
    server.pass_(from_email_pwd)
    resp, mails, octets = server.list()  # 返回邮件数量和每个邮件的大小

    resp, lines, octets = server.retr(len(mails))  # 返回由参数标识的邮件的全部文本
    # print(lines)
    # print(resp)
    # print(octets)

    msg_content = b"\r\n".join(lines).decode("utf-8", "ignore")  # byte字符串
    msg = Parser().parsestr(msg_content)
    # print(str(msg).encode("utf-8"))# 解析为普通字符串

    # get_header(msg)
    body = get_body(msg)
    codestr = base64.b64decode(body).decode('utf8')
    code = re.findall(r'\d+', codestr.split()[0])[0]
    server.quit()
    return code

 用测试套件组建测试流程

郑东成 2021.12.10

import unittest  # 导入unittest  包

# 所有用例需继承TestCase类或者其子类
class simple_test(unittest.TestCase):
    @classmethod
    def setUpClass(cls) -> None:
        print("hello")

    def test_add(self):
        print("test_add")


    def test_divide(self):
        print("test_divide")
from my_main.d4.a import *

if __name__ == '__main__':

    runner = unittest.TextTestRunner(verbosity=2)

    suite1 = unittest.TestSuite()  # 建立测试套件
    suite1.addTests([simple_test('test_add'), simple_test('test_add')])
    runner.run(suite1)

    suite2 = unittest.TestSuite()  # 建立测试套件
    suite2.addTests([simple_test('test_divide'), simple_test('test_divide')])
    runner.run(suite2)

 


selenium4:开发者工具和双向操作

pywinauto的例子

WebDriver Bidi 是 W3C WebDriver 协议的下一代,旨在提供所有浏览器实现的稳定 API,但尚未完成。在此之前,Selenium 为那些实现它的浏览器(例如 Google Chrome、Microsoft Edge 和 Firefox)提供对 CDP 的访问,允许您以有趣的方式增强您的测试。下面给出了您可以使用它做什么的一些示例。

selenium---上传文件(非input标签) - 测试-安静 - 博客园

python调用和cmd调用的语法

郑东成 2021.12.31

#coding:utf-8
import os

if __name__ == '__main__':
    cmd = """
    excel.exe -F "create" -D "{'Excel_name':'my_excel'}"
    """
    cmd = """
    excel.exe -F "write" -D "{'Excel_name':'my_excel','Sheet_name':'Sheet1','Write_string':{'B1':'Apple', 'C1': 'Orange', 'D1': 'Pear','A2': 'Small', 'A3': 'Normal', 'A4': 'Large'}}"
    """
    cmd = """
    excel.exe -F "read" -D "{'Excel_name':'my_excel','Sheet_name':'Sheet1'}"
    """
    os.system(cmd)


# cmd
# excel.exe -F "create" -D "{'Excel_name':'my_excel'}"
# excel.exe -F "read" -D "{'Excel_name':'my_excel','Sheet_name':'Sheet1'}"
# excel.exe -F "write" -D "{'Excel_name':'my_excel','Sheet_name':'Sheet1','Write_string':{'B1':'Apple', 'C1': 'Orange', 'D1': 'Pear','A2': 'Small', 'A3': 'Normal', 'A4': 'Large'}}"

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值