• 流程控制之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('33[43m傻逼,账号密码都忘了.验证码都看不懂33[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、只对容器类数据类型循环(可迭代对象)

  • 相关阅读:
    mysql中删除表
    js上传文件获取客户端地址
    form表单普通提交预览显示,读取显示tmp文件
    PHP中获取中英文混合字符串长度[主要是指个数,而不是字符串长度](转)
    离开页面提醒功能 (实现博客园离开编辑页面时的提醒功能)(转)
    Google maps API开发(一)(转)
    Python的getattr(),setattr(),delattr(),hasattr()
    Python读写文件
    Python命令行解析argparse常用语法使用简介
    面向对象设计与分析实例
  • 原文地址:https://www.cnblogs.com/hyc123/p/11283412.html
Copyright © 2020-2023  润新知