哈喽,大家好,今天我们接着上个视频的内容,来学习变量的具体使用方法。想要用好变量,第一步就得先搞清楚变量该怎么创建,它的基本语法格式是什么样的。 在 python 中,定义变量的核心格式很简单,先写变量名,再写一个等于号,最后去写我们需要存储的数据。这里需要注意,我们中间的这个等号,在 python 中,它不叫等于,而是叫做负值符, 它的作用是把复制符右边的数据存放到左边这个容器中。比如我们这里的 x 复制成一,那它就是将一存到变量 x 中。 那变量呢?能够存的数据类型有很多,除了整数以外,还能够存小数组串,甚至于还能写变量。复制变量,像我们这里的 i 复制 j, 它的意思呢,就将复制符右边变量 j 你 所存储的数据复制一份,放到左边变量 i 中。 那这里我们需要注意一下,在复制之后,右边变量 j, 它原本的值是不会消失的, i 和 j 它会各自保存一份相同的内容。 变量除了存储数据以外呢,还能够参与各种计算。像我们这里给到的 x 复制一, y 复制二,然后新建了一个变量 sum, 复制成了 x 加 y。 那 python 呢,它会先计算 x 加 y 的 结果,也就是三,然后将结果存储到 sum 中。 在实际使用过程中呢,我们有两种便捷的复制方式,第一种是多变量复制相同的值,我们可以直接写 x 复制 y 复制 i 复制 j 复制成一, 那在这个过程中,它是从右向左进行复制的,它先将一复制给 j, 再把 j 的 值复制给 i, 以此类推,最终实现四个变量的值都为一的效果。 第二种呢,是多变量复制不同的值。我们可以这么去写, x 逗号 y 逗号 i 等于一逗号二点零逗号 hello。 那 python 呢,它会按照位置对应的规则去进行赋值, 将一给到 x, 将二点零给到 y, 将 hello 给到 i, 和我们分开写的格式,它的效果是完全一样的,只是写法更加的简洁。 变量它的使用场景呢,也是非常多的,比如我们之前学的 print 函数中,它的使用方式就有很多种,我们来看一下这一块代码和它的一个执行效果。 这块代码中呢,我们给 x 复制了一,然后写了三种 print 中的使用方法。第一种,直接输出变量,也就是我们的 print x, 会直接打印 x 里存储的值。 第二种,在表达式中参与运算后进行输出。我们这里的 print x 加 y, 他 会先计算 x 加 y 的 值为二,然后再将二进行打印。第三种,嵌入到字母串中进行输出, 那这里需要注意一下它的写法,它和普通的 print 海漏不同,它需要在字母串中的引号前面加上一个 f, 然后在字母串里面用大括号包裹我们的变量名, 像我们这里就是 print f 引号 x 冒号,大括号包裹一个 x 冒号, 那这里我们的 python 呢,就能够读取到大括号里面变量 x 的 值输出了 x 冒号一, 如果说我们没有加 f, 没有套大括号的话,它就会按照原样进行输出。像我们这里的第一个 x, 因为没用大括号包裹起来,所以它就是以 x 的 形式进行输出的,那下个视频我们再来学习数据类型。
粉丝217获赞327

在 excel 中可以直接使用 python 了,无需额外安装 python, 即可通过 python 代码在 excel 中分析和处理数据。本期聊一聊如何在 excel 中使用 python。 第一,如何启动 python? 在 excel 中启动 python 有 两种方法,可以依次点击公式,插入 python 命令,或者在当前单元格中直接输入等于 py, 就 会显示 py 函数。 此时输入左括号,或者直接按下 tab 键,单元格左侧就会显示两个绿色背景的字母 p y, 表示 python 启用成功,接下来就可以直接输入 python 代码。第二,如何执行 python 代码? 比如在 c 二单元格中输入一加一,如果按一下回车键就会换行。如果按 ctrl 键加回车键,就会执行这段代码,并显示结果,也就是数字二。 当插入多个 p y 函数时, excel 会按照从左向右自上而下的顺序执行。比如在 c 二单元格中定义两个变量,数量等于一百,单价等于十。然后在 e 二单元格中再插入一个 p y 函数, 输入数量乘以单价,按 ctrl 键加回车键,得到的结果就是一千。如果把 e 二单元格的内容移动到 b 二单元格中,就会显示一串井号,而不会显示正确的计算结果。 这是因为 excel 会从左向右先执行 b 二单元格中的 python 代码,而此时代码中的变量并没有被定义,因此就会出现错误。 如果移动到一二单元格中,因为 c 二单元中已经定义了变量,因此就可以正确执行。另外,在 python 代码中还可以直接引用 excel 中的数据,比如在 c 四单元格中输入百分之九十,然后修改一下 e 二单元格中的 python 代码, 先输入乘号,再点选 c 四单元格,就可以直接引用 c 四单元格中的数据,按 ctrl 键加回车键后,得到的结果就是九百。 仔细观察这段 python 代码,可以看到 c 四单元格都被一对小括号包裹,并且前面都有两个字母, x 和 l, 我 们称之为叉 l 函数。以上就是 excel 中 python 的 基础用法,关于 py 函数与 excel 函数,咱们下期会详细讲解。

开伞爬虫教程第七集 cookie 的 使用在浏览网站的过程中,我们经常会发现登录之后才能看到更多内容,比如购物网站的历史订单、个人信息页面等。 这些内容通常需要我们在访问网页发起请求时输入了登录信息才能正常访问。而问题在于,每一次刷新页面实际上都是发起一次新的 h t p 请求,每次刷新服务器都像是第一次见到你一样要求重新登录,那用户体验显然会非常糟糕。 那么这个问题该怎么解决呢?这个时候我们就可以使用上 cookie 了。简单来说, cookie 就是 保存了用户信息以及用户的喜好的一串字母。当你第一次登录某个网站时,服务器会创建这个 cookie, 并在响应时将其传递给浏览器, 浏览器接收到后会将 cookie 保存下来。当你再次向同一个服务器发起请求时,浏览器就会自动携带这个 cookie。 服务器通过解析 cookie 识别出用户身份,从而避免了重复登录,同时也能根据之前的喜好返回相应的内容。 为了让浏览体验更加顺畅,在浏览器发起请求时,携带 cookie 已经成为非常重要的一环。那么问题来了,我们该如何找到浏览器中存储的 cookie 呢?这里有两种常见的进入开发者模式的方法,第一种是直接按下键盘上的 f 十二键, 第二种是在页面空白处右键点击选择检查。进入开发者工具后,我们找到网络的选项卡,然后刷新页面,重新加载数据包。在这里我们可以找到最上面的文档。在请求的标头内找到这个 cookie, 那 么这个 cookie 就是 浏览器保存的 cookie 了。 可能有同学会发现,我明明没有登录某个网站,浏览器的请求里怎么也有 cookie? 这是因为 cookie 其实可以分为两种,第一种,临时 cookie。 如果你没有登录网站,浏览器会设置一个临时 cookie, 发送请求时携带给服务器,这个临时 cookie 在 浏览器关闭之后会自动删除。 当然,这种临时 cookie 也没有保存个人信息和个人账户的作用。第二个,持久 cookie。 这个持久 cookie 它会设置有效的期限,有些网站可能是三到五天,有些可能是半个月或者一个月。 大家可以观察,我们在浏览器中登录了一个网站之后,过一段时间再次进入的时候,仍旧是需要重新登录呢? 这就是因为 cookie 已经过期了。理解了 cookie 的 基本概念和获取方式之后,我们再来看它在爬虫程序中是如何应用的。在实际开发中,我们有这么几种情况,在爬虫程序中需要使用到 cookie。 第一种情况,在网站中,如果需要登录才能访问的页面,例如用户个人中心或者账户信息、会员专属内容等等,那么我们就需要使用到这个 cookie。 第二种情况,保持绘画状态。像我们在网站中浏览小说,每一次翻一页或者点击到新的下一章,就需要刷新一下页面,那么就要保持这个 cookie 状态的存在,那么我们就需要使用到 cookie。 第三种,某些网站通过 cookie 验证请求合法性。有些网站会对首次访问设置 cookie, 如果没有检测到 cookie, 服务器就会直接将其视为爬虫,并拒绝返回数据,在这种情况下,爬虫程序中就必须携带上对应的 cookie, 那 么如何在爬虫程序中携带上 cookie 呢?通常有两种实现方式,第一种方式是在请求头中携带 cookie, 这种方式我们可以在爬虫程序中这么写,将 cookie 加入到 headers 里面,然后爬虫发起 get 请求时,携带这个 headers 里面的 cookie 就 可以了。第二种方式是单独设置 cookie 参数, 我们可以创建一个 cookie 字典,然后将 cookie 里面的属性和值写到里面,然后在发起 get 请求的时候加入上 cookie 这个参数。那么具体在拍唱里应该怎么使用呢?我们在拍唱中来练习一下到底如何正确使用吧。这个视频我们来看如何抓取百度登录后的个人中心页面。 首先我们在浏览器中来看一下百度个人中心的页面是长什么样的,可以看到通常在一个网站中都会有一个用户登录 在这里呢,我已经提前登录好了这个网站,在这里我们就可以点入到个人中心,我们就可以抓取到这个页面的内容。 如果我们没有登录这个个人中心,那么点击这个登录是无法进入到这个页面中的,那么这个网站的服务器就是通过 cookie 来识别你是哪个用户,然后返回对应用户的个人中心。 首先我们来看如何抓取这个页面呢?第一步我们当然是需要先导入库,因为需要发起请求,那么首先就要导入的是 request 库,然后获取到登录的网页 url, 我 们直接将这里的网址复制过来,写上一个变量 url, 然后将我们刚刚复制的网址粘贴进去, 写了这些之后,我们再来获取登录后返回的 cookie, 那 么 cookie 的 写入方式有两种,一个是创建一个单独的 cookie 作为参数的形式返回, 另一个就是在请求头里面写爬虫程序。为了模拟真实的人类,向网站服务器发起请求的动作,我们最好都是写上这个请求头,所以在这里我写上 headers。 在 headers 里面除了需要使用写上 cookie 之外,最好还写上用户身份,我们将 user agent 改为浏览器中模拟成人类同样的身份,打开检查,进入开发者模式,在网络这个选项卡中点击重新加载网页,点击这个文档,然后我们写上这个 user agent。 一定要记住, headers 请求头是以字典的形式创建的,那么里面的 user agent 和 cookie 就 必须是以键对值的形式。 我们粘贴过来的时候只有文本,并不是键对值的形式,所以我们需要在这里对它们进行一些小小的修改。 user agent 改为键对值的形式之后,我们在同样地方找到 cookie, 也将它复制下来,改为键对值的形式。我直接粘贴进去,大家会发现就出现了一个错误, 这其实就是大家经常犯的一个错误,我直接写上了 user agent, cookie 我 就不管了。我们要注意的一点, 键对值与键对值之间必须是用逗号隔开,这样写了之后,我们的代码就不会报错了。写上了 headers 里面的 user agent 和 cookie 之后,那么我们就发起请求,写上一个变量 response, 使用 get 方法向这个网址发起请求,并且携带上请求头的参数,然后将我们抓取的内容保存,使用 whatsopen 方法写入到百度 person 的 html 文件中。现在我们右击,然后运行这段代码, 等到这个进程结束之后,我们看到创建的 html 文档,我们右击在资源管理器中打开 html 文档, 可以看到我们就抓到了一个类似的 html 文档,与百度中的页面是非常相似的,有一些图片加载不出来,这是因为使用的形式并不是与 html 的 形式储存的。 总之, cookie 是 网络爬虫中的重要储存部分,合理的使用 cookie 可以 让我们做了爬虫程序保持登录的页面,并且模拟更加真实的用户行为。 那么希望你通过这个视频的介绍和练习,掌握了 cookie 的 基本原理和实际运用。如果你还有其他问题,也欢迎在评论区留言,我们下个视频,再见!拜拜!

pyasa 爬虫教程第四集 beautiful subcool 的 使用 hello, 大家好,你知道什么是网络爬虫吗?这里说的爬虫可不是一条真的虫子,而是指模拟人类在浏览网站时,把有价值的信息自动保存下来的一种行为。 举个例子,假如我们想每天自动获取百度热搜的内容,手动打开网页复制太麻烦,但通过爬虫代码就可以做到批量的把热搜内容保存下来,完全不需要我们手动操作。那么网络爬虫是怎么做到的呢? 首先,我们需要先弄明白百度里的内容是如何出现在我们眼前的。当我们想在浏览器里查看百度时,在搜索框输入百度或者直接输入网址,这个过程就相当于我们人类通过浏览器向百度的服务器发起了一次请求, 服务器收到请求后,会把百度的原始网页内容,也就是 html 代码返回给浏览器,这些 html 代码经过浏览器的渲染,才变成了我们看到的那种图纹并茂、排版整齐的漂亮页面。 这就是我们人类在浏览器中访问网站时,浏览器和服务器之间做的事情。而网络爬虫呢,则是通过代码的方式,直接向服务器发起请求,获取到页面内容。因为没有浏览器的渲染,我们拿到的就只有最原始的 html 代码。 百度页面上的每一个字,每一张图片,其实都是由 html 代码中的标签来承载和展示的。所以如果我们想抓取对自己有用的信息,思路就很清晰了,只需要找到对应的标签,把里面的内容提取出来就行。 但 html 里的标签有成百上千种,如果一个个去找,那就太麻烦了,那怎么快速找到我们需要的标签呢?这个视频我们就来学习一个非常好用的库, beautiful soup。 大家可以把 beautiful soup 理解成一个过滤器, 它能够解析网页的原始内容,把 html 代码里的标签自动分门别类整理好。这样当我们想抓取热搜词条的时候,我们就只需要找到对应的标签就好了。 接下来我们就来看看怎么使用 beautiful soup cool beautiful soup cool 是 第三方库,需要在终端以命令的形式写下 pip install beautiful soup 四就可以完成下载和安装,安装好之后,我们就可以用它来解析 html 文件了。 在 python 里我们通常这样写,首先导入 request 库,使用 request 库中的 get 方法向百度网页发起请求。 为了防止服务器发现我们是爬虫而不返回正确数据,我们需要带上 headers 参数,伪装成浏览器发起请求,获取到响应之后呢,用 response 点 text 拿到网页的 html 代码。拿到了 html 代码之后,我们再导入 bs 库,使用 beautiful soup 库中的 beautiful soup 方法, 并且利用 html 解析器把原始的 html 代码中的标签都解析成一个个的标签对象。作为爬虫,我们其实不需要知道每个标签的具体作用,但我们一定要弄清楚 html 标签的结构, 在 html 里,大部分标签都是成组出现的,结构是这个样子的,想要抓取的数据就包裹在这个标签中间。 beautiful soup 的 解析器会仔细阅读整个 html 文件,把这些标签都整理归类好。现在我们来实际操作一下, 在浏览器中打开百度网页,右键点击检查,进入开发者工具。在这个窗口里,我们可以看到整个页面的 html 源码, 并且我们可以看到有很多箭括号包裹着元素,这些箭括号就是 html 标签。点击左上角的小箭头,然后把鼠标移动到页面上我们感兴趣的元素上。比如热搜里的一个词条,源代码就会跳转到 html 源码中的位置, 我们可以看到这个热搜词条是由一个 span 标签包裹起来的,其他的热搜词条也是由一个 span 标签包裹起来的。 那么我们想要查找热搜词条就只需要查找 span 标签就可以了,而解析器就会帮我们自动找到 html 文件中的所有 span 标签。使用 beautiful super cool 最常用的方法有两种,就是根据标签名来查找想要的元素,使用 find 或者 find all 方法, 在括号内写上你想要查找的标签名,记住标签名要使用引号标记起来。假设查找 d i v 标签,翻译方法只能够抓取 html 代码中第一个你想要查找的标签,而 find 方法可以查找 html 代码中所有的 d i v 标签, 这也是爬虫批量获取数据常用的方法。还是打开这个开发者模式,我们会发现在一个网页的 html 文件中,可能不同的内容都会使用相同名字的标签, 比如说这个热搜词条和上面的这个元素零都是使用 span 标签包裹起来的。而我们只想要抓取到热搜中的词条,我们应该怎么精确地查找到这个词条呢?每个 html 标签后面通常会带上一些属性,比如说 id 或者 class, 在 id 和 class 后面的值就相当于这个标签特有的名字,可以帮助我们更加精确地找到这个标签。 在我们来复制这个热搜词条特有的 class 名 title content title, 将 class 名也写到 find 或者 find all 方法中。 值得注意的是,因为 class 在 python 中是创建类的关键词,所以我们复制到这里查找标签时,需要在 class 后面加上下划线作为区分。这样 hot search 内就是我们刚刚抓取的 span 标签了。简单来说,爬虫的工作流程就是这个样子的, 使用 request cool 发起请求获得到响应的 html 文件,再使用 beautiful suite 内的解析器来解析 html 文件。 将每个 html 标签归类好,再使用 find 或者 find 方法搜索目标标签,并且从目标中提取到文本或者属性刚刚的代码。我们使用的是 find 方法抓取到了第一个热搜词条的内容。如果需要抓取页面中所有的热搜词条,就需要使用到 find 方法。 接下来我们通过练习来提取热搜上自己想要的信息吧。首先,我们必须在 pycharm 中的终端内下载好 beautiful soup cool, 在 终端中写下命令, piping store b s 四,然后按下回车键,直到出现这个 successfully, 那 么就表示我们已经安装成功了,在这里才可以使用上 beautiful soup cool。 想要抓取百度页面中所有的热搜词条,那么我们就需要使用到的是 find all 方法。在这里将我们刚刚复制过来的代码改为 find all。 然后我们再来运行一下这段代码。 大家可以看到我们可以抓取到这个对应的标签。想要获取到对应的内容,那么我们就需要使用到 for 循环,使用 element 代替列表中的元素,抓取每一个标签里面的内容。使用这个点 text 的 方法 写好之后,我们再来运行这段代码,大家就可以看到我们就成功抓取到了热搜上的词条。那么再点击看一下热搜词条, 可以看到热搜上的词条与我们抓取的是一致的,那么就说明我们已经成功抓取了百度中的热搜词条。 beautiful soup 就 像一个智能的文档分析助理,能够帮你将杂乱无章的 html 代码变成结构清晰,可以轻松获取信息的数据模型。 相信大家通过今天的学习已经掌握了 request cool 和 beautiful soup cool, 并且已经真正地掌握了爬虫的工作原理。你也可以用以上方法尝试来抓取你想要获取的内容。当然如果你有什么疑问也可以在这个评论区提出来,那么我们下个视频再见吧,拜拜!

