从零开始学拍算,今天来聊聊拍算中一个看似简单但超级重要的功能,注视。首先来了解一下什么是注视。注视在代码中不会被计算机执行, 纯粹是写给人类看的,因为代码是写给机器看的语言,所以和语言习惯多少有一些不一样,同一段代码过了一段时间之后再看可能就变成天书了。 为了能够提高代码的可读性,会给代码加上注视。接下来来看怎么在 python 中添加注视。 python 中有两种方式添加注视。第一种,单行注视,使用简号键,后面被注视的内容在 python 中会变成灰色, python 解释器也会忽略掉这些内容, 他们存在的唯一目的就是为了帮助理解代码,当然这也是英语不好的同学能够作弊的一个小技巧。如果取的变量名不是常用的单词,那么一定要写上注示,提示自己这个变量是做什么的,这样下次阅读的时候就不再需要查询, 就能够知道这个变量是干什么的。井号键除了能够注视掉单独的一行文字之外,还可以在代码的后面添加注视,并且还可以注视掉暂时不用的代码,等到想用的时候再把井号键删除, 释放出这段代码就可以了。如果需要多行注视,也可以使用快捷键,在 patch 中选中需要注视的所有内容,按下 ctrl 加斜杠键就会注视掉这些代码,这样能够一次性在这么多行文本前面都加上井号。 注意,快捷键是 ctrl 加上斜杠,而不是反斜杠。斜杠键一般在 shift 的 左边,取消注视也只需要再次按下 ctrl 加上斜杠就可以了。这样注视只是将单行注视组合了起来。 其实在拍缝中没有真正的多行注示语法,但是可以使用多行复制串来达到同样的效果。使用三引号键, 在引号内写的内容都会被拍损解释器当作复制串,如果没有在代码中使用这个复制串,也就是说这个复制串没有任何作用, iphone 显示器就会直接忽略掉这个字幕串,只有点开代码的时候能够看到。用这样的方式伪装,让多行字幕串达到了多行注视的效果。因为是伪装的,所以这个注视方法注视的内容不会变成灰色,而是绿色。接下来重点来了, 好的注视要做到以下两点,第一点,修改代码时记得同步更新注视,错误的注视比没有注视更加糟糕。第二点, 注视需要明确的含义,毫无价值的内容放到注视里面是没有任何意义的。例如这行注视 fruits 是 苹果,虽然没有说错,但是直接看代码就能够知道,它并没有告诉我 fruits 这个变量装载的数据能够用来做什么。可以改成 fruits, 是 我最喜欢的水果,让代码变得更加清晰易懂。无论是上个视频的变量名、取名规则,还是这个视频的注视, 都是为了养成良好的编程习惯,让代码变得更加清晰易懂,提高代码的可读性,同时也提高了代码的重复利用性。相同功能的代码不再需要反复写,可以找到原来写好的,直接复制粘贴就可以了。
粉丝159获赞326

那么 break 的 话,它是 python 中用于控制循环流程的关键字,它用于立即终止当前的循环并跳出循环体, 可以用于 for 和 will 循环语句,那么 for 和 will 循环语句我们是刚刚学过的,那么在这个语句里面,我们之前是给他说过,如果说一般情况下它为 false 以及我们这个 for, 它把所有内容都辨认完毕之后,那么它就会按照正常情况下自动退出。 但是如果说我们是在这里面遇到特定条件,需要让他主动退出的话,我们在这里面就要用到 break 语句了。 先来看他的基本语法,在维欧情况,在维欧条循环语句里面,在这里面我们来执行循环代码体,如果说我们在这里面用语法进行判断,判断某个条件 我们是需要让他立即退出的话,那么我们就来在这里面使用 break, 那 么使用完 break 之后,那么他 break 后面的代码就不会执行了,整个循环体他的这个代码也就都会终止,然后呢他会继续往下来执行我们后面的这代码, 而这个 for 循环也一样。 for 循环如果说满足某个条件我们要执行当前这个 break 语句的话,那么它这里面没有便利的元素,它也不会再便利了,它会直接跳出当前的便利循环,然后继续继续执行它后面的代码, 那么我们可以来做一个代码市历,这个代码市历的话,就是我们规定当 count 等于三是循环结束,那么我们就先来写一下,首先我们在这里面先来规定 count 等于零,然后我们写一个未有处循环,那么这个这个地方 我就这里面专门写一个处,那么这样的话如果说我不去做任何处理的话,那么它就是一个死循环。我们先来打印一下当前的 count, 那么接下来我要求是当 count 等于三的时候,那么结束循环,此时的话我们先让当前的 count 去加等于一,完毕之后我们此时就来判断,如果说当前的这个 count 它等于等于三, 那么我们就可以来使用这个 break 语句了。那么使用完 break 语句之后,我们再来看一下它当前这个 will 它能不能成功退出,直接来运行。 运行完毕之后,我们看到他这里面是打印了零一二,那么这个三没有打印是因为当 他等于二的时候,二加等于一,那么他此时就已经等于三了,已经等于三,那么他就满足我们当前这个条件了,满足这个条件他就直接跳出当前语句,那么跳出当前语句之后,他这个处他这他他就不会再次的执行 v o 处来打印这个内容。三, 那么我们在后面再给它最终展示一下, 那么然后我们来看一下它最终这个 count 是 否等于三运行, 我们在这里面我们看到它最终这个 count 的 值就是等于三的,那么这就是 break 语句。在我们这个 will 循环还有 for 循环的处理方式下面还有这个 for 循环这个处理方式,我们也同样的来写一下, 那么在这里面我就先来打印他这个 i 这个值,那么打印完之后就来判断,如果说当前的这个 i 他 是已经等于等于三了,那么此时我们就可以来终止当前这个语句,不让他把最后的这些内容都给便利完毕了, 上面这个我们先注视点,然后我们就直接来看这里的内容运行 和运行完毕中,我们看到这里是零一二三,当 i 等于三的时候,它辨认到第三个元,它辨认到值为三的这个元素的时候,我们就判断我们就可以判断要结束当前的这个 for 循环变量语句。 了解完 break 它的使用方式之后,下面我们来看一下它的注意事项,注意事项一共有两个,首先第一个就是 break, 它只会终结 距离他最近的循环,那么距离他最近的循环,比如说我们在这个负循环里面,如果说我在这个负循环里面,我再加嵌套一个负循环,那么此时在这个循环里面我使用 break 语句,那么他只会把里面嵌套这个循环给它终止掉。 第二点就是如果说中指的循环中句中有可选的 else 语句,那么它也会跳过该语句。我们上一节课学 weu 循环的时候有说到过这个 else 语句,如果说它是被 break 影响的话,那么它后面这个内容它就不会再产生, 那么现在我们就用代码来看一下,这里面有一个 for i in range, 然后它紧接着就有一个嵌套的 for 循环,那么我们就用它来看。我们的第一个注意事项就是指中指距离它最近的内容, 这里面我们规定让它从一到三来便利,然后我们再次的里面再加入一个 for 循环, 这里面我们填一个五,然后呢我们先打印一下,我们就打印一下这个 i, 还有这个 g 这两个值。 打印完毕之后,我们做一个简单的判断,就来判断当前这个 g 值,如果说他大于他等于等于三的话,那么我们就来终止当前的循环语句。那么我们来看下当我终止完这个循环语句之后,他是否是指终止当前的 距离他最近的这条循环语句,而不是说把所有的语句都给终止掉,现在运行 ok, 我 们看到这里面从幺零幺幺幺二幺三,这里的幺零幺幺二幺三我们应该都能理解。首先是这里面这个值 i 它出使等于一,然后我把这个出使等于一的情况下,我再进行了这个 for j in range 的 变例循环, 那么此时这个一它是这个 i 的 值是不变的,然后这个 j 值它是在不断变化的,它是从零 变化,他是从零变化到一,变化到二,最终变化到三,而当他变化到三的时候,这里面进就进行判断了,就符合当前这个条件,那么这里的 g four g 这个变率循环就停止了,那么终止完之后, 那么我们外层这个循环他没有终止,所以说此时这个 i 他 就会变成二,他变成二的话,他会再次进行一个循环便利,那么此时这个 g 的 话会再次的从零开始,然后到三到三,这里面再次进行判断,终止了里面这个循环, 然后依次类推,直到他的这个循环便利完成,那么他整个系统才结束。 那么这就是第一个内容,就是 break 只会终结距离它最近的循环。然后来看第二个,如果终止的循环语句中有可选 else 子句,那么也会跳过该子句。 这里面我们同样来看一下它这个内容,这边我依然是写一个 count 等于零,然后我们依然是写一个 will 处, 接着来打印一下当前的 count, 打印完毕之后让当前的 count 加等于一,接着我们就来进行判断。语句,如果说它等于等于三的话,那么我们就来 break, 那 么 break 完毕之后,我在后面再加一个 else 语句,那么这个 else 语句的话,那么实际上因为它是被 break 而终止的,所以说当前这个语句 不会被输出,那我们来看一下它最终是否能够输出这个语句,实际上它是不能输出的, 我们看到它这里面是只有零一二,最后整个 will 循环终止了,它这个 else 语句也没有被输出出来。 好,以上的话就是关于 break 它的注意事项,那么关于 break 的 内容我们就说到这里。

