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("\nThe 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就不會去評估第二個表達式!

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM