零基础入门Python小甲鱼-笔记4

匿名 (未验证) 提交于 2019-12-02 22:51:30

机器码生汇编,汇编生C,C生万物

世界上根本没有最优秀的编程语言,只有最适合的语言,面对不通的环境和需求,就会有不通的编程工具去迎合。

为什么说了不起的分支和循环,假如没有这两个的话,程序就是一条路走到黑(从上到下依次执行),不会因为某些条件而停下,或者是不能程序员重复利用代码。

幸亏,所有能称得上编程语言的,都应该拥有分支和循环这两种的实现。

  • 打飞机来解释一般游戏的组成和架构(基本上每一个游戏的套路都是一样的):
    进入游戏,其实就是进入一个大循环,只要每一触发死亡机制,敌机都会不断地生成,这就说明整个游戏就在一个循环中执行的。
  • 分支的概念,分支(if条件判断),在条件持续保持成立或不成立情况下,我们都执行固定的程序。条件满足,则不继续走下,不满足继续走下去。
  • 小飞机都是一个样子的?说明它们都是来自同一个对象的复制品,Python是面向对象的编程,对象这个概念无时无刻不融入到Python的血液里。
  • 飞机大战的这个游戏就只用几个循环和if判断就写出来啦,想想就激动,可以做出打飞机的游戏,程序如此简单。

飞机大战的逻辑尝试,参考框架如下:

加载背景音乐 播放背景音乐 我方飞机诞生 interval = 0 while True:     if 用户是否单击了关闭按钮:         退出程序     interval += 1     if interval == 50:     小飞机诞生     小飞机移动一个位置     屏幕刷新     interval = 0     if 用户鼠标产生移动:         我方飞机中心位置 = 用户鼠标位置         屏幕刷新     if 我方飞机与小飞机发生肢体接触(撞击)         我方挂,播放撞机音乐         修改我方飞机图案         打印"GAME OVER"         停止背景音乐

上面那个感觉有点问题

判断和循环

判断就是应不应该做某事,循环就是持续做某事

判断习惯使用的是if-else的搭配,而循环就用我们已经掌握的while语句。

按照100分制,90分以上成绩为A,80~90为B,,60~80为C,60以下为D,现在要求你写一个程序,当用户输入分数,自动转换为A,B,C,D的形式打印出来,你能做出来吗?

我个人喜欢从小到大,所以就这样写啦!

#p4_1.py score = int(input('请输入一个分数: ')) if 90 <= score <= 100:     print('A') if 80 <= score < 90:     print('B') if 60 <= score < 80:     print('C') if 0 <= score < 60:     print('D') if score < 0 and score >100:     print('输入错误!')

当然你也可以写成:

这样写,我觉得超级不爽,条件多了,很麻烦

#p4_2.py score = int(input('请输入一个分数: ')) if 90 <= score <= 100:     print('A') else:     if 80 <= score < 90:         print('B')     else:         if 60 <= score < 80:             print('C')         else:             if 0 <= score < 60:                 print('D')             else:                 print('输入错误!')

没错,我要偷懒啦!使用if-elif-else判断

score = int(input('请输入一个分数: ')) if 90 <= score <= 100:     print('A') elif 80 <= score < 90:     print('B') elif 60 <= score < 80:     print('C') elif 0 <= score < 60:     print('D') else:     print('输入错误!')

假如刚才输入的分数是98

方法一:第一次判断成立,然后打印字母A,但还是会进行第二、三、四、五次判断,然后条件都不符合,退出程序,那几次判断根本没有必要,既然条件满足啦,就不用往下面走啦

方法二、三,在第一次判断成立并打印出字母A之后,接着不需要进行任何判断就可以直接退出程序

性能方面:计入每一次判断会消耗一个CPU的时间,那么方法一比方法二、三多消耗了400%的时间。

我还是比较喜欢使用方法三,不知道大家喜欢哪一种?

什么叫”悬挂else”?一脸懵逼的表情看着你,举个栗子,初学C语言的朋友可能很容易被以下代码欺骗。

C语言:

if (hi >2)     if( hi > 7):         print("好棒!好棒!") else:     print("切~")

上面这个例子,虽然else是想和外层的if匹配,但事实上按照C语言的就近原则这个else是属于内层if的。由于初学者的一不小心,就容易导致BUG的出现。这就是”悬挂else”,嗯嗯,又学到啦!

Python的缩进使用强制规定使得代码必须正确对齐,然程序员来决定else是属于哪一个if,简单来说,你可以自己去找女朋友,而不是规定死就要那个作为你的女朋友吧。

强制使用正确的缩进,Python的代码变得很整洁易读,但是对于初学者来说,也很容易犯缩进的错误。

“多少元”操作符的意思是这个操作符有多少个操作数

例如赋值操作”=”是二元操作符,因为它有左边和右边两个操作数。”-“是一元操作符,它表示负号,因为只有一个操作数。三元操作符就应该有三个操作数,bingo!

三元操作符是Python社区的小伙伴,千呼万唤始出来,Python的作者为Python加入这个三元操作符。

三元操作符的语法,表示当条件为True(真)的时候,a的值赋值为x,否则赋值为y:

