13.python流程控制之循环

前文讲了流程控制和if判断语句,本章节就是来介绍循环的,循环结构就是重复执行某段代码块,人类某些时候需要重复做某件事情,所以程序中必须有相应的机制来控制计算机具备人的这种循环做事的能力

python中有while与for两种循环机制


while循环

while循环又被称之为条件循环,它是先进行判断,后进行循环

基本语法

伪代码

while 条件:
	代码1
	代码2
	代码3
	...

先判断while后面的条件是否成立,成立就执行下面的循环语句,语句执行完成后,再次判断while后面的条件是否成立,然后不停的往复,直到while条件语句不成立了,然后跳出循环

image-20200902144703239

演示代码

count = 0
while count <= 5:
    print(count) # 输出count当前值
    count+=1
print("循环结束")	# 此代码不属于循环

输出结果

image-20200902151005650

死循环与效率问题

所谓死循环,就是不会结束的循环,最简单的例子

count = 0
while True:
    print(count)
    count+=1
print("循环结束")

开始运行后,由于while的条件语句永远为True,它就会被无休止的自加下去

image-20200902151328338

而且这句话,本身控制的是CPU,让CPU不停的进行高速运算,CPU就会大量散热,就会听到CPU的风扇开始转了起来

但是呢,有时候死循环并不是一定的坏事,比如用户的操作本来就需要循环进行的时候

演示代码

# ATM机简易场景
while True:
    passwd = input("请输入密码:")
    if(passwd == '123456'):
        print('登陆成功,功能没有开发完全即将退出')
    else:
        print('登陆失败,请重新登陆')

输出结果

image-20200902153259042

这里由于场景需求,我们需要它死循环,而且因为他有IO交互,交互的时候程序会等待,所以给CPU留出了休息的时间,避免了不停运算的情况

结束循环的方式

方式一:判断条件改为False

while循环会判断循环条件是否为真,为真才进行循环操作,所以我们让他为假就不会循环了

注意:如果本次判断已经是True了,修改之后,还是同样会完成本次循环,直到下次判断为False才会终止

演示代码

# ATM机简易场景
tag = True
while tag:  # 判断tag
    passwd = input("请输入密码:")
    if(passwd == '123456'):
        print('登陆成功')
        tag = False #tag修改为False,本次循环完成后再次进行while检测就为假了
    else:
        print('登陆失败,请重新登陆')

print('您的账户余额为0')

输出结果

image-20200902155331184

方式二:添加break

只要运行到break,就会立即终止本层循环

演示代码

# ATM机简易场景
while True:
    passwd = input("请输入密码:")
    if(passwd == '123456'):
        print('登陆成功')
        break # 立刻终止本层循环
        print('break之后的代码') # 由于break是立即跳出循环,故此行不运行
    else:
        print('登陆失败,请重新登陆')

print('您的账户余额为0')

输出结果

image-20200902172043783

如果是多层嵌套循环,想要跳出多层循环,就需要每一层都添加break

伪代码

while True:
	while True:
		while True:
			while True:
				break
			break
		break
	break

方式三:continue

while可以和continue连用,其作用是结束掉本次循环,直接进入下一次

演示代码

# 跳过4的打印
a = 1
while a<=10:
    if a == 4:
        a += 1  # 如果这里没有+1,本次循环跳出之后,a还是等于4,就会陷入死循环
        continue

    print(a)
    a += 1

输出结果

image-20200902175122760

while与else连用

在while中也可以使用else,但是要想让else的代码运行,必须要是while结束循环之后,并且循环不是因为break中途打断才结束才可以

演示代码

count = 0
b = int(input(请输入最大值))
while count <= b:
    print(count)
    if count == 5:
        break
    count += 1
else:
    print("正常的退出")

这个代码是让程序从0输出到我们想要的整数,但是我们在6的位置添加了break,也就是说限制到小于6,大于6会被break给退出