当我 python 的 测试用力有一些我想要跳过,比如说这个功能暂未实现,或者是暂时不做,后面也有可能做的话,那我这个测试用力我就暂时不去执行,那我那我怎么样让它暂时不执行?我可以用 i tist 点 mark, 点 skip 这个装饰器, 然后这里面呢去给他一个原因,或者说叫备注,备注一下这个测试用力他为什么要跳过?不知行。然后如果我想要跳过整个类的话,我就在类的定义上面去加一个装饰器, 这样我运行的时候,咱们看一下这个方法跟这个类整个都会跳过,它只会执行,没有标记。 skip 的 执行的结果可以看一下只有一个 pass 了,然后三个都跳过了。然后如果我们是有条件的去跳过的话,比如说我 这个测试用力我只有在 linux 环境上去运行,或者是说这个测试用力,当我是 windows 系统时候,我不去执行它, 当我是 python 版本比较低的时候,我去运行这个词使用里的话,那我要怎么操作?我可以用这个 pytest, 点 mark, 点 skipif 这个装饰器,这个装饰器第一个是我可以写一个条件,这个条件可以是啊,不等于 linux 是 这样子写的。 然后第二个呢是我也写一个原因,或者叫备注,这样我能更清楚的知道这个测重力为什么不测。然后这个是说当我们的系统是 windows 的 时候呢,也不去执行下面的这些, 然后这个跳过的原因就是说当我们的 python 版本太低的时候,不是三点八加的时候就跳过, 那我们可以运行一下这个文件,看一下它的结果,然后它的结果就是说前两个都跳过了,最后一个 pass 了,因为我的这个环境是大于三点八的,所以最后一个它就执行了。