大家好,本节内容是从复制粘贴中学习。什么是列表解析式?首先我们看一下什么是复制粘贴,也就是我们通常说的 control c 进行复制, ctrl v 进行粘贴这么一个简单的操作,比如说复制,我可以给他造两个一模一样的,首先我 ctrl 系复制这个两个字,然后 ctrl v 粘贴,我可以粘贴好几份,这就是复制粘贴。那它与列表解析时有什么关系呢? 列表解析式它是另外一种动态创建列表的方法,那么它肯定也是最后创建的是列表。我们知道在上一节内容中, f 循环也可以动态创建列表,只是说列表解析式更加简单和高效, f 循环相对来说比较复杂, 我们也推荐大家使用列表解析式进行创建列表,那么它的种类是有两种,第一种的话是指定一符条件的列表解析式,也就是说生成的列表里面所有的元素是符合一定的一符条件,也就是说有过滤机制。 第二个是无条件的列表解析式,也就是说所有的列表没有指定任何条件。这个列表解析式我们有三点需要注意,第一点的话是说列表解析式,它的结果肯定是一个列表,最后是用中文号来表示的。 那么第二个是说列表解析式里边也是核心就是负循环,但它比我们真正的负循环更加简单和高效,待会我们看一下具体的语法。 第三个我们一定要注意,并不是每一个负循环都可以写为列表解析式,但列表解析式肯定可以写成负循环。那么到底什么是列表解析式,我该怎么样去写呢?我们就可以通过复制黏贴的方法来去达到我们的目的。接着看一下这两种列表解析式, 那么第一种是有异符条件的列表解析式。首先我们看一下语法,它语法很简单,中括号代表一个,列表二个,也就是说表达再往后是赋音结构,再往后是异符条件,一共是由三部分来组成,那这个我们就可以给它解释为 赋变量,在这个序列,也就序列里面的所有的变量,在异符条件下作用于表达时, 我们可以给他解释成说是符合异副条件的所有序列作用于表达式生成一个新的列表,这个就是列表解析式。 那所以说这里面有两个核心内容,第一个是负或结构,第二个是移负条件,这样一个列表解析式,他就与下面的负或循环是等价的。首先负循环我们知道是有一个负或音结构,然后紧跟着是异副条件, 这个列表名点 erpen 就是 它的一个表达式,我可以把列表 erpen 的 里面的元素放到列表里边,那所以说列表解析式可以转化成负循环,但是负循环并不可能转化成列表,并不是所有的,这就是它们两个的一个关系。 那看完语法之后,我们接着再往下看例子,那比如这样一个例子有一个需求, 我要求十以内的基数,这是我们复循环里面的内容,我们知道可以使用复音结构,让 if n 百分二二等于一就可以实现了。那么现在我要使用复制粘贴的方法,把它转换成列表解析式,我们看一下怎么样去转化的, 用复制粘贴的方法转换,它是分为四步,第一步的话复制 o d, d s 等于列表,然后第二步的话是我们根据语法知道是表达式, 那现在的话表达的是什么?就是这个而编的 n, 就 这样一句话,那所以说我直接写一个 n 就 可以了,而不需要使用这个方法了。 那第三步的话我们再看语法,第三步是一个负音结构,那所以说我第三步就是说要把这个负音复制到这个里面就可以了,但是有一点要注意,后面的冒号是不需要的,因为列表解析式里面的负循环不是真正的循环。 第四个我们知道一幅条件,那这个一幅条件放在什么位置呢?我们是放在紧跟着 for 结构之后,你就是 if n 百分二等于一,这最后可以达到我们想要的一种效果了。 那么最后转换后的代码是什么样子的?我们看一下,就是长这个一个结构,是不是跟我们的转换语法一模一样,那所以说复制粘贴的方法就是说我把原来的负循环结构一步一步的给他复制过来就可以, 当然这个只是一个过渡时期,对于我们刚刚学习列表解析时的同学来说,你不可能直接写出这样一个结构,当您熟悉了以后,你就不需要依赖这样一个后循环结构而直接去写就可以了,这是我们给大家需要注意的一个小点。 我们再看 if else 条件列表解析式, if 结构以外我们还有另外一种条件判断 if else 结构,那列表解析式也可以处理这种情况,我们看语法,首先写一个中括号,代表是一个列表,然后我们写表达式, 这个表达式我们一定要记住是 if 条件后面的表达式,然后 else 的 表达式,所以这里面有两个表达式,第一个是 if 满足条件执行这个表达式,如果不满足 if 条件执行第二个表达式, 那这个条件是哪里来的?就是我们上节学的各种算术运算符,那么这个条件也是这个变量名它的一个条件,那后面紧跟着是负音结构,那所以整个的我们可以给他这样一个解释,也就是说序列里面的变量 符合条件的话执行表达式,不符合条件的话执行这个表达式,那整个的就是 if else 条件列表解析式。同样的我们需要注意这两点,我们接下来看一个例子给大家解释一下。 同样呢,我们有这样一个需求,求实以零的基数,并且呢要把偶数加一变成基数。我们知道在上一节内容中,我们可以直接使用负结构,很简单,直接负音,然后 if else 就 可以实现了, 那我们把它通过复制粘贴的方法变成列表解析式,该怎么样去变呢?那么第一步还是同样的,我要复制这样一个 o 等于列表,第二步的话,我要把这个表达式给复制到这个 o 字里面。那么首先我们要复制哪个表达式呢? 首先是 if 条件下的表达式,也就是 o 点,而 print n 把 n 写进去,然后第三步的话是要复制 eve, 也就是说 if 这个条件要把 n 百分二等于一复制进去,然后我们再复制 l 后面的表达式, n 加一就可以了,两个直接复制过来, 那么最后的话还是复制负 n 因子,但也需要注意,这个循环后面没有冒号,因为它不是真正的负循环。那整个复制完以后,它列表解析式就是中括号,然后 n if n 百分二二等于一, 这个是 if 下面的一个条件,然后这个是表达式,然后这个是 else 它的一个情况,它的一个表达式,最后是 for。 学过这个就是我们的 ifelse 条件的列表解析式。大家一定要注意, ifelse 是 放在 for 的 前面, 而 if 条件,它的列表解析式是要把这个 if 键放在 for 的 后面,大家一定要记住这个顺序,不要颠倒了,会出错。 刚才我们看到的是有条件的列表解析式,有条件我就可以对我这个序列进行过滤了,比如说我只求奇数或者只求欧数等等。 那现在如果我不想过滤,就是无条件的列表解析式。我们看语法,同样的,它是一个列表中括号表示,然后表达式 for 音结构。意思也就是说系列里面的所有的变量都作用于这个表达式,然后形成一个新的列表解析式,那么它也等价于这样一个 for 循环,也有列表名,等于一个空的,然后这样一个 for 音结构,这个所有的变量都作用于这个表达式就可以了。 那同样的,无条件的列表解析式也是可以转化成 for 循环,但并不是 for 循环都可以转化成列表解析式。 我们看这样一个例子,有时候我们需要求数字的序列,比如我们要求十个数字的序列,十个数字可以把它给写出来,比如这样一个例子,就 for 音结构就可以写出来了,那现在我要把它转换成无条件的列表解析式。 同样我们通过复制粘贴的方法,那么第一步还是要复制这个列表, ctrl 第二步我要把这个 n, 也就是这个表达式放进去就可以了。第三步我要复制这个 for 音结构就可以了,同样还是没有这个冒号, 那列表解析式最后是什么样子?就是 n f n 音润解。十,那整个的就是一个无条件的列表解析式,那相当于有条件的是不是更加简单,因为 f 后面没有异副条件,它这个解析式看起来也就更加容易理解。 我们知道负循环除了一个负循环之外,单个循环之外还有千套负循环,那千套负循环一样也是可以转换成列表解析式,并且呢它也有两种,为什么要有这种列表解析式?就是因为它的代码程序会高效,就执行起来会快一些。 那么这两种相当的负循环,它这两种是不是和单个的是一样的呢?我们看一下。那么第一种也是指定 if 条件的列表解析式, 同样的列表中空号,然后表达式,负结构,负结构,然后异副条件。大家一定要注意,负两个负是与你原来的负顺序是一致的,也就是说外层的循环写到前面,内层的负循环写到后面,这两个不能颠换顺序。 然后第二个是无条件的列表解决式,把后面的异副条件去掉,就是无条件了,他也可以转换成这样一个等价的千套负循环。我们看一个例子, 我们比如说要计算两个列表中的同时为基数的和,该怎么样去算呢?同样呢我们使用复制粘贴的方法,我们直接复制这样一个列表就可以了,然后我们再把这个两个数字相加,也就表达式给它复制过来, i 加 g, 然后再把外层的负循环负 i 音这样的数字复制过来,然后再把内层的循环复制过来, 然后再给它一个 if 条件。就第五步,因为要判断是基数,所以它的 if i 百分二等于一,并呢,介意百分二等于一,那最后这个就是它一个整个的列表解析式, 我们使用 py 叉模板软件给大家演示一下这些列表解析式,有条件的和无条件的同样的代码放到了左下角,希望大家能够运行一下。到解析式一共有三个解析点,第一个是指定条件的 if, if else 列表解析式, 第二种是无条件的列表解析式。首先我们看一下指定 if 条件的列表解析式, 有这样一个需求,求使引链的基数,我们使用父结构直接可以进行,写出来就是我们上一节内容,我们直接运行就可以了, 我们可以看到使用父循环求使引链的基数一三五七九。那么现在我使用复制粘贴的方法,把它转变成列表解析式,那该怎么样去做呢?那么第一步我要复制谁复制这个列表, 那么复制完列表之后,第二步我要复制表达式,那现在表达式是谁?就这一句话,我要把这句话直接复制过来,但是呢我不需要 app 的 这个方法了,因为它是列表解析式,也就是直接 n 就 可以了, 那么单步的话,也就是说要复制这个负循环,大家一定要注意,这个负循环后面是没有冒号的,我直接复制就可以了。 那么最后一步我直接复制 if 条件,同样的不需要复制冒号, 那么到此为止,这个列表解析式都已经写完了,是不是很简单?我们输出一下,同样的,我们写一个日期,比如说使用列表解析式, 使用列表解析式 print 一下,我们运行看一下,结果 我们找到使用列表解析式,后面紧跟着一三五七九,就是我们需要求的十以内的基数, 这个就是指定 if 条件的列表解析式。那有的时候我们只写这样一行,是不是很难去看懂,不知道他写的是什么东西? 那为了可读性,那 python 支持挂号之间断行,那该怎样去断行呢?我们给大家演示一下。比如这样一个列表解析式,我就可以直接断行了,我把 n 断一下, for 结构断一下, 然后 if 再断一下,那整个的就是列表解析式了, n 再把它弄出来,那这样看一下是不是就更加简洁,比这个更加简单了,因为我一眼看上去就知道说是 for 结构,然后有一个 if 结构,所有的 n 满足这个条件下 执行这个表达式,然后放到列表解析式里面,一眼就可以看到。那同样呢,它是不是可以进行输出呢?输出一下,同样呢,我们可以加一个注,是之间加上断行,然后直接可以写这个, 我们再运行一下, 我们现在可以看到 python 支持在括号之间断行,同样输出了一三五七九,所以说列表解析式可以进行,为了好看,断行一下, 接着我们再看一下 if else 条件的列表解析式,有这样一个需求,使以内的基数,并且呢把偶数加一变成基数, 我们可以直接写出来负结构的循环,我们看一下结果,使以内的基数把偶数加一,那是不是最后得出来全是基数一三五七九,那现在我要把它变成列表解析时,那是不是同样我可以进行复制粘贴的方法? 第一步的话我要复制这个, 那复制完了之后,那么第二步我要复制的是表达式,那这个表达式是我直接复制 n 就 可以了。 第三步的话,紧跟着要复制一符条件,不需要复制这个冒号,再往后我要复制 else 就 可以了, 冒号也是不需要的,我直接去掉。那 else, 后面紧跟着是它对应的表达式,也就是把偶数加一, 那整个 ifelse 条件复制完了,紧跟着后面最后才是括号音结构再复制一次,那现在为止列表解析式就写完了,同样的我们输出一下, 我们直接复制这边的,那这个是使用我们为的区别是 if else 列表解析式运行一下, 我们可以看到使用 ifelse 列表解析式,后面紧跟着是一一三三五五,是不是和我们负循环等的结果一模一样?那同样的为了这个可读性,我们进行断横 断行,那断行的话,我们同样复制这个列表解析式, 我该怎么断行呢?同样的是一个语法点进行断一次行,比如 n, if 等于它,然后 else 再往后是负音结构,最后再把中括号,这整个就是一个断行了,同样的输出也是可以的。 现在给大家一个项目实战的例子,有时候做数据分析的时候,经常要处理一些浮点数,比如有这样一堆数据,有 nilson 是 字母初二,然后时间,然后三百二十点零,七十点零,这些是一个浮点数。 那怎么样把这些赋减数变成整数呢?我要对它进行处理,因为数据分析要处理整数是非常方便,也就更加容易一些,我要把它给转换,使用赋循环就很简单,我直接写一个赋就可以了。那如果使用列表解析时,该怎么转换呢? 那首先我们看一下需求,它要把浮点数变成整数,那中间是不是有一个类型转换,也就是 i n t, 我 如果判断一下这个数字是浮点数了,就把它转换, 如果不是的话就不用转换了,这就是一个需求,也就是一个解析的方法,那我们看怎么去写?首先我们给这个列表起一个名字,比如说整数, 它是一个列表,然后我要对这个列表解析式进行一操作。首先是表达式,那这个表达式是什么? 我们知道是一个 int 括号,要对它进行一个转换,那什么样条件下才会转换呢?也就是 if 条件,当这个 if 条件,它的类型也就 type x, 它的类型是什么类型的时候,赋减数的时候才会对它进行转换。如果不是赋减数,那是不是我直接把它放到这个列表里面就可以了?那最后我这个 x 生在哪里呢?也就是 for 进行结构 for x, 然后 in data, 那 这个是不是就是我们整个的列表解释很快就写完了,当然大家可以留一个作业, 请先写出 for 循环,然后按照复制粘贴的方法写出列表解析式。 那现在我直接给它写出来了,我现在给大家运行一下 杠 n 有 一个换行,然后我要把赋点数转换成整数, 那它的结果就是 i, n, t 等 date, 我 们运行一下是不是我们想要的结果 把浮点数变成整数,后面紧跟着是我的 list, 我 们可以看到三百二,七十八,一千二,三七十八,一千四,这些数字都变成了整数,之前都是浮点数。 另外我们需要注意一下 c, n 还有时间,还有人名,因此它们还是浮点数, 因为我们 else 这个表达式没有做任何的处理,大家你也可以去对它进行处理一下,比如我这个地方再加上一个 i, n, t 啊或者之类的,把它变成数字, 做任何的处理,要根据您自己的业务需求来去写你的表达式。现在我这个业务是说要把浮点数变成整数,因为我们数据分析经常要处理一些整数的数字,那现在如果我给大家再来第二个需求, 如果说我这一堆数字里面我要找出来大于一千的数,那这样的话该怎么样去写这个列表解析式呢?那是不是同样呢?要先写一个 for 循环结构,然后把它复制粘贴的方法写成一个列表解析式,那这个我们可以给大家留为作业, 同样的也是请大家写出负循环,然后再写出列表解析式。那现在我们带大家去写一下怎么样?直接去写列表解析式,同样的我们给它起一个名字, 这些数字是大于一千的,然后列表解析式,那这个列表解析式是要作用于一个数字,这个数字是什么?是 n 就 可以了。然后这个 n 来自于哪里呢?是 for 结构, for 是 n in data。 那 这个 n 它要符合一定的条件才会放到这个列表里面。什么样的条件呢?也就是 if, 那 你这个 n 刚开始的话,你是不是要进行判断一下,你这个 n 是 不是等于浮点数?因为这里面除了浮点数,还有字母串,字母对不对?也就是 nelson, 这也是字母。 然后呢,找到了这些浮点数之后,我还要进行判断,那么两条判断条件同时满足,是不是使用 n 的, 后面紧跟着就是他的一个 n, 要怎么着?大于一千, 那这个条件就可以把它给写出来。条件写完了,整个的列表解析式也就写完了,我们给它输出一下,输出大于一千的数据, 这个变量是 data 杠一千,然后运行结果我们可以看到大于一千的数据都是一千二、一千四,我们看一下原始的数据集, 一千二、一千四符合我们条件。当然你也可以把它给转化一下,这个 n 都给他转换成整数,这个给他使也是可以的。 如果说我要您求一下大于七十八的数字或大于三百的数字,是不是很简单的就可以直接给他写出来这些列表解析使, 或者说我要求这些数据里面对它进行求一个平方或者求一个密之类的,是不是很简单?当然这些都是我们日后工作中经常使用的,如果您熟悉了之后,也可以像我一样把它直接写出来一个列表解析式,不需要使用负循环结构了, 但也希望大家能把我留的这些小的作业自己去写一下,要有一个过渡的过程。 第二个我们再看一下无条件的列表解析式,无条件也就是没有条件,那么这个需求是生成十个数字的列表,这个很简单,我们就直接把它给生成,使用负循环,十个数字零到九, 那么同样我们使用列表解析时,你就复制粘贴的方法把它生成。那么第一步我要复制这个 time, 然后我要复制这个表达式还是 n, 再往后紧跟着是一个 for 循环, 那现在是不是就是可以满足我的一个需求了?然后我进行输出,这个是要生成十个数字的列表 变量是紧跟着 ten 杠 list。 我 们为了更加清晰是使用列表解析式的方法,现在我们看一下结果是不是我们想要的。 我们可以看到使用列表解析式生成十个数字的列表,零一二三四六七八九,和负循环是一模一样的。最后一个我们看一下 千套负循环。首先看这样一个例子,我要求同时为己数的和,比如说一二三,这是一个数字奇,四五六又是一个数字奇,我要求这里面的基数的和,也就是说 一是基数,三也是基数。第二个里面五是基数,一加五它的和,三加五它的和,这样一个计算我一眼就可以看出来。那复循环该怎么写,那复循环外层的话,我是不是要便利这个列表, 那么内层复循环我要便利第二个列表,那同时我要判断一下 i 是 不是基数, c 是 不是奇数,同时为奇数的时候,然后他们两个相加就可以了。那么一和四会不会相加?不会,因为四是偶数,它不满足一个条件,那整个就是负循环结构, 我们通过运算结果可以看到它就是六和八,和我们期望的是一模一样的,现在我通过复制粘贴的方法把它转换成列表解析式,那这个列表解析式该怎么样去转换呢?第一步同样的我要把这个复制就可以了, 复制完之后紧跟着要复制这个表达式,这个表达式是什么?就是两个数字的和, 那这两个数字来自哪里?我们知道,先要外层循环,他们两个循环的顺序和列表截制的顺序是一模一样的,后面紧跟着是第二个内层循环的, 那么 for 循环结构完了以后,后面紧跟着是不是 if 条件好,整个的就已经写完了。我们输出一下列表解析式,求 两格列表中同时为基数的和,我们还是复制一下, 我们运行一下,我们可以看到列表式中两个列表中同时为基数的和六和八,和,我们使用负循环是一模一样的结果。 那么这里给大家留一个作业,这个作业就是九九乘法表,那这个九九乘法表,如果说我不使用双层负循环,我直接使用列表解析式,该怎么去做呢?本次演示我们就已经结束了,作业大概有两三个, 希望大家能够去把它自己练习一下,但如果你练习过程中有什么不懂的,你可以在 qq 群去咨询,或者说加我微信,或者加入我公众号微信去跟我联系都可以。 好,我们总结一下本节的内容,本节内容主要是学了从负循环转化到列表解析式。我们知道负循环是有两种,第一种是单个的负循环,第二种是千套的负循环,它们两个都可以转化成列表解析式, 用到的方法是复制粘贴,很简单,就是 ctrl c 加 ctrl v 转化过来的。列表解析式是有两种,第一种是指定义无条件的,也就是对这个列表进行过滤, 第二种是无条件的列表解析式。大家一定要注意一个点列表解析式都可以转化成负,但是反过来不成立, 那么使用负循环一定要注意是为了一个过渡。最后我们要要求大家直接写出了列表解析式,因为真正工作中或者说项目中是直接让你写列表解析式的。好,感谢大家。

送给各位关注我的朋友,感谢大家的认可。讲完此章节后, python 基础部分的内容基本就完结了,希望我讲解的内容能够对大家有所帮助。一、后续就是开发的相关内容 更新会慢一些,同时我会录制一套关于客从作流的视频,这也是我从去年开始就在使用的技术,感兴趣的朋友可以关注,敬请期待。话不多说,开始我们今天的视频。 好,各位小伙伴们大家好,接下来我们继续开始讲第八个的调试,我希望每一位同学都要掌握,因为它确实很好用, 它是为了干嘛的?就是为了解决你的程序报错了,可能错误了,一下子无法根据错误的描述信息来找到错在哪,那这个时候就需要调试你的代码,或者调试你的程序,那调试我把它分为两部分,第一步是打断点,第二步是第八个的相关操作。 好,那接下来我们先说一下打断点,打断点其实就是在某一行标记做一下标记,怎么标记呢?来回到我们的拍档中,比如说假设回到我们这个代码中,比如说我想对这行代码进行标记, 比第七行代码进行标记,那我在第七行拍秤这个地方来,记住啊,在这个地方的灰色这个地区,按记鼠标单记一下,出现一个红色的这一个点,红色的一个圆,那么这个表示在第七行加上了一个断点,或者说在第七行打上了一个断点,再点一下它断点就去掉了。 好吧,这就是打断点,记住啊,是在这个代码的百大家可以看到我这个颜色的区分,白色部分其实就是写代码的地方,在灰色区域,不要在灰色区域,单击一下就出现一个红色的圆,这个红色的圆就表示分了一个断点。啊,好,回到我们的 python 中, 打断点是干嘛的?点打断点就是当拍烫的,这个软件在运行程序运行我们的代码的时候,会将程序打你打断点那个位置暂停,挂起那段点,会将对应的代码这一行进行标记成红色。 好吧,那取消断点的操作很简单,刚我已经跟大家说了,再打,再单击一下,在同样的位置再单击一下就取消了。 好,但是打断点你想要生效,就一定要把这个程序第八个运行才会生效。好吧,等会我们再给大家说哪个地方才是第八个运行。其实现在也可以说两个地方,一个是鼠标右击运行的时候,你看这边有一个叫运行什么 run, 还有一个是第八个,这是这第八个运行, 第八个运行前面一个图标像乌龟一样,看到没?其实你点这儿也行。好吧,右击选它跟选这实际上是一样的。好,那接下来我们再继续回到文档中来, 这里要注意,断点了一般打在哪了?不可能我们整个代码全部都打断点,那么没必要是不是?那这样你的地爆强势其实是根本就调不动。那断点了一般是打在有报错嫌疑的代码前面,你要注意这句话,就哪一行代码,你觉得它有可能会有错,那 而且呢?有人说,老师,那这个嫌疑怎么判断了?你可以根据这个错误报错的位置来判断了是不是,或者说你可以根据这个错误的描述信息来做一些逻辑推理,那这样子哪一个函数或者哪一行代码会有报错, 比如说这一行代码报错,你就打到这一行这这行上,或者整个函数有可能报错,你就打在函数上都可以。举个例子,比如说我们这里有一个函数,这个函数里头不错了,我们这个函数,假设我们这里有个函数,这个函数里头有很多行代码,几百行都有,这几百行里面我并不知道哪一行 报错,那你直接打断点面,我行数上也是一样的,只要进入到这个函数,只要调用这个函数,程序在这就不动了, 好吧? ok, 但是打在函数上也是可以的。好,来接下来我们再继续或者是抛出异常代码的。前面你看刚我说了,什么叫有嫌疑了?抛出异常,那你这个代码肯定是有有嫌疑了,是吧?而且如果你不确定你可以打多个断点,你就比如说有嫌疑,有好几个 有第五行代码有嫌疑,第八行代码有嫌疑,第三十五行代码也有嫌疑。好,那这三行代码你都打断点,好吧?我们前面说过,说不可能每一行都打断点,但是也可以允许你啊,可以打多个断点, 好吧,总而言之,运行到每一个断点的时候,哎,程序就暂停挂起了,好吧,这是打断点。第二步就是第八个操作,里面其实就一堆的按钮,好吧, 我我们这样的,我们做一下代码的调试,做一下代码的调试,我们再给大家去说第八个操作,好吧,否则这是纯理论,你可能纯文字,你可能不好接受啊,这样子, 那我们前面好像写了一个比较复杂的案例,文件拷贝那个地方第三十三文件拷贝。哎,现在我这样子,我把这个第三十三这个地方我想想,借咱这样,我我我这样,我把你们代码稍微改一下,我等我等你们改一下。等,就改一个变量 啊,我告诉你改了一个变量,可能很多同学没看,没看清楚啊,没看清楚那就算了,假设了,我现在不告诉你,你这个错是错了,反正这个程序有错。 好吧。 ok, 那 这个时候你发现这个错误就不好找了,好吧,哎,刚刚我估计有些同学可能我改的太快了,你可能视频没看到,没关系,就现在我告诉你这个程序有错了,好吧,等到我们来通过第八个调试把这个错误找出来。好吧 好,那现在我们来运行一下,运行的时候呢,我把这个目标目录换一下,这个大家还记得,我再给大家多说一句啊,我们做这个拷贝目录,实际上是把这个目录下的所有的 py 文件拷贝到另外一个指定的目录中,那另外指定的目录它最好是不要存在,所以是加个二,好吧,直接加个二。 好,接下来我们来运行啊,我现在直接运行,他会报错的。 ok, 我 这样只要直接运行哦,你敢报错?报了一,这样子哦,四个贵。哦哦,你晚了会。我这又一更奇怪哦,他是告诉你说没有找到这个文件或者目录哪个文件,我看密点 p y 这个文件, 这个时候你就奇怪了,我拷贝文件对不对?拷贝文件它怎么会找不到啊?的密点 p y 了,因为你拷贝的这个目录它肯定在这个目录,你拷贝的原始目录肯定在。我们稍等一下,我们打开我的电脑给大家看一下,这个部落地跑线多了一个引号,哦,这个部落肯定在,对不对? 而且我们这个 o o 的 命点 p y 这个部落,看看在哪里?在啊,它怎么告诉我说 no search, file or directory 它报的错啊,你看这个错误描述就多了, 是不是?根据我们之前说的说,呃,先看这个错误描述信息,再找到是哪一行你写的代码,我们发现这都是我们写的代码,是吧?所以这个时候你发现不好找这个错误,不知道错在哪,对不对?那我们就干嘛就可以通过 debug 调试把它调试出来, 那第八个调试调试出来,我说过先打断点是不是?那到底答案了,你就看它的代码先在哪里,报的错也是一样。从记住啊,这个顺序是从下往上看,还记得错误描述息,从这开始往上看,找到第一个你写的代码报错的位置, 知道吗?找到第一个你写代码报错的位置,那找到哪里了?其实说白了就找到这一行五十,五十行,五十行这个代码你感觉是好像是这个,这个是函数的第一行代码是不是?那整个这个函数肯定有问题,那接下来断裂打在哪里了?哎,你可以直接打在五七一行上, 甚至你还可以干嘛直接打在三十六行上都可以,因为我说过你直接打在函数这个名字上, df 这个名字上是一进入这个函数就会,就会挂起,好不好?就会暂停挂起,那这个断裂我就不要了,我我我就怀疑这个函数里头代码肯定有问题, 是不是?那我就在是三十六行这个地方,一加断点来,接下来我们就开始运行了。那运行这个时候,由于你你需要调试运行 啊,所以我们右击选择 debug, 你 就不要再选 run 了,选 run 这个断点是无效的,我们再运行一下,它还会继续报错,你们还会继续报错,明白,来,我们开始点这个 debug, 走好一点。 debug, 我 们程序执行用到这个函数的时候,用到第一行的时候,其实就会暂停挂起, 这就是所谓的暂停挂起。嗯,暂停挂起之后,大家可以看到有一行,有一行明显是绿色,蓝色的, 整个这一行用蓝色的填充了,那这啥意思啊?来给大家说一下,当开唱开始运行之后,并在断点处暂停。暂停了吗?暂停了,你看这个程序在这不动了,是不是?我们程序 你可以看到这个有一个红色的按钮,表示这程序还在运行,但实际上是没有做这个没有执行完,对不对?没有执行完,好,那我们接下来就要开始看 继续断点所在代码会变成蓝色。果然是的啊,那我老师说断点不是在这吗?这个是定义函数,所以它其实是在这个函数的第一行这里是变成蓝色,总而言之就表示我们现在程序在这一行暂停了。 好吧,意味着 python 的 程序,我们的 python 的 进程,这个程序进程已经达到断点处,我们的程序正在 执行到断点处,我们蓝色这一行落埋了,就是蓝色这一行,但尚未执行蓝色这一行的代码,这句话很什么意思呢?就是表示我们的代码已经执行到五十一行了,就蓝色这一行啊,但是蓝色这一行并没有执行,只是执行到这五十一还没有执行完,是这意思哈。第三个 会出现一个,第八个拓 windows 窗口出现,显示当前重要的调试信息,并允许用户对调试进程进行更改,就底下会出现这么一个窗口,这个窗口不是我打开的,只要是有断点暂停挂起了,这个窗口会自动弹出来, 好吧,自动弹出来, ok, 大家看到这个底下就是一个所谓的调试窗口,这个调试窗口里面有一些很重要的信息,尤其是哪一块重要的信息这一块,各位,尤其是这些信息,这信息是啥信息?这些信息其实是把整个整个程序执行到五十一行这个位置,所有的变量 都给念出来了,其中啊,因为我们的代码执行到五十一行,说白了是执行到这个函数这里,那么这个函数被调用了,是不是传了参数,传了一个 source file, 以及传了一个 sync file, 是 不是传了这两个参数啊?而且呢,这两个参数的值你在这儿都可以看得到,不单不单能看到它的值,而且还可能看到它的类型, 比如说这个 source file 是 syringe 类型的,那么 syringe 啊,也是 syringe 类型的,好吧,这是所谓的调试信息, 好吧,这些调试是是一些变量的值,哎,包括变量类型都有了,好,接下来我们再继续啊,这个窗口跟我们刚看到窗口是一样的,只是这是之前我们做的其他的一些调试啊,里面有一些按钮,大家看到这里面有一些按钮,第一个按钮叫收啊, excel execute 啊, execute 啊, point 显示当前所有的断点,这个按钮是显示所有的断点,是所有的断点啊,事实上我们这里面只有一个断点啊,我们可以点一下,其实只有一个断点, 它会自动找到我们的点。断点式其实就是三十四十六行,但实际上其实就是函数的第一行代码就是五十一行。好,接下来第二个按钮叫 step over, 就是 单步调试,这个给大家说一下,说的是这个按钮, step over, step over 实际上就是程序往下执行一行,是程序往下执行一行, 听懂吗?是程序往下执行一行。明白,好,这个呢是进入到函数里面去, step in two 是 表示进入到函数里面,比如说我想看一下 open 这个函数里头的代码 就会进到函数里头去,那这个是退出函数,好吧?啊,这个不是退出函数,退出,进入到你写的代码中,说错了,进入到你写的码,这个才是处上上的箭头才是退出,好吧,好,这个是运行到下一个断点 啊,一般来说这个我们不会用一步步调试,其实用的比较多的是什么?是这个?好,我们接下来就去看看,看一下,我们来检查一下, 等会我们再去用这些按钮啊,我们发现了这个接个去,用到五十一行的时候,这个 source file 是 什么?是这个 odme 点 p y 啊,好吗?我们执行一行之后立马报错了,没有进到五十二行,就表示五十一行这里报错了,是不是 五十一行这里报错了,你问报完错之后这个程序就停止了,为什么?因为我们没有对这个异常进行补货,之前我们讲异常处理的说过,异常如果没有被捕获,其实就会造成我们整整个程序的中断,持续就行到五十一行这里就中断了,说白了就是退出了。 好吧,好,所以我在五十一行这里又打个断点,那是当了五十一行打了断裂,其实这个三十行这个地方就没必要打了。好吧,好,接下来我们再运行, 在运行又到五十一行,又是一个蓝色的,我们可以调试多次,我们发现这行代码确实报错了。它报错原因是什么?是说这个 sort file 找不到。好,那 sort file 是 什么呢?是 order me 点 p y, 但是我们发现一下,这个 think file 是 绝对路径,大家看到吗? 那么算法要不是绝对路径是一个相对路径,它叫阿德密点碰 y。 那 根据我们之前我讲过的,如果是相对路径是,就意味着是相对哪一个目录,相对当前项目这个目录, 也就是说阿德密点 p y, 它是读取当前目录下阿德密点 p 当前目录说白了就是我们这个项目所在的目录,我们项目所在的目录有没有一个叫阿德曼点 p y? 没有。 那由于项目目录下没有一个 adm 点 p y, 所以 它报错了。我们发现五十一行报错是应当的,它确实就应该报错,那原因是因为这个 cipher 有 问题,但问题是这个 cipher 谁传过来的呢?这时候断裂可以去掉了,当然断裂留着也可以啊,我们程序可以可以把它停掉,因为确实报错了, 那我们接下来就要开始跟踪谁掉了这个函数,并且把溯溯流传进来的。好,那我们要找到这个函数的名字叫 copy file, 把这个函数名字复制一下, 现在我们要去找谁掉了这个函数,因为谁跳这个函数,谁就会把这个溯流 file 以及 sink file 这两个参数传进来,它传的有误,所以传的是错误的,所以它才五,造成五十一行报错。各位,这是我能听懂吗? 所以这时候我要去找谁调了我 copy file 函数,咱们且找呢,就是当前我们的项目中去找,还记得我一个快键吗?叫 ctrl shift 加 f, 他 帮我去找管子叫 com 叫 copy file。 好, 我们发现了,第一这 d f 是 定义,这个是调我们的 copy file, 对 吧?所以找到了原来二十六行这个地方是调用了我们的 copy file, 所以这时候我们断点就打在二十六行,明白断这时候有嫌疑的其实就是二十六行了。好,接下来我们再进行调试, 要少是多次的号,你看这时候到了二十六行断点在这儿就程序暂停挂起了这一行没有执行。那这个时候我可以看到这行里面出这一行里面的一些变量,比如说 f 这个变量,可以看到了 f 这个变量,是啊的密点, p y sink pass 这个变量是什么?是一个一旁下,什么是一个绝路径,大家可以在这看得到,是吧?那 f 这个变量怎么来的?这个时候我不知道。 好,那这个时候我们发现还得往上,因为 f 这个变量我们找到它从哪来的? f 这个变量,我发现是从这来的,对不对?所以这个时候我们发现断裂应该打在这比较合适, 打在也比较合适。好,那当然这个断链你可以继续留着,我们接下来又把它停掉,因为我们现在换断点的时候,又重新要进行第八个,哎哎,第八个,再进第八个,这时候它在第十六行这里暂停了。 那第十六行代码是干嘛的?溯溯循环便利,便利。谁便利?我们这个溯司 dr 是 什么?在这儿可以看得到,溯司 dr 是 一个目录,对不对? 好,那它在这里面调用了 os lease 的 dr, 那 这行代码执行之后是什么?是什么结果呢?我想看一下。记住啊,是不是负循环?这行代码是这个函数 os 点 lease 的 抵押,这个函数执行之后的什么结果?我想看一下。 那怎么看?我告诉你,在第八个调试的时候,你可以看任何一段代码它的执行结果,比如说,我想看这个函数调用的调用。记住你要选完整,不能漏掉一个括号。 好吧?必须要,但你,当然你也不能啊,包括冒号选完这之后,选中之后,鼠标右击选这个,好吧?当然你敲快捷键也可以叫 alt 加 f 八。那这个什么意思?这实际上就执行我们的代码,执行我们的表达式代码 啊。一执行表达式表达式代码,弹出一个框,然后选择它,它就是执行一走,一执行,得到一个结果,这个结果其实就是这一行代码,就这这一,你选中了这一行代码运行之后的结果, 而运事后的结果得到一个 result, 这个 result 你 发现是一个什么?是一个列表,而中高扩起来是一个列表,列表中有几个元素,列表中有八个元素, 一号元素,下标为为零的元素是什么?下标为一的元素是什么?下标为二的元素是什么?这不就是列出我们的文件列表吗?列出一个目录中的列表,发现这个是没有错的,我们都执行着,没有错。那好,十六行我们觉得没有问题,我们就往下执行, 点这个按钮,这个叫 step over 八, step step over f 八就是快捷键。好吧,我们这个地方没必要调快键,我们就给点这个按钮就可以了。好吧, 好,开始进入到十八号了,但十八号还没有执行,这个时候出来了 f 了, f 是 一个 id 啊,是一个文件,是一个点 id 的 文件,我们看一下呢,这里面有一个点 id 的 文件,就它看到没?好,接下来我们 再往下执行,一行走,得到一个 f pass。 f pass 什么?是一个 idea, 这个文件的一个角度镜, 那 idea 这个文件绝对路径对不对?应该说的它不是相对路径,是绝对路径。是不是?他说这是一个什么个?这是不是一个?是这,这,这是表示个,是不是一个文件?它肯定不是一个文件,会进到 else 中去,好让他走,你看他进到 else 中去。 哎,好,那我们实际上是要看吧了,我们不要去碰到 else, else 是 没有问题的,我们代码是出现在二十六行,报错了,所以我们发现断点其实应该应该加在十十九行这个地方,十九行满足条件之后进到二十一行,所以断点二十一行,我们再加个断点,再加个断点之后,那我们就让它继续往下执行,可以点这个按钮, 这个是表示要程序继续往下不要跟踪了,因为进到 else 中去了,就不是我想要跟踪的,因为这里面代码没有错。 走,我们再继续,这时候 f 是 一个什么呢? f 是 也是一个文件,走走判断,又进到这个 elf 里面,又不是我想要的,我们继续再点这个按钮。好,他又回到过循环,过循环其实就又会找下一个文件,这个文件是一个什么?也是一个 data source 的 文件,那这个文件也应该不需要我们再继续, 或者说我们把这个断点可以去掉了,好吧,因为二十一号我加了断点,我们直接点这个按钮,点这个按钮实际上要重新往下执行,知道吧?这个按钮是程序往下执行哈,执行到二十一行,这表示有一个文件满足了第十九行这个条件了。 啊,这个文件 f 刚好是 adam 啊,跟我要考察的,因为刚刚报错,其实就是奥特曼 adam 点 p l 这个文件报错是不是好,这是表什么?这表示号段目标目录是否存在?走好,目标部落是是存在的。好吧,这是不存在时长,它已经存在了。 好哈,再到二十四号,我们再往下执行,那二十四号执行完之后呢?得到一个 sink pass, 这是 sink pass, 看起来也没问题,是吧?好,到这 这个地方就开始直接就把 f 直接传进来了,我们发现了这个 f 是 文件名,那 f pass 才是绝路径, 我们发现这里一个变量, f 是 文件名, f pass 才是绝路径。所以也就是说二二六行这个地方,我们不应该传相对路径,不应该传 f 这个变量,应该传 f pass 这个变量,因为 f 这个变量是一个相对路径, f pass 是 一个绝对路径, 是不是?所以这样其实你就发现找问题算,我们发现第二十六行有问题,把二十六行这个地方改成哎,下划线 pass, 这样才会没有问题, 是吧?好,这个时候改,找到这个代码出现问题的所在了,并且修改了代码,那我们就只想执行一下。老师,那这些断点怎么办?你不用管它,其实如果你正常执行,直接点这个运行,它这个断点不是不会生效的, 而且你看程序一下就执行完了,而且没有报错,所以就表示你这个问题找到了,而且也成功解决了。好,这就是刚刚我给大家演示的第八个调试。 第八个调试我希望同学们以后了经常用它,你用习惯了,你自然知道每一个按钮是干嘛的。其实我们发现最常用的哪是哪两个按钮了,一个是这个,这个是表示往下直升一行, 这个是表示程序继续往下执行,这我不想跟踪了,我要程序继续往下执行,就这个按钮,那你直想你,你要想一一行行的跟踪,就点这个按钮,一行一行的往下执行,每执行到下一行,我就看一下这个变量是不是正常。这就是 第八个调试,作为一个呃,成熟的程序员是都要掌握的,所以各位一开始你对这个第八个调试可能不熟悉,感觉很陌生,没关系的,等你第五次、第六次、第十次用的时候,你发现这个东西啊,这个第八个工具还是特别好用的, 可以帮助我们解决很多的一些问题。好吧,好,这就是第八个的一些调试,专门来帮你找问题的, 所以这一章节就是教大家怎么样去找到你报错的错误信息,以及错误信息怎么看,以及错误信息知道之后,我这么怎么去找到问题所在,还有一个第八个调试工具。 好,所以这节课还是那句话比较重要,虽然他的知识点并不复杂,但我希望每一位同学只要掌握他。因为还是那句话,决定一个程序员技术水平高低与否,一个非常重要的指标就是看这个程序员解决问题的能力和速度怎么样 啊。那其实就是你要不断地去学会怎么样去看异常信息和使用第八个调试工具,你未来解决问题的能力和速度就会变得越来越快了,感谢大家!再见!

pysong 中的 name 等于等于 main 是 什么?每个 pysong 文件都有一个内置变量 name, pysong 会自动为这个变量赋值。如果你直接运行某个文件,比如即行 pysong app p i, 该文件的 name 变量会被赋值为字母串 main 杠。但如果这个文件被其他文件导入作为模块使用, name 变量的值就会变成该模块的名称。比如文件名为 u to s p i, name 就 会是 u to s helpers。 因此开发者会利用这个特性, 让代码仅在文件被直接运行时执行,而在被导入时不执行。这能让你编辑可附用的模块,同时为脚本保留清晰的入口。

大家好,我是程序员老王,今天我们聊聊 python 中的可迭代对象和迭代器。首先我们看看这么一段程序,我用 for 循环打印出了 list 中的所有元素, 像 list 这样可以放入 for 循环中的对象,就叫做可迭代对象 iterable。 这个 for 循环看着是挺简单的,但是仔细一想啊,其实还挺有门道的。首先, for 循环是怎么拿到 list 中的元素,然后把元素的值赋给变量 i 的 呢? 最直接的办法我们可以用下标来拿,比如我写 list 零, 就取出了 list 的 第零个元素,而 list 零其实是 python 的 一个语法旁, list 零就等于调用 list 的 get item 方法, 它们两个调用其实是一样的,我们来试一试。 可以看到 python 输出的两个,一是符合预期的。没错,让一个对象成为 eatable, 最简单的方法就是实现 get item 函数。这里我实现了一个非常智障的类 my list, 这个类啥都没做呀,就是把一个 list 存了起来。 下面这个 for 循环,它会尝试把 mylist 中的元素打印出来。当然这个 for 循环现在是会出错的,因为 mylist 不是 一个 iterable for。 不知道怎么从 mylist 中拿到元素,我们先来运行一下试试看, 不出所料,拍上提示, mylist 不是 一个 iterable。 现在我们尝试给 mylist 加一个 getitem 的 实线,让它成为 iterable。 在 这里我还加了一个判断,如果 index 大 于 list 的 长度的话,我就返回 index arrow。 for 循环就是通过这个异常来判断 iterable 对 象还有没有更多的元素的。 其实我在这儿写这个有一点儿多余啊,因为 list 它自己本身就能抛出 index arrow, 我 在这里写出来呢,能变得更清晰一点。现在我们来再运行一下程序, 可以看到 for 循环已经正确地运行了, 可喜可贺,可喜可贺啊!代码终于正常工作了。但是仔细一想,事情仿佛并不那么简单。 除了像 list 这种把从零开始的数字当做下标的对象, for 还支持很多下标不是数字的对象啊。比如下面这个程序, 这个程序它有个字典,它的下标不是数字,而是字母串,而且 for 循环打印出来的也不是字典的值,而是下标本身。再比如说这个程序, 这个 for 循环每次会从文件中读取一行之前的字典,好歹有下标,这次连下标都没有了。现在我们来看看这种 eatable 对 象要怎么实现?请看我下面这段代码, 这还是刚才那个 mylist 的 程序啊,但是注意,我注视掉了 getitem 和 for 循环本身。然后最下面我还写了一段很奇怪的代码。实际上,这段很奇怪的代码就模拟了 for 在 处理不带 getitem 的 对象时的逻辑。 当然,这段代码在 python 中实际是用 c 语言来实现的,不过它们的逻辑是一样的。现在我们就来一起读读这段代码。首先, for 循环会调用 mylist 的 eater 函数, eater 函数有一个返回值, it 之后, for 就 会循环不断地调用 it 的 next 方法, 每调用一次 next, 就 会得到一个 mylist 中的元素,直到 next 函数抛出 stop iteration, 异常 循环退出为对象实现。 eater 方法就是让对象变成 eaterable 的 第二种方法,而 eater 方法的返回值也就是这个 it 啊,就叫做 eaterater。 首先让我们来写一下这个 interpreter, 起个名儿就叫 mylist interpreter。 因为之后我们要一个一个返回 mylist 中的元素,所以我们在构造函数中保存一下 mylist 的 引用。 我们还要记录一下当前应该返回的元素的下标 index 出示值为零。 然后是 iterator 中的 next 函数, 如果 index 已经超过了 mylist 的 长度,我们就抛出 stop iteration 异常, 否则我们就返回 index 代表的元素,并把 index 加一 好,这样我们就实现了一个最简单的 eater。 最后是实现 mylist 的 eater 方法, 这个方法的逻辑非常简单啊,我们直接构造一个 my list editor 返回就行了。好,我们把 for 循环的注示去掉,再试试 for 循环这次有没有正常工作。 可以看到现在 for 循环已经可以正常工作了。 最后还有一点小小的瑕疵,看代码 这里我主动调用了 mylist 的 eater 方法,获得了一个 eaterit。 当然,这里更好的做法实际上是使用 eater 函数, 因为 eater 函数既能处理实现了 get item 的 iterable 对 象,也能够处理实现了 eater 的 iterable 对 象。总之,我们得到了 my list 的 iterater i t。 然后我们用 for 循环去便利这个 iterater。 我们来执行一下,发现报错了。因为 for 循环只支持 iterable, 不 支持 iterater, 所以 多数情况下我们都为 iterater 也实现 iterater 函数,把 iterater 也变成 iterable。 我 们现在就来实现一下 iterater 函数。 iterater 的 eater 函数的实现逻辑一般也非常简单啊,就是返回它自己, 这样 for 循环就先会调用 eaterater 的 eater 函数,并得到 eaterater 本身,然后整个循环就能正常工作了。最后我们再试一下, 好,可以看到已经正常工作了。好,这就是今天所有的内容了。如果对我的视频有什么建议,或者有什么想听的话题,欢迎在评论区留言。如果你觉得这个视频对您有帮助的话,希望能点个关注,这里是程序员老王。

