• 与while和for的爱恨情仇


    halo,大噶猴啊,今天有没有学习python啊,有没有给自己打气啊!来我先给你们打个气

    上错图了,再来

    今日洗脑金句: 坚持学习,学大学强,学出辉煌!

    流程控制之while循环

    在开始讲解之前,请各位道友思考一个问题,什么是循环?

    诶,你知道循环是个什么东西,但是你就是说不出来!

    好,那为什么要有循环呢,因为我们需要进行一些重复实现的操作,这个时候,循环就很好的实现了我们的需求。

    一、语法

    来,先看一下,while 的基础用法

    while 条件
        code 1
        code 2
        code 3
        ...
    
    while True:
        print('*1'*100)
        print('*2'*100)
    

    以上,只要符合了while 的条件,就会执行里面的代码块,而且只要满足条件,除非你用了其他方法,不然就会陷入死循环,这就是为什么要少用while的原因。

    哦吼,既然谈到了能跳出循环的方法,那么是什么呢,就是 “break” !

    二、while + break

    break 就是打断的意思。他会终止掉当前层的循环,执行外面的代码。为什么说当前层,因为while他也是可以嵌套的,你只能中断你所在的while,而不是全部的while,因此在使用 break 的时候,锁紧级别一定要写清楚,不然很有可能会造成逻辑错误。

    简单的 使用方法实例就不放上来了,因为他的代码毫无意义,直接上一个栗子吧

    while True:
        user_db = 'nick'
        pwd_db = '123'
    
        inp_user = input('username: ')
        inp_pwd = input('password: ')
        if inp_user == user_db and pwd_db == inp_pwd:
            print('login successful')
            break
        else:
            print('username or password error')
    print('退出了while循环')
    

    username: nick
    password: 123
    login successful
    退出了while循环

    三、while + continue

    俗话说,有鸡必有鸭,有鸭必有鹅。你可能没听过这句话,因为我五分钟前才创作的。

    有了 break ,那就有continue,因为break 这个功能太霸道了,如果有人只想跳过这次循环呢?一个break给你全跳出来了,懵不懵啊 。这时候就有了 continue ,他只会跳过当前次循环。

    上代码

    n = 1
    while n < 10:
        if n == 8:
             n += 1  # 如果注释这一行,则会进入死循环
            continue
        print(n)
        n += 1
    

    我们可以看到 n 会随着循环的进行,而值变得越来越大,当他变为8时,就满足了 if ,就会执行 continue了 ,继续判断是否满足 while 的条件,然后继续循环。

    四、while循环的嵌套

    我们前面是不是讲到了while 的嵌套了呀。

    while True:
        user_db = 'nick'
        pwd_db = '123'
    
        inp_user = input('username: ')
        inp_pwd = input('password: ')
    
        if inp_user == user_db and pwd_db == inp_pwd:
            print('login successful')
    
            while True:
                cmd = input('请输入你需要的命令:')
                if cmd == 'q':
                    break
                print(f'{cmd} 功能执行')
            break
        else:
            print('username or password error')
    
    print('退出了while循环')
    

    username: nick
    password: 123
    login successful
    请输入你需要的命令:q
    退出了while循环

    来解释一下上面的代码啊,首先给了你个死循环,因为while True 是恒成立的,所以想要断开这个循环,就一定要用到 break 了。变量啊 输入啊就不用讲了,看不懂的,去看我前面的博客吧!

    然后这里加了 if ,来判断你输入的账号密码是否正确,条件满足后,开始执行内部代码块,这时候发现了他的内部代码块 又是一个 while 循环,也是一个死循环,他要你输入命令,然后加入了个 if,判断你输入的是否是 ‘q’ ,是的话,就执行 break 语句,跳出当前层的while,然后 紧接着又来了一个break,跳出了外层的while,而且不会执行 else ,注意 break执行之后,会直接杀死当前循环和else

    还有一种跳出循环的方式,但是你的while 条件得是 变量才行,看下面自行体会

    tag = True
    while tag:
        user_db = 'nick'
        pwd_db = '123'
    
        inp_user = input('username: ')
        inp_pwd = input('password: ')
    
        if inp_user == user_db and pwd_db == inp_pwd:
            print('login successful')
    
            while tag:
                cmd = input('请输入你需要的命令:')
                if cmd == 'q':
                    tag = False
                print(f'{cmd} 功能执行')
        else:
            print('username or password error')
    
    print('退出了while循环')
    

    username: nick
    password: 123
    login successful
    请输入你需要的命令:q
    q 功能执行
    退出了while循环

    流程控制之for循环

    为什么有了 while 还要有个 for 呢,傻孩子,当然是因为 for 更好呀。

    一、语法

    为什么说 for 更好呢,你看啊,我让你把列表里的数据全都取出来。

    name_list = ['nick', 'jason', 'tank', 'sean']
    
    n = 0
    while n < 4:
        # while n < len(name_list):
        print(name_list[n])
        n += 1
    

    nick
    jason
    tank
    sean

    你很棒的用while 做到了!

    那现在把这个字典里的数据也用while取出来吧!

    info = {'name': 'nick', 'age': 19}
    一下子是不感觉自己蒙了?

    来看看用 for 怎么实现吧

    info = {'name': 'nick', 'age': 19}
    
    for item in info:
        # 取出info的keys
        print(item)
    

    name
    age

    name_list = ['nick', 'jason', 'tank', 'sean']
    for item in name_list:
        print(item)
    

    nick
    jason
    tank
    sean

    我刚看到 for 能这样用的时候也是蒙了的,我的理解是它直接把 容器类型数据里的 数据拿出来当循环数字了,在C 和 JAVA 里面是 for(i=0;i<10:i++) 这样的,在python里面就很牛逼的升级了,你的 循环数字直接就变成了你要取出来的数据了,所以循环次数是根据你容器类型数据的长度而定的。

    果不其然有一些优秀的睿智青年冒出了和我当初一样的疑问,那意思我只能用for来拿容器数据了?

    不不不,他比while更优秀,怎么可能这么弱?

    for i in range(1, 10):  # range顾头不顾尾
        print(i)
    

    1
    2
    3
    4
    5
    6
    7
    8
    9

    同样的,顾头不顾尾。

    name_list = ['nick', 'jason', 'tank', 'sean']
    # for i in range(5):  # 5是数的
    for i in range(len(name_list)):
        print(i, name_list[i])
    

    0 nick
    1 jason
    2 tank
    3 sean

    小小的栗子。len()的意思是返回对象的长度。

    不用我说你们也知道了,while有的,for 全都有,像极了女孩子们的现男友,囊括了前男友的全部优点

    二、for 与 break 、 continue 、 else、 以及嵌套的使用

    1.for+break

    和while 一样,跳出循环,同理,else 也不会执行。

    name_list = ['nick', 'jason', 'tank', 'sean']
    for name in name_list:
        if name == 'jason':
            break
        print(name)
    

    ncik

    2.for+continue

    和while同理,不做过多介绍了,直接上代码

    name_list = ['nick', 'jason', 'tank', 'sean']
    for name in name_list:
        if name == 'jason':
            continue
        print(name)
    

    nick
    tank
    sean

    3.for+else

    for循环没有break的时候触发else内部代码块。

    # for+else
    name_list = ['nick', 'jason', 'tank', 'sean']
    for name in name_list:
        print(name)
    else:
        print('for循环没有被break中断掉')
    
    

    nick
    jason
    tank
    sean
    for循环没有break中断掉

    4.for循环嵌套

    for i in range(3):
        print(f'-----:{i}')
        for j in range(2):
            print(f'***:{j}')
    

    -----:0
    **:0
    **
    :1
    -----:1
    **:0
    **
    :1
    -----:2
    **:0
    **
    :1

  • 相关阅读:
    node mysql
    css问题
    mac 命令
    js 严格模式
    js 数组
    sass
    js 面向对象 定义对象
    response.getWriter().write("中文");乱码问题
    读取文件并找出年龄最大的N个人-兰亭集市笔试题
    阿里巴巴暑期实习生笔试
  • 原文地址:https://www.cnblogs.com/chanyuli/p/11283125.html
Copyright © 2020-2023  润新知