小伙伴们大家好,这节课呢,我们来说一下 try accept final 结构。欸,这里呢,又跟了一个 final, 上次呢,我们是跟了一个 else, 那 这个 final 跟 else 又有什么区别呢?咱们一起来看一下描述。 它说 try accept final 结构中 final 块儿啊,无论是否发生异常都会被执行,通常呢,用来释放 try 块儿中申请的资源。 哎,跟 else 相比不一样, else 是 什么?是不发生异常的情况下才会执行 else 一 旦发生异常, else 就 不会再执行了,而这个 find 呢,不是无论是否发生异常,它都会被执行。 ok, 那 我们看一个小的测试案例,这个呢,我们先来阅读一下这段代码,然后自己再写一下啊,还是 a b 两个数值的输入,然后做一个除法操作,然后呢,呃, accept, 来监听一下它的可能发生的意外,对吧?然后 else 来输出最终的结果。 后面呢,又跟一个 final final 呢,是随便做了一个打印,最终程序结束这段代码啊,我们先来写一下,然后我们再去说它的整个执行过程。好吧,回到这边,咱们新建一个文件,就叫零五吧,然后 except exception, 点 p y, ok, 然后在这里呢,我们还是老样子啊,首先一个 a, 然后 input 一下,呃,给一个文本,呃一个数字 a, 然后再来一个 b, 再来一个数字 b, 好 吧,然后我们 c 的 结果呢,是要做这个 a 除以 b 的, 对吧?当然呢,这个 a 除以 b 啊,还是老样子,咱们把它变成一个 float 类型,然后跟一个 a, a 除以 b, 那 这个 a 和 b 呢,可能会发生意外,所以我们跟一个 try, 后面呢,跟一个 except, 那 咱们就 zero 吧,好吧,就是不能为零。那这里的文本咱们改一下啊,就是除数不能为零。好,后面呢,我们这里的正常情况下,你还可以再跟一个 except, 然后 accept 呢,可以是 base accept, 然后按 s 把这个异常给打印出来,对不对?好,正常,之前我们讲了可以跟一个 else, else 当中呢,我们就输出一个 a, 除以 b 的 结果,也就是 c, 然后后面我们再跟一个 finally, finally 后面呢,我们可以做一个打印, 不管是否发生异常,都会执行的一个文本打印,然后最终呢,我们再跟一个 print, 这个 print 是, 其实我们在换行,大家也能感受出来,它是完全脱离了程序。呃, try catch 这个 try accept 这个模块了,它是完全独立的程序之后的结果啊。 好,这段代码呢,就与我们这里所看到的基本是一致的,除了打印的文本信息不同呢,其他的都一样。然后我们主要关注的是 else 和 finally, 这个 else 呢,是当没有发生意外的时候,就没有发生异常的时候才会执行,它发生异常就不会执行了,而这个 final 不是, 它是不管发生异常与否都会执行。那咱们演示一下啊,运行一下,我们说一个十, 再数一个十,好,可以看到计算结果为一点零,说明我们 else 执行了,对吧?然后不管事物发生异常都会执行。说,说明我们的 final 也执行了。当然呢,呃,程序继续执行呢,是脱离了这个程序块,所以它也执行了, 这是没有发生异常的执行状态,如果我们让它发生异常,看一下又是什么样子啊?我们来个十,再来个零,一回车,你会发现它首先触发了 accept 啊, accept 对 吧?然后除数不能为零,之后呢,又触发了 finally 的, 不管是否发生异常都会执行,最后呢是程序继续执行,没有触发 else, 对 不对啊?没有触发 else, 这个就是 finally, 就是 不管是否发生异常,它都会执行的一个代码。 好,这面执行结果呢,也放在这里了。那有同学可能问了老师, finally 的 作用是什么呢?还记得我们刚刚上面这句话吗?就是通常我们用踹块儿来,就是通常我们用 final 来释放踹块儿所申请到的资源,比如说我们一个最常见的应用势力啊, 读取文件,那 finally 呢?要保证文件资源的关闭,就是你是否读取成功啊,读取失败也好,读取成功也好,都要将这个资源释放掉 啊,如果这个资源不释放,就有可能一直占用这个资源,会导致内存泄露的。所以无论我们对于文件的读取是否成功和失败,都要将这个资源给释放掉。当然呢,我们现在还没有讲这个文件管理的代码, 没关系,我们先用着,先给大家展示这个应用场景。好吧,那这边呢,我们关掉它,新建一个文件啊,咱们还用零五来进行做案例啊,然后咱们用一个 file, 点 p y 啊,就是或者说我们再加一个吧,重命名一下,然后 file, 嗯, exception, 好 吧, 呃, t i o file exception。 好, 然后在这里呢,我们来实现。刚刚我们看那个代码,首先呢,要读取文件比较简单啊,我们直接通过,比如说创建个 f, 通过 open 方法来进行提取这个文件就行了,这里呢放一个文件地址,咱们可以这样啊,在这个盘符下呢,新建,哎,什么东西啊,不用管它啊,在这个盘符下呢,我们新建一个文件 啊,不能是 excel, 我 们就新建一个 txt 文件吧,好吧,比如这个文件叫 a 点 txt, 这里呢,我们随便写一个 hello word, 随便写个文本, 然后呢,我们这里就可以读一盘下的 a 点 txt, 然后后面第二个参数呢,我们加一个 r, r 代表读取的意思,好吧,然后这个呢,就是我们的目标不只是打开文件,这里呢,我们加个注,是吧, 这是打开文件,我们的目标呢,不只是打开文件,哎,关掉它啊,我们还要去读取文件,读取文件呢,我们用这个 read line, 就是 读取一行的文本,里面就一行,所以我们读取一行文本,把这个读取的文本呢,可以复制给 content, 好 吧。然后通过 f 点儿 有一个 read learn 的 方法去读取。好,后面我们加个注,是读取啊文件内容,然后将读取的内容呢,我们可以打印出来,对不对?当然这个打印呢,我们可以放在 else 里面去进行操作,所以这里呢,我们就来一个 try 放这里边,好吧。然后后面可能会产生异常,所以我们跟个 accept。 这个异常呢,咱们就 file not found error 就是 没有找到文件的异常,我们直接打印一个文件不存在,还可以再跟一个 accept, 然后跟一个 i o 异常,就是文件读取可能会产生异常,咱们再跟一个 accept, 再跟一个 ex。 呃,这个呢,咱们就用 base 吧, base exception, 然后按下一个 e, 未知异常。好,三种异常我们都处理了,要么文件不存在,要么读取文件异常,那大家一看到就知道了,对吧?然后再跟一个 else, else 里边呢,我们将读到的结果给打印出来, print, 我 们打印这个 content, 最后呢,我们再跟一个 final, final 里干啥呢?刚刚说了很重要的一件事,就是不管你读起成功和失败,都要关闭这个文件,因为你上面打开了,下面就得关闭,所以我们可以 f 点 close 来关闭文件, close 来关闭这个文件,看到了吧?啊,最终结果呢?这个其实就完事了啊。最终 print, 我们打一个程序运行结束吧,运行结束可以吧?好,那这个代码咱们就写完了。呃,首先我们正常来运行这段代码呢?正常运行,文件存在情况下,能把数据读出来,你可以看到这面打印了一个 hello world, 这样吧, 咳咳,好,在这里呢,我们来一个提取文件内容冒号, 然后我们再来运行,大家就看的更清晰了,读取的文件内容呢?是这个 hellword, 就是 我们的文件中所写的,然后程序正常运行结束,这个代码没有任何问题,对不对?然后这也关闭了,我们其实可以在下面做增加一个打印, 不是这个,而是文件关闭。好吧,只一旦文件关闭,这个执行了,说明没有任何问题。 看,读取完之后,文件关闭,然后程序运行结束。是不是?如果我们让它发生异常,我们把这个地址给它改错了,异,后面的冒号给它删掉,那这个时候我们再来运行,你会发现它就会打印一个异常,文件不存在的异常看到了吗? 文件不存在的一个异常啊,因为我们已经把这个文件地址给它弄错了,但是不管这个文件运行的时候是否产生异常, 都会执行这个,呃,就是我们都会执行这个 close 这个对应的操作,当然现在打印了一个 f close, 这个出现了一点问题啊,那我们不用管它,其实我们就是一个释放资源的操作, 大家知道它执行了一定会释放资源就可以了。好吧,因为关于 file 的 这个代码我们现在还没有讲,就是文件操作代码还没有讲,那正常情况下呢,我们一般都会这样去操作, 就是文件读取成功之后要把它关闭,文件读取失败也要把它关闭,当然文件读取失败,可能这个 f 创建也会失败。这个咱们后互化暂时先不说的目标就是要告诉大家,这个 find 里里边一定会执行,这个里边一般呢都是用来做释放资源的操作的场景比较多。 ok, 这个呢,就是我们的呃 try catch, 呃 try accept 加上 find 结构, ok。 然后我们来看一个案例 如,呃,如下关于异常机制的代码执行结果,正确的是,首先 c 等于三除以零,零是什么?零是除数,那除数不能为零,所以它不会执行,但是它会执行,对不对? else 也不会执行,因为发生了异常,但 final 也会执行。 print 是 脱离了整个 try try 的, 所以它也会执行,所以正确的打印应该是会打印二和四和五二四五。那么符合二四五的正确答案只有 b 答案对不对? ok。 那 关于 try accept final 结构呢?我们就先给大家说到这里,感谢各位聆听,咱们下节再见。

欢迎回到 python 零基础入门课 python 基础一共十五课,今天是第三课的第二部分, if 条件语句。开始前,照例先领本节的通关线索。这一页建议你暂停看一下,把这几个问题装进脑子里,再去听课,效率绝对翻倍。记住这些核心线索,现在进入正题。在 python 里, if 条件语句就像是一座有着严格门禁的庄园。首先是大门,也就是 if 条件这一行, 这里站着一位门卫,他的任务就是核验你手中的通行证,也就是那个条件表达式是 true 还是 false。 然后是专属领地,也就是下面这些缩进的代码。只有当门卫放行,也就是条件为 true 时, python 才会进入这块领地执行代码,否则才会直接绕过这块区域继续往下走。举两个具体的例子, 比如第一种情况,二十岁大于等于十八,通行证有效,所以 python 顺利进入庄园,打印出了欢迎进入。而第二种情况,年龄十五岁,条件不满足,门卫直接拦下 python, 跳过了缩进的代码块,只打印了最后那句,安检结束。这里有一个核心点,必须记住, 缩进是 python 识别领地范围的唯一方式,千万别写歪了。有了这个强大的工具,我们的加法计算器终于可以升级了。逻辑很简单,第一步照常获取两个数字。第二步关键来了,让用户输入运算符号, 比如加号、减号、乘号或除号。第三步,写下这个 if 语句,如果 o p 等于加,就执行加法计算。 我们运行验证一下,输入十二十,再输入一个加号,程序精准的识别了符号,并给出了结果三十。既然加法能行,那其他运算也不在话下,只需要多复制几份,分别判断减号、乘号和除号,这样一个全功能的四则运算计算器就诞生了。但是这种写法真的完美吗?思考一个问题, 当用户输入加号时,程序执行了第一个加法判断,这没问题,但在那之后, python 还会傻乎乎的去检查后面是不是减号, 是不是乘号,是不是除号。虽然结果没错,但这带来了两个问题,第一,浪费资源,明明已经找到答案了,为什么还要继续找?第二,语义不清晰。这四个条件其实是互斥的,就像选择题的四个选项,你只能选一个,但写成四个独立的 if, 看起来就像是多选择题。 那么有没有一种机制能告诉 python, 只要找到一个对的,剩下的就别看了?当然有,这就是 if l 幺 e s 结构 a life 的 意思就是,否则如果对比一下这两种写法, 如果是四个独立的 if, python 必须把每一行都跑一遍,就像一个强迫症患者。而用了 i live, 一 旦第一个条件满足了, python 就 会立刻跳过后面所有的检查,这不仅效率更高,而且逻辑非常清晰,这就是一个标准的多选一。 最后,如果你的选择题只有两个选项,比如说是或否,那连 els 都不需要了,直接用最简单的 ifelse 结构,如果条件成立,走这条路,否则走那条路。这就是编程中最常用的决策逻辑, 掌握了它,你的程序就真正拥有了智能。虽然我们的计算器现在能跑能算,看起来很完美,但其实它还藏着一个致命的隐患,如果用户在做除法时不小心输入了零,程序会立刻崩溃。下一节我们就来学习如何给计算器装上防弹衣,让它能够优雅的处理这些意外错误。 好知识点讲完了,但光听懂了还不够,能输出才是真学会。现在点击底下拍 buddy 这个机器人,用你自己的大白话把刚才的领取的线索回答清楚,然后点击提交测评,让 ai 看看你的笔记到底对不对,别偷懒,现在就去试试。