携修之一口气学完 python 基础每个程序员的第一步,打印 hello world, 使用 print 函数,括号,里面写需要输出的内容。 hello world 是 字母串,就用引号引起来。注意,这些标点符号必须是在英文输入法状态下写入, 否则会报错中文可以作为字母串用引号引起来,这样控制台就输出了中文。那么恭喜你 学会了 print 输出。接下来是输入,使用 input 函数获取用户输入的内容,括号里面写输入的提示词,输入的内容需要用一个容器去接收,于是有了变量。变量就是把数据存储起来的容器,比如这里输入了你好, 那么就是将你好存入到变量 data 中,在后续的代码就可以直接使用 data 来代替你好。 由于 data 是 一个变量,不是一个字母串,所以在 print 输出时不需要使用引号。有了变量之后,我们就可以进行运算。 比如我们输入一个正整数,将它乘以三后,输出步骤是先将计算的结果赋值给一个变量,再输出 result, 运行代码,输入数字一, 结果得到了三个一,一乘以三不是三吗?这是怎么回事呢?这是因为 impute 接收到的返回值是自负串儿类型,所以它会将一重复三次。如果想要它变成能够计算的数字,就需要进行类型转换, 这样再运行我们就得到了正确的结果。假设用户不按规定输入了字母或中文,这个时候进行数据类型转换就会报错。程序的 bug 就 出现了。 abc 怎么转数字我不知道,你不知道,程序更不知道,所以在转换之前就要进行条件控制。 if 如果的意思 is digit, 用于判断字母串是否只包含数字字母。冒号结尾下面写上当条件成立时需要执行的内容,这里要用户重新输入。注意,在 python 中,这个缩进很重要,用来表示代码的层次结构, 这样就能很直观地知道这是异符的子句。现在整个句子的意思是,如果 data 中只包含数字字母就重新输入,这不就和我们的预期搞反了吗?只要包含数字字母,应该就不需要重新输入, 于是加上一个 not, 就 好比一个硬币,本来反面朝上,我把它翻过来不就是正面了吗? 运行试一下,输入 a、 b、 c, 提示请重新输入,再输入一个数字十二乘以三,结果是三十六,现在就符合预期了。 这个时候恭喜你已经学会了 if 条件判断,理解这其中的逻辑,对于掌握编程的思维非常关键。接下来讲解循环。循环的意思是让一段代码能够重复运行。 第一种是 for 循环,作用是依次把列表中的每个元素迭代出来。例如执行这段代码,把 nums 列表中每个元素迭代给变量 x, 然后执行缩进快语句。运行结果是依次打印 nums 的 每个元素。那么我想要计算一到十的整数之合,怎么写呢? 可以使用一个 sum 变量来做累加。 range 函数,用于生成一个整数系列。 range 括号一逗号十一,就是生成包含一不包含十一的整数系列,也就是整数一到十。搭配 for 循环就可以实现累加。 第二种循环是 while 循环,只要条件满足就不断循环,条件不满足时就退出循环。使用 while 实现一到十的累加,就需要这样写, n 的 初始值是一,每次循环加一,当 n 不 小于十一的时候结束循环。我们拓展思维,优化一下这个代码, 如果用户第二次输入依旧错误,程序还是会报错,这样肯定不行。优化思路是利用循环,如果输入不正确就一直输,直到输入正确的数再进行计算。 这个就作为课后练习,大家尝试一下。接下来是列表,前面讲到 for in 的 时候,反复提到列表, 列表是一组数据,用逗号分开,每个数据都有对应的位置,称之为锁瘾。第一个锁瘾是零,第二个锁瘾是一,以此类推。在使用的时候,中括号里面写上锁瘾,就可以拿到指定的元素, 比如你想要拿到所引为二的元素,那就写 nums 二,这时恭喜你又学会了列表。最后是函数, python 之所以简洁,是因为函数,函数就是给实现某个功能的代码起一个名字,随叫随到。 比如现在定义了一个名为烤蛋糕的函数,只需要加入食材调料,就可以制作出美味蛋糕。这时你只需要写上函数名,括号里面写入参数,用一个变量 cake 去接收返回值,就可以得到美味蛋糕了。 掌握了以上这些, python 这座大厦的地基就打好了。如果还有什么没听懂或者想要学习的,欢迎在这里交流。

安装后的 python 开始菜单在哪里,他们真的用不到吗?有些小伙伴在之前那个安装的视频安装之后会发现, 哎,为什么这个推荐的项目这里跟你安装的不一样,或者根本都没有啊?其实这里是 win 十一,根据您系统的使用自行推荐的项目,所以有的时候它是不显示的。真正的 python 的 生成的快捷方式是在全部里边,下边 这个屁分类下边才是安装的快捷方式。这些快捷方式其实本质上是个文件,我们也可以点击右键选择更多任意一个,上面点击右键点击更多,打开文件位置 就可以看到它在当前你的电脑里面所存储的位置发送的语言环境跟你安装 c 语言、 java 语言类似,它其实就是一个用来运行程序代码的一个程序,与游戏和其他软件不一样,不能以它们的目光来看。 第一个 idle 就是 我在安装视频里面所点开的那个快捷方式 idle, 很多视频和 文章里面也都介绍过,是排层,在陌生安装的情况下,会安装的一个内置的简易的开发工具。在这里边同时支持交互式环境的代码和脚本方式的代码,我们可以直接在三个代号这里直接写代码进行交互式。另外一个通过 file new file 可以 直接来写 python 的 脚本,在没有工具的时候,你也可以用这个来进行开发。那它是怎么启动 idle 的 呢?我们可以在这个快捷方式上点右键选属性,在这个属性里边有一个目标,在这里你可以看到它其实是使用 安装目录下面的 python w 点 pyw, 最后才启动了这个 idle。 第二个拍摄三点一二的快递方式,点击打开会看到这样的一个界面,我们有些小伙伴是这样打开了,但是他不知道这个安装的是不是正常,这个打开的是正常的,这种打开方式跟我们在终端之中随意的一个地方使用拍摄 回车那个命令打开是一样的,如果您对照一下就会发现这两个提示方式是一样的,这也是一种交互式环境。 那如果我们在这上面点击右键选择属性,会看到它其实启动的就是安装目录下面那个 python dx。 第三个 python manuals, 这个是 python 的 离线文档,如果我们点击打开 是当前我们所安装这个 python 十三点十二点十它的文档,只不过这个文档它是英文版的,你如果英文好,其实就可以直接看这个了,它跟官方的那个文档有区别, 官方的文档更为完背一些,有各个版本可以直接选,并且还有很多种语言,包括我们的简体中文。 只不过呢,我们在本地的这个文档是针对于当前所安装的这个版本的,而官方的文档则是最新版,没有以前的同一系列的版本,也就是说三点十二它只有最新的版本。 那我们如果在右键上面去看这个属性,就看它其实打开的是当前的安装目录下面的 d o c 文档里面的一个 index 点 shift。 二、 最后一个 model dos, 这个呢是在安装的那个视频里面很多人误打开的,因为当时我这个推荐项目这里第一个是 model dos, 所以 很多人误认为我打开的是那个,那这个呢?如果我们打开 它会弹出这样的一个命令行的界面,然后会自动弹出一个浏览器,这个呢,其实是 python 的 一个自动生成文档的一个方式,它 启动了一个本地的服务,并且自动打开浏览器,这里是 python 当前环境下所有模块的缩影,这样可以方便的进行查找。但是通常我们学习的时候可能更多的是根据已经所学的知识去编辑,如果我们去打开它的属性, 你会看到他这里使用的是 python 点 e 使用的是 pydoc, 大家随便搜一下就会知道 pydoc 其实是叫做文档生成器和在线帮助系统。 内置的 pydoc 模块会根据我们所编辑的 python 模块程序自动的生成帮助系统文档,这也是为什么后边他自动的打开浏览器的原因。 在使用 excel 安装 python 所生成的快捷方式里边, a d r e 在 一些教学的视频或者是一些文章里边会有提及,但是后期我们开发的时候会使用 python 或者 vs code 类似于这样的工具来代替。 而 python 的 交互式环境或者是运行,我们更多的是在终端命令行里面进行帮助,系统则更多的来源于官方的文档或者是一些其他的知识文章,这也是为什么 python 的 快捷方式不被人关注的原因吧。

哈喽,小伙伴大家好,这个视频将教大家如何安装拍摄环境以及拍抢把开发工具,包括他的一个激活方式。首先我们先打开浏览器,然后通过百度的话,我们先去搜索到拍摄的一个官网和拍抢把的官网,然后先下载他们的安装包。 首先我们就先以拍摄为例,我们在百度当中先输入拍省官网啊,然后我们找到这带了官方两个字的 官网啊,因为有一些可能会搜索到非官网或者说一些包装网站,所以大家一定要认准前面带的官方两个字的才算是我们的拍成官网。然后点进去之后呢,你们把鼠标放到 donuts 啊,也就是我们所说的 下载的一个按钮上面,然后右边呢他会跟你的一个系统,然后推荐你的一个 python 的 一个安装包啊,然后在这里面呢你可以点击这个,也可以点击 python 的 一个对应的版本安装包啊,我建议是点这个好吧,然后他会默认推荐你是 python 幺三点幺四点三 啊,但这个版本呢,并不是说一定是固定的啊,就根据你们啊个人喜好,像三零一四,三零一三,甚至来说三零一都行,只要版本不是特别的低啊,基本上都可以用。然后你点这个按钮之后呢,浏览器就会下载 啊,然后这就我们一个下载的一个安装包好,然后我们下载这个安装包之后呢,接下来我们就去执行这个安装包,然后进行一个安装啊,安装方式很简单,首先话呢,我们就先双击打开, 打开之后这里有个运行按钮啊,我们点击运行啊,然后进入这个按钮界面之后呢,他就会有一个安装的界面,然后在这个界面当中,在下方有两个选项, 记得要勾选啊,这两个一定要勾选,因为如果不勾选,后续在写代码的过程当中会遇到一些问题啊,一定要勾选,勾选之后呢,这里面有个 install 啊,也就我们的立即安装,但是他这个立即安装的话呢,是会默认安装到 c 盘啊,这里不是有个 c, 然后冒号斜杠什么什么,它的意思就是说安装到我们电脑当中 c 盘下面的 users 文件夹下面的文件夹,文件夹相对是安装 c 盘里面的,但各位大多数同学的 c 盘一般是系统盘啊,如果说这个盘的话占满了,有可能会对你的电脑的一个运行速度呢 有影响啊。所以我们一般来说可能要选第二个选项啊,就自定义安装,然后点这个自定义安装,然后点 next, 其他的都不用改, 然后在这个位置,我们点击这个 browse, 也就我们说浏览相当于你自定义安装,具体的位置就是我要把它安装到我们电脑当中的哪个位置啊?我们点这个浏览按钮, 然后在这个浏览按钮里面,我们选择到此电脑啊,也就是选择到我们电脑上面的某一个盘啊,比如说我们安装到一盘, 然后在一盘下面呢,你要去新建一个文件夹去保存,或者说安装你的个 python 的 文件。呃,怎么保存呢?就是我们新建文件夹点击一下啊,然后呢,在这里面我们创建一个呃文件夹的一个名称啊,比如说我们创建一个 python, 后面带着三点一四的一个版本号, 然后呢按回车啊,按回车之后,这个文件夹创建好了,然后我们选中到这个文件夹,然后点确定,再点 install, 就 可以进入到我们的一个 python 的 安装界面,然后等这个进度条执行完毕,那么我们的 python 就 相当于安装好了,我们稍等一下, ok, 那 么看到这个界面呢,我们的一个 python 就 安装好,当然我们也要检测一下啊,怎么检测呢?就是我们在电脑里面按住 win 加 r 键, 然后就会出现这么一个运行框啊,在这个运行框里面呢,我们再打开的这个框框里面输入 cmd, 然后会弹出个黑框框,在这个黑框框当中,我们可以通过两个命令去验证你的一个一个 python 安装结果啊,第一,你可以通过输入 where python 啊,然后呢我们按回车,它就会出现你 python 所安装的具体位置啊,像这个 e 盘下面的 python 三幺四 啊,斜杠 python x 一 啊,就是我们刚刚通过那个啊安装程序所安装的位置,然后另外一个的话呢,是我们系统里面自带的 python 啊,这个你不用管好吧,或者说你可以通过 直接输入 python 回车啊,然后呢它会进入到我们那个 python 命令行,然后在这个命令行当中,它会显示你的 python 版本啊,三点一,四点三,反正只要运行命令之后呢有这么一些啊内容,那么就证明你的 python 就 安装好了。 拍摄安装好之后呢,我们就开始去安装那个啊,拍卡姆啊,因为拍摄呢是我们运行拍摄代码的一个工具,一个软件,然后写代码呢,我们也需要专业的软件啊,那么我们会用到拍卡姆,而拍卡姆呢,我们同样的在百度当中啊,先搜索到那个拍卡姆的官网, 然后啊带官网两个字吧,一般带官网两个字可能会比较的准确一点啊,具体哪个是官网呢?就是你看到这里面就他下方不是会提供一个 jeffros 官网吗?对不对?你就找到这个,然后点击其中某一个就行了,好吧,比如说我们点击其中某一个就行了,好吧?比如说我们点击第二个, 然后点进去之后啊,呃,他这边会显示一个下载按钮啊,然后呢我们点下载,点下载之后呢,他这边会给你提供最新拍抢宝版本 啊,当然这个没有特定的要求,反正只要拍唱不要版本太低,都没什么太大问题。当然如果说你这些版本的话,你觉得 啊都不符合你的要求,那你可以点击其他版本啊,这里面就可以选择对应的二零二零二五点三,或者二零二点二,二零二点五点一都可以,好吧,啊,然后呢,你找到对应的版本号,然后点击这个 下载按钮啊,比如说 windows 版本的,或者说压缩包的,对吧?或者说其他版本的,包括 linux 啊, macos, 对 吧?就点击对应的你的系统的相对的版本就行了,然后点击这个按钮之后呢,我们的浏览器呢,它就会自行下载,好吧,然后我们点击下载未经验证的文件 啊,这个时候呢,我们就等它下载完毕就行了啊,好吧。啊,比如说这个是我们刚刚所下载的一个安装包,然后呢我们就双击打开,打开之后进入到我们的一个安装程序啊,稍等一下, ok, 然后这就我们的一个安装引导程序啊,在这里面我们点击下一步,然后点击浏览啊,浏览的话就是我们拍卡板安装的位置,他这边也是默认到 c 盘啊,反正我们一般不建议安装到 c 盘下面啊,所以说我们就点浏览,我们就安装到那个 呃此电脑当中的一盘啊,然后点确定,点完确定之后呢,我们再点下一步就呃到了这个界面,到这个界面当中,我们把这个桌面快捷方式以及更新 pass 变量给勾选,下面这两个的话呢,可以不用勾选 啊,可以不用勾选,然后再点下一步,最后再点安装即可啊,然后等这个进度条完毕,我们就能够看到那个拍墙布已经安装好,并且桌面当中会出现这么一个啊拍墙布图标啊,但我们稍等一下,等这个进度条执行完毕即可。 好,那么到了这个界面就说明我们的一个拍卡幕就已经安装好了,然后呢,我们点击完成,好吧,然后不重启啊,不重启,然后点击完成,完成之后呢,我们看到桌面里面就会出现, 呃,拍卡幕,然后二零二五点一点六啊,然后拍摄是没有图标的啊,拍卡没有图标,好吧,然后你这个图标如果显示不清楚,那就刷新一下就好了啊。呃,然后这个时候我们就可以去打开这个拍卡幕啊,怎么打开呢 啊?就我们直接双击啊,就可以进入到我们的一个拍腔这个启动界面啊,然后进入这个界面当中的话呢,我们 啊这一步啊,因为我这边是已经安装过拍腔所在公司的软件啊,所以他就会告诉你是不是要引导一些设置信息啊,当然我们这边就点直接跳过,好吧, skip 啊,就这样跳过,跳过之后呢,我们就会进入到 啊这么一个界面啊,然后在这个界面当中呢,相当于就是我们的一个拍腔这个启动界面啊,然后询问你 啊,是否要新建个项目啊?因为我们写 python 代码就是按照一个项目一个项目为单位去写的,其实所谓的项目就是文件夹 啊,这样的话呢,你可以点什么呢?你可以点这个,呃, new project, 也就是我们所说的叫做啊启动一个新的项目啊,然后呢在这个位置啊,它会显示你, 呃,就是你的一个 python 项目具体所在的位置啊,他这边会默认 c 盘 users 啊,然后下面的什么什么下面什么什么啊。同样的,我不太建议大家放到 c 盘,好吧,比如说我们点击一个旁边的浏览的图标,然后呢我们放到同样的,我们放到 e 盘下面创建个文件夹吧, 那比如说我们创建个文件夹叫什么呢?叫做 python 学习的文件夹啊,然后呢点击选这个文件夹 啊,就相当于就放在一盘下面的拍摄学习,然后这个呢叫解释器类型啊,所谓解释器就是拍摄就解释器就解释你代码的,他这边一般来说是会默认一个虚拟环境啊,当我们这边就暂时先不选这个,选哪一个呢?选单当前环境啊,就选第三个选项, 然后在这个选项当中我们选择这个啊,选第二个选项就已存在的环境啊,你就按照我的选就选了,看不懂都没关系啊, 然后在这个选项当中,然后呢,最后一排就会显示你的 pass 啊,也就我们所说的一个 python 的 一个 pass 变量啊,也就是你之前所安装 python 的 一个具体位置,看到了吗?我们之前是不是把 python 安装到一盘, 然后 python 三点一四以及 python exe 文件夹里面了嘛?对不对?所以我们就选了它,然后点击 print 就 创建,然后创建之后啊,我们就会进入到一个啊, python 里面的话呢,呃,它一开始是纯英文的啊,那就可以把它画画 啊,怎么画画呢?大家看到我们这个 ppt 下面会有个提示啊,在这个提示当中我们选择第二个提示啊,就是 chinese 简体中文的安装包啊,然后它会问你是否要重启,然后启动中文安装包的一个程序,然后你点击这个按钮就行了,好吧,就是重启安装包,然后呢我们再点击呃,退出,然后点它重启一下, 好,重启完毕之后,大家看到我们这个拍卡门的就变成中文的了啊,变成中文的话就看起来舒服多了,对吧,然后这些就不用管了,好吧,这个什么会影响 a、 d、 e 啊?你就不用管,然后把它擦掉,然后这里也把它擦掉啊,已经画画了啊, 擦掉之后呢,就是我们可以看到右上角有一个解锁 pro 啊,也就是说我们现在这个拍卡码呢,它相当于是一个啊,功能受限啊,或者说功能不是很全的一个版本啊,因为我说了拍卡码它是需要付费的啊,所以说如果你们想不付费啊,那么的话呢,我们就需要去激活 啊,怎么去激活呢?这个不难,在我们的工具包里面有一个什么呢?有一个啊, jesus 一个全家桶授权包啊,然后我们可以利用它里面的软件去激活啊,怎么激活?选中它之后右击,然后我们先解压缩,解压缩之后呢,里面会有一个文件夹,然后在这个文件夹里面我们打开这个里面的一个程序 啊,打开这个程序之后呢,我们呃看到啊,这就那个程序的界面啊,当然如果有同学你们的电脑里面是 安装了防火墙的,有可能这个程序会报毒啊,但是不影响关闭,这里面是没有毒的啊。然后我们在这个下拉列表框当中选中到拍抢, 然后点击券授权,点击券授权之后,他这边会提示你,请先关闭拍抢软件,一分钟之后再激活。好吧,所以呢,我们就把这个拍抢软件呢把它关掉,关掉之后呢,等一分钟之后再激活,在这个过程当中的话呢,记得 这个这个激活程序不要关闭。好吧,就等一分钟之后再去激活。好,那么现在只要差不多一分钟啊,你就重新再点确认授权, ok, 那 么再点完毕之后,他这边就会显示已经激活成功啊。拍腔模使用期至二八八八点,请重启软件, 那么这个时候呢,我们再打开我们的拍腔模呢就不太一样了。好,那么当我们重新打开拍腔模之后,我们可以看到右上角就已经没有那个解锁 pro 的 一个 啊按钮的,也就是说我们这个拍枪模就已经激活完毕了啊,激活完毕之后我们就可以用它去写代码啊,就说你在左边啊,左边是目录栏,而右边是我们到时候放代码的地方啊,当我们这个目录里面是没有文件的,所以你可以把鼠标放到这里面右击,然后呢这里可以新建,然后我们新建一个拍摄文件, 比如说我们新建一个 python 文件,名称为 demo, 然后呢按一下回戳,然后这个时候就会在右边会出现一个 python 的 文件,然后这个就我们写代码的地方啊,然后你可以去写代码,比如说我们就先写一个经典的 helloworld 代码啊,所以比如说我们的 print, 然后 helloworld 然后启动的话呢,是在鼠标这个位置啊,右击点击运行 demo 就 可以了啊,只要看到这个地方呢? nice, 整个拍摄的话呢,包括拍恰模呢,就已经全部安装好,并且可以正常使用了。

泰森全套基础入门第五天泰森运算符在泰森中进行运算,与我们数学中的运算是一样的,加减、乘除,加减的表示都是一样的。乘除在编程中分别用米号键和斜杠来表示的,取用的是百分号进行表示, 双斜杠则表示争取,四方则是用双米号进行表达。大与小于是一样的,但是大于等于,小于等于则需要在后面加上等于号。 在排式中,整数和小数相加和我们的数学是一样的,没有什么太多区别,但是它和数学一样,也是有运算符优先级的, 先算括号的内容则是密运算,然后就是乘除,最后才是加减,也是和数学一样,比如我们看这行代码 print 六十六加八十八乘以二, 那么拍生会先算乘法,再算加减,得到的结果就是二百四十二,括号二十二加三十三乘以二,得到的就是一百一十段。接着我们看支付存的运算运行,得到的结果就是小张拍生,三个学习拍生。 这个时候我们就可以看到,在支付存运算中,加法和乘法是起到了支付存拼接和多次打印的效果。那么今天的重点来了, 前面的内容我们讲过,制服穿与数字是不能加运算的,因为拍三这个是制服穿,二十是数字。这个时候杰士奇就不知道你是要打赢二十次拍三,还是把拍三和二十拼接在一起, 所以就会运行错误。如果你需要表示二十次 pi 三的话,可以用乘号,如果你要表达 pi 三二十的话,就得给二十页加上引号或者 street, 改变它的数据类型。接下来开始我们今天的练习, 第一个练习分别运用加减乘除,用 print 打印出来。二、如果你要买苹果笔记本,价格是一万八, 你每个月收入减去开销乘以四个月用 print 打印出来。三、作业用第二个练习来计算你买一套房要多久时间,房子的价格是一百五十万,用 print 打印出来。 好,首先我们输入 print, 这里派生就会先匀算八十八,除以二,再加六十六,我们运行一下, 打印出来的结果就是一百一审。接着我们做第二个,同样用 pro, 用九千收入减去四千开销,再乘以四,这里净收入需要用括号破起来, 点击运行,那么得到的结果就是一万六,很显然,一万六是比一万八小,所以你四个月是买不起的。那么第三个作业呢?赶紧上手试试。