我们输入小于6的任意数,else都会同步输出

image-20200902180723106

但是如果大于了5,就不会运行else语句

image-20200902180828348

案例用法

将上面的ATM取款机代码进行优化(取款机代码限制输错次数3次)

count = 0   #计次
while count < 3:
    username = input("请输入账号:")
    password = input("请输入密码:")
    if username == "admin" and password == "admin":
        print("登陆成功!")
        break
    else:
        count += 1
        print("密码错误{}次".format(count))
else:
    print("密码错误三次,卡已经冻结")

登陆成功返回

image-20200903135550665

密码错误返回

image-20200903135614874


for循环

for循环,又被称为迭代循环(取值循环),是python提供的第二种循环机制,从理论上for循环能做的事情,while循环都能做,for循环在循环取值上面比while更加简便

基本循环

伪代码

# 可迭代对象可以是:列表、字典、字符串、元组、集合
for 变量名 in 可迭代对象:
	代码1
	代码2
	代码3
	....

演示代码

for x in ['kinght','amber','alisa','AYM']:
    print(x)

输出结果

image-20200904165903990

for循环会将可迭代对象中的值一个一个的取出来,直到整个可迭代对象的值被取干净为止

for循环的次数取决于可迭代对象内部值的个数

for循环取字典,默认取出来的是字典的key,取value可以通过dic[key]的方式

dic = {'kinght':'amber','alisa':'AYM'}
for x in dic:
    print(x,':',dic[x])

输出结果

image-20200904170647949

for循环控制循环次数

range()

在这里首先介绍一个函数range(),这是一个在python2就有的功能,他的功能是生成从0开始的数组,括号里是多少,就生成序号到多少的列表

image-20200904232729258

也可以直接指定列表数字(python2),头能取,尾取-1

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1qaKhqi9-1603172924431)(jpg/13.python%E6%B5%81%E7%A8%8B%E6%8E%A7%E5%88%B6%E4%B9%8B%E5%BE%AA%E7%8E%AF/image-20200912002330702.png)]

指定步长取等差数列(步长为2)

image-20201007091105330

Python3 range() 函数返回的是一个可迭代对象(类型是对象),而不是列表类型, 所以打印的时候不会打印列表,这样做内存空间优化了,使用并不会有什么区别

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qGe8hFbI-1603172924433)(jpg/13.python%E6%B5%81%E7%A8%8B%E6%8E%A7%E5%88%B6%E4%B9%8B%E5%BE%AA%E7%8E%AF/image-20201011110507902.png)]

对前文模拟登陆代码的修改

sys_name = 'admin'
sys_pwd = 'admin'
for x in range(3):
    name = input("请输入账号:")
    pwd = input('请输入密码:')
    if(name == sys_name and pwd == sys_pwd):
        print("密码正确")
        break
    else:
        print("密码错误{}次,还有{}次机会".format((x+1),(2-x)))
else:
    print("账号验证错误次数过多,请联系管理员找回密码")

len()

数列表个数

l = [1,2,3,'a','b','c']
print(len(l))	#输出结果为6

for+continue

for循环和while循环与continue连用效果相同,其作用是结束掉本次循环,直接进入下一次

for i in range(6):
    if i == 3:
        continue
    print(i)    #0 1 2 4 5

for循环嵌套

for循环也是可以进行嵌套的

案例:10以内的乘法

for a in range(1,10):
    for b in range(1,10):
        print('{}x{}={}'.format(a,b,a*b))
t(len(l))	#输出结果为6

for+continue

for循环和while循环与continue连用效果相同,其作用是结束掉本次循环,直接进入下一次

for i in range(6):
    if i == 3:
        continue
    print(i)    #0 1 2 4 5

for循环嵌套

for循环也是可以进行嵌套的

案例:10以内的乘法

for a in range(1,10):
    for b in range(1,10):
        print('{}x{}={}'.format(a,b,a*b))
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值