课程名称:全面系统Python3.8入门+进阶(程序员必备第二语言)
课程章节:7-3 for与range
主讲老师:7七月
课程内容:
今天学习的内容包括:
for与range
课程收获:
EG:
a = [['apple', 'orange', 'banana', 'grape'], (1,2,3)] for x in a: for y in x: if y == 'orange': break print(y) else: print('fruit is gone')
为什么我们加入了break,上面的代码还会打印出else语句?
原因在于,我们的这个break跳出的是里面的循环,但是和else配对的是外面的循环,所以说跳出里面的循环,并没有跳出最外面的循环。所以else依然会执行。我们可以在外面加一个break来看下效果。
a = [['apple', 'orange', 'banana', 'grape'], (1,2,3)] for x in a: if 'banana' in x: break for y in x: if y == 'orange': break print(y) else: print('fruit is gone')
我们可以发现,什么都没有打印出来,因为当x取值是第一个列表的时候,这个判断的表达式结果是真,banana确实是在当前的x里面,所以说就直接跳出了循环,跳出循环之后else就不在执行。
我们从orange开始break了,为什么后面的1,2,3会被打印出来?
最根本的原因是代码里有2个嵌套的循环。他并不是一个for循环,我们用break跳出的是一个内部循环。内不能循环跳出之后,外部循环还在执行。所以说第一个列表的循环结束了之后,你并不影响第二个元组的循环。所以他依然会打出1,2,3。但是你第一个列表orange和之后banana和grape都不会被打印了。因为他们的循环已经跳出。这样的一个错误,在我们做多维度循环时候非常容易出错的地方。
其他语言里面的:
# 其他语言里 for(i=0;i<10:i++){ } #这样一个语法在python里怎么表示。 # python怎么表示重复指定次数的代码 for x in range(0,10): print(x)
第一次使用range函数时候,会有一个误判。他会认为(0,10)表示是11个元素。其实他只有10个元素。他只会表示0~9不会表示0~10。括号里的第一个元素0,确实表示的是起始的数字,但是第二个元素10表示的不是终止数字。而是表示的一个偏移量,也就是说从0开始总共要有多少个数字。
EG:不希望range生成的数组不是连续的,希望他有一个间隔。比如,希望生成0,2,4,6,8,已2为步长。
for x in range(0,10,2): print(x)
所以range里第三个参数就是步长-间隔多少
# 让x已一行的形式变现,并现实的是用|分隔的。 for x in range(0,10,2): print(x,end='|')
打印出来的0|2|4|6|8|是一个等差数列,同时也是一个递增的等差数列。
EG 我们要打印一个递减的等差数列。
for x in range(10,0,-2): print(x,end='|')