本期编程分享教你用 python 制作微信自动回复程序,宝子们,今天主播就教你怎么使用 python 来实现自动化回复代码,简单易上手,就算是零基础的小白也能轻松学会看到我屏幕的代码部分。首先我会将代码打包好给屏幕前的你,拿到手中后, 在这个文件中填写好一些必要的关键词,就比如我填写的关键词就是这一些。现在就只要运行代码,程序就会自动识别微信收到的消息,就比如我拿小号与我的电脑屏幕的账号进行聊天,可以看到我的鼠标一直在这个位置,并没有进行移动操作。 现在程序就能正常的识别我电脑屏幕消息,并给出我设置的关键词进行回复代码还是很简单的,就算你是零基础的小白,想要运行这个代码也是十分容易,轻松就能制作并运行成功。你有病,你有病!

拍档从零到精通第十三集列表增删改查讲完了列表的缩影和切片呢,接下来我要讲列表的一些常用操作, 因为列表的核心优势它是可变的,所以它支持添加、删除、修改、查询或者排序等等一系列操作。 那么这些操作呢,也是我们日后编码中会高频使用的。我们先看列表的修改,我有一个分数列表,九十五、八十八,九十五、七十八、九十,现在我想把这个重复的九十五呢给它改掉, 我们怎么改呢?上节课我们学到,所以那么这节课呢,我们就直接用,所以去修改,我们找到九十五这个分数呢,对应的所以,因为,所以是从零开始,所以我们数零一二, 因此我们取到一个括号,加一个方,括号,中间呢加上二号,所以这就代表我们已经取到了这个二号,所以位置上的元素我们把它变成九十八, 这个操作呢就相当于是列表的修改了。接下来我们再打印一下,看一下这个分数到底有没有被修改。右键运行一下好看 这个二号位缩影呢,他九十五分变成了九十八分,这就是最简单的一个列表的修改方法。 同样呢,我们上节课也学到了反向缩影,因为有时候列表的元素呢,它里面有特别多,你不知道里面具体有多少个,也也不知道他的总缩影是多少。所以当你要处理最后一个或者倒数第二个元素的时候,我们就可以用到反向缩影。 假设我们现在把最后一个,所以呢他的元素的分数改变掉,我们这里就要用到反向,所以负一负一呢,就是从最后一个开始,从右往左开始数,我们把这个最后一个元素的分数改成七十分, 同理,我们再打印一下,好走,你看最后一个,所以的分数呢,是不是被改变了, 这样我们就可以看到列表的修改呢,它其实就是列表名加上,所以最后给它一个新值,是不是很简单?好,我们再看列表的添加, 我这个分数,列表呢,它里面有五个分数,现在我要再往里面再加一个分数,怎么办呢?我们先看一下第一个方法, append, 这个方法呢,它就是在列表的末尾处 添加一个元素,怎么用呢?其实很简单,我们先写这个 scores, 就是 列表明啊,后面加一个 append, 点 append, 这个 append 呢,里面就可以把我们想要的元素放进去,就比如我想放多少呢?九十九分。好, 这样我的列表就添加了一个元素,我们打印一下右键运行,你看这个列表是不是被打印出来了啊?为了方便,我把上面的先全部给它注视掉 走。好,没问题吧,这个就是 ip 的 方法。 接下来呢,我看第二种方法, insert, 因为我们 app 呢,只能在列表的末尾处添加,有时候呢,我不想在末尾处添加,对不对?我想在九十五跟八十八之间添加呢,或者说我想在八十八跟九十五之间添加呢,这样我们就可以用到这个 insert, 那 呢是可以在指定缩影位置上添加。好,它的用法也很简单,我们先写出这个列表, 点 insert 啊, insert 呢,要加两个参数啊,这个 insert 呢,要加两个参数,第一个参数呢就是,所以第二个参数呢就是我们要添加的元素,我们假设在一号缩影位上呢,添加一个六十分,这样我们这个元素就插入了。好,我们再打印一下, 右键运行原来的一号缩影上呢是八十八分,现在我把这个六十分插入进来, 所以剩余的元素呢,他都会往后挪一位,看到没?这个就是 insert, 你 看这里面插入是不是都是一个一个元素的插入, 那我们后面说我要同时插入十多个,或者说我要同时插入一百个,我不可能写一百行的 insert 或者一百行的 find, 对 吧?列表还有个方法叫做 extend, 它呢就可以把 另一个列表添加到当前列表的末尾处,这样是不是就相当于批量添加元素了?好,我们再看一下它怎么用哈?好,现在我有个新的分数列表, 它里面有三个成绩,一百、五十、八十,我要把这三个成绩都添加到原来的列表后面,怎么做直接用原来的列表呢? 第二, extend 好, 把这个新的放进去,这样就相当于把这三个分数呢拼接到这个列表的末尾处,我们打印一下。走, 你看原来的这个列表后面是不是添加了我新的列表的元素,对不对?好,到这里就有小伙伴会说,既然你 extend 是 添加到末尾处,那我 append 也是末尾处,这两个方法能不能混用呢? 就比如我这样写 scot 点 append, 你 既然是把这个添加到末尾,那我也把它放进来 new scores。 接下来我再打印一次啊,看一下这个结果是什么呢?我们右键运行一下。好,你看这里 在原来的列表处又加了一个列表,它呢? append 会把这个列表当成一个整体,拼接到原来列表的末尾, 但是这样的话不是我们想要的结果,因为这是一个整体,等到我们真正要选举到里面的五十这个分数的时候,就有点麻烦了,所以我们不用 app 的 方法。这个呢, append 会把列表当成一个 整体,接下来我们看一下列表的删除,我们再次拿到这个分数列表,这样就不会搞混了。 第一个方法呢是用 delete 语句,它可以通过缩影删除元素。假设我们要删除这个一号位缩影上八十八分,同样我们先拿到这个缩影上的分数, 这样是不是拿到了八十八分啊?我们直接在前面加个 delete, 相当于说我把这个一号锁屏上的八十八分删除了,打印一下,查看一下,结果我们右键运行,哎,你看这个八十八是不是没了? 接下来我们再看,有时候呢,我们不知道具体的缩影位置,只知道这个元素是什么,我们可以直接通过删除元素去删除,我们就要用到 remove 方法,它呢可以删除指定元素, 这里有个小坑,我们先看假设呢,我现在要把七十八分给删掉,我们可以直接写 scores, 点 remove 好, 把七十八分放进去,这样的话就相当于说我要把这个元素给删掉,直接打印一下运行, 你看是不是七十八分也被删除掉了?那么现在呢,我想把九十五分删掉,但是大家注意了,我们有两个九十五分, 它到底会删除哪一个呢?先把这个注射掉,把这个注射掉。好,接下来我们删除九十五分。第二 remove 九十五 rent scots 走好,我们再看一下 是不是第一个九十五被删掉了,第二个九十五没有动,我们再删除一次。第二屏幕九十五,好,再次打印 好,现在九十五也被删掉了。这样看的话呢,我们就可以得出什么结论呢?他可以删除指定元素没错,但是重复的元素呢? 只会删除第一个匹配的元素。什么意思呢?就是如果我有很多相同的元素,我要用吕布去删呢?他只会从前往后去匹配, 当第一个匹配到了,他就会删除,删除完之后他的任务就结束了,你第二次再用吕布的话,他会再次去匹配, 匹配到第二个,再把它删除。任务又结束了,接下来我们再看第三种方法, pop 方法。 pop 方法呢,他也是可以删除元素,但是是默认删除最后一个元素,并且他会返回这个元素。好,我们先把上面的复制掉, 假设呢,我要把这个九十分给删除掉,而且我要得到这个九十分,现在我就可以用 pop 方法,我们先写出来 scores, 第二 pop, 这样的话就相当于说我这个列表最后一个元素被删除,并且被抛出,我要拿一个分数去接收它,假设是 a 这个变量去接收它,同时我把它打印一下。 好,我再打印一下这个列表,我们右键运行啊,你看九十,我是不是拿到了列表最后一个元素呢?是不是也被删除掉了?那这有什么用呢?就比如说我们有时候删掉它,但是我要拿到它去进行操作, 那前面的这些方法能不能呢?我们可以验证一下,就看下这个 remove, 你 说我把这个七十八号元素移掉,你能不能顺便把这个元素返回给我呢?我们在这里用一个 b 变量去接收一下, 看一下有没有用哈,我们打印一下这个 b 右键运行好,你看这个 b 它的数据类型说明呢?这个 remove 方法呢?他没有返回值的, 对不对?因此我们后续如果要用到删除元素,并且要返回这个元素呢,就要用到 pop pop 呢?它除了默认删除最后个元素啊,我们也可以指定一下。 要说我们不是删除最后个元素呢,我们删除一号位元素呢?假设我们这里有个 b 变量等于一号位元素,是不是打印一下 b, 打印一下这个分数 预写音,你看它是先把九十删掉,再把八十八删掉,没问题吧?这个就是 pop 的 用法。 接下来我们看一下 clear 方法。什么时候用到 clear 方法呢?就是当你这个列表我想把它所有元素都清空掉,我这个列表要保留啊,我后续还要在里面添加,省得我再去新建了,对不对?我就可以直接用 clear 方法,直接用 scores 点 列好。现在呢,我们再把这个列表打印一下,看一下结果运行,你看是不是变成了一个空列表啊?这个就是一个清空列表方法。 前面我们说过,当我们要查找一个列表里面的元素,我们可以通过它的缩影去查找,我们得到了这个缩影呢,就可以得到这个元素, 那么现在我知道这个元素是多少,那么我们能不能知道它的缩影是多少呢?当然可以,我们在列表中呢,有个方法叫做 index, 它呢就是根据元素查找缩影, 同样是这个列表,我们现在要查一下八十八这个元素对应的缩影是多少呢?我们可以直接这样 scores 点 index, 现在呢,我们要查八十八, 因为是所以嘛,对吧?我们得到了结果,肯定要利用一个变量去接受它。我们在这里定义一个 a, 让它等于这个,所以感应一下这个 a, 看一下它是不是一号位,所以呢,右键运行好,你看 a 等于一, 是不是没问题吧?好,现在同样有一个问题,就是我现在要查九十五这个缩影,它到底是前面的呢还是后面的呢?同样让 b 等于 index, 九十五, 打印一个 b 啊,右键运行,你看 b 呢,等于零,说明呢?它 index 九十五先找的是零号位上的元素,这个就跟我们之前说的 remove 一 样,它能删除指定元素, 它只会匹配第一个元素,那我这个 index 也是可以拿走重复元素,返回第一个 匹配的元素。所以,好,现在我要查找一个元素,他不在这个列表里面,他返回的结果是什么呢?是浪呢?还是什么呢?假设我要查一个一百,让他复制给 c, 现在我们打印一下 c, 哈,右键运行好,你看他报错了。 x not in list, 什么意思呢?我这个元素它不在这个列表里面,你是找不到的,所以我这个是会报错的,这就是如果元素不存在,则报错, 那这样我们看,那如何判断一个元素是否在这个列表里面呢?而且有个关键字 in, 这个关键字呢可以判断该元素是否存在在这个 列表内,我们看一下怎么用,比如我们现在要判断这个一百有没有在这个列表里面呢?我们可以这样写,一百 in sports 好, 这样, 因为它是一个结果嘛,所以呢它返回的是一个布尔值,我们用一个布尔值去接收,假设这个布尔值呢是 d, 简单一点哈,现在我们打印这个结果,看一下它结果是什么?运行 好,我们先要先把这个给注死掉,我们再次运行。哎,你看返回的结果是一个 false, 对 吧?它不存在,那我们再看一下,如果它存在呢?假设一个变量 e 等于九十五 in scott, 打一下啊,右键运行好,你看是不是去了,所以这个 in 呢?这个关键字可以判断当前元素呢,是不是存在这个列表里, 这样就特别方便了。就比如说我们要做一个成绩系统,比如说小明是否在这个成绩单里面呢?就可以用 in 去判断对不对?接下来呢,我们看一下列表的长度, 我们之前说制服串有长度,那列表他也是有长度的,对不对?还是这个列表复制一下。现在我们要看一下这个列表的长度,还是用到之前学的方法 lin, lin 里面放的一个是列表,这样他就能得到这个列表的长度。我们直接把这个列表长度呢打印出来啊,右键运行,你看这个列表长度是五, 对不对?用任函数得到列表的长度,所以这个长度呢,跟我们的缩影 不一样的长度,就相当于说里面有多少个元素,是不是有五个元素, 但是他的,所以呢最多只能到四,因为他是从零开始的,我们一定要区分清楚啊。再看一下这个列表里面有重复的元素,那么我们怎么得到这个重复的个数呢啊?列表有一个方法叫做 count, 它能统计元素出现的次数。好,我们怎么用呢?用 score 点 count, 九十五返回呢,是一个数值,所以我们用一个 a 去接收一下, 打印一下这个 a, 顺便呢,我们把这个八十八也看一下,右键运行。好,你看九十五出现了两次,八十八出现了一次, 这样就可以看一下我们这个元素呢出现了多少次数啊。接下来我们看一下列表,它是能排序的,它用的是 sort 方法, 这个 sort 呢,它默认是声序,就是从小到大嘛。好,现在我把这个分数列表呢,让它排个序,这是用 squirt 点 sort。 好, 直接这样就可以了。现在我再把这个分数列表再打印一次, 这里我把原分数列表也打印一次,这些的我先给他注字掉。好,我右键运行。你看原来的分数列表是这样,经过排序之后呢,他是不是变成了七十八最小,九十五最大,从小到大排序, 既然它能升序,它是不是也能降序呢?当然可以,同样,我们把这个复制一下,里面呢加一个什么 reverse 等于 true, 这个 reverse 意思就是反转,那我是否是反转呢? true 就 说明我是降序排序了啊。 从大到小了,我们再打印一下,右键运行。哎,你看这里是从小到大,这里就变成从大到小了, 没问题吧?好,再看 universe 呢,它是反转的意思,它用到列表里面呢,就是把列表整个倒个个看一下。 universe 方法就是 反转列表 first 点 us 打印一下,我们把这两个排序的先给它注死掉。好,我们右键运行。哎,你看 这个,九十五,八十八,九十五,七十八,九十是这样,原先是这样排列的,我用了路由器之后呢,他九十变成第一号元素了,七十八变成第二号元素了,你看是不是反转了一下,这个就是列表的反转方法。好,接下来我总结一下,这节课讲的知识点还是比较多的。 好,先看我们讲过了列表的添加,它有三个方法,第一个呢是 append, 它会在列表的末尾处呢添加一个元素。第二个是 insert, 它可以在指定缩影位置上添加 第三个 extend, 它相当于是批量添加。把另一个列表呢添加到当前列表的末尾处。注意,如果我们用 append 添加一个列表呢,会把这个列表当成一个整体添加进来。列表的删除方法有四种, 第一个 delete, 它可以通过缩影删除一个元素。同样 delete, 它能删除指定元素。 重复的元素呢,它只会删除第一个匹配的元素,并且它也没有返回值。 pop 呢,它能删除元素,并且返回这个元素,它默认呢是删除最后个元素,如果你给他缩影呢,他也能删除指定缩影的元素。 最后是 clear 清空方法,他直接把列表给清空了。好,列表的修改呢,它很简单, 列表明加上,所以让它等于一个新值,这样这个所以上的值就被修改了。接下来我们再看列表的其他方法。 index, 它能根据元素呢查找,所以可以查找重复的元素返回第一个匹配的元素。硬关键字呢,它可以判断这个元素是否存在这个列表内。任函数可以得到列表的长度。 count, 它能统计元素出现的次数。 sort, 它默认是升序,是从小到大排序。如果你给它加一个 reverse 参数变成 to, 它就是降序排序,从大到小排序了。最后有个 reverse 方法,相当于是它可以把这个列表反转排序。 这些就是本节课的主要内容,大家课后呢,一定要动手练一练。这些方法呢,写多了就记得住,不用死记硬背。如果有什么问题的话,我们可以在群里或者评论区里面讨论一下,那我们下节课再见!拜拜!

跟着慢波学 python 四 print 语法,使用 print 函数来实现打印功能,在 print 后面加上括号和引号,在引号里面加上中文, 跟慢波学习,点击运行就能够在屏幕上看到这个文字。当然这里还支持英文数字和别的语言,只要我们将引号类的内容替换即可。 但是在这里需要注意的是, print 函数中这对引号和括号都是必不可少的,如果少了引号就会被当作是变量。 没有变量命名会导致程序报错或者不显示,而且它们都需要是英文的格式,否则也是一样会报错。学会了 print 输出,就可以加入变量进去,我们命名等于慢波,那这里的意思就是 name, 这个变量就是慢波的意思。 将 print 里面的内容换成 name, 这个时候需要去掉引号,如果不去掉引号,打印出来的就是 name。 引号的作用就是原封不动的打印引号中的内容,也就是字母串文字,这个时候运行得到的结果就是慢波。同样还可以把变量命名为别的东西,比如 age 等于十八, 这个时候 print 输出的 age 得到的结果就是十八。接下来我们来拍唱实操一下新建拍散文件 print 函数, 比如我们需要输出 print hello world, 点击运行,如果我们想要去输入输出数字,同样的可以点击运行,八八八 以及各种语言都能实现输出,还能支持混合输出,比如我爱害塞, 当然我们也可以输出变量, eight 为十八, print eight 则输出的是十八。如果想要实现数字相加,比如 a 为十, b 为二十,那 c 为 a 加 b 打印 c 则能输出三十。如果想打印一个字母串三遍该怎么办?很简单,直接在后面乘以三即可。比如 s 为我爱 python print s 乘以三这个打印我爱 python 我 爱 python 我 爱 python 是 不是超级简单?下节课给大家讲解变量和注式下课啊嘚嘚嘚嘚嘚嘚嘚嘚嘚。

picasa 爬虫教程第三集 request school 的 使用浏览器向服务器发起请求,然后获得到服务器响应的页面内容。这个过程我们可以想象成去奶茶店买奶茶,奶茶店就是服务器,奶茶就是我们想要获得的内容。 如果我们想用代码模拟这个行为,就需要借助一个非常实用的 python 库 requests 库。接下来的时间,我们就来学习怎么使用 requests 库,并通过它发起请求,抓取并保存百度首页的页面。 request queue 是 一个第三方库,所以我们需要先在终端中以命令的形式安装它。打开终端,在终端内写上 pip install requests, 然后按下回车就可以下载安装最新版本的 requests queue。 安装完成后,如果终端显示 successfully installed requests, 说明安装成功了。如果之前已经安装过,就不会出现这句话,而是显示 requirement already satisfied 表示你之前下载安装过这个第三方库。你也可以在终端用 ppleist 的 命令来查看当前已经安装了哪些第三方库。 成功安装好 request 库之后,我们来看看怎么用它。发起请求使用第三方库之前,除了下载安装,还有一步很重要,那就是在 python 文件中导入模块。 大家还记得之前讲过的三种导入方式吗?第一种是直接导入整个库,第二种是只导入库中需要使用的方法, 第三种是导入库并给它取一个别名。这里我们采用第一种方式直接导入整个 request 库。上个视频我们已经了解了发起 http 请求两种常见方式, get 请求和 post 请求。在 request 库中发起 get 请求就用 request 点 get 方法。 发起 post 请求,就使用 request 点 post 的 方法,当然光写这两个方法还不够。 request queue 不知道你想对哪个网站的服务器发起请求,所以我们需要在方法的括号里传入参数。第一个参数当然是最重要的,也是不能省略的,就是传入你想抓取的网页的网址。 比如我们想向百度首页发起请求,那么就以字母串的形式把网址传进去,告诉 requestcool 我 们想访问哪个地址。现在我们对服务器发起了请求,我们发起请求,服务器会对我们的身份进行甄别。而现在我们是以 requestcool 爬虫的身份发起了请求, 就相当于一个机器人想要去奶茶店喝奶茶,奶茶店老板看到后觉得机器人没有味觉,不想浪费自己的奶茶,就不会给机器人奶茶。那么作为机器人如何伪装自己成功买到奶茶呢?还记得之前我们在浏览器里看到的请求头吗? 浏览器发起请求时,会在请求头里带上自己的身份信息,也就是 user agent 发送给服务器。我们只要让 requests 也带上这个浏览器的身份信息,就能成功伪装成浏览器。那么我们怎么获取浏览器的身份信息呢? 在浏览器里右键点击页面,选择检查,进入开发者模式,然后切换到网络这个选项卡, 刷新页面,然后找到这个蓝色的图标。三 w 点百度点 com, 我 们在右边的标头中就可以看到浏览器发起的请求,以及响应 上个视频学习的浏览器发起 http 请求,找到请求头内会写上的 user agent, 用户代理复制上这一串浏览器的身份,然后在我们的代码里把这段身份信息放进 header 参数中, headers 表示的就是标头, user agent 和浏览器的身份存在对应关系,所以使用字典的形式储存,然后作为参数的值放入了 request queue 发起请求的方法中,这样我们就将 request queue 发起的请求包装成为了浏览器发起的请求。 写好这个方法之后,你就会获得服务器的响应。以 get 请求为例,我们把响应的内容保存到一个变量里,这个变量我们叫做 response 响应。那么我们现在打印一下这个 response, 发现 request 库将响应的内容打包成了一个对象。在这个响应对象里有两个我们最常用的属性,第一个 http 状态码, 使用 response 点 status code 属性,我们就可以查看 http 状态码,通过状态码我们可以知道发起的请求是否成功。第二个 response 点 text, 这个属性里面装的就是服务器响应给我们内容中响应体里的具体内容。 学习了怎么发起请求,怎么获取响应内容之后,我们来通过抓取百度浏览器首页的形式来实践一下如何使用 request cool 成为一名爬虫吧。 在拍唱中,我们需要新建一个项目,所以我们在这个主菜单中选择新建项目,然后在这里写上你新建项目的名字,在这里我不做修改。爬虫项目需要使用到虚拟解释器, 所以我们创建项目的时候需要做出一点修改,我们需要将环境勾选这个生成新的解释器,解释器的类型选择这个虚拟环境。简单来说,你可以把虚拟环境想象成一个独立的干净的项目。专用工作间,你之后可能会同时开发多个 python 项目, 不同的项目可能需要同一个库的不同版本,为了避免版本冲突,所以我们需要使用到虚拟环境。 接下来我们点击创建,打开这个新窗口。大家需要注意的一点是,虚拟环境是独立的,所以在不同的项目中使用同一个第三方库,例如 request 库都需要重新下载,那么现在我来重新下载一下 request, 点击到终端,然后在终端以命令的形式写下 pip install requests, 然后按一下回车。现在终端就开始下载 requesttool 了,成功显示了 successfully installed。 那 么我们使用 piplist 来看是否成功地下载了 requesttool。 在 这里我们可以找到 requesttool, 那 么说明我们已经成功下载安装了 request 第三方库。 接下来我们就可以完成我们的第一个爬虫项目了。在这里我们新建一个 python 文件,取名为 catch。 百度创建了这个 python 文件之后,我们在这里需要做的第一步就是导入 request queue, 写上 import requests。 现在我们已经成功在 python 文件中导入了 request queue, 使用 request queue 发起请求,那么我们需要使用到的就是 request 点 get 方法。 因为我想要抓取的是百度的首页,不需要传递密码和用户名给服务器,那么我直接使用 get 方法输入百度的网址,然后将抓取的内容给变量 response, 复制给 response 之后,我们将响应体的内容,一般来说都是网页中的原始 html 文件,我们将网页中的 html 代码写入到我们自己创建的 html 文件中。 写入文件,我们需要先打开文件,写上 whatsopen, 使用 w 写入模式创建一个百度点 html 文件,并且在这个百度点 html 文件中写上我们获取到的百度的网页 html 文件。 现在我们来运行一下这段代码,可以看到这里出现了报错,这是为什么呢?因为我没有将文字编码形式改为 utf 杠八, 所以在这里我们一定要记住将 encoding 改为 utf 杠八。再次运行这段代码,可以看到在这里已经自动创建了百度点 html 文件,点开这个 html 文件,已经成功写入了一些 html 代码, 那么我们在这里使用浏览器打开,可以看到我们已经成功抓取了一个类似百度首页的页面,但是还是出现了一些乱码。为什么我们已经将 encoding 改为了 utf 杠八,还是会出现乱码呢? 那是因为服务器已经识别了我们爬虫的身份,触发了反爬机制,没有给我们准确的信息。那么我们在浏览器中打开百度,点击检查, 找到网络,然后重新加载数据包,查找到这个三 w, 点 baidu 点 com 这个蓝色图标, 将 user agent 用户代理复制下来,点击复制,然后我们以字典的形式粘贴到这里面,直接粘贴的话,我们需要给它们加上双引号和冒号。成功粘贴好用户代理之后,我们记得在请求的时候,将用户代理写入到标头中,再次重新运行这段代码,打开百度点 html 文件, 现在我们再次在这里打开浏览器运行,得到的就是和百度首页一模一样的内容。大家可以看到在这里是三 w 点百度点 com, 也就是百度自身的网页,而这个是我自己创建的百度 html 文件,网址是这个样子的,我们抓取的页面和浏览器发起请求获得的页面是一致的, 使用这种方法你就可以抓取到大部分网站的原始网页了。不过爬虫的最终目标并不是保存整个网页,而是从网页中提取出我们真正想要的有效信息。所以下个视频我们就来学习如何从这些原始内容中解析出自己想要的数据,我们下个视频再见。

大家好,本节内容是练习解析如何生成自己的通讯录。 首先我们看一下通讯录,也就是我们手机里面的通讯录,我们知道任何一个通讯都有一个姓名,还有一个生日,电话、邮箱、学校、公司等,有很多的属性, 那么最重要的通讯录里面是有两个,第一个是姓名,第二个是电话,那姓名和电话一一对应的一个关系,那么我可以在通讯里面查找某一个人的电话,比如刘德华的电话, 我还可以删除某一个人的电话,比如我要删除杨幂的,如果说杨幂存在,那就可以删除,如果说不存在,那就提示说查无此人,不能删除,那我还有第三个,我可以进行查找,那查找的时候我查找刘德华, 那刘德华已经存在就给我返回,如果没有存在就不能返回。我们正常使用通讯录是不是这样一个操作,要对他进行增强改查,那我们整个项目就是要实现这样一个需求,我们看一下怎么样去用 python 实现。 那面对一个大的项目的时候,我们同样还是按照一贯的要求使用问题拆解法,也就是需求拆解。那刚才这样一个通讯录该拆解成多少个小的功能点?那每一个功能点该用到我们本章或者说整个 python 知识点的哪些内容呢?我们一起来给大家解析 一下。我们还看这样一个项目描述,也就是我们在上一节看到的文本 pdf 里面项目描述。 那么先看第一句话,我们知道要创建通讯录,他只保存了联系人和电话号码,所以说只有两个属性,联系人、电话号码,那第二个是通讯录里面我可以查找某个联系人, 然后如果找到就给出来,如果找不到就给出提示信息,查无此人。那通过这一句话,我们是不是可以得出这个通讯录的功能点,就有一个查询联系人的资料,那第二个我们 我们再接着往下看,通讯录的核心功能是添加联系人和电话号码,那所以说我是不是可以找到插入新的联系人? 那么第三个可以删除某一个联系人,那是不是就可以找到删除已有联系人呢?还有最后我们要不使用的时候,是不是可以退出通讯录,那就是第四个退出通讯录,那功能点很容易就能够找到,但是容易忽略的是什么?这几个如果 也就是说我查这个电话号码的时候没有这个人,还有我添加的时候,如果已经存在了,我是不是就不能再添加? 还有我删除的时候,如果这个人就不存在,我删除是不能删除的。那么这三个如果也就我们正常使用的一些功能点,很多圈友都忽略了,我看了有上千份的一个通讯录的作业,有一半的同学都只是驶向了这四个功能点, 而没有进行丰满。之后我给出查找,也就是给出如果这几个条件,你那代码里面有没有考虑到这些点呢? 所以说做任何一个项目,一定要去深刻理解他的需求点在哪里,这些需求一个都不要去落下,用你的小本本记下你这个需求,然后这些需求里面又有哪些小的需求,这才是解决我这个项目开发的一个核心的要点, 那么当然有的时候需求不明确,您需要去跟提需求的人去沟通,那么怎么样去沟通也是一个技术活,我们需要去进行学习,当然如果您有兴趣也可以私下跟我交流。那好我们回到这个项目通讯录, 那这个通讯录我们已经找到功能点了,那么用 python 来说,我该怎么样去解决呢?也就是说数据结构我该用哪一个数据结构来存放呢? 我们知道以前学了三个数据结构,有字典,列表,还有源组等等,到现在有三个,也许还有其他。如果您学了各种包的话,或者数据编辑包有各种各样的数据结 构,开发程序或者开发代码的话,我们一定要保存你这些数据用什么结构,这是第一个要考虑的问题,我们接着往下看,那我们选择什么样的数据结 构,还是要根据您要存放什么样的数据?那我们知道我们要通讯录,第一句话就告诉我们要联系人和电话号码,那所以说是两个,并且是一一对应的关系, 那有两个属性,并且一一对应,我们是不是很容易能够想到是 key value 的 一个结构,它们是一一对应的一个箭头,那也就是 python pandas 里面的。如果您 对数据分析其他结构比较熟悉的话,那对于我们本次课程我们只需要使用字典结构就可以了。那么再接着往下看功能点,我们刚才已经分析出来有四个功能点,假如说查询、插入、删除,还有退出,怎么样去实现这四个功能点呢?也就它的知识点有哪些呢?我们首先看第一个, 那这四功能是不是要一直循环执行?你就说让用户输入,用户输入,我们很容易想到是 input, 让它要四格以上进行执行,是不就是循环?我们选择 will 还是循环否呢?一般我们这种情况下,推荐使用 will 循环,它太复杂了。 还有一个情况就是说我选择 will 之后,那这个 will 我 该怎么样去构造呢?它循环四次就结束了吗?不行,因为我要一直查询这个通讯录的话,一直查找或者一直删除,那是不是就没完没了?所以说这个 will 就 一定是一个死循环。我看过很多圈友的作业,它都使用一个 flag, 或者说只让它执行四次,或者只让它执行几次,那这样是不对的,因为你的通讯录不可能就查完之后就不用了。 那么第二个功能点,我们再看一下,这四个功能我一会儿查,一会儿找,或者一会儿删,我不同的命令有不同的功能,那是不是有选择结构,也就是 if else、 if 结构, 那这个选择结构我们应该选择 if else、 if 和 else 多个选择条件,那 if else 又本身就是分支结构,也就选择一个,另外几个不会被执行。那所以说如果我在这个 if else 里面添加了一些什么 continue 啊,或者 break 之类的,那是不是就不对了?是的, 那我干过很多圈友作业,是添加了各种各样的花式胡哨的一些功能点,其实是没有必要的。我们解决程序是这样,只要是能实现我的功能,没有必要的添加的就不要去添加,有的时候反而画蛇添足了, 那么整个的一个第三个哦,整个的一个通讯录是对他进行增强改查,那对通讯录的增强改查是不是转化为对字典的一个增强改查, 那字典的正反检查是不是就是对字典的各种操作?那这个时候我们就要回忆一下字典这一节里面对它的操作都有哪些,我们再讲一下,如果忘记的话,回顾一下之前学到的一些内容, 那么根据我们的分析,知识点找到了,功能点也找到了,我们接着使用 py 叉幕软件给大家演示一下所有的代码,当然也希望您自己去 写一下这个程序这个项目,您才能去理解这些所有的内容,当然代码都放到了下角,您可以作为一个参考,当然我看过很多代码比我写的还要去好,也就我们圈友他们的理解能力更加强, 他们代码更加好。所以说您不要说按照我这一个作为模板进行去照抄,一定要有自己的想法,自己的逻辑,但如果您有错误,或者说您有不懂的地方,可以去跟我私下去交流,讨论区也可以,在 qq 群也可以。 本次实现的一个任务是我们本次项目的通讯录,我们知道这个通讯录经过分析有四个功能,这四个功能下面又有一些小的需求,我们看一下代码是怎么样实现的, 我把这个代码已经写好放在这个位置了,这次为什么没有带大家一步一步去写,因为这些功能点,也就是这些语法点,是我们之前讲解内容的一个综合,大家只需要理解了这个需求,也就是说理解了如何去写代码,编码的一个思路的提升就可以了,不需要去模仿别人的代码。 所以说我们这里有一句话给大家一定要记住边写代码不是 copy, 而是根据需求理解项功能即可。 所以说大家一定要去根据自己的对项目的理解,加上自己的分析思路,然后写出来属于自己的代码才是学会了。 那我们这次一般讲解我的代码,另一边我要结合拍在实践圈里面大家写的通讯录的作业, 那大家作业写的都很好,看了上千粉,然后大家都能实现这个功能,有一些是不太好的地方,我这里给大家总结一下。那么首先我们看第一个,那么要使用这个通讯录,那么我们手机里面是不是已经已经告诉我们可以进行增删改查, 那所以说我们这个程序也要给大家一个欢迎界面,也就是欢迎大家使用我的通讯录,那么我们把它给运行一下,看一下它的效果, 那么也就是这个效果要欢迎大家使用通讯录,那么它的功能告诉大家,一是查询,二是插入,三是删除,四是退出。我们怎么样实现这个界面呢?你可以使用 print 进行输出一个就可以了, 我见很多圈友用一个 print 这样写的很长很长的,这样是不对的,因为我们编码里面有一个要求,如果你这样一个很长的这样一个代码的话,一个屏幕显不完,是很容易让大家误会,所以说不建议大家去这样使用。那么第二个容易出现的错误是 你这个 friend 界面写到了物流循环里面去了,也就循环这个地方,那你写到这个地方的话,我是不是就代表我这个界面每一次我都要去进行执行,那这样我执行这输入这个命令的时候,我每次都要进行去输入一遍,是不是很烦? 因为我已经知道了一二三四代表什么的命令,这个程序是没有错误的,只是使用的方便或者个人的要求不同,那么这是两个容易犯错的点。那么接着我们再往下去看,我们已经知道了这个通讯录是使用字典, 那这个通讯录,所以说我们就给他构造一个空的字典就可以了。那现在有的圈友说我直接给他一个名字,比如刘德华电话或杨幂电话,我写一个出水值可以吗?也可以, 但是这样也不符合我们暂时的需要。我们现实里面拿到一个新手机,里面如果有别人的电话号码,那你的手机肯定就是翻新机,对吧?所以我们这个时候一定要给他一个空的字典就可以了。刚好我们可以学习怎么样动态去创建通讯录, 那么这个字典的名字 address 我 可以使用变量命名方法,大家一定要记住我们变量那一节给大家讲的,有好多圈友看到命名乱七八糟,用 a 或者用 b, 根本就看不出来它是什么样的一个意思, 所以推荐大家能够用一些描述性的语言来讲解,那么再往下就进入这个循环了,那进入这个循环之后,我已经分析出来是使用 vivo 循环,大家百分之百都使用 vivo 循环。好,这也很好。那么关于这个退出条件,有很多圈友是使用的 flag 等于一个处或者 force, 那 你用这种方式也是可以的,但是这样凭空就会多了很多代码,所以我们这里推荐大家使用 will 处或者是 will 一, 构造一个死循环就可以了。 那到底选择处还是一?根据以前的讲解,我们选择一是最好,我这里选择处,那么效率更高的话是选择一,那这个就是构造死循环,构造死循环, 那么这个循环已经有了之后,我们接着再看代码,那么第一个也就是说让我们输入这个指令,那么输入指令是不是跟用户的一个交互,那所以说这个地方就是与用户交互, 那与用户交互的话,我们一般是使用的是 input 就 可以了,那这个 input 我 们很容易去想到,但在这一个地方是大家容易易错的点,就是易错点, 忘记了转换。很多圈友说,我这个地方明明写了命令等于一,但它就是不成功,就是因为你没有进行 int 转换,那如果你忘记的话,这个一给它变成字母二也是可以的, 那你这个地方变成一字母串,那所有的命令都要变成字母串就比较麻烦。所以我们推荐大家使用 i n t 的 形式,那么再接着往下看整个的一个结构,那整个的结构我们是知道选择 if, else, if 就 可以了,那这个我们可以说能够让大家很容易就能想到这种结 构,直接使用 if, if, if 这种结构对不对?也对,没有对与错之分。 但如果你使用 if 的 话,最好是添加一个 continue, 为什么?因为你添加 continue 之后,后面的 if 就 不会被执行了,增加程序的效率。那我使用 if else if 因为它本身就是分支结构,所以不需要再使用 continue 了, 那这是一个需要注意的地方。好,我们进行命令的一个选择,那么 if 这个命令,我输入的命令如果等于一的话执行查找,等于二的话是添加, 等于三的话是删除,等于四的话是退出。那么我们推荐大家一定要把这个注是给写上,因为我自己去看这个代码的时候,我现在就能知道我这个一代表什么意思,如果我不写的话,是不是就很不好记住它什么意思? 所以推荐大家写注是也是很重要的。那怎么样写注是?我们在注是那一节给大家讲过,那么我们一个一个的去看,第一个是等一命令,等一的时候是要查找某个联系人,如果说这个联系人 是我们自己输入的名字,比如这个时候我要查找,比如输入一了要查找谁?刘德华, 那么现在通讯录是空的,那他应该是查无此人,那就正确了。那现在的话怎么样去实现呢? 输入还是这样一个 input, 另外的话怎么样去判断是 if else 结构,那 else 结构直接使用 search 音这个序列就可以了。有好多圈友要用 for 这个地方,有好多圈友是使用 for 就 会特别麻烦,一个一个的进行去循环,因为大家忘记了这个音选运算符,所以我们推荐使用 if 音就可以了,那么如果音的话,它已经在了,另外它 else 就是 不在。好多圈友说我这个逻辑都不在,因因为 我查找他在他也是不在,不在他也是在,就乱套了,这是因为你没有去理解这样一个 if, 而是使用了 if, 显得特别凌乱。 那么现在的话,第一个我们都已经去实现了,说等于一查找联系人,那么第二个我们看一下是添加联系人,那么添加的话也是要输入,那么用户输入还是 input, 那么这个 input 的 话,我们一定要记住是在 if else 里面输入的,就好像把它放到了外面,也就是 else 外面是不对的。我们再接着往下,假如我输入二,也就输入要添加的姓名,那这个姓名假如说我要添加刘德华, 现在是没有的,所以我们正常输出,那么输出添加电话号码,这个时候要告诉我添加成功,那所以说如果说我这个时候再去输入二添加又添加了一次刘德华, 他应该告诉我是姓名已存在,不让我添加,那这个是怎么样去实现的?也是使用一个 if else 结构,要判断我添加的名字是不是已经存在这个字典里面呢?也就这个 key 是 不是已经有了, 如果有的话就告诉他已存在,否则的话就是不存在。好多朋友把这一部分代码给忘记了,希望大家不要遗漏,不要遗漏。 我们接着再往下看第三个命令,第三个命令是删除某一个联系人,那这个时候我们再运行一下,比如说我要输入命令三要删除,那删除的话是不是要给他一个姓名?所以说还是提示我用户交互,那这个时候我要删除刘德华, 那我删除成功,那这个时候如果我再删除另外一个人,假如说杨幂输入三,我要删除杨幂, 我们知道杨幂是没有的,所以说就是查无此人,那这个时候我一会能够删除成功,一会删除不成功,那这个时候就是说我这个 if else 来进行判断的,那就是要判断你删除的名字有没有在这个字典里面,如果在就删除,如果不在就把它给删除 失败,查无此人就可以,也是不要遗漏。另外的话退出,那退出条件的话一定要等于四的时候, 一定要使用 break, 因为这个是结束整个循环是我们上上一节讲的内容,那这个时候一定不要使用 ctrl, 如果 ctrl 的 话就会又一次让大家循环,那我们使用四退出一下, 我们就可以看到已经退出了,并且感谢使用通讯录,有好多圈友把这个感谢通讯录放到了最后这个位置,整个路由循环结束以后,执行循环外的内容是不是可以的?也可以只要退出以外执行就可以, 那么最后我们再运行一下,因为它含有一个 else, 这个 else 就 说当您输入的指令不是在一二三四的时候,我要告诉他正确的命令是一二三四,这样的话用户更加清楚明白, 我们运行一下,如果我输入指令是五,那么它不等于一二三四,那所以说就提示我请输入正确的指令一二三四,那这个时候我再进行一 进行查找就可以了。大家一定要借鉴实战圈圈友的一个经验,不要去把这些易错点给搞上去, 也不知道您写代码怎么样,请记得把你的代码放到讨论区,或者放到 qq 群里面,如果您是圈友,放到知识星球里面发帖,我都会给大家一一的去点评你的代码哪里不合理,需要修改的地方,需要优化的地方, 大家一定要记住多多动手写代码,才能去提高您自己的一个代码逻辑,尤其这个项目是一个根据需求自己去写出来,怎么样去分析,一步一步的,因为写代码是需要慢慢的提高的,不是一下子就能够去实现。好,谢谢大家。

