流程控制之if&while&for

流程控制

一步一步

流程控制之if判断

if 即是如果的意思

怎么使用if来进行判断

if<条件1>:

​ <代码块1> # true 执行

elif<条件2>:

​ <代码块2> #true执行

else:

​ <代码块3>

<代码块4>

if条件1成立,运行代码块1再运行4

if条件2成立,运行代码块2再运行4

都不成立则先运行代码块3再运行代码块4

条件自上而下判断,可设置任意数量elif

下面则是一个最简单的if循环语句

age = 18

inp_age = input('age:')  # 17
inp_age = int(inp_age)

if age > inp_age: # a # 条件a成立我就做
    print('猜小了')
elif age < inp_age: # b  # 条件b成立并且条件a不成立才做
    print('猜大了')
else:  # c  # 条件a和b都不成立才做
    print('猜中了')

if嵌套

多个if判断和 if... elif ... else 的区别:

对于上面的猜年龄程序而言,套用多个if判断会消耗更多的时间

所以本着节俭的原则,我们就不直接用多个if语句判断了

下面则是用if进行嵌套的猜年龄

age = 18

inp_age = int(input('age:'))  # 17

if age >= inp_age:   
    if age > inp_age:  
        if 'e':
            print('猜小了') 
    else: 
        print('猜中了') 
else:
    print('猜大了')

相比较多个if判断,嵌套的运行更方便,同时也能应对更为复杂的情况,逻辑也更加的清晰

while 循环

重复干一件事情,叫做循环

age = 16

while True:
    inp_age = input('age:')
    inp_age = int(inp_age)

    if inp_age > age:
        print('猜大了')
    elif inp_age < age:
        print('猜小了')
    else:
        print('猜对了')

print('hello')

上面一段代码就用了while循环以及if判断

运行后就可以发现,当你输入年龄并且通过if循环得到语句之后,系统会将while里面的代码再次运行,无限循环

可能有的人会问了:那我输对了不应该停止循环吗?while True中的True又是什么意思呢?为什么最后面的hello一直没有被运行呢?

这几个问题我将会在接下来一一阐述

while 的语法

while <条件>:
	<需要重复执行的代码块>  
print("恭喜你跳出循环啦")	

上面则是最简单的while循环

当条件成立时(即条件为true,比如 1== 1)会运行,结束完代码块会再次判断条件,直到条件不成立,会结束运行,执行接下来的代码块。

那么又有人会问了:那你不还是没解决猜对了就不运行的问题嘛,你不是在这瞎BB来浪费我的时间?那么接下来我就会讲述关于while 语句里 break 和continue的用法

while + break 语法

break

当在while循环里,如果遇到break后,本次循环就会被终止,所以在猜对了的条件里加上break,当只有输入16时,才会碰到break,跳出循环,相反输入其他任意数值,都会一直循环下去。

age = 16

while True:
    print(1)  # 1
    inp_age = input('age:')  # '16'
    inp_age = int(inp_age)  # 16

    if inp_age > age:  #
        print('猜大了')
    elif inp_age < age:  #
        print('猜小了')
    else:
        print('猜对了')
        break  # 不运行下面的代码,并且跳出循环
        print("你不可能能看到我")
print("恭喜你跳出循环啦")

上图的话如果输入16,则break之后的那行代码不会出现,直接跳出循环到最后面的那一行代码

是不是很简单呢?

while + continue

count = 0

while True:
    count += 1

    if count == 5:  #
        continue # 继续,跳出本次循环,不运行下面的代码,直接开始下一次循环

    if count == 11:
        break

    print(count)

遇到continue直接开始下一轮循环,continue下面的代码不会被执行

所以上面代码的执行结果是:1 2 3 4 6 7 8 9 10

当count == 5 时,continue语句执行,直接进入下次循环,所以count没有被打印

而count == 11 时, break语句执行,直接结束循环,count也自然不会被打印

while + else(仅作了解)

当循环没有被break时,else会被触发

(else 一般很少使用)

# 代码一
count = 0

while count < 10:
    count += 1

    if count == 5:
        break  # break除了干掉while循环,还会干掉else

    print(count)
