zoukankan      html  css  js  c++  java
  • 04 流程控制(01)

      本章内容

        1、布尔逻辑

        2、if语句

        3、代码块和缩进

        4、循环

        5、比较for循环和while循环

        6、跳出循环和语句块

        7、循环中的循环

    ------------------------------------------------

      之前所写的简单代码都是直线式的,前后代码之间并没有逻辑关系;也没有判断,也没有分支,而这一章中,我们需要初步来讨论代码之间的逻辑关系;

    1、布尔逻辑

      我们使用True和False来对任何参数或者语句进行判断,这个就是布尔逻辑值;

      逻辑运算符号有四个:not、and、or、== 分别表示“非、与、或、等于”,所有的决策都可以通过这四个运算符号来做出;

      

      逻辑相等

        ==  判断左右两边的值是否相等

      

      逻辑与

        and  两者同时为真的时候才是真

      逻辑或

        or  如何一个为真的,就是真,同时为假的时候才是假

      逻辑非

        not  结果反向即可

      通过布尔变量来值来进行if语句的判断;

      如果是多个布尔值进行判断,我们则需要通过圆括号来分开进行嵌套;

    not (True and True)
    not (True and (False or True))

      默认情况下如果没有使用括号分开,则有优先级指定: ==  >  !=  >  not  >  and  >  or

      短路求值:例如shell脚本中  a && b || c ; 如果 a && b 为真,则不用再执行 c 也能算出结果为真,如果 a && b 为假,才需要判断 c;

        Python下的短路求值是一个道理,False and X 中,X 语句不用再进行判断,则该语句一定为 False;同理,在语句 True or X 语句中,不用查看 X 值,语句结果一定是 True;

        【注意:短路求值对我们运行程序很有帮助,但是有时候也会出现我们想象不到的bug】

    2、if语句

      if语句能够让Python程序具有执行流程,它能让你在程序中做出决策;在程序运行的过程中,选择程序代码块来执行;

      if/else语句:

        检查密码的程序:

    # password1.py
    pwd = input('What is the password?')  #定义变量pwd,输入密码
    if pwd == 'apple': # note use of ==  #进行判断,密码是否等于 apple
        # instead of
        print('Logging on ... ')
    else:
        print('Incorrect password.')  #如果不匹配,输出密码不正确
    print('All done!')

      【注意:如果是if语句,则后面一定是布尔表达式,则判断结果一定是布尔值类型】

      if/else语句的基本格式如下:

      语句格式如下:

    before_block
    if cond:
        true_block
    else:
        false_block
    after_block

      if/elif语句

      这个语句是if/else的推广;这个语句下面可以进行多个判断;例如:

    # airfare.py
    age = int(input('How old are you?'))
    if age <= 2:
        print(' free')
    elif 2 < age < 13:
        print(' child fare')
    else:
        print(' adult fare')

      这个语句下则可以进行多个判断,类似于“选择题”,有四个选项,不仅仅只有两个选项了;

      if语句的简写

        这种方式并不推荐,因为这样对于查看代码的人来说,非常困难,如下面的代码:

    food = input("What's your favorite food? ")
    reply = 'yuck' if food == 'lamb' else 'yum'

        这个代码等于如下代码:

    food = input("What's your favorite food? ")  #输入food的值
    if food == 'lamb':  #判断food的值是否等于‘lamb’
        relply = 'yuck'
    else:
        reply = 'yum'

        

    3、代码块与缩进

      Python相对于其他语言而言,我们使用缩进来标识代码块。如下代码:

    if pwd == 'apple'":
        print('Logging on ... ')
    else:
        print('Incorrect password.')
    print('All done!')

      这里 print('Logging on ... ') 的代码必须缩进,才能识别;

      而,print('All done!')则没有缩进,因为它并不属于if的代码块;

       这里注意,缩进可以使用 两个空格的方式,也可以使用 制表符 的方式,但是不要混合使用,建议使用制表符进行缩进;这样的话,会让你的代码变得更加美观;

     4、循环(for循环和while循环)

      循环用于运行重复的代码;主要有两种循环--for循环和while循环;for循环更加容易,而while循环更加灵活;

      for循环:

      首先让我们看一段代码:

    # count10.py
    for i in range(10):  #in 为关键字【注意:每次循环理论上都是从0开始,在执行到n-1,也就是,从0开始到9】
        print(i)
    for i in range(5,10):  #这里打印5到9
        print(i)

      如果就要打印1-10,则可以使用如下代码来解决

    for i in range(11):
        print(i)
    或者
    for i in range(10):
        print(i+1)

      如果想反序打印,则需要使用步长来解决,如下代码:

    for in range(10,0,-1):
        print(i)
    或者不使用步长
    for i in range(10):  #【代表了不同的思维方式】
        print(10 - i) 

      

      while循环:

      我们先看一段代码:

    # while.py
    i = 0
    while i < 10:
        print(i)
        i = i + 1 # add 1 to i

      该代码的流程图如下:

      第一行 i = 0 我们叫做初始语句,定义 i 值的初始值;最后一行为 i = i + 1 这段使得 i 值不断变化,否则,容易出现死循环;**几乎所有的while语句都是需要初始值和递增语句的;

      基于上面的条件,while语句的基本语法格式就出来了,如下图:

      基本代码格式如下:

    initializer_block
    while cond:
        body_block
    after_block

      while循环要灵活的多,在while循环前面,你可使用任何代码来完成任何必要的初始化。循环条件可以是任何布尔表达式,递增语句可放在while循环体内的任何位置,并让它做任何你喜欢的事情;

      while循环会形成无限

    while True:
        print('spam')

      这个循环下面,运行起来的话,就只能一直循环,无法停止;

      很多情况下,尽量使用for循环来完成对应的工作,而尽量不要使用while循环语句;

      while循环也可以包含为else,但是在这里不做讨论了;

    循环,例如:

  • 相关阅读:
    iOS多线程之NSThread详解
    iOS中NSScanner 的用法
    自己的第一篇博客
    useradd与adduser的区别
    drop、truncate和delete的区别
    开启ipv6支持
    linux主机hang住echo 0 > /proc/sys/kernel/hung_task_timeout_secs disables this message
    xfs文件系统修复方法https://blog.csdn.net/yuanfang_way/article/details/78700089
    mysql表死锁查询
    系统丢包net.netfilter.nf_conntrack_max 超限查看
  • 原文地址:https://www.cnblogs.com/BurnovBlog/p/11115346.html
Copyright © 2011-2022 走看看