拍脏从零开始学第二章二点七循环控制语句欢迎大家来到拍脏编程课程。上一节课我们学习了循环语句,循环语句就像没有送完的快递就会一直跑, 但是有时我们需要让它提前结束循环或者跳过这次循环。所以今天我们学习 break 和 canter new 的 作用。看到 break, 我 们知道它是中断的意思,我们可以就有一些思路知道在循环语句中它可以帮助我们去终止循环。 canter new 在 编程语境中特指跳过当前轮次,也就是结束这一轮的循环,继续循环的意思。可能有的同学还没有理解,没关系, 今天我们就用生活中的例子去理解这两个关键字的。假如我们在玩数字卡牌游戏, 首先我们定义了 numbers 的 列表,它包含了五个整数,一五、十七四,这些数字就是排队里的牌。用 for 语句循环 numbers 列表中的元素。在循环里使用列语句判断 number 是 否等于七,就是相当于我们在排队中没有摸到数字七,那么 print number 这条语句就输出这条语句中的 numbers 的 值, 如果摸到七的话,那么就输出七后就立即结束循环语句,就不用再摸牌了,那么我们手中就有一五幺零七这些卡牌。 我们再来看 while 循环中使用 break 语句怎么终止循环的,我们来看到这个代码中的 count 的 变量,将它设为零,再使用 while 给 count 设条件,如果 count 小 于五,就执行下面的 print count 语句,如果大于或者等于五的话,就结束了这条循环语句。但是我们想提前终止这条语句,我们就可以在里面再加一个条件语句, 如果 count 的 值等于三,那么就输出循环,终止后就终止循环了,所以就只输出了零一二三这些数字后就不再执行循环了,所以这里就不再讲述了。 content 它的作用就是结束这一轮循环,继续执行下一轮循环,它不会像 break 语句去把整个循环结束掉。我们来看如何在 for 语句中使用 content 语句。我们以统计全班及格成绩为例, 如果成绩达到六十分就统计及格,如果成绩没有达到六十分,就跳过不统计。下面是代码实现的例子,我们可以看到我们定义了 score 的 列表, 里面是四个学生的成绩,五十九,六十五,一百二十八。使用 for 语句去执行每个学生的成绩,每次循环都会取一个值,在循环语句中添加一个判断语句来判断成绩 score 是 否小于六十, 如果成绩为小于六十,那么就不会执行下面的 print score, 成绩不及格套过统计,反之成绩大于等于六十,那么就执行 print score, 成绩及格,那么这个代码成绩及格的是六十五和一百。 再来看到 control 循环中寻找基数,还是定义 control 变量,初始值依然为零。在 control 语句中添加判断语句, if control 于二等于零,这条语句是用来判断是否为偶数, 因为 control 的 数值为零,那么 control 于二的话等于零,那么零就是偶数。就先执行 control 加等于一,那么 control 就 被复制为一,再执行 control 就 为一,因为一小于五。进入循环开始判断是否为偶数, 一于二等于一,不符合判定条件,所以判定条件为基数,执行 print 语句输出 count, 再执行 count 加等于一,依次循环,直到 count 大 于等于五,结束循环。同学们可以自己计算一下,看看最终结果是多少。最终的结果会放在视频的最后,最后做个对比。 break 满足条件会停止整个循环用于找到目标后立即退出。 knee 扭,满足条件会停止当前循环会保持循环继续,用于跳过特定的条件。总结, break 是 结束整个循环, knee 扭是跳过本次的循环。下节课我们将学习字母串拼接与格式化,祝同学们学习愉快!

这节课我们来说一下自定义模块,那么自定义模块我们之前是已经使用过了,它的主要情况是在我们使用一些官方库的时候,如果说有些官方库它没有我们的需求的一些模块的话,那么我们就可以自己来写一些对应模块。 程序员自己开发一些可重用的代码,如函数类和变量,通过将代码组织到模块中,那么就可以提高代码的可维护性和可重用性。那么实际上这种情况下,就是我们开发过程中,我们可以自己写些工具类,然后自己来根据当前这个业务来给他使用, 那么现在我们就来主要说一下他的注意事项。第一个方法,第一个情况就是在我们使用下划线,两个下划线这样 name 的 时候是可以避免模仿使用的,那么这句话怎么理解?我们先来写一个错误的示范,那么这个错误示范的话,我们就给它取名为 bad model, 在这里面我们给它取名为 badmoto 这样一个模块,那么在这个模块里面我给它写一个方法, 这里面依然是我们写一个简单的打招呼方法,然后让它返回一个当前用户名,然后给它输入一个你好比如说 hello, 然后把当前的参数给它写进去, 我会这样写的话就完成了,然后此时我们这个时候在这里面再给他做一个测试,我们再来打印一下,对,我们 print, 然后 great, 然后这里面我们就输入一个 tom, 那 么输入完毕之后,我们在这边简单运行一下,看一下我们当前这个程序,那么运行,运行完毕之后,我们看到这里面输入一个 hello tom, 那 么我们在运行当前这个页面的时候,因为我们在这里面定一个函数,然后我们再来使用它,那么它就会自然而然的这样输出内容, 那么接下来我要把当前的这个模块内容引入到当前主模块,那么我在这里面引入一下,这里面我们就直接使用。 我们这里面就采用最基本的第一种方法,就直接把当前这个模块来引入一下白的 model, 我 们引入一下,那么这里我们记得 ctrl s 保存一下,那么引入之后我们在这里面就来使用 模块中的功能,那么这个功能的话就是我们这个 code 函数,在这里面我们用一个 message 来给它接收一下,然后我们调用当前这个模块,然后使用它这个 code 方法,那么这个 code 方法里面我们输入一个 alice, 那 我们输入完毕之后,我们再来打印一下当前这个 message 消息, 那么此时我来运行我当前这个页面的时候,那么理论上来说我们的预期应该是只需要来打印出一个 hello alice 这样一个内容,那么但是我运行的时候我们来看一下, 我运行完我运行的时候,实际上它出现两个内容,一个是除了我们自己预期的这个 hello i s 之外,它还会把之前我们做测试这个 hello tommy 也给它运行过来。 那么遇到这种情况下,我们需要怎么做才能够避免这种情况?那么第一个想到就是我们直接把它可以注视掉,那么这样的话是也可以,但是呢我们是有一个更好的方法的,我们先来看一下更好的处理方法是怎么制作的,在这里面我们就先来建一个新的模块, 这里面我们给它取名为 good model, 那 么在这个页面里面我们再来写一下,我依然是写一个普通的 great 函数写到这里面,那么写完之后我们再来写一个函数,这个函数我们之后会用到,所以我在这里面就给它先写上。 好,我们再打印一下,那么这里的内容的话,我们就是直接 return 返回,那么这个返回的内容的话,我们在这里面就直接给它输一个 i, 然后一个逗号,接着把当前这个参数传进去。好,那么这样的话我们就写了两个函数了,那么接下来我需要对这两个内容做一下测试,那么测试的话我们先来 这里面输入一下,这里面我们是模块测试,那么模块测试的内容就是来检验一下当前的这个 grace 参数,那么我在这里面就直接打印一下 print, 然后来调用当前的 grace, 然后把当前的 tom 这个参数给它放进去,然后运行。 ok, 那 么这样的话它这个输出符合我们的预期。那么接下来如果说我还是按照这个当前这个格式,我在这里面再引入一下当前这个 good models 这个模块,那么后面这个使用的话,还会出现当前这个 bad model 一 样的情况, 所以说这个时候我们就需要使用一个,我们在这里面使用一个 if 判断语句,然后在这里面下划线,然后 name, 让它判断它是否等于 下划线,没下划线,这个下划线是两个下划线,我们要注意一下,然后判断如果说他符合这个要求的话,我们再来运行当前这个内容,那么这样的话我们来运行一下,看一下他当前我们运行当前这个页面他是否可以做测试, 它是可以做我们这个测试内容。那么此时我在当前这个主页面里面,我引入一下当前的这个 good model, 我 们直接使用 from good model, 然后是 import 把它所有的这个函数都给它引进过来, 那么此时我再来 print 打印一下,那么这个四 print 打印的话就是 great, 那 么这个 great 是 当前这个 good models 的 的这个函数,这里面我就输入一个 word, 好, 那么我输入完这个内容之后,我们现在来运行一下, 在这里面我点击运行,运行完之后我们看到它与我们之前的情况不一样,它这里面是只出现一个 hello world, 也就是只出现了当前这个语句,而没有出现我们之前这个 good model 这个模块里面的这些测试模块。 那么这就是我们使用了这样的一个下划线 name 这样的这个参数之后它的区别。那么现在我们就主要来说一下当前这个参数它的主要作用是什么。那么在说明之前,我们在这里面先做一个简单内容,这里面我输一个导入模块, 然后给它命名,然后我们来看一下这个导入模块,我们在这里面到底会输入什么内容,我们在里面运行一下,运行, 然后我们就看到了他这里面导入模块,他输入的这个值就是我们在里面判断他是否等于的这个值。那么接下来我们再来看一下我们在当前的这个慢函数这里面,此时我在这个页面里面,我再来运行一下这里面,接着他这里就是主页面了,主页面这里面 我在这里面再来使用一下, 然后此时我再来运行看一下他们之间的区别。我在运行 运行完毕之后,我们来看到当前下面这是主页面的运行的状况,那么主页面它这里面的这个 name 也是慢函数,但是此时我们再来看一下我们这个导入模块,我们导入模块之前做在当前它本身这个模块里面运行的时候,它输出的是下划线,然后慢,而我们接着它作为导入模块的时候,那么此时我们再来判断它当前的这个 它当前这个内容的话,那么此时它就变成了 good models, 也就是它当前这个模块的名字。所以说 我们的这个 name 它就是 python 中的一个特殊的内置变量,它的值取决于代码执行方式,这个变量在模块导入和脚本执行中起着关键作用, 它当作模块被直接执行的时候,那么它就是这个下划线 may, 而如果说它是作为这个模块被导入的时候,那么此时它这个值就变成了它对应的模块名称了。 正是因为有这个区别,我们才可以在做测试的时候,通过来判断是不是直接在你这里面直接运行的,然后来判断是否要执行下面语句。如果说他不是的话,他作为导入模块的话,那么他这个名字就不等于我们当前的这个下划线慢了, 那么自然而然这里面也就不会来执行他这里面对应的语句。好,那么说完了第一个功能之后, 我们再来看一下它的第二个内容,第二个就是下划线,这样一个 o 是 可以控制 import 新导入的那些功能,就是来控制哪些内容是可以被导入的,而且是在我们写用这种方式来写入的时候, 这个怎么理解?我们就直接来看代码,这个代码的话还是之前那个代码,只不过它这里面多了一个内容,那么这个我们就直接复制一下。还是回到我们这个 good models 这里面,我们把它给复制一下,然后把它给注视一下, 那么这里面就是给它添加完这个内容的话,就是当我们再次使用 from 模块,然后是 import, 然后星号这样的内容的时候,那么它导出的内容就只有在我们这个这它这里面标记的内容才会被导出,而它没有被标记的,它是不会被导出的, 那么我们在这里面先给它简单的,它是被注视情况下,也就是不起作用的,那么我们再回到主页面, 在这个不起作用的情况下,那么此时我可以这里不仅有 great, 我 还有一个 high 参数可以使用,那么这个 high 参数的话,我给它取名为 tom, 然后我们来运行一下, 在这里运行,运行的话,这里除了这个导入模块,这个导入模块看一下,因为我们这里没有 ctrl s 保存一下,我们在这里保存完之后,我们这次再来运行一下, 写完之后 ctrl s 保存一下。好,那么此时我们看一下这里面一共是两个内容,一个是这里还需要打印一下,不然的话它这里我们显示不出来。 ok, 然后再来运行一下。 好,那么现在我们看到了我们在这里面这个主页面,它是可以使用 great 还有这个 high 两个参数的,然后这两个参数它都是 good model, 这里面的内容,那么此时我在这个 good model 里面给它起用这条,起用这条指令,那么这个指令的话,就是 只有我们当前这个 great 函数它是可以输出的,而这个 high 这个函数它是不可以,它是不可以输出的, 那么此时我们就可以直接看到它这里面就是已经在这里爆红这个黄线了,然后它这边显示未定义, 这个未定义的话就是我们当前这种导入方式它是不可以使用当前这个 high 函数的。好,那么这就是我们当,如果说我们强行使用的话,也是会报错的,强行使用那么也是报错。 好,那么这就是我们的这个下划线哦,它的这个使用方法,那么同时我们在这里注意一下,就是如果说是可以直接使,如果说直接使用 input 模块这种这种最原始的方式导入的话,那么它是不受这个哦的影响的,那么这里面我们也可以看一下,如果说我采用这种导入方式,那么 这个上面内容我们先注视到,我们就直接采用最原始的这种导入方式,那么这种导入方式模块名,然后点方法名,这里面我虽然写了只能导出 great, 但是我这里它不受影响,我们在这边可以直接运行一下运行。 ok, 没有问题,两个内容它都展现出来了。 好,那么说完我们当前的自定义模块它的注意事项之后,我们先来做一个简单练习题,就是关于自定义模块这两个内容。下列说法错误的是,首先 a 选项,哦,它是一个列表,用于指定当使用 from model import 星号时 应该导出的名称,也就说它这里面的内容才是是可以控制我们这里面导入的内容,导入的这些函数变量等等内容的。所以说这个 a 选项是正确的。 b 选项当模块被直接执行时,它的 name 就是 等于慢,而当模块是被导入的时候,它的 name 指是模块名称,这个选项我们之前也看了,它是正确的。 接着 c 选项通过使用 if 判断这里的 name 是 否等于慢。然后来确表模块中的测试代码只能只在直接执行模块时运行,因为只有在直接执行模块的时候,它的这个 name 是 慢, 所以说 c 选项也是正确的。然后 d 选项,模块中的奥变量会影响使用 import model 方式导入的可用功能。那么这最后一个是错误的,我们刚刚这里面也已经尝试过了,它使用这种方式是不受影响的, 所以这道题的答案是 d, 因为 d 是 错误的。好,那么关于定义模块,我们就先说到这里。

啊,今天给大家分享的是 type dict 啊, python 中的一种,为字典解提供结构化类型注解这样一种块,那我们之前的话,在使用字典当中呢,会出现这种情况,比如说我的 name 处的传入了错误, 然后呢,我的这个 a 指的话传的是字母串 ok, 那 么执行过程当中呢,很有可能会造成异常,进行一下当前的脚本, ok, 现在的话啊,通过 type dict 就 可以限定这个对应的 u 的 类型,只能 name 属性,那我的对应的数据只能对应的 整数类型,那再执行这个角色 ok, 它就不报错了。那么这个 type 既能保证对应的字的名,类型和可选,在开发阶段即可被 ide 和类型检, 如 y, p, y 等精准验证间距离性与可能性。好,那么今天的分享就到这里。

好,今天我们来看 python 中的行语缩记。 python 与其他语言不同,它是用缩记和冒号来表示代码之间的层次关系的。好,如果你的语句后边跟了冒号,那么你去点回车键的时候,它会自动的 控四格啊。如果你需要手动空格缩进的话,你可以用四个空格键来控,或者是用我们的 top 键。 top 键在我们键盘左侧的上面数第三个啊, t a b。 好,我们来看一个程序,首先输入 a, 输入 b 进行比较,如果 a 比 b 大 的话,冒号,注意,这里是英文版的冒号啊,英文冒号,然后我一回车,他会自动空四格,然后表示满足这个条件的时候执行的内容, 这是它的一个往里缩的一层,那同样的 else 后边是冒号,然后一回车同样会自动空四格。那如果你需要手动缩进的时候,我可以用一个 top 键可以实现缩进啊,这是关于我们的行语缩进。

这一章我们来学一下模块,首先我们先了解一下模块概念,在 python 编程中,模块是一个包含 python 代码的 p i 文件,通常包含函数、类变量以及可执行代码。模块化编程允许开发者逻辑的组织代码,提高代码的可维护性和重用性。 那么我们读完它这个概念之后,实际上我们也就清楚,我们之前写的每一个代码,实际上它都是包含模块的。比如说我们在当前这个页面,我在这里面直接点击一个新建文件,然后给它输入 main, 点 py, 然后回车,那么这样的话,实际上我们就创建了一个新的模块,这个模块的模块名就是 main, 那么现在我们来看一下我们这个模块有什么作用。我们想象一下当前一个场景,就是程序员 a 和 b, 他 们两个人要共同开发一个项目,同时呢都希望有一个函数,给一个函数取名为 i 的, 那么此时要如何解决? 如果说我们按照传统的方式,就是直接在当前这个页面写这个函数的话,那么我们在这里看一下,这里是 程序员 a, 它要写一个函数,同时要给它命名为这样一个 id, 然后我们对它进行一个传参,传入的参数它要执行一个返回操作,然后同时对传入的参数进行一个加一操作,接着是程序员 b, 它也需要一个 a 的 函数 原,那么它这里面也是一个 a 的, 那么我们它对传入的 number 值,它会执行一个加十的操作。 那么这样写完之后,如果说我们在这里面调用它,我们在这里面调用一下,我们用 result 来接收,然后同时 在这里面使用 a 的 函数,在这里面传入一个值,这个值的话我们就传入一个十,然后我们现在打印一下,那么这样打印的话,实际上我们可以明显的知道它这个最终的结果实际上是等于二十,运行一下, 它最终结果是二十,因为我们程序员 b 写的这个 i 的 函数,它会因为它的这个名字是相同的,所以说会把程序员 a 写的这个函数给它覆盖掉,我们运行的时候就只能执行当前程序员 b 写的内容。 因此遇到这样的情况,我们就必须要使用模块的,我们必须要使用的是模块编程的这种方式 来创建两个不同的模块,让程序员 a 在 他的这个模块里面写他的内容,让程序员 b 在 他的模块里面写他的内容,然后我们需要调用哪个模块的话,我们就在这里面导入对应的模块,使用他们对应的函数方法。 比如说我们一开始实际上就已经我们之前的学习就已经接触过这样一个导入模块,比如说我在这里面写一个 import time, 这里实际上就是导入了一个 time 模块,那么我在这里面写一下,比如说在这里写一个打印函数,要求 程序五秒后运行,然后我们就可以来调用我们刚刚导入的这个模块,然后使用这个模块里面的方法,比如说我们在这边使用它的睡眠方法写一个五,然后我在这里面再执行 程序执行,那么这样的话我们运行一下,这样的话它就会来运行当下这个代码,然后是等待五秒,最终完成这个程序执行,那么我们刚刚做的这个事情就是引入模块,并且也使用了它的方法。 现在我们来看一下使用模块原因就是当我们这个使用模块后,可以显著的提高代码可维护性,避免命名冲突增加并且增加代码的利用率。一旦模块并且完成,就可以在其他拍摄文件中导入并使用该模块的函数, 那么实际上我们当前这个模块,我们就可以把它理解成是一个更大的这样一个封装的包,我们之前写的比我们之前写的各种函数, 我们之前写各种函数的作用,它有一个作用就是来提高复用性,就是我们写好一个方法之后,我们只要是涉及到它对应的方法,我们就只需要把参数传进去,那么它就会按照一定的方法跟我们返回数值, 这是我们当时写函数的他的作用,那么这个模块的话实际上也一样的,他无非就是把多个方法,然后呢加入到一个包里面,这里面不仅有方法,同时我们还可以自己写一些变量名,都可以在这个包里面给他固定好之后,如果说我们在其他模块 想要使用它这里面的方法的话,我们就直接将当前这个模块引入到我们需要调用的这个模块里面,那么在这里面我们就可以来使用它这里的方法了。 那么我们说完它的系统模块之后,我们现在再来说一下自定义模块,自定义模块的话就是我们自己来写一下模块,然后再来调用我们自己写的模块, 这里面我们就要求创建一个 model a, 然后创建一个 model b 两个模块,并且在 y 点 p y 中来调用上述两个模块,那么现在我们就来到代码这里面来写一下,并我们先注视着,然后在这里我就直接先来创建一个 model a 模块, 接着我再来创建一个 b 模块,在这两个模块里面,我们就可以要求两个不同的程序员,然后分别在这里面写不同代码。比如说之前要求的是程序员 a, 他 想他想写一个添加方法,这个添加方法里面 对传输的参数会执行一个返回 number 加一的操作,那么这是他写的内容,然后接着是程序员 b, 程序员 b 的 话,在这里面他也想写一个 a 的 函数,他需要对传输的每一个参数执行一个 number 加上十这样的操作 我们写,注意一点就是我们写完之后,我们需要 ctrl s 保存一下,保存完之后,那么实际上这个代码才算是真正写完它,写完它真正写完,我们才能够在这个 主页面去给它调用,不然的话如果说我们没有写完的话,就算是在这里面调用,那么实际上它最终运行的时候可能也会出现错误,我们注意一下。 好,那么写完我们这两个模块之后,我们现在就会在这个主页面给它调用一下了,那么这里调用的话,我们就使用 import, 然后把当前这个模块名给它导入一下,这里是 model a, 我 们把它导导入一下, 这里的名字是 m o, d u, l e m o, 这里模块 a, 我 们改一下 m o, d, u, l, e, ok, 好, 改完了,然后我们这里重新写一下 m o d model a, 那 么我们把这个模块 a 导入之后,我们可以再来把这个模块 b 给它导入一下, 导入完这两个模块之后,我们就可以在当前这个主页面来给它使用了,我们在这写一下, 在这里面我们先来写一个 number 值,这个 number 值我们先给它设成十,然后我们现在就可以来,我们就可以把当前这个 number 等于十作为参数传入这两个模块里面的 a 的 方法了。我们先来写传入,使用使用模块 a 的 方法, 这里面我们用 result 来接收一下,然后我们就直接使用当前的模块,然后点我们就看到它这里面有一个 a 的 这个方法,这个 a 的 方法就是我们之前写进去的函数添加进去,然后把当前这个 number 给它添 传入,那么传入之后它最终返回这个值,就是这个十加一,那么这个十加一的话,那么实际上它这个值应该是等于十一的,我们在这里面给它打印一下 模块 a 的 值,这里我们就直接写成,我们就直接打一下 result, 那 么这个值的话应该是等于十一,那么现在我们再来使用模块 b 的 方法, 那么模块 b 的 方法呢?我们同样的就直接使用 void 来进行接收,这里我们这次是调用 model b, 然后点 a 的 方法,接着把我们这个 number 等于十给它传进去,传入之后我们在这里面再打印一下,这里的话就是模块 b 的 值, 那么这里的值的话,我们也 result 给大家答一下它这里的值,因为是十十加上十的话应该等于二十,所以说它最终返回的值应该是二十。好,那么写完之后,我们现在可以来运行一下,看一下它这里的 a, 还有这个 b 的 它返回这个值是否符合预期。运行一下, 我们现在看到它这里面一个就是十一,一个就是二十,与我们当前与我们之前的这个预期也是相符的。 那我那么我们简单的了解完当前这个模块化编程之后,我们现在来看一个简单的例题,这个例题的话就是下列关于 python 的 说法,哪一个是正确的?首先 a 选项一个 pi 文件只能包含一个函数,不能包含多个函数,那么这个是错误的。 我们这每一个模块,它实际上是可以包含多个函数,多个变量的,它们都是可以包含进去的。然后 b 选项导入模块后,其中的代码会立即执行操作,这个也是错误的。导入的模块它制里面的方法,我们只有在调用它的时候它才会执行,如果说不调用它的话,那么它是不会执行的。 接着是 c 使用模块可以避免命名冲突,提高代码可维护性,那么这个是正确的。我们使用模块的一个目的就是要避免命名冲突,同时模块的话也是可以提高代码可维护性的,因为我们知道他的,因为我们可以直接从他这个模块 来看到他的这个主要是他这个模块主要是什么功能,那么他这里面对应的方法也更清晰的知道他这边主要作用了。这是 d 选项 模块文件名必须以 model 开头,否则无法导入,那么这个也是错的。模块模块这个文件名只要符合我们的命名语法规则就可以,它具体是什么就完全可以按照你的开发的业务然后来规定。 所以这里面正确答案是 g o c 选项,我们选择 c, ok, 好, 那么关于第一个模块化编程这个概念,我们就先说到这里。

python 目录改变了 peep 执行出现乱码,如何修复?请按照图式重建目录,祝你成功。