else:
    print("当while循环没有被break的时候我会触发,但尽量不要使用我")
    
    
# 代码二    
ount = 0

while count < 10:
    count += 1

    if count == 4008823823:
        break  # break除了干掉while循环,还会干掉else

    print(count)
else:
    print("当while循环没有被break的时候我会触发,但尽量不要使用我")    
    

运行后就会发现第一段代码break语句被执行,else语句不会触发

而第二段代码break语句则不会被执行,所以else被触发

由此可见,while 和else 在break 面前都是弟弟,完全不是对手

三者区别

break:跳出本层循环,跳出循环

continue:跳出本次循环

else:break的“亲弟弟“,有break就没他什么事

可以由一段简单的话来充分理解这三者的区别及关系:

如果你每天0点起来25点睡觉,连续30天,如果中途没有被干掉,奖励你一本书<通往天堂的捷径>

break: 当你第十天的时候被干掉了了,剩下的20天全部减免了,当然你就上不了天堂了

continue:当你第十天的时候被干掉了,第十天减免了,但是你充钱复活了,从第十一天开始继续

else:当你中途没有被break干掉,一直在修仙,就会得到<通往天堂的捷径>

接下来,我们可以根据while循环的用法,来实现一段功能较为完整的登录系统:

count = 0
username_db = 'hyc'
pwd_db = '123456'


code = random.randint(1000,9999)   #
code = f'{code}{chr(random.randint(97,117))}{chr(random.randint(97,117))}{chr(random.randint(97,117))}'


while count < 3:
    print(code)
    username = input('username:')
    pwd = input('pwd:')
    code_inp  = input('code:')

    if username_db == username and pwd_db == pwd and code == code_inp:
        print('登录成功,但是并没有什么卵用')
        break
    else:
        count += 1
        print('\033[43m傻逼,账号密码都忘了.验证码都看不懂\033[0m')

for循环

循环干一件事,循环容器数据类型

首先如果我们有一个列表,那么用while循环来遍历其中的值,该怎么做呢?

list = ['111','222','333']
# while循环遍历
count = 0
while True:
	if count == 0:
		break
	print(lis[count])
	count += 1

虽然我们成功了,但是是否觉得语句略显繁琐呢?

这时我们就可以使用for循环了

fori in list
	print(i)

这和while循环相比,是不是瞬间就简单很多了呢

同样的,for也有break,continue,else三种语法,因为和while差不多我就不在这多BB了,直接贴极端代码就可以看懂了

不过在看这几段代码前,首先要解释一下range函数的用法

print(list(range(3)))  # 0,1,2
print(list(range(10)))  # 0,1,2..9
print(list(range(2,5)))  # 2,3,4  # 顾头不顾尾
print(list(range(3,6)))  # 3,4,5  # 顾头不顾尾
print(list(range(3,7,3)))  # 3,6  # 顾头不顾尾
 print(list(range(1,10,2)))  # 1,3,5,7,9  # 顾头不顾尾

上面几段代码打完,range的用法其实已经很明了了

接下来再贴几段for循环的代码

# for + break
for i in range(1,11): # 1,2,3,4,5
    print(i)
    if i == 5:
        break  #跳出循环
# for + continue
for i in range(1,11): # 1,2,3,4,6,7,8,9,10
    if i == 5:
        continue  #跳出本次循环

    print(i)
# for + else

for i in range(1,11): # 1,2,3,4,6,7,8,9,10
    if i == 11:
        break  
    print(i)
else:  # 没有被break会触发
    print('你居然运行到了else')

for循环和while循环的区别

while

在某些情况下,while还是经常被用到,比如上面的登录大多都用while,但是它的缺点也很明显

1、会进入死循环,不可控,尽量少用

2、世间万物都可以作为循环的对象

for

for在某些情况(比如列表和字典)会比while简单得多,并且不会进入死循环,但也不是万能的

1、不会进入死循环,可控,尽量使用

2、只对容器类数据类型循环(可迭代对象)

posted @ 2019-08-01 16:27  黑井白子  阅读(148)  评论(0编辑  收藏  举报
Live2D