- 2024-11-27
-
回复了主题帖:
测评入围名单:极海APM32M3514电机通用评估板
个人信息无误,确认可以完成测评分享计划。
- 2024-11-18
-
加入了学习《深入理解无刷直流电机(BLDC)原理以及控制》,观看 BLDC电机结构和优势
- 2024-09-30
-
加入了学习《【Follow me第二季第2期】任务汇总贴》,观看 【Follow me第二季第2期】任务汇总贴
- 2024-09-02
-
加入了学习《【Follow me第二季第1期】作品提交汇总视频》,观看 【Follow me第二季第1期】作品提交汇总
- 2024-05-16
-
回复了主题帖:
《Python编程快速上手 让繁琐工作自动化 第2版》第二部分自动化任务8-20章
后面自动化部分应该根据每个人在实际工作中的需要,有针对性的再次重新研读,会更加有意义
-
回复了主题帖:
《Python编程快速上手 让繁琐工作自动化 第2版》第二部分自动化任务8-20章
通过读完这本书后,个人感觉这本书不但可以入门,作为一本方法指导,和工具查询书也是可以的
-
发表了主题帖:
《Python编程快速上手 让繁琐工作自动化 第2版》第二部分自动化任务8-20章
《Python编程快速上手 让繁琐工作自动化 第2版》第二部分自动化任务
——第8章到第20章读后感
本书中第二部分自动化任务是基于第一部分基础知识的高级应用介绍,也是本书的重点。本部分主要包含正则表达式,输入验证,文件处理(基本文件读写,excel电子表文件操作,Google电子表格操作,CSV文件操作,JSON数据处理,PDF文件操作,word文件操作),电子邮件的收发,图形图像处理等。
这一部分介绍的内容比较详细,从实践项目的角度触发,介绍各个模块中包含的方法的含义,使用方法,并且对比了相似方法的应用对象和应用范围。下面从第8章开始的思维导图。
图1 第8章~第12章思维导图
图2 第13章~第17章思维导图
图3 第18章~第20章思维导图。
第8章习题
1.PyInputPlus是否随Python标准库一起提供?
答:
PyInputPlus不是Python自带的标准库,需要通过pip来安装。
2.为什么通常利用import pyinputplus as pyip导入PyInputPlus?
答:
可以使代码输入更加简洁。
3.inputInt()和inputFloat()有什么区别?
答:
InputInt()方法返回整型数;inputFloat()方法返回浮点数。
4.如何利用PyInputPlus确保用户输入0到99之间的整数?
答:
PyInputPlus.inputint(min=0, max=99)
5.什么被传入allowRegexes和blockRegexes关键字参数?
答:
显示允许或拒绝的 regex 字符串列表.
6.如果输入3次空白,inputStr(limit=3)会做什么?
答:
抛出RetryLimitException异常。
7.如果输入了3次空白,inputStr(limit=3, default='hello')会做什么?
答:
返回’hello’字符串。
第9章习题
1.相对路径是相对于什么?
答:
相对路径是相对于当前工作目录。
2.绝对路径从什么开始?
答:
从根文件夹开始,例如C:\
3.在Windows操作系统上,Path('C:/ Users')/'Al'的求值结果是什么?
答:
在windows上其结果为'C:/Users/Al'。
4.在Windows操作系统上,'C:/Users' / 'Al'的求值结果是什么?
答:
会出错。
5.os.getcwd()和os.chdir()函数做什么事?
答:
os.getcwd()函数返回当前工作目录。os.chdir()函数改变当前工作目录。
6..和..文件夹是什么?
答:
. 文件夹是当前文件夹,.. 文件夹是当前文件夹的父文件夹。
7.在C:\bacon\eggs\spam.txt中,哪一部分是目录名称,哪一部分是基本名称?
答:
C:\bacon\eggs\为目录名称,spam.txt为基本名称。
8.可以传递给open()函数的3种“模式”参数是什么?
答:
参数'r'对应读模式,'w'对应写模式,'a'对应添加模式
9.如果已有的文件以写模式打开,会发生什么?
答:
文件内容会删除并覆盖。
10.read()和readlines()方法之间的区别是什么?
答:
read()将文件中内容全部当作字符串读出,readlines()将当前文件内容按行返回字符串列表。
11.shelf值与什么数据结构相似?
答:
shelf与字典类型类似,具有键和值。
第10章习题
shutil.copy()和shutil.copytree()之间的区别是什么?
答:
shutil.copy()函数将复制一个文件,而 shutil.copytree()将复制整个文件夹以及它的所有内容。
什么函数用于文件重命名?
答:
shutil.move()函数用于重命名文件以及文件移动。
send2trash和shutil模块中的删除函数之间的区别是什么?
答:
send2trash 模块中的删除函数将一个文件或文件夹移到回收站,而 shutil 模块中的 删除函数将永久地删除文件和文件夹。
4.ZipFile对象有一个close()方法,就像File对象的close()方法。ZipFile对 象的什么方法等价于File对象的open()方法?
答:
Zipfile.ZipFile()函数等价于 open()函数,第一个参数是文件名,第二个参数是打开 ZIP 文件的模式(读、写或添加)。
第11章习题
写一条assert语句,如果变量spam是一个小于 10 的整数,就触发 AssertionError。
答:
assert spam >= 10,'spam is less than 10'。
写一条assert语句,如果eggs和bacon包含的字符串相同(不区分大小写),就触发AssertionError(也就是说,'hello'和'hello'被认为相同,'goodbye'和'GOODbye'也被认为相同)。
答:
assert eggs.upper() != bacon.upper(), 'The eggs and bacon are the same!'。
编写一条assert语句,使其总是触发AssertionError。
答:
assert false,‘this always act’。
为了能调用logging.debug(),程序中必须加入哪两行代码?
答:
import logging
logging.basicConfig(level=logging.DEBUG, format=' %(asctime)s - %(levelname)s - %(message)s')
为了让logging.debug()将日志消息发送到名为programLog.txt的文件中,程 序必须加入哪两行代码?
答:
import logging
logging.basicConfig(filename='programLog.txt', level=logging.DEBUG, format=' %(asctime)s - %(levelname)s - %(message)s')
5个日志级别是什么?
答:
日志级别分别为:DEBUG、INFO、WARNING、ERROR 和 CRITICAL
你可以加入哪一行代码来禁用程序中所有的日志消息?
答:
logging.disable (logging.CRITICAL)
显示同样的消息,为什么使用日志消息比使用print()要好?
答:
程序设计中不需要删除日志信息,只需要禁用就可以,软件设计工作量减少。
调试控制窗口中的Step Over、Step In和Step Out按钮有什么区别?
答:
Step over执行函数;step in进入函数;step out快速执行后续代码直到跳出当前函数。
单击Continue按钮后,调试器何时会停下来?
答:
继续运行程序,直到断电或程序结束。
什么是断点?
答:
告诉调试系统在断点当前行暂停运行。
在Mu中,如何在一行代码上设置断点?
答:
单击行号。
第12章习题
简单描述webbrowser、requests、BeautifulSoup和selenium模块之间的不同。
答:
webbrowser 模块有一个 open()方法,它启动 Web 浏览器,打开指定的 URL。requests 模块可以从网上下载文件和页面。BeautifulSoup 模块解析 HTML。selenium 模块可以启动 并控制浏览器。
requests.get()返回哪种类型的对象?如何以字符串的方式访问下载的内容?
答:
requests.get()函数返回一个 Response 对象,它有一个 text 属性,包含下载内容的字符串。
哪个requests方法用于检查下载是否成功?
答:
如果下载有问题,raise_for_status()方法将抛出异常;如果下载成功,什么也不做。
如何取得requests响应的HTTP状态码?
答:
Response 对象的 status_code 属性包含了 HTTP 状态码。
如何将requests响应保存到文件?
答:
以“二进制写”模式在你的计算机上打开新文件后,利用一个 for 循环迭代遍历 Response 对象的 iter_content()方法,将各段写入该文件。
打开浏览器的开发者工具的快捷键是什么?
答:
F12
在开发者工具中,如何查看页面上特定元素的HTML?
答:
从菜单中选择 Inspect Element
要找到id属性为main的元素,CSS选择器的字符串是什么?
答:
'#main'
要找到CSS类为highlight的元素,CSS选择器的字符串是什么?
答:
'.highlight'
要找到一个元素中所有的元素,CSS 选择器的字符串是什么?
答:
'div div'
要找到一个元素,且它的value属性被设置为favorite,CSS选择器 的字符串是什么?
答:
'button[value="favorite"]'
假定你有一个Beautiful Soup的Tag对象保存在变量spam中,针对的元素是Hello, world!。如何从这个Tag对象中取得字符串'Hello world!'?
答:
spam.getText()
如何将一个 Beautiful Soup的Tag对象的所有属性保存到变量linkElem中?
答:
linkElem.attrs
运行import selenium没有效果。如何正确地导入selenium模块?
答:
from selenium import webdriver
find_element_*和find_elements_*方法之间的区别是什么?
答:
find_element_*方法将第一个匹配的元素返回,作为一个 WebElement 对象。 find_elements_*方法返回所有匹配的元素,作为一个 WebElement 对象列表。
selenium的WebElement对象有哪些方法来模拟鼠标单击和键盘按键?
答:
click()和 send_keys()
你可以在Submit按钮的WebElement对象上调用send_keys(Keys.表达式ENTER),但利用selenium还有什么更容易的方法提交表单?
答:
调用 submit()方法将提交该表单
利用selenium如何模拟单击浏览器的“前进”“返回”和“刷新”按钮?
答:
forward()、back()和 refresh()等 WebDriver 对象方法
第13章习题
对于以下的问题,设想你有一个Workbook对象保存在变量wb中,一个Worksheet对 象保存在sheet中,一个Cell对象保存在cell中,一个Comment对象保存在comm中,一 个Image对象保存在img中。
openpyxl.load_workbook()函数返回什么?
答:
openpyxl.load_workbook()函数返回一个 Workbook 对象
工作簿属性wb.sheetnames返回什么?
答:
sheetnames 属性返回一个 Worksheet 对象
如何取得名为'Sheet1'的工作表的Worksheet对象?
答:
wb['Sheet1']
如何取得工作簿的活动工作表的Worksheet对象?
答:
wb.active
如何取得单元格C5中的值?
答:
sheet.cell(row=5,column=3).value
如何将单元格C5中的值设置为"Hello"?
答:
sheet.cell(row=5,column=3).value="Hello"
如何取得表示单元格的行和列的整数?
答:
cell.row
cell.column
工作表属性sheet.max_column和sheet.max_row返回什么?这些属性的类型是 什么?
答:
返回表格最大列数和最大行数的整数值,是整型数。
如果要取得列'M'的整数索引,需要调用什么函数?
答:
openpyxl.cell.column_index_from_string('M')
如果要取得列14的字符串名称,需要调用什么函数?
答:
openpyxl.cell.get_column_letter(14)
如何取得从A1到F1的所有Cell对象的元组?
答:
sheet['A1':'F1']
如何将工作簿文件名保存为example.xlsx?
答:
wb.save('example.xlsx')
如何在一个单元格中设置公式?
答:
公式的设置和值一样,需要以“=”的公式字符串。
如果需要取得单元格中公式的结果,而不是公式本身,必须先做什么?
答:
使用load_workbook() 时,将data_only 关键字设置为 True 。
如何将第5行的高度设置为100?
答:
sheet.row_dimensions[5].height = 100
如何设置列C的宽度?
答:
使用sheet.column_dimensions['C'].width 设置列宽。
什么是冻结窗格?
答:
使用sheet.freeze_panes 方法冻结窗格
创建一个条形图,需要调用哪5个函数和方法?
答:
openpyxl.charts.Reference() 、 openpyxl.charts.Series() 、 openpyxl.charts. BarChart()、chartObj.append(seriesObj)和add_chart()
第15章习题
不能将PDF文档名的字符串传递给PyPDF2.PdfFileReader()函数。应该向该函数传递什么?
答:
传递 open()返回的 File 对象
PdfFileReader()和PdfFileWriter()需要的File对象,应该以何种模式打开?
答:
对 PdfFileReader()用读二进制('rb'),对 PdfFileWriter()用写二进制('wb')
如何从PdfFileReader对象中取得第5页的Page对象?
答:
getPage(4)
PdfFileReader的什么属性保存了PDF文档的页数?
答:
PdfFileReader 对象中的numPages 变量
如果PdfFileReader对象表示的PDF文档是用口令swordfish加密的,应该先做 什么才能从中取得Page对象?
答:
decrypt('swordfish')
使用什么方法来旋转页面?
答:
rotateClockwise()和 rotateCounterClockwise()方法。旋转度数作为整数参数传入
什么方法返回文档demo.docx的Document对象?
答:
docx.Document('demo.docx')
Paragraph对象和Run对象之间的区别是什么?
答:
每个word文档都包含一个Paragraph对象列表表示段落,每个Paragraph对象都包含一个Run对象列表,Run对象是是相同样式文本的延续。
doc变量保存了一个Document对象,如何从中得到Paragraph对象的列表?
答:
doc.paragraphs
哪种类型的对象具有bold、underline、italic、strike和outline属性?
答:
Run 对象有这些属性
bold属性值设置为True、False或None,有什么区别?
答:
True 总是让 Run 对象成为粗体,False 总是让它不是粗体。None 让 Run 对象使用该样式的粗体设置
如何为一个新Word文档创建Document对象?
答:
docx.Document()
doc变量保存了一个Document对象,如何添加一个文本是'Hello there!'的段落?
答:
doc.add_paragraph('Hello there!')
哪些整数表示Word文档中可用的标题级别?
答:
整数 0、1、2、3 和 4
第16章习题
哪些功能Excel电子表格有,而CSV电子表格没有?
答:
在 Excel 中,电子表格的值可以是字符串以外的数据类型,单元格可以有不同的字体、 大小或颜色设置,单元格可以有不同的宽度和高度,相邻的单元格可以合并,可以嵌入图像和图表。而CSV仅为字符串。
向csv.reader()和csv.writer()传入什么来创建reader和writer对象?
答:
通过open()方法获取的File对象。
对于reader和writer对象,File对象需要以什么模式打开?
答:
对于 reader 对象,File 对象需要以读二进制模式('rb')打开;对于 writer 对象,需要以写二进制模式('wb')打开。
什么方法接收一个列表参数,并将其写入CSV文件?
答:
writerow()
delimiter和lineterminator关键字参数有什么用?
答:
delimiter 参数改变了分隔行中单元格所用的字符串。lineterminator 参数改变了分隔行的字符串
什么函数接收一个JSON数据的字符串,并返回一个Python数据结构?
答:
json.loads()
7.什么函数接收一个Python数据结构,并返回一个JSON数据的字符串?
答:
json.dumps()
第17章习题
什么是UNIX纪元?
答:
“UNIX纪元”是编程中经常参考的时间:1970年1月1日0点,即协调世界时(UTC)。
什么函数返回自UNIX纪元以来的秒数?
答:
time.time()
如何让程序刚好暂停5秒?
答:
time.sleep(5)
round()函数返回什么?
答:
返回与传入参数四舍五入的整数。
datetime对象和timedelta对象之间的区别是什么?
答:
datetime 对象表示一个特定的时刻。timedelta 对象表示一段时间
利用datetime模块,弄清楚2019年1月7日是星期几。
答:
datetime.datetime(2019,1,7).weekday()
假设你有一个函数名为spam(),如何在一个独立的线程中调用该函数并运行其中 的代码?
答:
threadObj = threading.Thread(target=spam)threadObj.start()
为了避免多线程的并发问题,应该怎样做?
答:
线程间不使用相同的全局变量。
第18章习题
发送电子邮件的协议是什么?检查和接收电子邮件的协议是什么?
答:
发送电子邮件使用SMTP协议,接收电子邮件使用IMAP协议
必须调用哪4个smtplib函数/方法,才能登录到SMTP服务器?
答:
smtplib.SMTP()、smtpObj.ehlo()、smptObj.starttls()和 smtpObj. login()
必须调用哪两个imapclient函数/方法,才能登录到IMAP服务器?
答:
imapclient.IMAPClient()和 imapObj.login()。
应传递给imapObj.search()什么样的参数?
答:
传入IMAP搜索关键词字符串
如果你的代码收到了错误信息got more than 10000 bytes,你该怎么做?
答:
将变量 imaplib._MAXLINE 赋值为一个大整数
imapclient模块负责连接到IMAP服务器和查找电子邮件。什么模块负责读取 imapclient收集的电子邮件?
答:
pyzmail 模块读负责取下载的邮件
在使用Gmail API时,credentials.json和token.json文件是什么?
答:
credentials.json 和 token.json 文件告诉 ezgmail 模块在访问 Gmail 时要使用哪个 Google 账户。
在Gmail API中,thread和message对象有什么区别?
答:
message代表一个消息,thread代表一个邮件
利用ezgmail.search(),如何找到有文件附件的邮件?
答:
在你传递给 search()的字符串中包含'has:atttachment'文本
在发送短信之前,你需要从Twilio得到哪3种信息?
答:
你需要 Twilio 账户的 SID 号、认证标识号,以及你的 Twilio 电话号码
第19章习题
什么是RGBA值?
答:
RGBA 值是 4 个整数的元组,每个整数的范围是 0 至 255。
如何利用pillow模块得到'CornflowerBlue'的RGBA值?
答:
ImageColor.getcolor('CornflowerBlue', 'RGBA')
什么是矩形元组?
答:
矩形元组是 4 个整数的元组:分别是左边的 x 坐标,顶边的 y 坐标,宽度和高度。
哪个函数针对名为zophie.png的图像文件返回一个Image对象?
答:
Image.open('zophie.png')
如何得到一个Image对象的图像的宽度和高度?
答:
imageObj.size
调用什么方法会得到一个100像素×100像素的图像的Image对象,但不包括它左下 角的1/4?
答:
imageObj.crop((0, 50, 50, 50))
将Image对象修改后,如何将它保存为图像文件?
答:
imageObj.save('new_filename.png')
什么模块包含pillow的形状绘制代码?
答:
ImageDraw 模块
Image对象没有绘制方法。哪种对象有?如何获得这种类型的对象?
答:
ImageDraw 对象,可以提供point(),line(),rectangle()
第20章习题
如何触发PyAutoGUI的失效保护来停止程序?
答:
将鼠标指针移到屏幕的左上角,即坐标(0,0)处
什么函数返回当前的分辨率?
答:
pyautogui.size()
什么函数返回鼠标指针当前位置的坐标?
答:
pyautogui.position()
pyautogui.moveTo()和pyautogui.move()函数之间的区别是什么?
答:
moveTo()函数将鼠标指针移到屏幕的绝对坐标处,而 move()函数相对于鼠标指针的当 前位置来移动鼠标指针。
什么函数用于拖放鼠标指针?
答:
pyautogui.dragTo()和 pyautogui.drag()。
调用什么函数将替你输入字符串"Hello, world!"?
答:
pyautogui.typewrite('Hello, world!')。
如何模拟按向左键这样的特殊键?
答:
pyautogui.typewrite()输入按键字符串的列表或单个按键单个字符串。
如何将当前屏幕的内容保存为图形文件并命名为screenshot.png?
答:
pyautogui.screenshot('screenshot.png')
什么代码能够设置每次PyAutoGUI函数调用后暂停两秒?
答:
pyautogui.PAUSE = 2
如果你想在网页浏览器内自动单击和按键,应该使用PyAutoGUI还是Selenium?
答:
使用 Selenium 来控制一个 Web 浏览器
是什么让PyAutoGUI容易出错?
答:
PyAutoGUI 会盲目地点击和输入
如何在屏幕上找到每一个标题中包含文本Notepad的窗口的大小?
答:
yautogui.getWindowsWithTitle('Notepad')
如何使Firefox浏览器成为活动窗口,显示在屏幕上的其他每一个窗口前面?
答:
w = pyatuogui.getWindowsWithTitle('Firefox'),然后运行 w.activate()
-
发表了日志:
《Python编程快速上手 让繁琐工作自动化 第2版》第二部分自动化任务8-20章
- 2024-05-11
-
回复了主题帖:
《Python编程快速上手 让繁琐工作自动化 第2版》第7章模式匹配与正则表达式
应用正则表达式的机会挺少的,通过读书发现正则表达式功能强大,但是也确实非常复杂,如果有一个设计工具就好了
- 2024-05-10
-
发表了主题帖:
《Python编程快速上手 让繁琐工作自动化 第2版》第7章模式匹配与正则表达式
本帖最后由 我爱下载 于 2024-5-10 09:38 编辑
《Python编程快速上手 让繁琐工作自动化 第2版》第7章 模式匹配与正则表达式
本章篇幅较大,作者细致阐述了通过正则表达式进行字符串中匹配搜索的方法和技巧,对于Regex的使用有很大的帮助。
习题
创建Regex对象的函数是什么?
答:
通过re.compile()创建Regex对象。
在创建Regex对象时,为什么常用原始字符串?
答:
原始字符串可以简化正则表达式中转义字符的使用。
search()方法返回什么?
答:
search()方法返回一个Match对象。
通过Match对象如何得到匹配该模式的实际字符串?
答:
Match对象中有一个group()方法,它返回被查找字符串中实际匹配的文本
在用r'(\d\d\d)-(\d\d\d-\d\d\d\d)'创建的正则表达式中,分组0表示什么?分组1表示什么?分组2表示什么?
答:
分组0返回整个匹配的文本,分组1返回第一个括号匹配的文本,分组2返回第2个括号匹配的文本。
括号和句点在正则表达式语法中有特殊的含义。如何指定正则表达式匹配真正的括号和句点字符?
答:
在正则表达式中,括号表示分组。句点为通配字符,他匹配除换行符之外的所有字符。为了匹配真正的括号和句点需要使用倒斜杠转义,\( \) \.
findall()方法返回一个字符串的列表或字符串的元组的列表。是什么决定它提供哪种返回?
答:
如果正则表达式中没有分组,findall()方法返回字符串列表,如果正则表达式中存在,findall()方法返回字符串元组的列表。
在正则表达式中,|字符表示什么意思?
答:
正则表达式中,“|” 符号称为“管道”,可以完成匹配许多表达式中的一个。
在正则表达式中,?字符有哪两种含义?
答:
在正则表达式中,?字符声明非贪心匹配或表示可选的分组。
在正则表达式中,+和*字符之间的区别是什么?
答:
在正则表达式中,*意味着“匹配零次或多次”,+(加号)则意味着“匹配一次或多次”。
在正则表达式中,{3}和{3,5}之间的区别是什么?
答:
在正则表达式中,{3}表示匹配3次,{3,5}表示匹配3次、4次和5次之间的任何一种 。
在正则表达式中,\d、\w和\s缩写字符类是什么意思?
答:
在正则表达式中,\d表示0~9的任何数字;\w表示任何字母、数字或下划线字符(可以认为是匹配“单词”字符);\s表示空格、制表符或换行符(可以认为是匹配“空白”字符)。
在正则表达式中,\D、\W和\S缩写字符类是什么意思?
答:
在正则表达式中,\D表示除0~9的数字以外的任何字符;\W表示除字母、数字和下划线以外的任何字符;\S表示除空格、制表符和换行符以外的任何字符。
14..*和*?之间的区别是什么?
答:
.*表示任意文本;*?表示非贪心模式匹配0次或多次。
匹配所有数字和小写字母的字符分类语法是什么?
答:
[0-9a-z]
如何让正则表达式不区分大小写?
答:
可以向re.compile()传入re.IGNORECASE或re.I作为第二个参数。
字符.通常匹配什么?如果re.DOTALL作为第二个参数传递给re.compile(),它会匹配什么?
答:
“.”字符匹配除换行符外的所有字符,如果re.DOTALL作为第二个参数传递给re.comple(),将会匹配所有字符包括换行符。
如果numRegex = re.compile(r'\d+'),那么numRegex.sub('X', '12, drummers, 11 pipers, five rings, 3 hens')返回什么?
答:
返回字符串“X,drummers,X pipers,five rings,X hens”
将re.VERBOSE作为第二个参数传递给re.compile(),让你能做什么?
答:
当匹配复杂的文本模式,可能需要长的、令人费解的正则表达式。将re.VERBOSE作为第二个参数传递给re.compile(),忽略正则表达式字符串中的空白符和注释,从而缓解这一点
20.写一个正则表达式匹配每3位就有一个逗号的数字。它必须匹配以下数字:
'42'
'1,234'
'6,368,745'
但不会匹配以下数字:
'12,34,567'(逗号之间只有两位数字)
'1234'(缺少逗号)
答:
re.compile(r'''
(?<![\d|,])\d{1,3}(?=\s) #匹配只有1-3位数,左边
|
(?<![\d|,])\d{1,3}(?:,\d{3})+(?=\s) #匹配带有","的情况
''', re.VERBOSE)
21.写一个正则表达式匹配姓为Nakamoto的完整姓名。你可以假定名字总是出现在
姓前面,是一个大写字母开头的单词。该正则表达式必须匹配:
'Satoshi Nakamoto'
'Alice Nakamoto'
'RoboCop Nakamoto'
但不匹配:
'satoshi Nakamoto'(名字没有首字母大写)
'Mr. Nakamoto'(前面的单词包含非字母字符)
'Nakamoto'(没有名字)
'Satoshi nakamoto'(姓没有首字母大写)
答:
re.compile(r'[A-Z][a-zA-Z]*\sNakamoto')
22.编写一个正则表达式来匹配一个句子,它的第一个词是Alice、Bob或Carol,第
二个词是eats、pets或throws,第三个词是apples、cats或baseballs。该句子以句点结束。这个正则表达式不区分大小写。它必须匹配:
'Alice eats apples.'
'Bob pets cats.'
'Carol throws baseballs.'
'Alice throws Apples.'
'BOB EATS CATS.'
但不匹配:
'RoboCop eats apples.'
'ALICE THROWS FOOTBALLS.'
'Carol eats 7 cats.'
答:
re.compile(r'''((?:Alice|Bob|Carol)\s(?:eats|pets|throws)\s(?:apples|cats|baseballs)\.)''', re.VERBOSE | re.I)
-
发表了日志:
《Python编程快速上手 让繁琐工作自动化 第2版》读后感2
- 2024-05-05
-
回复了主题帖:
《Python编程快速上手 让繁琐工作自动化 第2版》 第一部分: Python编程基础
发现原帖中图片不是很清楚,重新上传一张
-
发表了日志:
《Python编程快速上手 让繁琐工作自动化 第2版》读后感1
-
发表了主题帖:
《Python编程快速上手 让繁琐工作自动化 第2版》 第一部分: Python编程基础
《Python编程快速上手 让繁琐工作自动化 第2版》读后感1 - 第一部分: Python编程基础
感谢
首先感谢社区组织的读书活动,可以让我有机会接触到《Python编程快速上手 让繁琐工作自动化 第2版》。因为工作中会使用一些Python语言完成数据处理,文件处理,算法验证等工作,自己在网上也学习了一些Python的知识,接着社区的这次读书活动,让我有机会完整的学习Python语言,可以更好的利用它快速的完成我的任务。
最后再次感谢社区和本书的作者以及译者。
第一部分阅读
本书第一部分为Python编程基础,书中从基础的交互式环境建立,数据类型,基础的编程语言、函数,到列表,字典和机构化数据以及字符串操作等共6章内容,完成了python语言编程基础的引入。因为有一定的C语言开发经历,所以对于书中介绍的这些基础知识还是比较容易理解的。
通过阅读本书,我总结了本书第一部分的思维导图:
第一部分习题
第一章习题:
下面哪些是操作符,那些是值?
答:
操作符: * , - ,/,+
值:’hello’, -88.8, 5
下面哪个是变量,哪个是字符串?
答:
变量:spam
字符串:‘spam’
说出3种数据类型
答:
整型,浮点型,字符串等
表达式由什么构成?所有表达式都做什么事?
答:
表达式由操作数,运算符和函数调用等组成的语法结构。
所有的表达式都可以求值。
本章介绍了赋值语句,如spam=10。表达式和赋值语句有什么区别?
答:
表达式可以求值,赋值语句是将一个值保存到变量中,赋值语句包含变量名,等号和要存储的值。
下列语句运行后,变量bacon的值是什么?
答:
bacon的值是20
下面连个表达式求值得结果是什么?
答:
‘spam’+’spamspam’ 结果为’spamspamspam’
‘spam’ * 3 结果为 ‘spamspamspam’
为什么eggs是有效的变量名,而100是无效的变量名?
答:
Python规定变量名的规则为:只能是一个词,不能带空格;只能包含字母,数字和下划线;不能以数字开头。
基于以上规则eggs是一个合法的变量名,而100是无效的变量名。
哪3个函数分别取得一个值的整型、浮点型和字符串形式?
答:
整型:int()
浮点型:float()
字符串:str()
为什么下面这个表达式会导致错误?如何修复?
答:
会导致错误,可以修改为:’I have eaten ‘ + str(99) + ‘burritos.’
第二章习题:
1.布尔数据类型的两个值是什么?如何拼写?
答:
布尔数据类型的两个值是True和False
2.3个布尔操作符是什么?
答:
and, or, not
3.写出每个布尔操作符的真值表(也就是操作数的每种可能组合,以及操作的结果)。
答:
4.以下表达式求值的结果是什么?
答:
(5 > 4) and (3==5) 结果 False
not(5 > 4) 结果 False
(5>4) or (3==5) 结果 True
not((5 > 4) or (3 == 5)) 结果 False
(True and True) and (True ==False) 结果 False
(not False) or (not True)结果 True
6.6个比较操作符是什么?
答:
==,!=,<, >, <= , >=
7.解释什么是条件,可以在哪里使用条件。
答:
条件是布尔表达式,总是求一个布尔值,True或False 。可以在控制流语句中使用。
8.识别这段代码中的3个语句块:
答:
代码块1:spam = 0
代码块2:
if spam == 10:
print('eggs')
if spam > 5:
print('bacon')
else:
print('ham')
print('spam')
代码块3:
print(‘spam’)
9.编写代码,如果变量spam中存放1,就输出Hello;如果变量中存放2,就输出Howdy;如果变量中存放其他值,就输出Greetings。
答:
if spam == 1:
print(‘Hello’)
else:
if spam == 2:
print(‘Howdy’)
else:
print(‘Greetings’)
10.如果程序陷在一个无限循环中,你可以按什么键退出循环?
答:
ctrl+c
11.break和continue语句之间的区别是什么?
答:
break的作用是跳出当前的循环;continue的作用是跳回到循环开始处。
12.在for循环中,range(10)、range(0, 10)和range(0, 10, 1)之间的区别是什么?
答:
range(10)包含0,1,2,3,4,5,6,7,8,9
range(0,10)第一个参数是开始值,第二个参数是数值上限,但不包含,结果同range(10)
range(0,10,1)第一个参数是开始值,第二个参数是终止值,第三个参数是步长,结果同range(10)
13.编写一小段程序,利用for循环输出从1到10的数字。然后利用while循环编写一个等价的程序,输出从1到10的数字。
答:
for i in range(10):
print(i+1)
14.如果在名为spam的模块中,有一个名为bacon()的函数,那么在导入spam模块后,如何调用它?
答:
spam.bacon()
第三章习题:
1.为什么在程序中加入函数会有好处?
答:
函数的作用简化需要多次执行的代码组织。
2.函数中的代码何时执行:是在函数被定义时,还是在函数被调用时?
答:
函数的代码在被调用时执行。
3.用什么语句创建一个函数?
答:
def用来定义函数。
4.一个函数和一次函数调用有什么区别?
答:
函数用于定义一个完成一定功能的代码组织。而一次函数调用是执行了一个函数,实现一次函数所定义的功能。
5.Python程序中有多少全局作用域?有多少局部作用域?
答:
有1个全局作用域,和1个局部作用域。
6.当函数调用返回时,局部作用域中的变量发生了什么?
答:
局部作用域中的变量被释放而失效。
7.什么是返回值?返回值可以作为表达式的一部分吗?
答:
函数中使用return返回值,返回值是表达式的结果,而不是表达式的一部分。
8.如果函数没有返回语句,对它进行调用的返回值是什么?
答:
None
9.如何强制函数中的一个变量引用是全局变量?
答:
global
10.None的数据类型是什么?
答:
NoneType
11.import areallyourpetsnamederic语句做了什么?
答:
引入areallyourpetsnamederic模块
12.如果在名为spam的模块中有一个名为bacon()的函数,那在引入spam后,如何调用它?
答:
spam.bacon()
13.如何防止程序在遇到错误时崩溃?
答:
通过异常处理防止程序在遇到错误时崩溃。
14.try子句中发生了什么?except子句中发生了什么?
答:
try子句中执行正常代码,并捕获代码中的错误。except子句中对于程序错误的处理。
第四章习题:
1.什么是[]?
答:
定义列表的符号
2.如何将'hello'赋给列表的第三个值,而让列表保存在名为spam的变量中?(假定变量包含[2, 4, 6, 8, 10]。)
答:
spam = [2, 4, 6, 8, 10]
spam[2] = ‘hello’
对接下来的3个问题,假定spam变量包含列表['a', 'b', 'c', 'd']。
3.spam[int('3' * 2) / 11]求值为多少?
答:
值为’d’
4.spam[-1]求值为多少?
答:
值为’d’
5.spam[:2]求值为多少?
答:
spam[:2]值为[‘a’, ’b’]
对接下来的3个问题。假定bacon变量包含列表[3.14, 'cat', 11, 'cat',True]。
6.bacon.index('cat')求值为多少?
答:
值为 1
7.bacon.append(99)让bacon变量中的列表值变成什么样?
答:
列表变为[3.14, 'cat', 11, 'cat',True, 99]
8.bacon.remove('cat')让bacon变量中的列表值变成什么样?
答:
列表变为[3.14, 11, 'cat',True, 99]
9.连接和复制列表的操作符是什么?
答:
连接操作符 +
复制操作符 *
10.append()和insert()列表方法之间的区别是什么?
答:
append()方法只能把项目添加到列表的末尾,insert()方法可以把项目插入到列表的任意位置。
11.从列表中删除值有哪两种方法?
答:
del() 和 remove()
12.请说出列表值和字符串的几点相似之处。
答:
字符串可以看作是一种特殊的列表,他们都支持索引,切片,迭代等操作。
13.列表和元组之间的区别是什么?
答:
列表是可变的,支持添加,修改和删除元素;元组是不可变的,一旦创建不可修改。他们定义的符号不同,列表采用[]定义,元组采用()定义。
14.如果元组中只有一个整数值42,如何输入该元组?
答:
spam=(42)
15.如何从列表值得到元组形式?如何从元组值得到列表形式?
答:
列表转元组 tuple()
元组转列表 list()
16.“包含”列表的变量,实际上并未直接包含列表。它们包含的是什么?
答:
包含的是列表的引用。
17.copy.copy()函数和copy.deepcopy()函数之间的区别是什么?
答:
copy.copy()可以复制列表的元素;copy.deepcopy()除了复制列表的元素还可以复制内部的列表。
第五章习题:
1.空字典的代码是什么样的?
答:
spam={}
2.一个字典包含键'fow'和值42,它看起来是什么样的?
答:
{‘fow’:42}
3.字典和列表的主要区别是什么?
答:
列表是有顺序的,可以排序,字典是键值对形式的,不能排序
4.如果spam变量是{'bar': 100},那么当你试图访问spam['foo']时,会发生什么?
答:
当访问不存在的键值时,将出现KeyError错误信息。
5.如果一个字典保存在spam变量中,那么表达式'cat' in spam和'cat' in spam.keys()之间的区别是什么?
答:
'cat' in spam本质上是'cat' in spam.keys()的简写版本,他们的结果相同。
6.如果一个字典保存在spam变量中,那么表达式'cat' in spam和'cat' in spam.values()之间的区别是什么?
答:
表达式 'cat' in spam查询’cat’键是否存在;表达式'cat' in spam.values()查询’cat’值是否存在。
7.下面代码的简洁写法是什么?
EEWORLDIMGTK13
答:
spam.setdefault(‘color’, ‘black’)
8.什么模块和函数可以用于输出美观的字典值?
答:
pprint模块中ppprint和pformat方法可以输出美观的字典值
第六章习题:
1.什么是转义字符?
答:
转移字符包含一个倒斜杠(\),用来输入一些无法通过正常方式放入字符串中的字符。
2.转义字符\n和\t代表什么?
答:
\n代表换行符
\t代表制表符
3.如何在字符串中放入一个倒斜杠字符\?
答:
\\
4.字符串"Howl's Moving Castle"是有效字符串。为什么单词中的单引号没有转义,却没有问题?
答:
因为字符串采用双引号定义,因此系统默认单引号为有效字符。
5.如果你不希望在字符串中加入\n,该怎样写一个带有换行的字符串?
答:
使用3个单引号’’’来定义字符串,可以使用回车代替换行符。
6.下面的表达式分别求值为什么?
'Hello world!'[1]
'Hello world!'[0:5]
'Hello world!'[:5]
'Hello world!'[3:]
答:
'Hello world!'[1]的值为’e’
'Hello world!'[0:5]的值为’Hello’
'Hello world!'[:5] 的值为’Hello’
'Hello world!'[3:] 的值为’lo world!’
7.下面的表达式分别求值为什么?
'Hello'.upper()
'Hello'.upper().isupper()
'Hello'.upper().lower()
答:
'Hello'.upper()的值为’HELLO’
'Hello'.upper().isupper()的值为True
'Hello'.upper().lower()的值为’hello’
8.下面的表达式分别求值为什么?
'Remember, remember, the fifth of November.'.split()
'-'.join('There can be only one.'.split())
答:
'Remember, remember, the fifth of November.'.split()的值是[‘Remember,’, ‘remember,’, ‘the’, ‘fifth’, ‘of’, ‘November.’]
'-'.join('There can be only one.'.split())的值是’There-can-be-only-one.’
9.什么字符串方法能用于字符串右对齐、左对齐和居中?
答:
字符串右对齐方法rjust();字符串左对齐方法ljust();字符串居中方法center()
10.如何去掉字符串开始或末尾的空白字符?
答:
去掉开头和末尾的空白字符的方法是strip()。
- 2024-04-14
-
回复了主题帖:
读书入围名单:《Python编程快速上手 让繁琐工作自动化 第2版》
个人信息无误,确认可以完成阅读分享计划。
- 2024-03-23
-
回复了主题帖:
领取审核名单(第五批): 辞旧,年底清仓,100+板卡来袭,有缘来领
个人信息无误,已知晓需自己支付邮费,请使用E金币支付邮费
- 2024-02-27
-
回复了主题帖:
得捷电子Follow me第4期】进阶任务:从NTP服务器获取时间并显示
sss421 发表于 2024-2-26 23:37
没有找到ntp的库
你可以看我的结项报告贴,里面有可以使用的库,放到设备内就可以使用了
- 2024-02-25
-
回复了主题帖:
辞旧:年底清仓,100+板卡来袭,有缘来领
申请4号,Atmel SAM4E Xplained Pro
atmel虽然被人收购了,但是她设计的评估板我觉得是质量非常高的。准备利用这款评估版学习zephyr操作系统。zephyr操作系统官方支持SAM4E Xplained Pro,非常适合用来学习和测试。
-
回复了主题帖:
【得捷电子Follow me第4期】扩展U8G2移植支持LCD显示
本帖最后由 我爱下载 于 2024-2-25 08:21 编辑
Jacktang 发表于 2024-2-24 08:05 库中需要的gpio操作函数实现,实际上并不需要实现什么,这是为什么
我感觉这个函数主要要是提供延时功能和GPIO的操作的一些功能的,我看有些大神在模拟I2C和模拟SPI中把一些操作放在这里,还有一些初始化会放在这里,我这个移植的时候把硬件SPI和CS引脚初始化直接放到外面初始化函数里了,而且这款LCD没有命令数据切换引脚,所以GPIO函数对这个lcd的移植没有什么用了
- 2024-02-22
-
回复了主题帖:
【得捷电子Follow me第4期】项目总结报告
本帖最后由 我爱下载 于 2024-2-22 19:21 编辑
基础任务一(续):ping通互联网站点
实现的相关报告:【得捷电子Follow me第4期】基础任务一(续):ping通互联网站点 - DigiKey得捷技术专区 - 电子工程世界-论坛 (eeworld.com.cn)
除此之外的扩展应用:
u8g2的移植的相关报告:【得捷电子Follow me第4期】扩展U8G2移植支持LCD显示 - DigiKey得捷技术专区 - 电子工程世界-论坛 (eeworld.com.cn)
相应的代码: