一、程序流程圖
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就不會去評估第二個表達式!
