5、Python之流程控制基础

Python入门 / 2020-09-08

1、流程控制之if判断

1.1、什么是if判断?

条件是否符合的判断方法,

1.2、为什么要有if判断?

为了让计算机具备像人一样判断条件是否成立的功能

1.3、如何使用?

if语句中用缩进标示代码级别,自上而下逐条执行;冒号下一句必须缩进,如使用的是pycharm冒号后回车会自动缩进!

1.3.1、单分支
#input将用户输入的内容存成字符串类型并保存为变量,因此需要int转换为整数型
age = input('please input your age :')
if 18 < int(age) < 30:
    print('嗨!靓女!')
else:
    print('滚犊子!')
    
#pycharm执行后得到结果

please input your age :23
嗨!靓女!
1.3.2、多分支
age = input('please input your age :')
if 18 < int(age) < 40:
    print('哟!小年轻啊!')
elif int(age) < 18:
    print('小屁孩!')
elif 60 > int(age) > 40:
    print('中年危机')
else:
    print('滚犊子!')

#在pycharm执行得到结果:

please input your age :30
哟!小年轻啊!
please input your age :12
小屁孩!
please input your age :46
中年危机

2、while循环

2.1、什么是循环

​ 循环,重复做的事!比如你每天都需要吃饭喝水,这就是一个周期循环的操作!

2.2、为什么要有循环

​ 为达到某种目的而重复劳动,但是需要解放双手,提高效率!比如说算数,从1+2=3,3+2=5,5+2=7,几个还好,加到后面人就跟不上了!这不是人干的事,计算机就特别适合了,没有感情!

2.3、循环语法与基本使用

​ 如条件结果为真,则依次执行;执行完再判断,如条件还为真,则继续以上操作,如此循环!

​ 这样会造成一个问题,请看下面演示!无限循环了,会极大占用系统资源!

age = input('please input your age: ')
while int(age) > 18:
    print('双击666')  
    
#执行pycharm获得结果
双击666
双击666
双击666
双击666
双击666
双击666
双击666
2.4、死循环与效率问题
2.4.1、什么是死循环

即不会结束的循环,比如上面的演示中while循环永远为真,那就不会停止执行,浪费资源额,尤其是纯计算无I/O的循环;如

while true:
	1+1
    
#这个死循环会跑满你的CPU
2.4.2、循环的应用

比如输密码,当用户输错密码时,提示用户重新输入,超过一定次数则禁止登陆!

2.5、退出循环的两种方式
2.5.1、直接改条件:

条件改为假后,等到循环下一次判断条件时生效;

2.5.2、while+break

执行到break就立即停止本层循环,简单粗暴!如下所示

age = input('please input your age: ')
while int(age) > 18:
    print('双击666')
    break
    
 #pycharm执行得到结果,仅循环了一次,到了break就停止循环!
 
please input your age: 22
双击666
2.6、while循环嵌套与结束
2.6.1、break
2.6.2、while与continue

continue它也是结束循环,不过跟break不一样,他是结束本次循环(跳过本次循环),直接进入下一次;也就是说continue后面加的同级代码没有意义,永远没机会上场!如下所示:

age = input('please input your age: ')
while 18 < int(age) < 30:
    gender = input('please input your gender(male or female): ')
    if gender == 'male':
        continue
        print('你瞅啥?信不信我揍你?')
    elif gender == 'female':
        print('hello')
        break
        
#执行pycharm获得结果

please input your age: 22
please input your gender(male or female): male
please input your gender(male or female): female
hello

Process finished with exit code 0
2.6.3、while与else

​ else是在while循环结束后,且while没有被break打断的情况下正常结束掉,才会执行

age = 0
while age < 100:
    age += 1
    break
else:
    print('终年百岁')
    

Process finished with exit code 0

可以看到上面被break结束后,else没有被执行,去掉它再试试py

age = 0
while age < 100:
    age += 1

else:
    print('终年百岁')
    
#pycharm执行    

终年百岁

Process finished with exit code 0

3、for循环

3.1、什么是for循环

for循环是循环取值

3.2、为什么要有for循环

for循环在循环取值(遍历取值)比while循环更简洁

3.3、for循环语法与使用

基础使用如下:

for i in {1,2,3}:
    print('hello')
    
#pycharm执行得到结果

hello
hello
hello

可以看出,只要列表里存在多少个元素,for就循环多少次,for循环次数取决于元素数量!

3.4、for控制循环次数:

上面演示比较原始,当需要循环的次数较多时比如一万次,手动填写元素不现实,这时候需要一种便捷的方法来控制范围!

于是乎,range就登场了!但是呢,range在Python2.7和3.X版本用法是不太一样的,这里演示一下!

3.4.1、渣男Python2.7
>>> range(10)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> range(1,10)
[1, 2, 3, 4, 5, 6, 7, 8, 9]

如上所示,Python中默认是从0开始计算,因此循环到第十次,其实序号是9;当你指定开头是1,结束是10的时候,只有1-9,因为在Python的for循环中尾数是不被计入有效值的,可以说它是有始无终的渣男!

3.4.2、什么是步长!

当你写range(10)时,输出的值默认是0,1,2,3。。。这样子,即默认每个值间隔为+1;这称之为步长,我们可以手动设置步长大小,如下所示:

>>> range(1,16,2)
[1, 3, 5, 7, 9, 11, 13, 15]
#这个例子中,1是开头,16是结尾,2是设定的步长。

可以看到开头为1,步长为2,那么第二个值就是1+2=3,第三个值就是3+2=5,如此类推!

3.4.3、步长有什么用?

有助于for进一步控制循环次数!使用方法上面已经给出演示!

​ range还可以用len()取现有列表的值,了解即可,因为麻烦。

3.4.3、Python3.X
>>> range(10)
range(0, 10)

​ 这可以看出跟2.7有明显的区别,2.7直接把所有值给输出出来了;而3.X只是输出值的范围,而不是所有值;其实它只是一个地址指向真实的内存空间,当需要哪个值时再取对应值,而不是跟2.7一样直接列出所有,这样就节省了很多内存资源,特别是范围大的时候越明显,其它还是跟2.7一样!Python确实是老司机:换成我们中国人的话就是:四两拨千斤!

3.5、for循环嵌套

这些跟while没什么区别

3.5.1、for+break+else
for i in range(3):
    print('客官里边儿请!您需要来点什么?\n1、两斤酱牛肉。\n2、两坛上好的女儿红。')
    menu = input('请选择您的菜单: ')
    if int(menu) == 1 or int(menu) == 2:
        print('好勒!客官您稍等!')
        break
else:
    print('你到底想干嘛?没钱赶紧滚蛋!')
#print时加入\n就是换行的意思,这在很多语言中都是如此!

当在pycharm执行时,如果是1或者2,则for循环被break打断,后面的else也不会有机会执行:

客官里边儿请!您需要来点什么?
1、两斤酱牛肉。
2、两坛上好的女儿红。
请选择您的菜单: 1
好勒!客官您稍等!

Process finished with exit code 0

如果循环的三次都没有输对菜单号,即for循环没被break打断,此时会执行else语句

客官里边儿请!您需要来点什么?
1、两斤酱牛肉。
2、两坛上好的女儿红。
请选择您的菜单: 6
客官里边儿请!您需要来点什么?
1、两斤酱牛肉。
2、两坛上好的女儿红。
请选择您的菜单: 6
客官里边儿请!您需要来点什么?
1、两斤酱牛肉。
2、两坛上好的女儿红。
请选择您的菜单: 6
你到底想干嘛?没钱赶紧滚蛋!

Process finished with exit code 0
3.5.2、for+continue
i = 0
i +=1
for i in range(8):
    if i == 5:
        continue
    print(i)

执行得到结果

0
1
2
3
4
6
7

在这个for循环中,当i等于5的时候,就执行continue跳过此轮循环,因此最终结果没有5!

世间微尘里 独爱茶酒中