流程控制之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、只对容器类数据类型循环(可迭代对象)