我知道你们一定很困扰,我也很向往那些会拍丧的大神,怎么回事,全列表就只有我不会拍丧啊,想学好拍丧,有些有基础的人就要说了,拍丧呢,不就是语法和第三方库吗,很简单啊, 但是一到自己学起来就发现很多东西不好理解,甚至让人望而生畏。这套教程真真正正可以让你充满信心, 充满动力的去看完,绝对不会让你觉得 python 很 难学。我们的目标是从零基础开始,从小白到大神,接下来就让我们一起开始正式的课程吧。大家好,今天我们用一百分钟时间来学习 python, 这是一本入门课程。 pencil 呢是一种流行的编程语言啊,它是由 rossum 于一九九一年发布的啊,它用于一些网络开发呀,软件开发呀,啊,数学计算啊,还有一些系统的脚本语言啊啊, pencil 能做什么呢?首先呢, pencil 是 可以写 web 应用程序的,第二呢,还可以写一些其他软件来写一些工作流 啊,也可以连接数据库啊,进行数据库的增删改查操作,也可以处理一些大数据啊,复杂的数学计算啊,继续学习,现在比较流行的就是用 python 来写。继续学习啊,还可以做些原型设计啊,做一些生产软件的啊,原型开发 为什么用 python 呢啊,因为 python 呢,可以支持不同的平台啊, windows, mac, linux 啊,这些都是支持的。 python 的 语法也比较简单啊,类似于英语啊。 python 呢,允许开发人员呢,用一些其他的,像 java 或 c 啊比较好,其比其他语言行数少啊,来编写程序。 python 呢,是一种解释型语言,它要在解释器上运行,也就是意味着这个代码是不需要翻译的,编写完就可以执行了啊。所以它原型是比较快啊,它可以面向过程啊,面向对象啊或者函数的方式来执行。 python pason 现在主要的版本就是 python 三了啊。呃,我当然现在还有 python 二,但是 python 二已经不更新了啊,本教程中呢, python 将使用拎拎 pernote 来编写啊,也可以使用一些 ide 环境啊,例如 tommy 啊, pcm 啊, netflix 啊, eclipse 来编写 pason 和其他编程语言比较啊,和 c 啊或者 java 比较呢,它的可读性是比较强的,受数学影响比较大啊,它呢,一般用新行啊,一个新的换行来完成啊,一个命令,而不是说像 c 或者 java 用分号啊或者是括号啊来完成。 pi 是 依赖缩进的,用空格来表示这一个作用域的啊,类似循环啊,类啊,函数啊啊,像 c 啊, java 一 般都是用大括号啊,括起来这块儿作用域。 python 的 安装 python 呢,很多像 windows 上面都有了,我们可以用啊,命令行, command 啊, ase 打开以后,然后输入 python 空格两杠 version 来查看 python 的 版本。或者在 linux 上呢,直接打开一个窗口啊,输入 pason 空格两杠 word 来查看版本。如果你电脑没有安装呢,你到 python 的 官网上可以去安装 python 的 快速入门。由于 python 呢是一种解释型语言,所以意味着开发人员呢,可以在文本中就编写啊。 python 的是以点 p y 结尾的文件啊, 将这些文件呢放在 python 的 解释器中就可以执行。像我们在命令行中输入 python 空格 hello world 点 p y, hello world 点 p y 呢就是呃,你的 python 文件名啊,我们来编写这个 python 文件名,我们就这样写在内容里面,打开以后写 print 括号,双引号, hello world 啊,双引号括号,双引号里面引的呢就是字母串啊, print 这个括号呢,就是把它输出出来啊,一敲回车呢,这个就会输出成啊, hello world, 我 们看一下 python 还有命令行格式啊,要在 python 中呢,测试少量代码呢,我们可以不用写入文件,我们可以直接用命令行模式 啊,那在一个 command 窗口里面呢,我们敲 python 回车啊,就会出现这样的一个窗口啊,有三个箭头,这里呢,我们敲入啊 print hello world 这个命令,然后一回车呢就会出现啊, hello world 啊, 好,我们看一下啊,我们要学习的知识点,第一个是 python 的 语法啊,注视啊,变量数据类型啊,数值型,字母串啊,布尔型啊,强制转换操作符 啊,还有列表啊,源组集合,字典语句啊,函数啊, number 啊,类啊,还有模块啊,还有文件。 大家好,我们开始学习 python 第一节,我们先学习它的语法,首先我们讲一下 python 的 缩进, 缩进是指代码行开头的空格,在其他编程语言中,代码的缩进只是为了可读性,而在 python 中缩进就是非常重要的啊, python 使用缩进来表示代码块, 我们看这里啊,如果 if 五大于二,那这里缩进啊 print 打印,那这里是一个代码块,缩进就表示它们是一个代码块,我们看一下啊,打印出来,如果你跳过缩进这里不写缩进的话,那么他就会报错了。嗯, 可以看到这里报了一个错啊,因为这个代码块没有写完整啊,这是两个代码块 啊,如果作为程序员,空格的数量呢,可以取决于你自己,但是必须有一个。我们可以看这个代码块啊, print 的 前面有一个空格,这个代码块 print 的 前面有一堆空格。我们看一下 啊,这两个代码块都是可以,但是如果在同一个代码块中啊,一共五到二。同一个代码块中啊,必须有相同的空格啊,这空一个,这空多个,那么他也会报错啊。可以看到 啊,我们来看 python 的 变量, python 中呢,直接就赋值,对一个变量直接进行赋值,它前面是没有那个啊,声明的,不像 c 或者加。呃, java 有 i, n, t 啊,或者 string, 这里是直接 x 等于五啊, y 等于 hello world 的。 嗯, 哎,这就成功了啊,注视,注视呢,就是让代码具有可读性啊,我们拍摄是以井号开头啊,他就会注视我们下一节课来详细讲注视。嗯, 课来看注式, python 的 注式呢,可以用于解释 python 的 代码啊,也可以使代码具有可读性啊,更可以阻止测试代码啊。我们来先创建注式。注式呢,以警号开头啊, python 就 会忽略它们啊,这句话, python 就 会忽略掉,不执行。 嗯,注式呢,也可以放在一行的末尾啊,也会忽略到行尾的部分啊,放在这行尾这段也是不会执行的 啊。注视呢,不一定注视,那个文本也可以注视代码,你看我们这里注视掉这个 print hello world, 嗯,你看它也没有执行。 python 中呢,是没有真正的多行注视的,如果要多行注视呢,只能每一行前面加井号,你看这三行,每行前面有井号, 但是 python 中呢,可以将这个多行字母串啊,用这个三个引号表示了多行字母串,如果这个多行字母串是没有赋给任何变量的啊, python 也不会执行它,所以也会将多行字母串当做这个注示啊,也是执行。这个 py 中的变量呢,是用于存储数据值的啊,一个容器啊。首先我们来创建变量, python 呢,是没有声明变量的命令 啊,就像我们前面说的 c 或者 java 前面会有一个 i n t 啊,定义这个类型是整型或者是 string 啊,定义这个类型是字串型啊, python 是 直接给它赋值,它就声明好了。这个变量啊,我们可以看到啊,打印出来了, 这个变量呢,也是不需要声明任何类型的啊,直接,而且还可以改类型。首先我们设成 x 等于四是整形,后面我们指成 size 啊,是自复串型,然后打印出来它就是自复串。 变量也是可以强制转换的啊,我们把这个自三啊,这个数字转换成 string, 我 们直接用 string 这函数就转换成整数,使用 float 就 会转成浮点型, 我们也可以使用 type 函数来获取啊,它的类型啊,我们看 x 等于五是整形, y 等于四状是字母串型,然后我们这里用 type x, type y, 我 们把它打印出来,可以看一下,对,一个是整形,一个字母串型, 在字母串中呢,我们是可以使用双引号或者是多单引号,这两种都是可以的。嗯,来声明字母串 变量名呢,是区分大小写的,也就是说这个小 a 和这大 a 是 两个不同的变量。 在变变量名的命名的时候呢,你也可以命名一个比较短的 x 或者 y, 也可以命名一个描述性的文字啊, h 啊,或者 total y 六啊,都可以。但 python 中的规则呢,是必须以字母或者下划线开头,不能以数字开头。 变量名称呢,只能包含字母数字和下划线,也就说大写 a 到小写 z 啊,零到九。还有下划线 变量名呢,是区分大小写的,这个 age 和这个大 age 和整个大写的是三个不同的变量。我们可以看一下有效的啊,买袜,买杠袜杠,买杠袜啊,买大写 v 啊,或者是全部大写或者买袜 two, 这些都是有效的。 可以看到这个如果以字母开头啊出买袜或者是买杠袜或者买空格袜,这三个都是无效的。 我们可以还可以用多个单词来命名一个变量,这样呢,可以使我们各句可读性有三种形式,第一种是骆驼形式啊,除了第一个单词买眉尾大写以外啊啊 variable 和 name 的 v 和 n 都大写了, 还有 pass 卡形式是每个每个都大写啊, m v n 都大写或者蛇形啊,中间用下划线相连啊,买杠 variable 杠 name 啊,可以看 这三个都是合法的。我们还可以对多个变量直接一次赋多个值,我们可以 x, 逗号 y, 嗯,逗号 z 啊,等于 orange banana 或者 cherry, 我 们把它打出来啊,一次可以赋三个值, 或者说多个变量也可以赋一个值啊, s 等于 y 等于 z 等于 orange 啊,这也是可以的。 我们还可以对集合做一些拆分啊,我们这里设了一个 list 啊, fruits 啊,里面有三个变量,我们是 x, 逗号 y, 逗号 z 啊,等于 fruits, 我 们就将这个集合进行了拆分啊,可以看到 x, y, z, 我们还可以输出啊,输出,其实前面已经看到了,就是用这个 print 啊,啊,我们可以对两个字母串做加法啊,就连接啊,所以就把它打印出来了。我们还可以先用两个变量把这个字母串连接好,再把它打印出来,这两种都是可以的, 对于数字也是可以的啊,五加十啊,那就是十五。嗯,如果你组合一下这个五加一个字母串串的话,那它就会报错了。嗯,因为整形和字母串是没办法做连接的 啊。用户,我们还可以用来用户输入啊,输入一些变量在终端上,但是 python 的 三点六版本和二点七版本不太一样,三点六使用的是 input, 二点七使用的是 ro 杠 input, 我 们来看三点六的,嗯,我们先输入一个东西啊,这里我们输入 a a a 一回车啊,我们就把它打印出来了啊, user name is a a, 二点七的,因为我们这环境是三点六的,所以它执行会报错的,没有这个。嗯, 全句变量,也就是说在函数外部,或者说在这个文件的整体声明的变量都是全句变量。我们可以看到啊, x 等于 awesome, 那 么这个函数啊, d, e, f 这个 my function, 这个函数里面,呃,如就可以直接使用这个 x 啊,这个 x 是 对这个方块里面是全句的, 然后我们来执行一下这个 function 啊,买 function 空号啊,可以看到 python is awesome 啊。当然,我们如果在函数内部,也可以声明一个 x, 这个 x 和上面这个 x 是 两个不同的变量,只是名称相同。这个 x 的 范围就是函数内部 啊,这个 x 的 范围是全区的,当然在函数内部,如果使用 x 的 话,像这个 print 打 x 的 话,那是这个 x 生效啊,它会覆盖这个全区的范围,但是在函数外部,如果使用 x 的 话,那就是全区的,这个生效啊,我们可以看一下。 嗯,第一个是 fantastic, 打印出来,因为执行 my function 啊。第二是执行 awesome 啊, 我们还可以使用 global 这个关键字来定义全局的。如果我们在 x 把 x 定义成这个函数内部的局部变量,但是呢,我们使用 global 这个 x, 那 这个 x 就是 全局的。 我们先执行一下 my function, 然后呢,我们这里直接打印把 x 打印出来,那说明我们就可以看到它调用的是函数内部的这个 x 啊, 我们也可以来更改这个全句变量啊, x 等于 awesome, 但是呢,我们把这里同样定义着 x 是 全句的,在函数里面,那这个 x 和这个 x 就是 同一个 x 啊,这里把它设成 fantastic, 那 它也变成了 fantastic, 我 们可以看一下。 好,这节讲到这里, 大家好,我们来看 python 数据类型。 嗯,在编程中,数据类型是一个非常重要的概念啊,变量中可以存储不同类型的数据啊,不同类型也可以做不同的事情。 默认情况下呢, python 有 几项以下几种数据类型啊,文本类型啊, str 啊,数字类型,整型 int 啊,浮点型 float, 还有复数类型 complex 啊, 序列类型啊, list, tube 和 range 啊,啊 map 类型啊, dick 啊,集合类型 set 和 frozen set 啊,布尔型布, 二进制的类型啊, bets 啊, bet area 和 memory view, 我 们来看一下获取,我们可以使用 type 函数啊,啊 x 等于五,是一个整型,我们把它打印出来可以 type x 啊,是个整型,就可以用 type 函数来获取。这个 x 是 什么类型的 啊?我们也可以来设置类型,设置类型就是在赋值的时候就设置好了啊,我们可以看到啊 x a hello world 它就是个 string 类型啊,等于二十是整型。二十点五啊,浮点型啊,一 j 就是 复数型 啊,中括号三个逗号分割就是 list 啊,圆括号啊,三个逗号分割就是 tog。 嗯啊, rand 六就是六的范围,数字从零到六啊 啊,大括号啊,呃 key 冒号 y 六这种形式啊,就是一个字,典型 dictionary 啊,大括号三个逗号分割的啊,这就是 set 啊,用 frozen set 括起来啊,括号括起来就是 frozen set 类型 啊, true 和 false 啊,大写 t 和大写 f 啊,就是布尔型啊,前面有个小 b 在 后面跟字母串的啊,这个就是 bits 类型啊,还有 bit area 啊,等于五,一个五位的一个 bit area 啊, memory view 啊,也是设一个五位的 memory view。 嗯, 对于设计类型呢,我们也可以直接使用构造函数来声明啊,跟前面一样啊, s t r 扩起来它就是字母串啊, i n t 扩起来就是整型, float 扩起来啊,就是。嗯,浮点型啊, complex 啊,复数啊, list tube range dicks 啊, set for the set 布啊, best byte area 和 memory view, 嗯啊, 五节啊,数字类型啊,前面讲到 python 有 三种数字类型,整形 i n, t 啊,浮点型 float 和负数类型 complex。 这些数字类型呢,都是在赋值的时候可以看到啊 x 等于一 y 等于二点八啊, z 等于一 j, 嗯,这三个呢,就是复复制好了啊,然后呢,我们来验证一下,使用 type, 我 们来看一下这三个类型啊啊,整形,浮点型和负数类型。 首先我们来看整形,整形呢,是一个整数啊,正负都可以啊,但是只要不带小数,长度也是都可以的啊,你看 x, y, z, 嗯,这三个 啊,我们可以看到这三个都是整型,嗯,我们来看负点型。负点型是一定要包含一位或者多位小数的啊,正数负数都可以啊,我们可以看到 x, y, z 啊 啊,三个都是负点型。负点型呢,也可以有 e 的 科学计数法啊,表示十十次密啊啊,这 e 也可以小写也可以大写啊,负数呢,也可以,我们可以看一下, 嗯,这三个都是负点型,负数呢,就是有这个 j 作为虚部啊,三加五 j 或者五 j 负五 j, 这三个都是负数。 嗯啊,类型之间呢,还可以做这个类型转换啊,整形,负点型和负数类型可以从一种转换成一种啊, x 是 整形啊, y 是 负点型,这是负数类型。 我们可以使用 float 括号 x 就 将 x 转换成负点型赋给 a 啊,我们也可以把 y 作为整形赋给 b 的 话,那二点八那只是取二这个整形部分啊, 把 x 作为复数类型啊, complex 转换成给 c 啊,我们可以看一下这三个啊,看它的值啊,一点零二啊,一加零 j 啊, 三个类型啊,浮点型,整型和负数类型。随机数。 python 呢,是没有这个 random 函数来生成随机数的,但是呢,有个 random 包 啊,所以我首先呢,我们用 import random 来引入这个包,然后呢,我们使用这个函数 random 包点这个包里头的啊, run, run 值啊,从一到十啊,取一个随机数啊,将它打印出来啊,看它取到了七,好,我们看 第六节强制转换数据类型之间呢,是可以做强制转换的啊,啊,可以使用 i n t 这个构造函数,从整数的文字啊,浮点数的文字,或者说字母串里面文字里面的数字啊,转换成这个整数 啊, float 也一样,也是整数的文字,浮点数文字或者字母串里面的数字啊,转换成浮点数啊。 str 这个函数呢,就是从多种数据类型来构造一个字母串啊,我们可以看一下第一个例子啊,把一二点八和字母串三都转换成整型,嗯,三个整型, 把这个一二点八字母串三字母串四点二都转换成浮点型啊,这也是可以的。嗯, 我们把这个字母串 s 一 啊,还有这个整形二,还有浮点数三点零都转换成字母串啊,啊,这也成功了,好,这节课我们讲到这里, 大家好,我们来看第七节课字母串啊, python 的 字母串呢,是用单引号或者双引号包围的啊,单引号和双引号是一样的啊,单引号的 hello 和双引号其实是一样的啊,我们可以使用 print 把它打印出来啊。 啊,在字母串的分配的时候呢,就是直接的啊,用等号啊,后面跟一个字母串啊,这样就分配给了一个变量啊,我们前面都看过。嗯, 多行字母串呢,多行字母串就是使用三个单引号啊,或者三个双引号啊,就把它括起来啊,这就是多行的字母串来分配。嗯 啊,字母串其实也跟其他语言一样,也是一个数组啊,是用 unico 表示的,但是呢啊, python 里面呢,是没有叉类型的,也就是没有字母类型的啊,单一一个字母呢,其实也是长度为一的一个字母串啊, 我们可以用方括号呢,来访问字母串中某个位置的元素啊,我们看一下啊, a 中括号一啊 啊,那得到的是 e, 因为它是从零开始的啊,零一啊一的位置就是 e 啊, 我们因为它字母串是个数组,所以呢,我们可以用负循环来便利循环字母串啊啊,注意这里啊, x in banana 啊,就用把 x 在 banana 里面啊,一位一位的循环打印出来。嗯 啊,我们可以使用 line 这个函数呢,得到字母串的长度啊啊 l, e, n 啊,括号 a 我 们看一眼啊,十三位长, 我们还可以再检查啊,这个字母串中某个短语和字母在不在,我们就使用这个 in 这个单词啊啊,我们可以看 free in txt 啊,我们看这个 txt 是 这个字母串 free 是 不是在这里面我们打印出来啊处啊,是在这里面, 我们也可以循环啊,比较啊 if 它在里面,我们就打印它。嗯,是一样的啊,如果不在里面呢,我们就可以使用这个 not in 啊 expensive 啊,不在 tsc 里面看是不是确实不在? 好,我们来看切片,切片呢,就是得到啊某一部分的字符串,我们在中括号里面呢,使用这个开始缩引啊和结束缩引中间用冒号分割就可以得到字符串的一部分啊 b 啊,中括号二,冒号五,我们可以看一下 啊,这里得到 l l o 啊,二从零开始, h 是 零, e 是 一啊,二就是 l 啊,二三四。所以呢,这里注意啊,要头不要尾,这个五这个逗号是不要的啊,从二开始其实到四啊, 从头开始切片呢,那我们就省略到啊头了,这个数字直接冒号五,那就是啊,得到了。哈喽,如果切片到尾部呢,那我们就把尾部这个冒号五啊冒号五里面的五省掉啊,就是二冒号啊,那我们得到的就是整个啊,从二开始的,嗯,到结尾 啊,这还可以,从右边开始就是负,所以啊,我们可以从呃写负五到负二,我们可以看一眼从右边开始数啊,叹号啊,一二三四五正好是这个 o 啊,同样的是要头不要尾啊,要负五负四和负三啊,不要这个负二 啊,同样,我们可以来有一组字母串的内置方法啊, upper 就是 把所有的都大写啊, lower 就是 把所有字母都小写 啊。 strip 就是 把前后的空格都给它删掉。嗯啊,替换啊, replace, 我 们可以把呃用 j 来替换这个 h 啊, 拆分字母串啊,我们使用 split 函数啊啊,关键字是逗号,我们把它拆成两个 list 可以 看一下 啊,拆完了以后呢,这两 list 里面只有 hello 和 word, 这个逗号是没有的啊,这逗号是 list 的 风格啊,我们还可以使用加号来把两个字母串连接在一起啊,啊 a 加 b, 我 们可以看一眼 啊,这连接在一起了啊,我们还可以将三个字母串啊,也是两个加号啊,中间加一个空格连接在一起啊,可以看到 hello 啊,空格 word, 嗯,字母串的格式化,上一节我们讲到字母串和整形是没办法相加的啊,这是会报错的。 嗯,所以呢,我们要使用 format 函数啊,来组合这个字母串和数字。 format 里面呢,是接受参数的啊,在格式化它们之前呢,需要在字母串里面呢,设置站位符啊,大小括号啊,我们可以看到 tst 这里面啊,有个站位符这里,嗯, 所以呢, tst 点 format h, 我 们把 h 三十六就放在了这个站位符这个位置。 来看一下啊,成功了。 format 里面呢,是支持无限参数的啊,我们在这个字幕串里面设三个占位符,一个啊,两个啊,还有这三个啊,这第三个,嗯,然后呢,我们在 format 里面传入三个参数。 好,我们来看一下这里啊,这个 price 其实是四十九,但这里呢,我们多了冒号,点二 f 啊,冒号就表示需要使用格式啊,点二 f 就是 保留两位小数的浮点型啊, f 是 浮点型,所以这里是 四十九。点零零啊啊,我们再来看下一个啊,我们还可以使用呢啊,顺序啊,零一二,我们这里设成零零的位置是 q t t 啊啊,这里是一就是 item number 啊,二就是 price 来指定,我们可以来看它的顺序不同啊, 这里呢,我们还可以使用 key value 模式啊,在大括号里面呢,我们可以定义这个 key 啊, car name 啊,还有 model, 嗯,在 format 里面呢,我们使用啊, car name 等于啊,直接赋值啊,福特啊, model 等于 mustang, 可以看到啊啊, i have 福特 a 斯玛特转译字母要在字母串里面插入一些非法字母啊,就是要去使用反斜杠啊,类似假如说我们在这 t i t 这个字母串里面,这个字母串里面我们要插入这个双引号, 怎么办?因为我们是双引号来表示字母串,又要插入双引号,那我们就像下面一样啊,使用这个反斜杠啊,双引号来表示双引号, 所以我们这里有啊,反引号,单引号啊,就表示单引号,反斜杠两个杠就表示反斜杠啊,反斜杠 n 就是 回车换行啊,杠 t 就是 tab 啊啊,八进置啊,杠 o 啊,杠 x 十六进置。嗯, 我们来看括号里面的一些方法,括号里面有很多方法看啊, capitalize 啊,将第一个字母大写啊,刚才我们讲到的括号啊, index, 我 们搜索某个括号在的位置啊, 像前面我们讲到的 lower 啊, replace 啊,还有 strip 啊,还有 find, 像这种啊,从右边开始搜索啊,或者 find 啊,这里面还是有很多种不同的方法。好,这节课我们讲到这里, 我们继续看第八节,布尔值啊,布尔值就是两个,也是一个处,一个 false 啊,第一个字母大写 啊,在编程中经常会使用表达式啊,是真还是假来走判断语句啊,所以呢,我们在表达两个值的时候呢,就会使用布尔值啊,你看,十大于五,十等于五啊,等于。这里呢,表达是两个等号啊,十小于九啊 啊,一个是真啊,后两个是假啊,在 if 语句中呢,也经常会使用的啊,只要是比较啊, a 等于两百啊, b 等于三十三啊,比较 b 是 不是大于 a 啊,肯定不大于,所以它会走 else 啊。 嗯啊,还有评估变量的时候啊,我们可以看到啊,这里啊,布尔值扩起来啊,一个 hello 字母串啊,布尔值扩起来一个十五啊,这两个都是真啊,因为它里面有东西,所以是真啊,一样的啊,布尔扩起来 x 和布尔扩起来 y 啊,也都是真。嗯, 大多数值都是真,因为它里面有内容啊,但是呢,呃,空字母串啊,或者数字是零啊,或者说列表原组集合里面啊,都是空啊,只要有东西它就是真啊,空就是假啊,可以看到这个, 嗯,字母串啊,数字或者说一个列表啊,这三个都是真。嗯,刚才我们说到了,有些是假的啊,像 啊,列表字母串啊,集合啊,数字零啊, non 值,这些都是 false 啊,我们可以看到啊,布尔弗斯布尔诺啊,布尔零,空字母串啊,空的圆组集列表和集合啊,这些啊,都是 false。 对, 还有一种情况呢,如果我们在一个 class 里面写了呢,如果它的 let 指啊 let, 也就是它的长短,返回是零或者 false, 我 们这里定义一个 let, 里面呢,有一个自定义的一个 let 函数啊,返回是零, 那我们来实现它啊,把 let 抽象化成一个对象啊,我们来判断啊,这个对象是不是真假,因为它是 let 是 零,所以呢,它就是 false。 函数也是可以返回不尔值的啊,我们定义一个函数啊,函数里面用锐特返回处啊,我们来调用这个函数来打印出来,我们可以看到啊,它是处, 我们就可以根据这个函数返回的不尔值来执行代码。如果 e f 它啊等于啊含这个函数执行啊,它是处,那我们就打印 yes, 可以 看啊,确实是 yes 啊,我们还可以有一些内置的布尔值函数啊,例如 instance 啊,这个呢,就是判断它这个对象是不是某种数据类型啊, x 等于两百,它 x 是 整形,那我们用 is instance 来判断啊,先传入 x, 再传入整形,那它是不是整形啊?是整形 啊,所以是处好。我们来看第九节啊,算数呃,运算符啊运算符呢?嗯,像这种啊,十加五等于十五啊,所以用加号来表示。运算符呢,分七种啊,算数运算符、负值运算符、比较运算符、逻辑运符、 身份预算符、成员预算符和安慰预算符。首先我们看算数预算符,算数预算符就分加减乘除啊,这个冒百分号是余数,两个乘号是密啊,两个杠是那个整除啊,我们可以看一下三加四等于七啊,五减二等于三啊 啊二乘五等于十啊啊二除五等于二点五啊啊五于二啊,等于一啊,余数啊,五的二次密啊,等于二十五啊,五整除二啊等于二。嗯, 负值运算符呢,我们最知道的就是一个等号啊, x 等于五,那这里面还有呢,加等啊,减等乘等啊啊逆等啊,它的意思呢,就是 x 加等三呢,就是 x 等于 x 加三啊,其实就是一个简写啊,不用写这么长了 啊。减等啊, x 减等三就是 x 等于 x 减三啊,其他的都是类似。我们来看比较运算符,比较运算符啊,有六六种啊,第一个是等于啊等于,注意,这里不是一个等号,是两个等号啊, 不等于是叹号等号啊,大于小于大于大于等于小于等于。嗯啊,来判断它的真假 啊。逻辑运算符啊,主要有三个,一个是 and 啊,如果两个都为真,那他就是为真。奥啊,两个里面有一个为真他就为真 not 啊,就是真的 not 就是 假,假的 not 就是 真啊 啊,我们可以看一下啊身份计算符就是来判断他这个东西是不是一个对象啊啊不是呃,判断他的值是不是相等,是不是啊?同一个东西指向一块内存,用这个 e 字啊 啊,你看我把 x 等于 y 等于这个字母串啊,那 x 是 不是一字 y 啊?确实是它,它们俩指向一块内存啊,如果不指向一块内存,如果 x 负一个值, y 负一个啊,虽然值相等,但是不是一块内存,它就是不一样的 成员运算符,那我们判断它列表里面啊,有没有这个东西就是用 in 或者 not in 啊?我们来看 x 等于一啊, y 是 一个列表,那一在不在这个 y 的 列表里面呢啊就是用 in 啊,确实是在的啊, 按位运算符按位运算符就是位操作啊啊用这个 and 啊,这是 and 啊,这是或啊这个是非啊,这是易货。 这个箭头指右边就是往右移箭头指左边就是往左移啊,我们先来看一下,因为他是二进制操作,我们先把 a 设成十, b 设成四,我们看一下他二进制啊,是幺零幺零啊, b 是 零幺零零, 我们先对 a 和 b 啊取 and 操作, a 和 b 取 and 操作,那我们就上下比较啊,幺和零那就是零,零和一啊,也是零啊,一和零也是零,零和零也是零啊,我们看一眼 啊啊 a and b 啊是零,那我们再看 a 或 b 啊, a 或 b, 那 就是啊或操作,一和零是一啊,零和一也是一啊,零和零是零,也就是幺幺幺幺零啊幺幺零那就是十四啊, 非操作非操作,那就是把它反过来啊,幺零幺零幺啊,零幺零幺啊,就是负的十一啊。 还有 e 或操作啊, e 或操作,我们可以看一下啊,这两个先取啊货,然后再取 e 啊,也是十四一样的。 然后我们看这个位移啊,位移操作,我们把 a 设成五, b 设成负十啊,一个正数,一个负数啊,五的话就是八位零零零零幺零幺啊, 复十呢,这里是幺幺幺幺啊,零幺幺零啊,这里注意一下它是怎么来看这个复十的。是这样子,先把它看成十,十的话,就是, 呃,幺零幺零幺零零零幺零幺零幺零幺零,然后把它取反,取反了以后就是幺幺幺零幺零幺 零幺零幺的话,再加一就是变成了零幺幺零,这个表示的就是负十啊,我们把它又移一位啊,又移两位,我们看一下,先把 a 又移又移,就是在 这个地方加零,把一去掉啊,所以又移一位,就是变成了零零幺零啊,如果又又移两位,那就是把零幺去掉啊,那就变成了零零零幺。嗯,我们可以看一下 啊啊,这个幺零就是二啊,零幺啊,这个就是一啊又移,如果把 b 又移呢? b 这里又移呢,就是 补一,因为他是负,这里是四个一补一啊,这里补一右一啊,补一。补一以后呢,这里就变成一,挪过来就变成幺零幺幺啊 啊,两个一挪掉啊,这是零幺啊,就是幺幺零幺啊,幺幺零幺。这边是补一啊,可以看到一个是负五,一个是负三啊,左移啊,左移就是往左边啊,把这个去掉。嗯, 这个去掉以后呢,我们可以看到啊,这个去掉啊,把这边补零啊,啊,把这个一补,然后就变成幺零幺零了啊,所以呢,它就是十啊,这边左移一位啊,左移一位,把这个地方补一个零, 补一个零,那就变成了幺幺幺零啊,幺幺零零啊,就是负二十。 ok, 这节讲到这里, 大家好,我们来看第十节列表啊, python 的 列表就是这样子啊,中括号 啊,然后中间用逗号分割啊,列表就是单个变量中啊,存在多个项目啊。列表呢是 python 中存储数据集合的四种类型之一啊,还有三种呢,一种是圆组 cube 啊,集合 set, 还有字典 dictionary, 它们都有不同的性质和用法啊。列表呢就是用方括号来创建啊,我们可以看到这个列表啊,用中括号啊,中间用逗号分割,我们把它打印出来。嗯 啊,列表的构造函数呢,就是例子的括号啊,也可以用这个构造函数来创建列表,在创建的时候呢,里面也要用括号括起来啊,注意,所以这里是两个括号啊,你看一下 啊,列表项呢,它是一个有序的,可变的,并且可以重复的啊,列表呢也编入了,所以第一项呢是零啊,记住啊,第二个是一,嗯, 有序的呢,就是说它是有顺序的啊,它的顺序是不会改变的,加入新的项目的时候呢,就会放在列表的末尾,嗯,可变的话呢,就是说这个列表是可以进行增删改的。嗯 啊,重复呢,也就是说列表里面呢可以有重复值啊,我们看一下啊,这里面的 apple 和 cherry 是 重复的,嗯,也是可以的。 嗯,列表的数据类型呢,也可以是这种啊, string 类型,或者是整形或者布尔型,或者是啊混合的啊,有字母串,有整形,有布尔型,都可以的。嗯, 列表的长度呢,也使用这个 line 函数来获得啊啊, line 获得这个列表的长度,嗯, 访问项目的时候呢,就是用中括号来加字母啊,我们现在来访问第一项啊,啊,就是这个 banana, 因为它是从零开始的啊啊,复数呢,就意味着啊,从右边开始数啊,从负一开始,负二负三啊,那我们取负一项啊,就是这个 cherry, 嗯, 列表的范围呢,就是也是从开始到结尾的位置,然后中间用冒号啊,我们也是从二取到五,我们可以看一下啊,也拆瑞零一二啊,这是二三四啊,没有这个五,这个 melon, 所以呢,也是包括头不包括尾啊, 如果说我们要从头开始取呢,那这里呢?啊二这个位置就是空啊,直接冒号四啊就可以了 啊,如果我们取到尾呢,就是尾部是空啊,二,冒号五,嗯,我们就从第二开始取,拆尾啊,取到五啊负,所以的范围也是可以的啊,我们从啊负四取到负一,嗯,可以看一下 啊,负一负二,负三负四啊,从 orange 取到了 melon 啊,负一是不包括的,也是要头不要尾。嗯,检查这个项目是否重复呢,我们就是用这个 in 来关键字啊,这是个 list, 然后我们看 apple 是 不是在这个 list 里面啊 啊,确实在里面啊,更改值也是比较简单的,我们直接想更改哪个值就取哪个值的,所以然后把它赋值就行了啊,我们这样看一下就把 banana 给换掉了。嗯,也可以更改一个范围的值啊,一到三啊,这两个值,我们把它换掉啊,嗯, 可以看到,我们就会把这两个 banana 和 cherry 换掉。嗯,也是成功了,但是如果你看我们这里一到二只是一个值,也就是 banana 啊,但是我们这里塞了两个值啊,如果有新多出来的新项目,那我们就会插入进去啊,可以看到啊, cherry 放到了最后。嗯 啊,如果比较少,我们本来要替换两个值, banana 和 cherry, 那 我们只有个 watermelon, 那 就会把这两个值删掉啊,只是啊, apple 和 watermelon 插入项目呢,我们也可以使用一次的函数来进行插入啊。啊,我们这里指定二啊,插入到二的位置可以看一下。嗯,我们就会插到二这个位置啊,也就是拆瑞的前面零一二啊,拆瑞的前面把它插进去追加呢,我们就使用 a pen 的 方法啊,把它放到了结尾最后面。 嗯,我们可以看凹人值在最后面啊,我们还可以使用扩展啊,有两个 list 啊啊, list 一, list 二,我们把 list 一 进行扩展啊,也就是 list 一 和 list 二合并了,合并都到 list 一 里面 啊,一次的方法呢,不一定合并,这个是 list 啊, list 二,我们也可以是一个集合啊,用括号小括号括起来的集合 来看一下啊,也是成功了啊,我们可以使用 remove 方法进行删除啊,我们直接指定哪个值啊,把 banana 删掉啊,我们就是 remove 删掉了 banana, 或者我们也可以删除锁瘾,我们使用 pop 一 啊,这个也是锁瘾的位置,一是锁瘾的位置,我们也把 banana 删掉了, 或者说我们直接指定 pop, 不 指定锁瘾值,那我们就会删除最后一项,你看我们把 cherry 删掉了, 或者我们还可以使用 delete 这个关键字啊, del 这个关键字啊,来删除某一项,嗯啊,我们这样就把 apple 删掉了,我们也可以直接删除掉这个 list 的 啊,啊 del 这个 list 的, 嗯 啊,就删除成功了,我们还可以使用啊可莉尔方法来清空啊,把这个 list 进行清空啊, 可以看一下啊,这例子就是空的啊,我们使用 for 这个循环来便利这个例子的啊啊,我们 for x in 这个例子的,那 x 就是 每一项啊,来进行循环,我们把它打印出来啊, 我们还可以使用缩引,我们就使用这个 range 和这个 range 函数啊,通过缩引的方式来循环这个列表。首先呢,我们先用 range 取到这个 range 啊,得到这个 range 以后呢,我们用 i 在 run 值里面进行循环,然后呢,嗯,用这个缩引啊中括号杠 i 来取出每一个值进行打印。我们可以看一下啊, run 值就是零到三的一个 run 值啊, 我们还可以使用 y 循环,也是使用 line 函数来确定列表长度,然后从零开始来便利,也是通过缩引模式啊,我们设置好这个 list, 然后设好 i 等于零, 嗯, i 小 于啊这个例次的长度啊,那我们就执行下面的啊,打印这个例次的 i 啊,同时我们记得每次循环完 i 要加一,否则的话就会死循环啊,我们看一下啊,打印出来 啊,我还有一种编码方式, list comprehension 啊,如果当我们创建一个新列表的时候啊,我们只需要 a 这个字母的水果啊,那我们一般的写法就是这样子啊,这个 list 在 我们先创建一个新 list 是 空的, 那我们先循环这个 list, 循环 list 以后呢,我们判断 a 是 不是在这个里面啊啊,如果在里面,那我们就把它 app 到新的 list 里面去,然后呢我们打印一下这个新 list, 这是一种啊,标准写法,但是我们还有简变写法,简变写法呢,就是这个拎这个例子的时候呢,我们用中括号,中括号里面是一个表达式,然后是一个否循环, 否循环的时候呢,然后后面接判断语句,我们来看一下啊,还是我们先定义好这个例子,然后呢,我们先看否循环否 x 因这个否次进行循环,然后再看啊 a 是 不是在这 x 里面,如果等于处的话,那就把 x 拿出来, x 拿出来以后,我们这里还做了另外一步,把它大写化,把它进行了大写。你可以看到啊, apple, banana 和 mango 啊, 我们还可以对这个例子进行排序啊,使用这个 sort 方法排序的时候呢,我们可以看一下它是从小到大啊,啊, banana, b 啊, k 啊, m, o, p 啊,这样排序是一个升序顺序啊啊, 数字也是一样的,也是从小到大啊,二十三,五十六,十五,八十二,一百。嗯,但是 sound 方法呢,这里要注意,它是区分大小写的,所以呢啊,排序的时候按声序呢,是大写字母,是在小写字母前面的啊,我们这里看一下啊,大写字母啊, k, kiwi 啊, orange, 在 这个 banana 和 cherry 的 前面, 我们也可以降序排序,降序排序的时候,我们传入这个参数啊, reverse 等于 true 啊,也就是反向来排,嗯,降序的啊, pineapple, orange, mango, kiwi, banana 啊, 我们可以自定义这个排序函数,我们使用这个关键字 key 等于某个 function, 我 们可以看一下,这里 sort 啊,传入 key 等于 my function, 这里我们定义了自己定义了一个函数,这个函数呢就是 n 减五十的绝对值,也就是说谁靠近五十啊,谁 更小啊,我们排出来应该是五十啊,六十五,六十五,嗯啊,二十三,八十二啊,一百啊,是这样排出来的 啊,我们可以还可以把这个 list 进行调换顺序,使用这个 reverse 函数啊,把 banana 和 cherry 啊, kiwi 和 orange 调换位置, 我们看一下啊,调换了位置,同时我们还可以复制列表,在复制列表时候注意我们不能使用等号来复制。等号其实相当于 list 的 二是 list 一 的引用,它们俩其实指向了同一块内存啊, list 一 改变了话, list 二也会改变。 复制的时候两两种方法,一种是使用 copy 方法,还有一种是使用构造函数 list, 我 们可以看一下类似一点 copy 啊,赋给 list 的 二,这样就是两个不同的东西了,两块不同的内存啊,这种我们也可以使用构造函数啊, list 的 括号 list 一 啊,来创建 list 的 二,嗯, 还有我们可以对两个列表进行连接啊,连接的时候呢,我们就使用简单的加号啊,啊,一加二就可以把它连接在一起,你可以看一下三,嗯,或者呢,我们可以对二进行循环,然后呢把二里面的值取出来啊, app 到一里面去也是可以的。 嗯,同时呢,我们可以看到也可以使用上面的啊, extend 函数啊啊,用一来 extend, 二啊,把二里面的值放到一里面啊,好,例子,我们讲到这里。 好,接下来是看十一节原组。原组也是单个变量存储多个项目啊, 那原组在,嗯, python 中也是四个数据集合中的一个啊,另外三个 list 的 set 和 dictionary 啊,原组是有序的,但是不可更改的集合啊,原组就是使用圆括号,也就是小括号来写的啊,我们可以看一下。嗯, 原组项目是有序的,不可更改的,但是允许重复的啊,原组项目是有缩影的,第一个项目是零,第二个项目是一啊,有序的意思就是说它是有一定的顺序,这个顺序是不会变的啊,不可更改的话呢,就是说明它创建以后是没办法啊,增删改的。嗯, 允许重复就是说它可以有多个值啊,我们可以看一下这个啊, apple 和 cherry 是 重的 啊,原组的长度我们也使用 let 函数啊啊来取得啊。如果我们创建一个项目的原组,那后面就必须跟一个逗号啊,如果不跟逗号的话,它是会报错的。嗯, 所以它就认为是一个 string。 嗯啊,原组项目的数据类型呢,可以是任意类型啊,是 list 或者是整型啊,或者是布尔型或者混合的也是都可以的。 我们也可以使用这个原组啊啊, tuple 这个构造函数来创建啊,注意这里也是双括号啊 啊,在访问原子项目的时候,我们也是可以使用这个方括号啊,加数值这个缩引来访问。嗯,我们访问啊,第一项啊是 banana 啊,第零项是 apple 啊 啊负,所以呢,也就是说从右往后数啊,负一,负二,负三啊,我们现在访问负一项啊, cherry, 我 们也可以使用上面像例子一样的范围啊,从开始到结束,中间用冒号啊,二到五,我们可以看一下啊 啊,零一二, cherry 啊,三四五, melon 啊,五是不在里面的,所以我们这里是要头不要尾啊,所以只有二三四 啊,如果我们要从头开始呢,就把二省略掉,直接写冒号啊四啊,我们就是直接到第四个啊,如果要尾部呢,那我们就把五位省略掉,直接是二冒号啊 啊负,所以范围啊,跟上面其实是一样的啊,我们也可以从负四取到负一,嗯,看一下啊,负一负二,负三,负四,从 orange 开始啊, mango 是 没有的,也是要头不要尾, 我们也使用这个 in 这个关键字来检查它在不在啊,我们来判断 apple 是 不是在这个原组里面。 在更新原组的时候呢,因为原组是不可更新的,所以呢,我们要用一些其他的方法, 我们要将原组先转换成列表啊,转换成类似的 x 这个原组啊啊,我们先将它转换成类似的 y, 然后呢,我们把第一个原组换掉,把 nana 换成 ki 啊,然后再把 y 转换成原组看一下。嗯 啊,由于原组是不可改变的,所以也是没办法有 append 项目来添加原组的,所以呢,我们这里嗯,也是要先将它转换成列表啊,将 x 这个原组转换成 y 列表,然后用 y append, 最后再把 y 转换成原组。嗯, 我们可以打印出来看一下。 这里呢,我们还有一个办法呢,就是说啊,原组是无法添加元素的,但是他可以添加原组啊,所以呢,我们 x 是 一个原组, y 是 个原组,然后呢我们把 x 等于 x 加 y 啊,然后我们看一下 x, 这样就两个原组相加啊,联合起来了, 原组也是没办法删除的,所以呢,我们也要把原组转换成 list 啊,把 x 原组转换成 list y, 然后用 y 的 人幕函数将它删掉,再把 y 转换成啊 x, 我 们看一下。嗯, 或者呢,我们直接可以删除原组啊,用 d e l 这个关键字啊,删除 x 直接就删掉了。 同时我们还可以把原组进行解包啊,把原组里面的元素啊赋给每个变量啊,我们这里是一个负值原组,然后呢我们定义三个变量,三个变量的值呢是等于负值啊,这样呢,我们就将这个原组的值取出来,赋给每个变量,叫解包啊 啊,我们中间还可以使用星号啊,我们这里是有三个变量啊,但是这里面呢啊有五个值,这样的话呢,我们把前两个一对应,后面的就都给了这个 red 啊,我们可以看一下, 嗯,前两个一对应,后面都给 right, 我 们还可以把这个信号呢放中间,放中间的意思呢,就是第一个给第一个啊,最后一个给最后一个,中间的呢,就都留这个给这信号。这个变量啊,我们可以看一下啊, cherry 啊 cherry 啊, 同时呢我们也可以用 for 循环来便利这个圆组啊啊 x in 这个圆组里面,然后把每个圆组的项目打印出来。嗯 啊,我们可以通过呃缩引号啊,下拉列表啊,一样的啊,也是先取到这个圆组的长度,然后我们建立一个 range 啊,然后呢 i 在 这个 range 范围内,然后通过啊缩引啊取到每个圆组 啊也是一样,同样我们也可以使用 f 循环, f 循环也是用 line 得到它的长度啊,这个圆组我们先定义好,然后呢把 i 复成零, 然后 i well i 小 于这个圆组的长度,然后通过,所以我们打印出来那个圆组项目,同时记得啊,循环结束的时候要 i 加一啊,否则的话就是一个死循环。嗯 啊,圆组连接啊,两个圆组的连接,我们前面看到了啊,只要使用加号,直接就可以将两个圆组连起来 啊,原组的乘法就是说,我其实就是把这个原组啊再复制两遍或者三遍啊,可以看一下 啊。好,原组我们讲到这里。