美文网首页
6. Python之循环

6. Python之循环

作者: 随便写写咯 | 来源:发表于2021-01-11 00:01 被阅读0次

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
```】 

相关文章

  • 6. Python之循环

    While循环 1 循环的语法与基本使用 小案例: 2 死循环与效率问题 案例1: 案例2: 案例3: 案例4: ...

  • Python 99乘法表

    python学习笔记之 for循环实现99乘法表

  • python之循环

    一、循环的目的 循环的目的是:执行重复多次的操作 二、for ...in ...循环结构 语法结构:for <变量...

  • python之循环

    Python中的循环语句有 for 和 while。 while condition1:语句 while cond...

  • python循环执行

    python有两种循环,while循环和for循环。 python循环的流程图如下: while循环 python...

  • Python 学习笔记 - 条件循环 for

    Python 循环 - for Python 中有 for 循环 while 循环 for 用来遍历序列,如列表、...

  • Python 学习笔记 - 循环 while

    Python 循环 - while Python 中有 for 循环 while 循环 如果条件符合,while...

  • 012.Python循环语句

    Python 循环语句 1. 概述 Python中的循环语句有 for 和 while。 Python循环语句的控...

  • python 循环语句

    本次将为大家介绍Python循环语句的使用。Python中的循环语句有 for 和 while。Python循环语...

  • python 基础 - 循环语句

    python 循环语句 Python中的循环语句有 for 和 while。Python循环语句的控制结构图如下所...

网友评论

      本文标题:6. Python之循环

      本文链接:https://www.haomeiwen.com/subject/srikaktx.html