a = x if 条件 else y

通过栗子来熟悉一下吧

x = 5 y = 6 if x < y:     small = x else:     small = y print("最小的数:",small)

下面使用三元操作符简化那个代码:

x = 5 y = 6 small = x if x < y else y print("最小的数:",small)

断言(assert)的语法其实有点像是if条件分支语句的”近亲”,所以就放在一块来讲了。

当这个关键字后边的条件为假的时候,程序自动崩溃并抛出AssertionError的异常。

什么情况需要这样的代码呢?当我们在测试程序的时候就很好用

与其让错误的程序导致今后莫名其妙地崩溃,不如在错误的日熬煎出现的那一瞬间实现”自我毁灭”

>>> assert 3 >4 Traceback (most recent call last):   File "<pyshell#8>", line 1, in <module>     assert 3 >4 AssertionError

当需要确保程序中的某个条件一定为真的才能让程序正常工作时,assert关键字就非常有用。

当条件为真的情况下,执行一段代码,只要条件为真,while循环会一直重复执行那段代码,把这段代码称为循环体

while 条件:     循环体

for循环:Python的计数器循环

Python的for循环跟C语言的for循环不太一样,Python的for循环表现更为智能强大!这主要表现在它会自动调用迭代器的next()方法,会自动捕获StopIteration异常并结束循环。

>>> favourite = "FishC" >>> for each in favourite:     print(each,end='')  FishC

上面的打印加了一个东西,所以使得print()不自动换行

4.9 range()

for循环其实还有一个小伙伴:range()内建函数

语法:

range([start,]stop,step=1)

这个BIF有三个参数,其中用中括号括起来的两个表示这两个参数可选,之后出现这个的话,基本上都是这样的,step=1默认表示第三个参数的默认值是1。参数可以先理解为是函数的装备,函数有了装备攻击力什么的都会增加。

range的作用:
生成一个从start参数的值开始,到stop参数的值结束的数字序列。简单来说,就是可以规定开始的位置和结束的位置。常与for循环混迹于各种循环之间,也就是兄弟来的,我感觉挺好用的。

根据传递参数的个数划分为几种方式:

1.只传递一个参数的range(),例如range(5),先用代码展示结果,再说细节的东西

>>> for i in range(5):     print(i)  0 1 2 3 4

相信不少的小伙伴,已经看出细节啦!!!

range(5)会把第一个参数的默认设置为0,生成0~5的所有数字(PS.包含0但是不包含5),也就是说它是左闭右开的区间,感觉我又再炫耀自己的数学知识啦,捂脸.jpg!

2.传递两个参数的range():

>>> for i in range(2,9):     print(i)     2 3 4 5 6 7 8

传递三个参数的range():

for i in range(1,10,2):    print(i)

结果是:打印出1,3,5,,7,9,各自占一行

PS.如果是多次提示SyntaxError: expected an indented block,我建议不要使用Python自带的idle编辑器,我就有出现过这样的问题,而且是明明缩进没有问题偏偏报错,我vscode打开之后发现里面根本没有缩进,我也不知道是问题出现在哪里。

range()可以说是跟for循环最适合做搭档的小伙伴,for循环魅力很大,吸引了很多小伙伴,跟它一起玩,之后再介绍吧!

break语句作用:

终止当前循环,跳出循环体。简单来说,也就是老师上课按顺序抽人回答问题,可你没有任何准备,当老师叫你的前面的那个童鞋之后,就不继续叫人回答问题,你就不用回答问题啦,哈哈哈哈

#p4_4.py bingo = '小甲鱼是帅哥' answer = input('请输入小甲鱼最想听的一句话:') while True:     if answer == bingo:         break     answer = input('抱歉,错了,请重新输入(答案正确才能退出游戏):') print('哎呦,帅哦') print('你真是小甲鱼肚里面的蛔虫啊笑脸.jpg')

只有当用户输入”小甲鱼是帅哥”的时候才会执行break语句,也就是跳出while循环体:

请输入小甲鱼最想听的一句话:我是帅哥 抱歉,错了,请重新输入(答案正确才能退出游戏):小甲鱼是大帅哥 抱歉,错了,请重新输入(答案正确才能退出游戏):小甲鱼是帅哥 哎呦,帅哦 你真是小甲鱼肚里面的蛔虫啊笑脸.jpg

用户输入”小甲鱼是大帅哥”,程序也不肯通过,一定要输入”小甲鱼是帅哥”

continue语句的作用:

终止本轮循环并开始下一轮循环(PS.在开始下一轮循环之前,会先测试循环的条件),简单来说,也就是老师上课按顺序抽人回答问题,可你没有任何准备,当老师叫你的前面的那个童鞋之后,停止问问题,然后老师有提出了一个问题,然后是从你开始回答问题,不想出现的事情偏偏发生(捂脸.jpg)

#p4_5.py for i in range(1,10,2):     if i % 2 != 0:         print(i)         continue     i += 2     print(i)

大家来试一下不运行程序的情况下目测出答案?

我这就不把答案给出,自己去得出结果吧

参考资料是:零基础入门学习Python小甲鱼的书和视频教程

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!