• 2-2:python之控制结构


     一、程序流程图

    1.用规定的一系列图形、流程线和文字说明算法从开始到结束全部步骤,包括基本操作和控制流程。
    2.流程图的基本元素包括:
      1)  表示相应操作的框
      2) 带箭头的流程线
      3) 框内必要的文字说明

                                       

    3.设计程序框图的步骤:
    第一步:用自然语言表述算法步骤;
    第二步:确定每一个算法步骤所包含的逻辑结构,并用相应的程序框图表示,得到该步骤的程序框图;
    第三步:将所有步骤的程序框图用流程线连接起来,并加上终端框,得到表示整个算法的程序框图。

    4.任何算法(程序)都可以由顺序结构、选择结构和循环结构这三种基本结构组合来实现.

    5.顺序结构流程图

    这个图表示了语句是s1、s2按着箭头的自然顺序依次执行!

    举例:温度转换程序流程图

    6.选择结构:
    选择结构也叫分支结构,是指在算法中通过对条件的判断,根据条件是否成立而选择不同流向的算法结构。

    选择结构的形式如下:

    两者的区别在于:单选择结构在条件不满足的条件下执行了空操作,而双选择结构则执行了S2操作!

    7.循环结构:

    循环结构是指在一定条件下反复执行某部分代码的操作,是程序设计中最能发挥计算机特长的程序结构!

    两者区别是:当型循环先判断所给条件是否成立,如果成立执行循环体A,如此反复,直到不成立,退出循环!

          直到型循环先执行A,再判断条件是否成立,如果不成立,再执行A,如此反复,直到条件成立,退出循环!

    注意:python中不提供直到型循环结构的语句!在必要的时候我们可以通过一系列特殊的方法来构造直到型循环!

    程序的三种结构图示例:

    二、简单分支结构

    下面是一些关系操作符的例子

     

    程序代码格式如下:

    三、for循环:

    1.python可以使用for语句循环遍历整个系列的值

    for <var> in <sequence>:
        <body>
    

    在for循环中,循环变量var遍历了队列中的每一个值,循环的语句体为每个值执行一次。

    words= ['cat','windows','sequence']
    for w in words:
        print(w,len(w))

    结果如下:

    ('cat', 3)
    ('windows', 7)
    ('sequence', 8)
    

    2.for循环-缺点:
      1.程序开始时必须提供输入数字总数。
      2.大规模数字求平均值需要用户先数清楚个数。
      3.for循环需要提供固定循环次数
      4.Python提供了另一种循环模式即无限循环,不需要提前知道循环次数。

    3.无限循环:
    1.语法: while语句

    while <condition>:
        <body>

    2.while语句中<condition>是布尔表达式
    3.<body>是一条或多条语句
      当条件<condition>为真时,循环体重复执行
      当条件<condition>为假时,循环体终止执行

    i = 0
    while i <10:
        print(i)
        i = i+1
    

      1). 如果循环体忘记累加i,条件判断一直为真,循环体将一直执行,这就是所谓的死循环程序。
      2). 这时通常使用<Ctrl>-c来终止程序

    4.for/while 的else、continue、break语句  

      break语句用于跳出最内层的while循环!

      continue语句用于跳过本次循环语句,进入下一次循环语句,不是终止整个循环的执行!

          else语句也可以和for循环语句搭配使用,else后面的表达式在没有break打断且for循环列表遍历完毕后,或者while循环语句条件不满足的情况下执行,这为我们程序编写提供了很大便利!

    for n in range(2,10):
        for x in range(2,n):
            if n % x ==0:
                print(n,"equals",x)
                break
        else:
            #loop fell through without finding a factor
            print(n,"is a prime number")
    
    for x in range(2,10):
        if 10 % x ==0:
            print(10,"equals",x)
            break
    else:
        #loop fell through without finding a factor
        print(10,"is a prime number")
    
    count = 2
    while count <5 :
        print("d")
        count +=1
    else:
        #loop fell through without finding a factor
        print(10,"is a prime number")
    

     4.交互式循环

    def main():
        sum = 0.0
        count = 0
        moredata ="yes"
        while moredata[0] == "y":
            x = int(input("Enter a number: "))
            sum = sum+x
            count = count+1
            moredata = input("Do you have more numbers (yes or no)?")
            
        print("
    The average of the number is",sum/count)
        
    main()
    

    注意:raw_input()函数和input()函数是有区别的:

    这两个函数均能接收 字符串 ,但 raw_input() 直接读取控制台的输入(任何类型的输入它都可以接收)。而对于 input() ,它希望能够读取一个合法的 python 表达式,即你输入字符串的时候必须使用引号将它括起来,否则它会引发一个 SyntaxError !

    四、布尔表达式

    #
    if p1.getX() == p2.getX():
        if p1.getY() == p2.getY():
            #两点相同
        else:
            #两点不同
    else:
        #两点不同
          

    像上面的比较p1和p2两点是不是在同一个点,也就是x值和y值是不是都相等,我们这里采用了嵌套的if判断,这种判断实际上是很不方便的,当有多个嵌套的条件判断时,就更加不方便!我们其实可以使用布尔

    表达式and符号来代替这个决策结构!

    布尔操作符:and ,or ,not

    布尔运算符 and 和 or用于组合两个布尔表达式,并产生一个布尔结果!
    <expr> and <expr> :只有and操作符两边都为真的时候,这个表达式才为真!
    <expr> or <expr> : 只有or操作符两边都为假的时候,这个表达式才为假!,其它情况为真!

    not <expr>: not运算符计算一个布尔表达式的反,not运算符是一个一元运算符!
    布尔运算符和算数运算符,也有优先级规则,从高到底依次是:not and or!

    a or not b and c == (a or ((not b) and c))  

    建议初学者给复杂的运算加上括号,防止混淆!

    那么,上面的判断p1和p2两点是不是相同的时候,我们可以按着如下判断:

    if p1.getX() == p2.getX() and p1.getY() == p2.getY():
        #两点相同
    else:
        #两点不同

    这样就会简洁不少!

    计算机中所有的决策都可以理解为布尔表达式!指定、运用和理解这些表达式对程序员来说是一项重要技能!


    布尔表达式遵循特定的代数定律,这些规律被称为布尔逻辑或布尔代数!
    布尔代数规则:

    从上面可以看出 and 与*号相似,而or与+号相似!

    1. 任何数据和true进行"or"操作都为真
      a or true == true
    2. and 和 or操作符都符合分配率
      a or (b and c ) == (a or b) and (a or c)
      a and (b or c) == (a and b) or (a and c)

    3.not操作符具有负负抵消的特性
      not(not a) == a
    4.德摩根定律,not放进表达式后,and和or运算符之间发生的变化。
      not (a or b) == (not a) and (not b)

        not (a and b) == (not a) or (not b)

    布尔代数的应用是简化程序内的布尔表达式: 

    1.布尔代数的应用

    while not(scoreA == 15 or scoreB ==15):
    #比赛继续

    2.通过使用布尔代数,可以转换上面这个表达式。应用德摩根定律,其等价于表达式:

    (not scoreA ==15) and (not scoreB == 15)  

     也就是如果A的分数不是15并且B的分数也不是15就继续比赛!

    注意:使用not的分配率时,or和and的转变!

    注意:在python中 None,  False, 空字符串"", 0, 空列表[], 空字典{}, 空元组()都相当于False

    对于数字(整型和浮点型)的零值被认为是false,任何非零值都是true.

    bool类型仅仅是一个特殊的整数,可以通过计算表达式True + True 的值来测试一下!

     print(True+True) 

     结果为:2

    python中的布尔表达式是短路值,也就是说,当知道这个表达式的结果为True或者False的时候就不会继续算下去了!也就是在and运算符中只要知道and左侧为假,在or运算符中,只要知道or的左侧为真,python就不会去评估第二个表达式!

      

     

  • 相关阅读:
    AcRxClass::addX
    string.format("%s",name)
    strcmp 与 _tcscmp
    acedinitget
    判断实体的类型 相关操作
    accmcolor
    CAD类型转换
    图的存储结构及遍历
    并查集(Union/Find)
    设计模式--缺醒适配器模式
  • 原文地址:https://www.cnblogs.com/python-machine/p/6985110.html
Copyright © 2020-2023  润新知