While循环
1 循环的语法与基本使用
print(1)
while 条件: # 针对while条件循环, 在没有使用break的情况下, while的循环次数, 取决于每次循环一次后while的循环条件是否成立
代码1
代码2
代码3
print(3)
小案例:
count = 0 # 初始化计数器
while count < 5:
print(count)
count += 1
>>
0
1
2
3
4
2 死循环与效率问题
案例1:
这种单纯的print()死循环并不会造成致命的效率问题, 因为并不消耗大量的cpu计算能力
count=0
while count < 5:
print(count)
案例2:
这种有i/o, 需要交互的死循环, 也不会导致致命的效率问题, 因为循环一次后, 需要等待用户输入, 才能进入下次循环
while True:
name=input('your name >>>> ')
print(name)
案例3:
纯计算, 无i/o的死循环, 会导致大量的cpu资源消耗, 产生致命的效率问题
while True:
1+1 # cpu会不断执行1+1
案例4:
while 1: 和 while True:
都可以执行死循环
while 1:效率稍微高一些, 因为是用二进制表示, 而True是字符串, 最终还需要转换成二进制
3 循环的应用
案例1:
输入用户名和密码, 三次机会
username = 'admin'
password = 'admin'
count = 0
while count < 3:
_username = input('username: ')
_password = input('password: ')
if _username == username and _password == password:
print("Login Successfully!")
break
else:
print('Wrong Credential!')
count += 1
4 退出本层循环的两种方式
4.1 将条件改为False
在没有break的情况下, while循环的次数, 取决于循环一次后, 条件是否还为真, 如果为真, 就继续, 为假则退出
利用tag, 将条件改为False, 等到下次循环, 程序才会终止
tag = True # 定义变量tag为True
while tag:
_username = input('username: ')
_password = input('password: ')
if _username == username and _password == password:
print("Login Successfully!")
tag = False # 如果登录成功, 重新赋值为False, 下次循环时, while tag:就是False, 条件为假, 退出循环
else:
print('Wrong Credential!')
print(">>>>>end>>>>>>") # 此时, 即使用户名密码输入正确, 此行代码也会运行, 因为利用tag去修改条件, 是在下次循环才生效退出, 本次循环的所有后续命令正常运行
4.2 break
只要程序运行到break, 就会立即终止本层循环
while True:
inp_name=input('请输入您的账号:')
inp_pwd=input('请输入您的密码:')
if inp_name == username and inp_pwd == password:
print('登录成功')
break # 立刻终止本层循环
else:
print('账号名或密码错误')
print('====end====') # print()只有在账号密码输入错误后才会运行, 一旦输入正确, break终止了本层循环, print()就不会运行了
4.3 退出本层循环两种方式总结
两种方式都会退出本层循环
不同之处在于, break是立即退出本层循环, 本层循环后续代码不会执行; 而修改条件为False码本层后续代码依旧会执行, 条件在下次循环才成立, 然后退出本层循环
具体使用哪种方式就看程序需求
5 while循环嵌套
5.1 语法
while 条件1:
while 条件2:
while 条件3:
5.2 退出所有循环方式1-break
利用break退出所有循环, 需要在每一层都做break操作
while True:
while True:
while True:
break
break
break
5.3 退出所有循环方式2-修改条件
利用条件修改, 只需在最内层修改条件, 就可以结束所有循环, 只是最内层当次循环后续的代码还会继续运行
tag=True
while tag:
while tag:
while tag:
tag=False
代码1
代码2
...
tag = True
while tag:
print("11111")
while tag:
print("22222")
while tag:
print("33333")
tag = False
print("44444")
>>
11111
22222
33333
44444
5.4 while循环嵌套案例1
利用break退出循环
username = 'admin'
password = 'password'
while True:
_username = input('username: ')
_password = input('password: ')
if _username == username and _password == password:
print("Login Successfully!")
while True:
opt = input('choose your option: ')
if opt == 'q':
break
else:
print('{opt} is running'.format(opt=opt))
break
else:
print('login Failed!')
5.5 while循环嵌套案例2
改变条件退出循环
tag = True
while tag:
_username = input('username: ')
_password = input('password: ')
if _username == username and _password == password:
print("Login Successfully!")
while tag:
opt = input('choose your option: ')
if opt == 'q':
tag = False
print('CMD after condition change')
else:
print('{opt} is running'.format(opt=opt))
else:
print('login Failed!')
>>
username: admin
password: password
Login Successfully!
choose your option: q # 此时, 输出q, 选择退出后, tag = False后的命令还会继续执行
CMD after condition change
6 while+continue
结束本层的本次循环, 直接进入下一次循环
案例1:
打印01235
方法1: 不利用continue
count = 0
while count < 6:
if count != 4:
print(count)
count += 1
else:
count += 1
>>
0
1
2
3
5
方法2: 利用continue
count = 0
while count < 6:
if count == 4:
count += 1
continue # 注意. continue同级的后续代码以及本次循环体后续所有的代码, 是不会运行的
else:
print(count)
count += 1
>>
0
1
2
3
5
count = 0
while count < 6:
if count == 4:
count += 1
continue
print("continue") # count=4时, print不会运行. 因为属于continue同级别的代码
else:
print(count)
count += 1
print(1) # count=4时, print不会运行, 因为count=4时, 运行continue会结束本次循环, print属于while循环内和if判断平级的代码, 运行了continue那么本次循环内剩余的代码都不会执行
7 while +else
while循环结束, 条件为假时, 才会运行else的代码
如果while某次循环遇到了break, 立即退出了, 那么else的代码不会运行的
while+else和while+同级代码的区别是: 写在while循环后的同级代码, 只要while循环结束, 无论是正常结束还是break掉, 都会被执行; 而else的代码, 只有当while条件不满足, 并且没有被break掉, 正常结束循环时才会执行else代码
count=0
while count < 6:
if count == 4:
count+=1
continue
print(count)
count+=1
else:
print('else包含的代码会在while循环结束后,并且while循环是在没有被break打断的情况下正常结束的,才会运行')
>>
0
1
2
3
5
else包含的代码会在while循环结束后,并且while循环是在没有被break打断的情况下正常结束的,才会运行
count=0
while count < 6:
if count == 4:
break # 如果count == 4成立, while直接退出, else的print()代码不会运行
else:
print(count)
count+=1
else:
print('======>')
>>
0
1
2
3
案例:
账号密码输错三次立刻退出程序
username = 'admin'
password = 'password'
count = 0
tag = True
while tag:
if count == 3:
print("Too many attempts!")
break
else:
_username = input('username: ')
_password = input('password: ')
if _username == username and _password == password:
print("Login Successfully!")
while tag:
opt = input('choose your option: ')
if opt == 'q':
tag = False
else:
print('{cmd} is running'.format(cmd=opt))
else:
print("Wrong Credential")
count += 1
username = 'admin'
password = 'password'
count = 0
while count < 3:
_username = input('username: ')
_password = input('password: ')
if _username == username and _password == password:
print("Login Successfully!")
while True:
opt = input('choose your option: ')
if opt == 'q':
break
else:
print('{cmd} is running'.format(cmd=opt))
break
else:
print("Wrong Credential")
count += 1
else:
print("Too many attempts")
案例:
1、用户输错三次退出程序,并提示输错次数过多
2、用户输对,则进入子循环,开始循环执行命令
3、在循环内,用输入退出命令,则退出所有层循环
username = 'admin'
password = 'admin'
count = 0
while count < 3:
_username = input('username: ')
_password = input('password: ')
if _username == username and _password == password:
print("log in successfully!")
while True:
print('''
1. 取款
2. 转账
3. 查询余额
q. 退出
''')
opt = input("please type your option: ")
if opt == 'q':
print("quit")
break
break
else:
print('Wrong Credential!')
count += 1
else:
print("Failed 3 times, quit program")
for循环
理论上for循环能做的事情,while循环都可以做
之所以要有for循环,是因为for循环在循环取值(遍历取值)比while循环更简洁
1 for循环语法
for 变量名 in 可迭代对象: # 可迭代对象可以是:列表、字典、字符串、元组、集合
代码1
代码2
代码3
...
2. for循环基本使用
2.1 for循环取值 - 列表循环取值
list1 = ['admin','manager','ceo'] # for循环执行的次数, 取决于循环体中有多少个元素
for i in list1:
print(i)
>>
admin
manager
ceo
使用while循环代替for循环, 由于for循环是遍历, 因此要确定循环体中的元素个数, 然后定义循环条件, 也就是循环几次
list2 = ['admin','manager','ceo']
x = 0 # 定义计数器
while x < 3: # 列表中共三个元素, 所以循环三次, list2[0], list2[1], list2[2]来取值, 把列表中的索引拿出来
print(list2[x])
x += 1
>>
admin
manager
ceo
2.2 for循环取值 - 字典循环取值
dic={'k1':111,'k2':222,'k3':333}
for i in dic:
print(i)
print(dic[i])
>>
k1
111
k2
222
k3
333
2.3 for循环取值 - 字符串
for遍历字符串会取出字符串中的内一个字符, 包括空格
info = 'my name is admin'
for i in info:
print(i)
总结for循环与while循环的异同
1、相同之处:都是循环,for循环可以干的事,while循环也可以干
2、不同之处:
while循环称之为条件循环,循环次数取决于条件何时变为假
for循环称之为"取值循环",循环次数取决in后包含的值的个数
for x in [1,2,3]: # for循环的命令中, 不是必须用到x变量, 如果不用, 那就是执行循环体的命令n次
print('===>')
print('8888')
3. for循环控制循环次数 - range()
in后直接放一个可迭代对象来控制循环次数有局限性:
当循环次数过多时,可迭代对象包含的元素需要伴随着增加
3.1 range()功能介绍
range(n) # 从0开始取整数值, 取到n-1, 顾头不顾尾
range(m,n) # 从m开始取, 取到n-1, 顾头不顾尾
range(m,n,p) #从m开始取, 取到n-1, 步长为p, 隔p-1个元素取一个, 顾头不顾尾
- Python2中
>>> print(range(10))
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> print(range(1,10))
[1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> print(range(2,10,2))
[2, 4, 6, 8]
- Python3中
>>> print(range(10))
range(0, 10)
>>> print(range(1,9))
range(1, 9)
>>> print(range(2,10,2))
range(2, 10, 2)
3.2 range()控制循环次数
range(n) # 就是循环n次, 想循环几次, n就是等于几, 从0到n-1
for i in range(3):
print("--->")
>>
--->
--->
--->
3.3 for + break
作用和while + break一样
username = 'admin'
password = 'admin'
for i in range(3):
_username = input("username: ")
_password = input("password: ")
if _username == username and _password == password:
print("login successfully")
else:
print("Wrong Credential")
else:
print("too many failed attempts")
3.4 for + continue
作用和while + continue一样
for i in range (6):
if i == 4:
continue
else:
print('>>>{i}'.format(i=i))
>>
>>>0
>>>1
>>>2
>>>3
>>>5
3.5 for + range
for搭配range,可以按照索引取值,但是麻烦,所以不推荐
l=['aaa','bbb','ccc','dd'] # len(l), 取可迭代对象中的元素个数
for i in range(len(l)):
print(i,l[i])
len() # 取可迭代对象中的元素个数
dict = {'k1':111,'k2':222,'k3':333}
print(len(dict))
3.6 range()在Python2和Python3中的区别
Python2 range() 函数返回的是列表
>>> range(10)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] # 直接把数字生成, 内存直接占上
Python3 range() 函数返回的是一个可迭代对象(类型是对象),而不是列表类型,
所以打印的时候不会打印列表. 每次调用range的时候会临时生成数值. 比Python2省内存空间
>>> range(10)
range(0, 10) # 需要用的时候, 再生成数字
3.7 for循环嵌套
or循环嵌套:外层循环循环一次,内层循环需要完整的循环完毕
for i in range(3):
print('外层循环-->', i)
for j in range(5):
print('内层-->', j)
>>
外层循环--> 0
内层--> 0
内层--> 1
内层--> 2
内层--> 3
内层--> 4
外层循环--> 1
内层--> 0
内层--> 1
内层--> 2
内层--> 3
内层--> 4
外层循环--> 2
内层--> 0
内层--> 1
内层--> 2
内层--> 3
内层--> 4
补充:
终止for循环只有break一种方法
4 print功能补充
print('hello %s' % 'egon') # %s是字符串的功能, 并不是print的功能
1、print之逗号的使用, 结果会把字符串以空格分隔
print('hello','world','egon')
2、换行符
print('hello\n')
print('world')
>>
hello
world
3、print之end参数的使用
print('hello\n',end='') # end 是print的功能, 用来指定print结尾的符号, 换行\n, 还是别的字符
print('world')
>>
hello
world
print('hello',end='\n')
print('world',end='\n')
>>
hello
world
```】
网友评论